Patch "splice: Apply generic position and size checks to each write" has been added to the 3.10-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
splice: Apply generic position and size checks to each write
to the 3.10-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
splice-apply-generic-position-and-size-checks-to-each-write.patch
and it can be found in the queue-3.10 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
894c6350eaad7e613ae267504014a456e00a3e2aMon Sep 17 00:00:00 2001
From: Ben Hutchings <[email protected]>
Date: Thu, 29 Jan 2015 02:50:33 +0000
Subject: splice: Apply generic position and size checks to each write
From: Ben Hutchings <[email protected]>
commit 894c6350eaad7e613ae267504014a456e00a3e2a from the 3.2-stable branch.
We need to check the position and size of file writes against various limits, using generic_write_check(). This was not being done for the splice write path. It was fixed upstream by commit 8d0207652cbe ("->splice_write() via ->write_iter()") but we can't apply that.
CVE-2014-7822
--- fs/ocfs2/file.c | 8 +++++--- fs/splice.c | 8 ++++++-- 2 files changed, 11 insertions(+), 5 deletions(-)
fs/ocfs2/file.c +5 -3
@@ -2459,12 +2459,14 @@ static ssize_t ocfs2_file_splice_write(sstruct address_space *mapping = out->f_mapping;struct inode *inode = mapping->host;struct splice_desc sd = { - .total_len = len, .flags = flags, - .pos = *ppos, .u.file = out, }; - + ret =generic_write_checks (out, ppos, &len,0 ); +if (ret) +return ret; + sd.total_len = len; + sd.pos = *ppos; trace_ocfs2_file_splice_write(inode, out, out->f_path.dentry, (unsigned long long)OCFS2_I(inode)->ip_blkno,
fs/splice.c +6 -2
@@ -1012,13 +1012,17 @@ generic_file_splice_write(struct pipe_instruct address_space *mapping = out->f_mapping;struct inode *inode = mapping->host;struct splice_desc sd = { - .total_len = len, .flags = flags, - .pos = *ppos, .u.file = out, };ssize_t ret; + ret =generic_write_checks (out, ppos, &len,S_ISBLK (inode->i_mode)); +if (ret) +return ret; + sd.total_len = len; + sd.pos = *ppos; +pipe_lock (pipe);splice_from_pipe_begin (&sd);
Patches currently in stable-queue which might be from [email protected] are
queue-3.10/splice-apply-generic-position-and-size-checks-to-each-write.patch