diff options
author | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2006-11-10 08:13:33 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-12-03 00:21:54 -0500 |
commit | 89e7e57778ecd8744fee97491300f05a9fb1388a (patch) | |
tree | b99661bf893e6ae9d95027936aec75346acc444f /net/dccp/ipv6.c | |
parent | 60361be1be7854cbffb6dc268d1bc094da33431c (diff) |
[DCCPv6]: Add a FIXME for missing IPV6_PKTOPTIONS
This refers to the possible memory leak pointed out in
http://www.mail-archive.com/dccp@vger.kernel.org/msg00574.html,
fixed by David Miller in
http://www.mail-archive.com/netdev@vger.kernel.org/msg24881.html
and adds a FIXME to point out where code is missing.
Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
Diffstat (limited to 'net/dccp/ipv6.c')
-rw-r--r-- | net/dccp/ipv6.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c index fc4242c0767c..6f1c2ad88608 100644 --- a/net/dccp/ipv6.c +++ b/net/dccp/ipv6.c | |||
@@ -990,13 +990,17 @@ static int dccp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) | |||
990 | --ANK (980728) | 990 | --ANK (980728) |
991 | */ | 991 | */ |
992 | if (np->rxopt.all) | 992 | if (np->rxopt.all) |
993 | /* | ||
994 | * FIXME: Add handling of IPV6_PKTOPTIONS skb. See the comments below | ||
995 | * (wrt ipv6_pktopions) and net/ipv6/tcp_ipv6.c for an example. | ||
996 | */ | ||
993 | opt_skb = skb_clone(skb, GFP_ATOMIC); | 997 | opt_skb = skb_clone(skb, GFP_ATOMIC); |
994 | 998 | ||
995 | if (sk->sk_state == DCCP_OPEN) { /* Fast path */ | 999 | if (sk->sk_state == DCCP_OPEN) { /* Fast path */ |
996 | if (dccp_rcv_established(sk, skb, dccp_hdr(skb), skb->len)) | 1000 | if (dccp_rcv_established(sk, skb, dccp_hdr(skb), skb->len)) |
997 | goto reset; | 1001 | goto reset; |
998 | if (opt_skb) { | 1002 | if (opt_skb) { |
999 | /* This is where we would goto ipv6_pktoptions. */ | 1003 | /* XXX This is where we would goto ipv6_pktoptions. */ |
1000 | __kfree_skb(opt_skb); | 1004 | __kfree_skb(opt_skb); |
1001 | } | 1005 | } |
1002 | return 0; | 1006 | return 0; |
@@ -1024,7 +1028,7 @@ static int dccp_v6_do_rcv(struct sock *sk, struct sk_buff *skb) | |||
1024 | if (dccp_rcv_state_process(sk, skb, dccp_hdr(skb), skb->len)) | 1028 | if (dccp_rcv_state_process(sk, skb, dccp_hdr(skb), skb->len)) |
1025 | goto reset; | 1029 | goto reset; |
1026 | if (opt_skb) { | 1030 | if (opt_skb) { |
1027 | /* This is where we would goto ipv6_pktoptions. */ | 1031 | /* XXX This is where we would goto ipv6_pktoptions. */ |
1028 | __kfree_skb(opt_skb); | 1032 | __kfree_skb(opt_skb); |
1029 | } | 1033 | } |
1030 | return 0; | 1034 | return 0; |