Messages in this thread Patch in this message | | | Subject | Re: boot crash in arp_error_report() (Re: [GIT] Networking) | From | Eric Dumazet <> | Date | Thu, 27 May 2010 22:18:24 +0200 |
| |
Le jeudi 27 mai 2010 à 21:47 +0200, Eric Dumazet a écrit :
> I am looking at this bug report, as I am probably at fault, please give > me one or two hour ;)
I believe problem comes from commit 7fee226ad2 (net: add a noref bit on skb dst)
We probably should add a WARN in __skb_queue_tail() and similar enqueue functions to catch other problems. I'll post a followup.
Thanks !
[PATCH] net: fix __neigh_event_send()
commit 7fee226ad23 (net: add a noref bit on skb dst) missed one spot where an skb is enqueued, with a possibly not refcounted dst entry.
__neigh_event_send() inserts skb into arp_queue, so we must make sure dst entry is refcounted, or dst entry can be freed by garbage collector after caller exits from rcu protected section.
Reported-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> --- net/core/neighbour.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index bff3790..6ba1c0e 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -934,6 +934,7 @@ int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb) kfree_skb(buff); NEIGH_CACHE_STAT_INC(neigh->tbl, unres_discards); } + skb_dst_force(skb); __skb_queue_tail(&neigh->arp_queue, skb); } rc = 1;
-- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |