coda: potential buffer overflow in coda_psdev_write()
Add checks to make sure the downcall message we got from the Coda cache manager is large enough to contain the data it is supposed to have. i.e. when we get a CODA_ZAPDIR we can access &out->coda_zapdir.CodaFid. Link: http://lkml.kernel.org/r/894fb6b250add09e4e3935f14649f21284a5cb18.1558117389.git.jaharkes@cs.cmu.edu Signed-off-by: Jan Harkes <jaharkes@cs.cmu.edu> Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Colin Ian King <colin.king@canonical.com> Cc: David Howells <dhowells@redhat.com> Cc: Fabian Frederick <fabf@skynet.be> Cc: Mikko Rapeli <mikko.rapeli@iki.fi> Cc: Sam Protsenko <semen.protsenko@linaro.org> Cc: Yann Droneaud <ydroneaud@opteya.com> Cc: Zhouyang Jia <jiazhouyang09@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
02551c23bc
commit
6e51f8aa76
@@ -100,8 +100,12 @@ static ssize_t coda_psdev_write(struct file *file, const char __user *buf,
|
||||
ssize_t retval = 0, count = 0;
|
||||
int error;
|
||||
|
||||
/* make sure there is enough to copy out the (opcode, unique) values */
|
||||
if (nbytes < (2 * sizeof(u_int32_t)))
|
||||
return -EINVAL;
|
||||
|
||||
/* Peek at the opcode, uniquefier */
|
||||
if (copy_from_user(&hdr, buf, 2 * sizeof(u_long)))
|
||||
if (copy_from_user(&hdr, buf, 2 * sizeof(u_int32_t)))
|
||||
return -EFAULT;
|
||||
|
||||
if (DOWNCALL(hdr.opcode)) {
|
||||
@@ -127,7 +131,7 @@ static ssize_t coda_psdev_write(struct file *file, const char __user *buf,
|
||||
}
|
||||
|
||||
/* what downcall errors does Venus handle ? */
|
||||
error = coda_downcall(vcp, hdr.opcode, dcbuf);
|
||||
error = coda_downcall(vcp, hdr.opcode, dcbuf, nbytes);
|
||||
|
||||
CODA_FREE(dcbuf, nbytes);
|
||||
if (error) {
|
||||
|
Reference in New Issue
Block a user