tun: avoid calling xdp_rxq_info_unreg() twice
authorCong Wang <xiyou.wangcong@gmail.com>
Mon, 22 Jan 2018 21:49:27 +0000 (13:49 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 22 Jan 2018 21:55:18 +0000 (16:55 -0500)
Similarly to tx ring, xdp_rxq_info is only registered
when !tfile->detached, so we need to avoid calling
xdp_rxq_info_unreg() twice too. The helper tun_cleanup_tx_ring()
already checks for this properly, so it is correct to put
xdp_rxq_info_unreg() just inside there.

Reported-by: syzbot+1c788d7ce0f0888f1d7f@syzkaller.appspotmail.com
Fixes: 8565d26bcb2f ("Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net")
Cc: Jason Wang <jasowang@redhat.com>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/tun.c

index 2bc18b16a45bd60fd230c926fccfbba36ba92f4f..a0c5cb1a16170e369c6b834679d9b42e2c28613d 100644 (file)
@@ -774,14 +774,12 @@ static void tun_detach_all(struct net_device *dev)
                tun_napi_del(tun, tfile);
                /* Drop read queue */
                tun_queue_purge(tfile);
-               xdp_rxq_info_unreg(&tfile->xdp_rxq);
                sock_put(&tfile->sk);
                tun_cleanup_tx_ring(tfile);
        }
        list_for_each_entry_safe(tfile, tmp, &tun->disabled, next) {
                tun_enable_queue(tfile);
                tun_queue_purge(tfile);
-               xdp_rxq_info_unreg(&tfile->xdp_rxq);
                sock_put(&tfile->sk);
                tun_cleanup_tx_ring(tfile);
        }