提交 d50e7e36 编写于 作者: D Dan Rosenberg 提交者: David S. Miller

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: NDan Rosenberg <drosenberg@vsecurity.com>
Cc: stable@kernel.org
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 e433430a
...@@ -105,6 +105,9 @@ irnet_ctrl_write(irnet_socket * ap, ...@@ -105,6 +105,9 @@ irnet_ctrl_write(irnet_socket * ap,
while(isspace(start[length - 1])) while(isspace(start[length - 1]))
length--; length--;
DABORT(length < 5 || length > NICKNAME_MAX_LEN + 5,
-EINVAL, CTRL_ERROR, "Invalid nickname.\n");
/* Copy the name for later reuse */ /* Copy the name for later reuse */
memcpy(ap->rname, start + 5, length - 5); memcpy(ap->rname, start + 5, length - 5);
ap->rname[length - 5] = '\0'; ap->rname[length - 5] = '\0';
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册