[PATCH] nfsd: Replace simple_strtoul with kstrtoint in expkey_parse

Su Hui posted 1 patch 6 months, 3 weeks ago
fs/nfsd/export.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
[PATCH] nfsd: Replace simple_strtoul with kstrtoint in expkey_parse
Posted by Su Hui 6 months, 3 weeks ago
kstrtoint() is better because simple_strtoul() ignores overflow and the
type of 'fsidtype' is 'int' rather than 'unsigned long'.

Signed-off-by: Su Hui <suhui@nfschina.com>
---
 fs/nfsd/export.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c
index 0363720280d4..1bc9bc20cac3 100644
--- a/fs/nfsd/export.c
+++ b/fs/nfsd/export.c
@@ -83,7 +83,6 @@ static int expkey_parse(struct cache_detail *cd, char *mesg, int mlen)
 	struct auth_domain *dom = NULL;
 	int err;
 	int fsidtype;
-	char *ep;
 	struct svc_expkey key;
 	struct svc_expkey *ek = NULL;
 
@@ -109,8 +108,7 @@ static int expkey_parse(struct cache_detail *cd, char *mesg, int mlen)
 	err = -EINVAL;
 	if (qword_get(&mesg, buf, PAGE_SIZE) <= 0)
 		goto out;
-	fsidtype = simple_strtoul(buf, &ep, 10);
-	if (*ep)
+	if (kstrtoint(buf, 10, &fsidtype))
 		goto out;
 	dprintk("found fsidtype %d\n", fsidtype);
 	if (key_len(fsidtype)==0) /* invalid type */
-- 
2.30.2
Re: [PATCH] nfsd: Replace simple_strtoul with kstrtoint in expkey_parse
Posted by cel@kernel.org 6 months, 3 weeks ago
From: Chuck Lever <chuck.lever@oracle.com>

On Tue, 27 May 2025 17:25:49 +0800, Su Hui wrote:
> kstrtoint() is better because simple_strtoul() ignores overflow and the
> type of 'fsidtype' is 'int' rather than 'unsigned long'.
> 
> 

Applied to nfsd-testing, thanks!

[1/1] nfsd: Replace simple_strtoul with kstrtoint in expkey_parse
      commit: 901218eec3b10a773edcdca717dfe5bedde03f46

--
Chuck Lever
Re: [PATCH] nfsd: Replace simple_strtoul with kstrtoint in expkey_parse
Posted by Jeff Layton 6 months, 3 weeks ago
On Tue, 2025-05-27 at 17:25 +0800, Su Hui wrote:
> kstrtoint() is better because simple_strtoul() ignores overflow and the
> type of 'fsidtype' is 'int' rather than 'unsigned long'.
> 
> Signed-off-by: Su Hui <suhui@nfschina.com>
> ---
>  fs/nfsd/export.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c
> index 0363720280d4..1bc9bc20cac3 100644
> --- a/fs/nfsd/export.c
> +++ b/fs/nfsd/export.c
> @@ -83,7 +83,6 @@ static int expkey_parse(struct cache_detail *cd, char *mesg, int mlen)
>  	struct auth_domain *dom = NULL;
>  	int err;
>  	int fsidtype;
> -	char *ep;
>  	struct svc_expkey key;
>  	struct svc_expkey *ek = NULL;
>  
> @@ -109,8 +108,7 @@ static int expkey_parse(struct cache_detail *cd, char *mesg, int mlen)
>  	err = -EINVAL;
>  	if (qword_get(&mesg, buf, PAGE_SIZE) <= 0)
>  		goto out;
> -	fsidtype = simple_strtoul(buf, &ep, 10);
> -	if (*ep)
> +	if (kstrtoint(buf, 10, &fsidtype))
>  		goto out;
>  	dprintk("found fsidtype %d\n", fsidtype);
>  	if (key_len(fsidtype)==0) /* invalid type */

Reviewed-by: Jeff Layton <jlayton@kernel.org>
Re: [PATCH] nfsd: Replace simple_strtoul with kstrtoint in expkey_parse
Posted by NeilBrown 6 months, 3 weeks ago
On Tue, 27 May 2025, Su Hui wrote:
> kstrtoint() is better because simple_strtoul() ignores overflow and the
> type of 'fsidtype' is 'int' rather than 'unsigned long'.

Thanks for the patch.

Reviewed-by: NeilBrown <neil@brown.name>

The valid values for fsidtype are actually 0-7 so it might be nice to
change the type to u8 everywhere and make this kstrtou8() but that isn't
really needed and shouldn't stop this patch landing.

Thanks,
NeilBrown


> 
> Signed-off-by: Su Hui <suhui@nfschina.com>
> ---
>  fs/nfsd/export.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c
> index 0363720280d4..1bc9bc20cac3 100644
> --- a/fs/nfsd/export.c
> +++ b/fs/nfsd/export.c
> @@ -83,7 +83,6 @@ static int expkey_parse(struct cache_detail *cd, char *mesg, int mlen)
>  	struct auth_domain *dom = NULL;
>  	int err;
>  	int fsidtype;
> -	char *ep;
>  	struct svc_expkey key;
>  	struct svc_expkey *ek = NULL;
>  
> @@ -109,8 +108,7 @@ static int expkey_parse(struct cache_detail *cd, char *mesg, int mlen)
>  	err = -EINVAL;
>  	if (qword_get(&mesg, buf, PAGE_SIZE) <= 0)
>  		goto out;
> -	fsidtype = simple_strtoul(buf, &ep, 10);
> -	if (*ep)
> +	if (kstrtoint(buf, 10, &fsidtype))
>  		goto out;
>  	dprintk("found fsidtype %d\n", fsidtype);
>  	if (key_len(fsidtype)==0) /* invalid type */
> -- 
> 2.30.2
> 
> 
Re: [PATCH] nfsd: Replace simple_strtoul with kstrtoint in expkey_parse
Posted by Su Hui 6 months, 2 weeks ago
On 2025/5/28 08:25, NeilBrown wrote:
> On Tue, 27 May 2025, Su Hui wrote:
>> kstrtoint() is better because simple_strtoul() ignores overflow and the
>> type of 'fsidtype' is 'int' rather than 'unsigned long'.
> Thanks for the patch.
>
> Reviewed-by: NeilBrown <neil@brown.name>
>
> The valid values for fsidtype are actually 0-7 so it might be nice to
> change the type to u8 everywhere and make this kstrtou8() but that isn't
> really needed and shouldn't stop this patch landing.

Thanks for your suggestion.

  I can try this next week in a new patch because this has been merged
into nfsd-testing and I need some time to view code.

Su Hui