net: clamp ->msg_namelen instead of returning an error
authorDan Carpenter <dan.carpenter@oracle.com>
Wed, 27 Nov 2013 12:40:21 +0000 (15:40 +0300)
committerWilly Tarreau <w@1wt.eu>
Mon, 19 May 2014 05:54:02 +0000 (07:54 +0200)
commit2b232c68061e496e02f1fee12420f5b4c14b4860
treede2d56261167aac0e11a4adcdf3413fa2def0741
parentdbf387a6491bf25a7aac8c17540376bff2a8a686
net: clamp ->msg_namelen instead of returning an error

[ Upstream commit db31c55a6fb245fdbb752a2ca4aefec89afabb06 ]

If kmsg->msg_namelen > sizeof(struct sockaddr_storage) then in the
original code that would lead to memory corruption in the kernel if you
had audit configured.  If you didn't have audit configured it was
harmless.

There are some programs such as beta versions of Ruby which use too
large of a buffer and returning an error code breaks them.  We should
clamp the ->msg_namelen value instead.

Fixes: 1661bf364ae9 ("net: heap overflow in __audit_sockaddr()")
Reported-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Tested-by: Eric Wong <normalperson@yhbt.net>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Willy Tarreau <w@1wt.eu>
net/compat.c
net/socket.c