diff options
author | Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> | 2015-11-30 14:32:54 -0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-12-02 23:39:46 -0500 |
commit | cacc06215271104b40773c99547c506095db6ad4 (patch) | |
tree | dfe97a192eed6a74dc5e2518d0d2662a301f12a9 /net/sctp | |
parent | 38ee8fb67c3457f36f5137073c4b8ac2436d2393 (diff) | |
download | linux-stable-cacc06215271104b40773c99547c506095db6ad4.tar.gz linux-stable-cacc06215271104b40773c99547c506095db6ad4.tar.bz2 linux-stable-cacc06215271104b40773c99547c506095db6ad4.zip |
sctp: use GFP_USER for user-controlled kmalloc
Dmitry Vyukov reported that the user could trigger a kernel warning by
using a large len value for getsockopt SCTP_GET_LOCAL_ADDRS, as that
value directly affects the value used as a kmalloc() parameter.
This patch thus switches the allocation flags from all user-controllable
kmalloc size to GFP_USER to put some more restrictions on it and also
disables the warn, as they are not necessary.
Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sctp')
-rw-r--r-- | net/sctp/socket.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 5e35ef34008b..f6161e356734 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -972,7 +972,7 @@ static int sctp_setsockopt_bindx(struct sock *sk, return -EFAULT; /* Alloc space for the address array in kernel memory. */ - kaddrs = kmalloc(addrs_size, GFP_KERNEL); + kaddrs = kmalloc(addrs_size, GFP_USER | __GFP_NOWARN); if (unlikely(!kaddrs)) return -ENOMEM; @@ -4928,7 +4928,7 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len, to = optval + offsetof(struct sctp_getaddrs, addrs); space_left = len - offsetof(struct sctp_getaddrs, addrs); - addrs = kmalloc(space_left, GFP_KERNEL); + addrs = kmalloc(space_left, GFP_USER | __GFP_NOWARN); if (!addrs) return -ENOMEM; |