Skip to content

Commit 9ba0b96

Browse files
marceloleitnerdavem330
authored andcommitted
sctp: use GFP_USER for user-controlled kmalloc
Commit cacc062 ("sctp: use GFP_USER for user-controlled kmalloc") missed two other spots. For connectx, as it's more likely to be used by kernel users of the API, it detects if GFP_USER should be used or not. Fixes: cacc062 ("sctp: use GFP_USER for user-controlled kmalloc") Reported-by: Dmitry Vyukov <dvyukov@google.com> Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 3358a5c commit 9ba0b96

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

net/sctp/socket.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1301,8 +1301,9 @@ static int __sctp_setsockopt_connectx(struct sock *sk,
13011301
int addrs_size,
13021302
sctp_assoc_t *assoc_id)
13031303
{
1304-
int err = 0;
13051304
struct sockaddr *kaddrs;
1305+
gfp_t gfp = GFP_KERNEL;
1306+
int err = 0;
13061307

13071308
pr_debug("%s: sk:%p addrs:%p addrs_size:%d\n",
13081309
__func__, sk, addrs, addrs_size);
@@ -1315,7 +1316,9 @@ static int __sctp_setsockopt_connectx(struct sock *sk,
13151316
return -EFAULT;
13161317

13171318
/* Alloc space for the address array in kernel memory. */
1318-
kaddrs = kmalloc(addrs_size, GFP_KERNEL);
1319+
if (sk->sk_socket->file)
1320+
gfp = GFP_USER | __GFP_NOWARN;
1321+
kaddrs = kmalloc(addrs_size, gfp);
13191322
if (unlikely(!kaddrs))
13201323
return -ENOMEM;
13211324

@@ -5773,7 +5776,7 @@ static int sctp_getsockopt_assoc_ids(struct sock *sk, int len,
57735776

57745777
len = sizeof(struct sctp_assoc_ids) + sizeof(sctp_assoc_t) * num;
57755778

5776-
ids = kmalloc(len, GFP_KERNEL);
5779+
ids = kmalloc(len, GFP_USER | __GFP_NOWARN);
57775780
if (unlikely(!ids))
57785781
return -ENOMEM;
57795782

0 commit comments

Comments
 (0)