summaryrefslogtreecommitdiffstats
path: root/net/ipv6/udp.c
diff options
context:
space:
mode:
authorDenis V. Lunev <den@openvz.org>2008-06-04 15:49:07 +0400
committerYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>2008-06-05 04:02:38 +0900
commit36d926b94a9908937593e5669162305a071b9cc3 (patch)
treec298f82a8d8b87ab4ebf7b514b394763889108b0 /net/ipv6/udp.c
parent49d074f4009a7b5ce9c17b040f978abcb4d7f6f6 (diff)
downloadlinux-36d926b94a9908937593e5669162305a071b9cc3.tar.gz
linux-36d926b94a9908937593e5669162305a071b9cc3.tar.bz2
linux-36d926b94a9908937593e5669162305a071b9cc3.zip
[IPV6]: inet_sk(sk)->cork.opt leak
IPv6 UDP sockets wth IPv4 mapped address use udp_sendmsg to send the data actually. In this case ip_flush_pending_frames should be called instead of ip6_flush_pending_frames. Signed-off-by: Denis V. Lunev <den@openvz.org> Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Diffstat (limited to 'net/ipv6/udp.c')
-rw-r--r--net/ipv6/udp.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index 1b35c4722004..dd309626ae9a 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -534,7 +534,9 @@ static void udp_v6_flush_pending_frames(struct sock *sk)
{
struct udp_sock *up = udp_sk(sk);
- if (up->pending) {
+ if (up->pending == AF_INET)
+ udp_flush_pending_frames(sk);
+ else if (up->pending) {
up->len = 0;
up->pending = 0;
ip6_flush_pending_frames(sk);