Commit a35d310f authored by Jason Wang's avatar Jason Wang Committed by David S. Miller
Browse files

tuntap: fix dividing by zero in ebpf queue selection

We need check if tun->numqueues is zero (e.g for the persist device)
before trying to use it for modular arithmetic.

Reported-by: default avatarEric Dumazet <>
Fixes: 96f84061

("tun: add eBPF based queue selection method")
Signed-off-by: default avatarJason Wang <>
Reviewed-by: default avatarEric Dumazet <>
Signed-off-by: default avatarDavid S. Miller <>
parent 68a5cde9
......@@ -596,13 +596,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,
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment