Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 654d5738 authored by Xin Long's avatar Xin Long Committed by David S. Miller
Browse files

tun: fix rcu_read_lock imbalance in tun_build_skb



rcu_read_lock in tun_build_skb is used to rcu_dereference tun->xdp_prog
safely, rcu_read_unlock should be done in every return path.

Now I could see one place missing it, where it returns NULL in switch-case
XDP_REDIRECT,  another palce using rcu_read_lock wrongly, where it returns
NULL in if (xdp_xmit) chunk.

So fix both in this patch.

Fixes: 761876c8 ("tap: XDP support")
Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ed66dfaf
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1485,6 +1485,7 @@ static struct sk_buff *tun_build_skb(struct tun_struct *tun,
			err = xdp_do_redirect(tun->dev, &xdp, xdp_prog);
			if (err)
				goto err_redirect;
			rcu_read_unlock();
			return NULL;
		case XDP_TX:
			xdp_xmit = true;
@@ -1517,7 +1518,7 @@ static struct sk_buff *tun_build_skb(struct tun_struct *tun,
	if (xdp_xmit) {
		skb->dev = tun->dev;
		generic_xdp_tx(skb, xdp_prog);
		rcu_read_lock();
		rcu_read_unlock();
		return NULL;
	}