summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Rosenberg <drosenberg@vsecurity.com>2011-03-19 20:14:30 +0000
committerDavid S. Miller <davem@davemloft.net>2011-03-27 17:59:02 -0700
commitd50e7e3604778bfc2dc40f440e0742dbae399d54 (patch)
tree6ff38b491047533a9cbe74f04e231c14c2a6d0f3
parente433430a0ca9cc1b851a83ac3b305e955b64880a (diff)
downloadop-kernel-dev-d50e7e3604778bfc2dc40f440e0742dbae399d54.zip
op-kernel-dev-d50e7e3604778bfc2dc40f440e0742dbae399d54.tar.gz
irda: prevent heap corruption on invalid nickname
Invalid nicknames containing only spaces will result in an underflow in a memcpy size calculation, subsequently destroying the heap and panicking. v2 also catches the case where the provided nickname is longer than the buffer size, which can result in controllable heap corruption. Signed-off-by: Dan Rosenberg <drosenberg@vsecurity.com> Cc: stable@kernel.org Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/irda/irnet/irnet_ppp.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/net/irda/irnet/irnet_ppp.c b/net/irda/irnet/irnet_ppp.c
index 7c567b8..2bb2beb 100644
--- a/net/irda/irnet/irnet_ppp.c
+++ b/net/irda/irnet/irnet_ppp.c
@@ -105,6 +105,9 @@ irnet_ctrl_write(irnet_socket * ap,
while(isspace(start[length - 1]))
length--;
+ DABORT(length < 5 || length > NICKNAME_MAX_LEN + 5,
+ -EINVAL, CTRL_ERROR, "Invalid nickname.\n");
+
/* Copy the name for later reuse */
memcpy(ap->rname, start + 5, length - 5);
ap->rname[length - 5] = '\0';
OpenPOWER on IntegriCloud