summaryrefslogtreecommitdiffstats
path: root/net/ipv6/raw.c
diff options
context:
space:
mode:
authorMasahide NAKAMURA <nakam@linux-ipv6.org>2006-12-05 22:48:27 +0100
committerDavid S. Miller <davem@sunset.davemloft.net>2006-12-07 03:39:09 +0100
commit4e33fa14faecc150e97c0e4f2320745bdc7b7112 (patch)
tree1359902f5a43b3621098d2bac6a7b209ca0da141 /net/ipv6/raw.c
parent[IPV6]: Repair IPv6 Fragments (diff)
downloadlinux-4e33fa14faecc150e97c0e4f2320745bdc7b7112.tar.xz
linux-4e33fa14faecc150e97c0e4f2320745bdc7b7112.zip
[IPV6] RAW: Don't release unlocked sock.
When user builds IPv6 header and send it through raw socket, kernel tries to release unlocked sock. (Kernel log shows "BUG: bad unlock balance detected" with enabled debug option.) The lock is held only for non-hdrincl sock in this function then this patch fix to do nothing about lock for hdrincl one. Signed-off-by: Masahide NAKAMURA <nakam@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/raw.c')
-rw-r--r--net/ipv6/raw.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
index c2e629d6aea4..4ae1b19ada5d 100644
--- a/net/ipv6/raw.c
+++ b/net/ipv6/raw.c
@@ -854,7 +854,8 @@ back_from_confirm:
}
done:
dst_release(dst);
- release_sock(sk);
+ if (!inet->hdrincl)
+ release_sock(sk);
out:
fl6_sock_release(flowlabel);
return err<0?err:len;