summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Harkes <jaharkes@cs.cmu.edu>2017-09-27 22:52:12 +0300
committerAl Viro <viro@zeniv.linux.org.uk>2017-11-06 02:36:06 +0300
commitd337b66a4c52c7b04eec661d86c2ef6e168965a2 (patch)
tree2432346668216e7941acb1c369d0c243b1efa2b3
parentdfd6fa39d96f5049edb7af26578873e65dbafc9a (diff)
downloadlinux-d337b66a4c52c7b04eec661d86c2ef6e168965a2.tar.xz
coda: fix 'kernel memory exposure attempt' in fsync
When an application called fsync on a file in Coda a small request with just the file identifier was allocated, but the declared length was set to the size of union of all possible upcall requests. This bug has been around for a very long time and is now caught by the extra checking in usercopy that was introduced in Linux-4.8. The exposure happens when the Coda cache manager process reads the fsync upcall request at which point it is killed. As a result there is nobody servicing any further upcalls, trapping any processes that try to access the mounted Coda filesystem. Cc: stable@vger.kernel.org Signed-off-by: Jan Harkes <jaharkes@cs.cmu.edu> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--fs/coda/upcall.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/fs/coda/upcall.c b/fs/coda/upcall.c
index e82357c89979..8cf16d8c5261 100644
--- a/fs/coda/upcall.c
+++ b/fs/coda/upcall.c
@@ -446,8 +446,7 @@ int venus_fsync(struct super_block *sb, struct CodaFid *fid)
UPARG(CODA_FSYNC);
inp->coda_fsync.VFid = *fid;
- error = coda_upcall(coda_vcp(sb), sizeof(union inputArgs),
- &outsize, inp);
+ error = coda_upcall(coda_vcp(sb), insize, &outsize, inp);
CODA_FREE(inp, insize);
return error;