]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
nfsd: add get_uint for u32's
authorJ. Bruce Fields <bfields@redhat.com>
Tue, 12 Jun 2012 20:54:16 +0000 (16:54 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Wed, 25 Jul 2012 13:18:27 +0000 (09:18 -0400)
I don't think there's a practical difference for the range of values
these interfaces should see, but it would be safer to be unambiguous.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/export.c
include/linux/sunrpc/cache.h

index ba233499b9a5fc1b374bc7d79ad8f636f01135b0..1114463bb856266241bad80ac8245e100802dfc2 100644 (file)
@@ -398,7 +398,7 @@ fsloc_parse(char **mesg, char *buf, struct nfsd4_fs_locations *fsloc)
        int migrated, i, err;
 
        /* listsize */
-       err = get_int(mesg, &fsloc->locations_count);
+       err = get_uint(mesg, &fsloc->locations_count);
        if (err)
                return err;
        if (fsloc->locations_count > MAX_FS_LOCATIONS)
@@ -456,7 +456,7 @@ static int secinfo_parse(char **mesg, char *buf, struct svc_export *exp)
                return -EINVAL;
 
        for (f = exp->ex_flavors; f < exp->ex_flavors + listsize; f++) {
-               err = get_int(mesg, &f->pseudoflavor);
+               err = get_uint(mesg, &f->pseudoflavor);
                if (err)
                        return err;
                /*
@@ -465,7 +465,7 @@ static int secinfo_parse(char **mesg, char *buf, struct svc_export *exp)
                 * problem at export time instead of when a client fails
                 * to authenticate.
                 */
-               err = get_int(mesg, &f->flags);
+               err = get_uint(mesg, &f->flags);
                if (err)
                        return err;
                /* Only some flags are allowed to differ between flavors: */
index af42596a82f96b2cc5cccb9b28af16f567c99707..f792794f66341a5888136e6697322f445ba62197 100644 (file)
@@ -230,6 +230,22 @@ static inline int get_int(char **bpp, int *anint)
        return 0;
 }
 
+static inline int get_uint(char **bpp, unsigned int *anint)
+{
+       char buf[50];
+       int len = qword_get(bpp, buf, sizeof(buf));
+
+       if (len < 0)
+               return -EINVAL;
+       if (len == 0)
+               return -ENOENT;
+
+       if (kstrtouint(buf, 0, anint))
+               return -EINVAL;
+
+       return 0;
+}
+
 /*
  * timestamps kept in the cache are expressed in seconds
  * since boot.  This is the best for measuring differences in