aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorHannes Frederic Sowa <hannes@stressinduktion.org>2013-11-20 21:14:34 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-12-08 10:29:25 -0500
commit5c586f163dc452d8cc19b456f6f2f3e704025462 (patch)
tree2b36cbc645e4714ae946801fe45413b85caff0af /net
parent2f73d7fde99d702cba6a05062c27605a6eef1b78 (diff)
net: add BUG_ON if kernel advertises msg_namelen > sizeof(struct sockaddr_storage)
[ Upstream commit 68c6beb373955da0886d8f4f5995b3922ceda4be ] In that case it is probable that kernel code overwrote part of the stack. So we should bail out loudly here. The BUG_ON may be removed in future if we are sure all protocols are conformant. Suggested-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net')
-rw-r--r--net/socket.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/socket.c b/net/socket.c
index 9f7d6263f7fa..921d1a55c32d 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -215,12 +215,13 @@ static int move_addr_to_user(struct sockaddr_storage *kaddr, int klen,
215 int err; 215 int err;
216 int len; 216 int len;
217 217
218 BUG_ON(klen > sizeof(struct sockaddr_storage));
218 err = get_user(len, ulen); 219 err = get_user(len, ulen);
219 if (err) 220 if (err)
220 return err; 221 return err;
221 if (len > klen) 222 if (len > klen)
222 len = klen; 223 len = klen;
223 if (len < 0 || len > sizeof(struct sockaddr_storage)) 224 if (len < 0)
224 return -EINVAL; 225 return -EINVAL;
225 if (len) { 226 if (len) {
226 if (audit_sockaddr(klen, kaddr)) 227 if (audit_sockaddr(klen, kaddr))