Commit e4d008d4 authored by Yewon Choi's avatar Yewon Choi Committed by Daniel Borkmann
Browse files

xsk: Skip polling event check for unbound socket



In xsk_poll(), checking available events and setting mask bits should
be executed only when a socket has been bound. Setting mask bits for
unbound socket is meaningless.

Currently, it checks events even when xsk_check_common() failed.
To prevent this, we move goto location (skip_tx) after that checking.

Fixes: 1596dae2 ("xsk: check IFF_UP earlier in Tx path")
Signed-off-by: default avatarYewon Choi <woni9911@gmail.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Acked-by: default avatarMagnus Karlsson <magnus.karlsson@intel.com>
Link: https://lore.kernel.org/bpf/20231201061048.GA1510@libra05
parent dfce9cb3
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -947,7 +947,7 @@ static __poll_t xsk_poll(struct file *file, struct socket *sock,

	rcu_read_lock();
	if (xsk_check_common(xs))
		goto skip_tx;
		goto out;

	pool = xs->pool;

@@ -959,12 +959,11 @@ static __poll_t xsk_poll(struct file *file, struct socket *sock,
			xsk_generic_xmit(sk);
	}

skip_tx:
	if (xs->rx && !xskq_prod_is_empty(xs->rx))
		mask |= EPOLLIN | EPOLLRDNORM;
	if (xs->tx && xsk_tx_writeable(xs))
		mask |= EPOLLOUT | EPOLLWRNORM;

out:
	rcu_read_unlock();
	return mask;
}