tuntap: fix dividing by zero in ebpf queue selection
[ Upstream commit a35d310f03a692bf4798eb309a1950a06a150620 ] We need check if tun->numqueues is zero (e.g for the persist device) before trying to use it for modular arithmetic. Reported-by: Eric Dumazet <eric.dumazet@gmail.com> Fixes: 96f84061620c6("tun: add eBPF based queue selection method") Signed-off-by: Jason Wang <jasowang@redhat.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
737713e6d8
commit
9c79732f98
1 changed files with 6 additions and 1 deletions
|
@ -599,13 +599,18 @@ static u16 tun_automq_select_queue(struct tun_struct *tun, struct sk_buff *skb)
|
|||
static u16 tun_ebpf_select_queue(struct tun_struct *tun, struct sk_buff *skb)
|
||||
{
|
||||
struct tun_prog *prog;
|
||||
u32 numqueues;
|
||||
u16 ret = 0;
|
||||
|
||||
numqueues = READ_ONCE(tun->numqueues);
|
||||
if (!numqueues)
|
||||
return 0;
|
||||
|
||||
prog = rcu_dereference(tun->steering_prog);
|
||||
if (prog)
|
||||
ret = bpf_prog_run_clear_cb(prog->prog, skb);
|
||||
|
||||
return ret % tun->numqueues;
|
||||
return ret % numqueues;
|
||||
}
|
||||
|
||||
static u16 tun_select_queue(struct net_device *dev, struct sk_buff *skb,
|
||||
|
|
Loading…
Add table
Reference in a new issue