Skip to content

Commit

Permalink
fs/9p: setrlimit fix for 9p write
Browse files Browse the repository at this point in the history
Current 9p client file write code does not check for RLIMIT_FSIZE resource.
This bug was found by running LTP test case for setrlimit. This bug is fixed
by calling generic_write_checks before sending the write request to the
server.
Without this patch: the write function is allowed to write above the
RLIMIT_FSIZE set by user.
With this patch: the write function checks for RLIMIT_SIZE and writes upto
the size limit.

Signed-off-by: Harsh Prateek Bora <[email protected]>
Signed-off-by: Eric Van Hensbergen <[email protected]>
  • Loading branch information
Harsh Prateek Bora authored and ericvh committed Oct 28, 2010
1 parent 57ee047 commit 3834b12
Showing 1 changed file with 19 additions and 4 deletions.
23 changes: 19 additions & 4 deletions fs/9p/vfs_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,9 @@ static ssize_t
v9fs_file_write(struct file *filp, const char __user * data,
size_t count, loff_t * offset)
{
int n, rsize, total = 0;
ssize_t retval;
size_t total = 0;
int n, rsize;
struct p9_fid *fid;
struct p9_client *clnt;
struct inode *inode = filp->f_path.dentry->d_inode;
Expand All @@ -234,6 +236,17 @@ v9fs_file_write(struct file *filp, const char __user * data,

rsize = fid->iounit ? fid->iounit : clnt->msize - P9_IOHDRSZ;

retval = generic_write_checks(filp, &origin, &count, 0);
if (retval)
goto out;

retval = -EINVAL;
if ((ssize_t) count < 0)
goto out;
retval = 0;
if (!count)
goto out;

do {
if (count < rsize)
rsize = count;
Expand All @@ -258,9 +271,11 @@ v9fs_file_write(struct file *filp, const char __user * data,
}

if (n < 0)
return n;

return total;
retval = n;
else
retval = total;
out:
return retval;
}

static int v9fs_file_fsync(struct file *filp, int datasync)
Expand Down

0 comments on commit 3834b12

Please sign in to comment.