Loading fs/nfsd/export.c +20 −12 Original line number Diff line number Diff line Loading @@ -480,6 +480,23 @@ static inline int secinfo_parse(char **mesg, char *buf, struct svc_export *exp) { return 0; } #endif static inline int uuid_parse(char **mesg, char *buf, unsigned char **puuid) { int len; /* expect a 16 byte uuid encoded as \xXXXX... */ len = qword_get(mesg, buf, PAGE_SIZE); if (len != 16) return -EINVAL; *puuid = kmemdup(buf, 16, GFP_KERNEL); if (*puuid == NULL) return -ENOMEM; return 0; } static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) { /* client path expiry [flags anonuid anongid fsid] */ Loading Loading @@ -558,18 +575,9 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) while ((len = qword_get(&mesg, buf, PAGE_SIZE)) > 0) { if (strcmp(buf, "fsloc") == 0) err = fsloc_parse(&mesg, buf, &exp.ex_fslocs); else if (strcmp(buf, "uuid") == 0) { /* expect a 16 byte uuid encoded as \xXXXX... */ len = qword_get(&mesg, buf, PAGE_SIZE); if (len != 16) err = -EINVAL; else { exp.ex_uuid = kmemdup(buf, 16, GFP_KERNEL); if (exp.ex_uuid == NULL) err = -ENOMEM; } } else if (strcmp(buf, "secinfo") == 0) else if (strcmp(buf, "uuid") == 0) err = uuid_parse(&mesg, buf, &exp.ex_uuid); else if (strcmp(buf, "secinfo") == 0) err = secinfo_parse(&mesg, buf, &exp); else /* quietly ignore unknown words and anything Loading Loading
fs/nfsd/export.c +20 −12 Original line number Diff line number Diff line Loading @@ -480,6 +480,23 @@ static inline int secinfo_parse(char **mesg, char *buf, struct svc_export *exp) { return 0; } #endif static inline int uuid_parse(char **mesg, char *buf, unsigned char **puuid) { int len; /* expect a 16 byte uuid encoded as \xXXXX... */ len = qword_get(mesg, buf, PAGE_SIZE); if (len != 16) return -EINVAL; *puuid = kmemdup(buf, 16, GFP_KERNEL); if (*puuid == NULL) return -ENOMEM; return 0; } static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) { /* client path expiry [flags anonuid anongid fsid] */ Loading Loading @@ -558,18 +575,9 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) while ((len = qword_get(&mesg, buf, PAGE_SIZE)) > 0) { if (strcmp(buf, "fsloc") == 0) err = fsloc_parse(&mesg, buf, &exp.ex_fslocs); else if (strcmp(buf, "uuid") == 0) { /* expect a 16 byte uuid encoded as \xXXXX... */ len = qword_get(&mesg, buf, PAGE_SIZE); if (len != 16) err = -EINVAL; else { exp.ex_uuid = kmemdup(buf, 16, GFP_KERNEL); if (exp.ex_uuid == NULL) err = -ENOMEM; } } else if (strcmp(buf, "secinfo") == 0) else if (strcmp(buf, "uuid") == 0) err = uuid_parse(&mesg, buf, &exp.ex_uuid); else if (strcmp(buf, "secinfo") == 0) err = secinfo_parse(&mesg, buf, &exp); else /* quietly ignore unknown words and anything Loading