diff options
-rw-r--r-- | fs/nfsd/export.c | 6 | ||||
-rw-r--r-- | include/linux/sunrpc/cache.h | 16 |
2 files changed, 19 insertions, 3 deletions
diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c index ba233499b9a..1114463bb85 100644 --- a/fs/nfsd/export.c +++ b/fs/nfsd/export.c | |||
@@ -398,7 +398,7 @@ fsloc_parse(char **mesg, char *buf, struct nfsd4_fs_locations *fsloc) | |||
398 | int migrated, i, err; | 398 | int migrated, i, err; |
399 | 399 | ||
400 | /* listsize */ | 400 | /* listsize */ |
401 | err = get_int(mesg, &fsloc->locations_count); | 401 | err = get_uint(mesg, &fsloc->locations_count); |
402 | if (err) | 402 | if (err) |
403 | return err; | 403 | return err; |
404 | if (fsloc->locations_count > MAX_FS_LOCATIONS) | 404 | if (fsloc->locations_count > MAX_FS_LOCATIONS) |
@@ -456,7 +456,7 @@ static int secinfo_parse(char **mesg, char *buf, struct svc_export *exp) | |||
456 | return -EINVAL; | 456 | return -EINVAL; |
457 | 457 | ||
458 | for (f = exp->ex_flavors; f < exp->ex_flavors + listsize; f++) { | 458 | for (f = exp->ex_flavors; f < exp->ex_flavors + listsize; f++) { |
459 | err = get_int(mesg, &f->pseudoflavor); | 459 | err = get_uint(mesg, &f->pseudoflavor); |
460 | if (err) | 460 | if (err) |
461 | return err; | 461 | return err; |
462 | /* | 462 | /* |
@@ -465,7 +465,7 @@ static int secinfo_parse(char **mesg, char *buf, struct svc_export *exp) | |||
465 | * problem at export time instead of when a client fails | 465 | * problem at export time instead of when a client fails |
466 | * to authenticate. | 466 | * to authenticate. |
467 | */ | 467 | */ |
468 | err = get_int(mesg, &f->flags); | 468 | err = get_uint(mesg, &f->flags); |
469 | if (err) | 469 | if (err) |
470 | return err; | 470 | return err; |
471 | /* Only some flags are allowed to differ between flavors: */ | 471 | /* Only some flags are allowed to differ between flavors: */ |
diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h index af42596a82f..f792794f663 100644 --- a/include/linux/sunrpc/cache.h +++ b/include/linux/sunrpc/cache.h | |||
@@ -230,6 +230,22 @@ static inline int get_int(char **bpp, int *anint) | |||
230 | return 0; | 230 | return 0; |
231 | } | 231 | } |
232 | 232 | ||
233 | static inline int get_uint(char **bpp, unsigned int *anint) | ||
234 | { | ||
235 | char buf[50]; | ||
236 | int len = qword_get(bpp, buf, sizeof(buf)); | ||
237 | |||
238 | if (len < 0) | ||
239 | return -EINVAL; | ||
240 | if (len == 0) | ||
241 | return -ENOENT; | ||
242 | |||
243 | if (kstrtouint(buf, 0, anint)) | ||
244 | return -EINVAL; | ||
245 | |||
246 | return 0; | ||
247 | } | ||
248 | |||
233 | /* | 249 | /* |
234 | * timestamps kept in the cache are expressed in seconds | 250 | * timestamps kept in the cache are expressed in seconds |
235 | * since boot. This is the best for measuring differences in | 251 | * since boot. This is the best for measuring differences in |