net/tap: fix eBPF handling of non-RSS flows
authorOphir Munk <ophirmu@mellanox.com>
Mon, 5 Feb 2018 14:40:42 +0000 (14:40 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Mon, 5 Feb 2018 18:56:04 +0000 (19:56 +0100)
commit54aad2f231b5c0a038e6bc2754556af1ed5d133f
treecf95d22e0033dff9fea40d721a42fb79480b5045
parent9abaad8d68006c8648ccb353467b75cbead0dbfe
net/tap: fix eBPF handling of non-RSS flows

The eBPF classifier (section "cls_q" in tap_bpf_program.c) is tracing
marked packets in which skb->cb[1] contains an RSS queue number, and
redirects those packets to the matched queue.
It is expected that skb->cb[1] has been previously set with a valid RSS
queue number during an eBPF action (section "l3_l4" in tap_bpf_program.c).
However, for non-RSS flows, skb->cb[1] may contain a random unset value,
which could falsely be interpreted as a valid RSS queue.
To avoid this potential error, tap_bpf_program.c has been updated as
follows:
1. After calculating the RSS queue number, it is added a unique offset in
order to uniquely identify it as a valid RSS queue number.
2. After matching an RSS queue to a packet, skb->cb[1] is set to 0.

Fixes: cdc07e83bb24 ("net/tap: add eBPF program file")
Fixes: aabe70df73a3 ("net/tap: add eBPF bytes code")

Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
Acked-by: Pascal Mazon <pascal.mazon@6wind.com>
drivers/net/tap/tap_bpf_insns.h
drivers/net/tap/tap_bpf_program.c