nfsd: make NFSv2 null terminate symlink data
authorJ. Bruce Fields <bfields@redhat.com>
Fri, 20 Jun 2014 15:49:49 +0000 (11:49 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Tue, 8 Jul 2014 21:14:23 +0000 (17:14 -0400)
It's simple enough for NFSv2 to null-terminate the symlink data.

A bit weird (it depends on knowing that we've already read the following
byte, which is either padding or part of the mode), but no worse than
the conditional kstrdup it otherwise relies on in nfsd_symlink().

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/nfsproc.c

index 54c6b3d3cc79b399071a9d8c279fecb415fd5453..aebe23c45cbee97f75da3171c1d3dd15763700c3 100644 (file)
@@ -403,8 +403,11 @@ nfsd_proc_symlink(struct svc_rqst *rqstp, struct nfsd_symlinkargs *argp,
 
        fh_init(&newfh, NFS_FHSIZE);
        /*
-        * Create the link, look up new file and set attrs.
+        * Crazy hack: the request fits in a page, and already-decoded
+        * attributes follow argp->tname, so it's safe to just write a
+        * null to ensure it's null-terminated:
         */
+       argp->tname[argp->tlen] = '\0';
        nfserr = nfsd_symlink(rqstp, &argp->ffh, argp->fname, argp->flen,
                                                 argp->tname, argp->tlen,
                                                 &newfh, &argp->attrs);