ipv6: set msg_control_is_user in do_ipv6_getsockopt
authorChristoph Hellwig <hch@lst.de>
Wed, 13 May 2020 19:36:41 +0000 (21:36 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 13 May 2020 20:11:45 +0000 (13:11 -0700)
While do_ipv6_getsockopt does not call the high-level recvmsg helper,
the msghdr eventually ends up being passed to put_cmsg anyway, and thus
needs msg_control_is_user set to the proper value.

Fixes: 1f466e1f15cf ("net: cleanly handle kernel vs user buffers for ->msg_control")
Reported-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/ipv6_sockglue.c

index 18d05403d3b52cc0e69c484c61f04d9f4a166457..a0e50cc57e5454527b1cdecf68714140a6d09c81 100644 (file)
@@ -1075,6 +1075,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
                msg.msg_control = optval;
                msg.msg_controllen = len;
                msg.msg_flags = flags;
+               msg.msg_control_is_user = true;
 
                lock_sock(sk);
                skb = np->pktoptions;