On Tue, 2015-04-28 at 19:11 -0700, Alexei Starovoitov wrote:

> +     if (pkt_dev->flags & F_DO_RX) {
> +             local_bh_disable();
> +             atomic_add(burst, &pkt_dev->skb->users);
> +             do {
> +                     ret = netif_receive_skb(pkt_dev->skb);
> +                     if (ret == NET_RX_DROP)
> +                             pkt_dev->errors++;
> +                     pkt_dev->last_ok = 1;
> +                     pkt_dev->sofar++;
> +                     pkt_dev->seq_num++;
> +             } while (--burst > 0);
> +             local_bh_enable();
> +             goto out;
> +     }
> +

This looks buggy.

skb can be put on a queue, so skb->next and skb->prev cannot be reused,
or queues will be corrupted.

Note that on TX, it is possible to have the same issue if you use a
virtual device like bonding, and skb is queued on a slave qdisc.

(Thats why we have this IFF_TX_SKB_SHARING flag)



--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to