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

Commit 2e59dd5e authored by Magnus Karlsson's avatar Magnus Karlsson Committed by Daniel Borkmann
Browse files

xsk: proper queue id check at bind



Validate the queue id against both Rx and Tx on the netdev. Also, make
sure that the queue exists at xmit time.

Reported-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
Tested-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: default avatarMagnus Karlsson <magnus.karlsson@intel.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent ad75646c
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -142,6 +142,11 @@ static int xsk_generic_xmit(struct sock *sk, struct msghdr *m,
			goto out;
		}

		if (xs->queue_id >= xs->dev->real_num_tx_queues) {
			err = -ENXIO;
			goto out;
		}

		skb = sock_alloc_send_skb(sk, len, !need_wait, &err);
		if (unlikely(!skb)) {
			err = -EAGAIN;
@@ -305,7 +310,8 @@ static int xsk_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
		goto out_unlock;
	}

	if (sxdp->sxdp_queue_id >= dev->num_rx_queues) {
	if ((xs->rx && sxdp->sxdp_queue_id >= dev->real_num_rx_queues) ||
	    (xs->tx && sxdp->sxdp_queue_id >= dev->real_num_tx_queues)) {
		err = -EINVAL;
		goto out_unlock;
	}