我现在看的内核是2.6.34.8,在br_flood函数内看到如下的代码:
list_for_each_entry_rcu(p, &br->port_list, list) {
prev = maybe_deliver(prev, p, skb, __packet_hook);
if (IS_ERR(prev))
goto out;
}
maybe_deliver函数内又调用了should_deliver函数来判断是否应该转发。
我现在想到了一种情况,就是若在通过list_for_each_entry_rcu遍历br->port_list时,若p是收到此skb的端口,又恰好是br->port_list的第一个端口,是否有问题?
此时,maybe_deliver函数内的should_deliver判断不应该转发,导致maybe_deliver返回的prev还是NULL,IS_ERR判断出错,即直接goto out,但实际还有很多端口未遍历。
我想内核应该不会犯这么低级的错误,但始终没想明白。请各位大侠指导下!!谢谢!!
------解决方案--------------------
太难了,不懂