David S. Miller wrote:
> From: "David S. Miller" <[EMAIL PROTECTED]>
> Date: Thu, 28 Jul 2005 20:54:24 -0700 (PDT)
>
>>Patrick, I think some parts of this change:
>>
>> [IPV4/6]: Check if packet was actually delivered to a raw socket to
>> decide whether to send an ICMP unreachable
>>
>>might be buggy and create SKB refcount problems.
>>
>>Andrew Morton was seeing all kinds of weird problems and we narrowed
>>it down to this specific changeset. TCP sockets would hang, and other
>>ugly stuff like that. We verified that backing out that changeset
>>above makes the problems go away.
>
> Hold this thought, some recent emails from Andrew indicate
> that it might be some other change in the net-2.6.14 tree,
> instead of this one.
I double-checked, but couldn't find any problems in this patch. Do these
problems occur with IPv4 or IPv6?
> My comments about IPV6 raw handling still hold, however :)
Yes, changing it to how ip_input handles should fix it. Here's a patch
in case you didn't take care of it already.
Signed-off-by: Patrick McHardy <[EMAIL PROTECTED]>
diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
--- a/net/ipv6/ip6_input.c
+++ b/net/ipv6/ip6_input.c
@@ -198,12 +198,13 @@ resubmit:
if (!raw_sk) {
if (xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
IP6_INC_STATS_BH(IPSTATS_MIB_INUNKNOWNPROTOS);
- icmpv6_param_prob(skb, ICMPV6_UNK_NEXTHDR,
nhoff);
+ icmpv6_send(skb, ICMPV6_PARAMPROB,
+ ICMPV6_UNK_NEXTHDR, nhoff,
+ skb->dev);
}
- } else {
+ } else
IP6_INC_STATS_BH(IPSTATS_MIB_INDELIVERS);
- kfree_skb(skb);
- }
+ kfree_skb(skb);
}
rcu_read_unlock();
return 0;