net/tap: fix eBPF RSS map key handling
authorOphir Munk <ophirmu@mellanox.com>
Tue, 30 Jan 2018 16:00:29 +0000 (16:00 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 31 Jan 2018 19:57:29 +0000 (20:57 +0100)
commit1911c5edc6cd285a665bed5284ac7b060eb5a0ee
tree3da455368b6108615888200c658ea12842c32b2e
parentda8841a71346e6d4032b1273d09951370d1d8392
net/tap: fix eBPF RSS map key handling

This commit addresses a case of RSS and non RSS flows mixture.
In the corrupted code, if a non-RSS flow is destroyed, it has an eBPF map
index 0 (initialized upon flow creation). This might unintentionally remove
RSS entry 0 from eBPF map.
To fix this issue, add an offset to the real index during a KEY_CMD_GET
operation, and subtract this offset during a KEY_CMD_RELEASE operation, in
order to restore the real index.
Thus, if a non RSS flow is falsely trying to release map entry 0 - The
offset subtraction will calculate the real map index as an
out-of-range value, and the release operation will be silently ignored.

Fixes: 036d721a8229 ("net/tap: implement RSS using eBPF")

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