From ec772e2e99fa71a8b0fe06003a80af650a416ae1 Mon Sep 17 00:00:00 2001 From: "Denis V. Lunev" Date: Wed, 4 Jun 2008 15:49:08 +0400 Subject: [PATCH] --- yaml --- r: 97669 b: refs/heads/master c: 9596cc826e2e52bfc318ca37a6c52fe3d72990a3 h: refs/heads/master i: 97667: 5be8da73aeacc239d8305c0d03d3ccb682b7627f v: v3 --- [refs] | 2 +- trunk/net/ipv6/ipv6_sockglue.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 965db58e0881..f14c4035caf9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 36d926b94a9908937593e5669162305a071b9cc3 +refs/heads/master: 9596cc826e2e52bfc318ca37a6c52fe3d72990a3 diff --git a/trunk/net/ipv6/ipv6_sockglue.c b/trunk/net/ipv6/ipv6_sockglue.c index 1afe210d6286..26b83e512a09 100644 --- a/trunk/net/ipv6/ipv6_sockglue.c +++ b/trunk/net/ipv6/ipv6_sockglue.c @@ -164,9 +164,14 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, if (sk->sk_type == SOCK_RAW) break; - if (sk->sk_protocol != IPPROTO_UDP && - sk->sk_protocol != IPPROTO_UDPLITE && - sk->sk_protocol != IPPROTO_TCP) + if (sk->sk_protocol == IPPROTO_UDP || + sk->sk_protocol == IPPROTO_UDPLITE) { + struct udp_sock *up = udp_sk(sk); + if (up->pending == AF_INET6) { + retv = -EBUSY; + break; + } + } else if (sk->sk_protocol != IPPROTO_TCP) break; if (sk->sk_state != TCP_ESTABLISHED) {