Skip to content

Commit

Permalink
fs/coda: fix readlink buffer overflow
Browse files Browse the repository at this point in the history
Dan Carpenter discovered a buffer overflow in the Coda file system
readlink code.  A userspace file system daemon can return a 4096 byte
result which then triggers a one byte write past the allocated readlink
result buffer.

This does not trigger with an unmodified Coda implementation because Coda
has a 1024 byte limit for symbolic links, however other userspace file
systems using the Coda kernel module could be affected.

Although this is an obvious overflow, I don't think this has to be handled
as too sensitive from a security perspective because the overflow is on
the Coda userspace daemon side which already needs root to open Coda's
kernel device and to mount the file system before we get to the point that
links can be read.

[[email protected]: coding-style fixes]
Signed-off-by: Jan Harkes <[email protected]>
Reported-by: Dan Carpenter <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
jaharkes authored and torvalds committed Sep 10, 2015
1 parent c5595fa commit 3725e9d
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions fs/coda/upcall.c
Original file line number Diff line number Diff line change
Expand Up @@ -353,16 +353,16 @@ int venus_readlink(struct super_block *sb, struct CodaFid *fid,
char *result;

insize = max_t(unsigned int,
INSIZE(readlink), OUTSIZE(readlink)+ *length + 1);
INSIZE(readlink), OUTSIZE(readlink)+ *length);
UPARG(CODA_READLINK);

inp->coda_readlink.VFid = *fid;

error = coda_upcall(coda_vcp(sb), insize, &outsize, inp);
if (!error) {
retlen = outp->coda_readlink.count;
if ( retlen > *length )
retlen = *length;
if (retlen >= *length)
retlen = *length - 1;
*length = retlen;
result = (char *)outp + (long)outp->coda_readlink.data;
memcpy(buffer, result, retlen);
Expand Down

0 comments on commit 3725e9d

Please sign in to comment.