summaryrefslogtreecommitdiffstats
path: root/fs/nfsd/fault_inject.c
diff options
context:
space:
mode:
authorJeff Layton2014-06-18 21:00:19 +0200
committerJ. Bruce Fields2014-06-23 17:31:38 +0200
commitd4c8e34fe8beeb7877ce7f8d2da6affd7231b2cb (patch)
tree4e493b1102bfedbfec2fc2a9e3258010e3d066a5 /fs/nfsd/fault_inject.c
parentnfsd: fix return of nfs4_acl_write_who (diff)
downloadkernel-qcow2-linux-d4c8e34fe8beeb7877ce7f8d2da6affd7231b2cb.tar.gz
kernel-qcow2-linux-d4c8e34fe8beeb7877ce7f8d2da6affd7231b2cb.tar.xz
kernel-qcow2-linux-d4c8e34fe8beeb7877ce7f8d2da6affd7231b2cb.zip
nfsd: properly handle embedded newlines in fault_injection input
Currently rpc_pton() fails to handle the case where you echo an address into the file, as it barfs on the newline. Ensure that we NULL out the first occurrence of any newline. Signed-off-by: Jeff Layton <jlayton@primarydata.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/fault_inject.c')
-rw-r--r--fs/nfsd/fault_inject.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/nfsd/fault_inject.c b/fs/nfsd/fault_inject.c
index 2ed05c3cd43d..f1333fc35b33 100644
--- a/fs/nfsd/fault_inject.c
+++ b/fs/nfsd/fault_inject.c
@@ -115,11 +115,19 @@ static ssize_t fault_inject_write(struct file *file, const char __user *buf,
struct net *net = current->nsproxy->net_ns;
struct sockaddr_storage sa;
u64 val;
+ char *nl;
if (copy_from_user(write_buf, buf, size))
return -EFAULT;
write_buf[size] = '\0';
+ /* Deal with any embedded newlines in the string */
+ nl = strchr(write_buf, '\n');
+ if (nl) {
+ size = nl - write_buf;
+ *nl = '\0';
+ }
+
size = rpc_pton(net, write_buf, size, (struct sockaddr *)&sa, sizeof(sa));
if (size > 0)
nfsd_inject_set_client(file_inode(file)->i_private, &sa, size);