Commit ded8b9c7 authored by Edward Cree's avatar Edward Cree Committed by David S. Miller

sfc: Use filter index rather than ID for rps_flow_id table

efx->type->filter_insert() returns an ID rather than the index that
 efx->type->filter_async_insert() used to, which causes it to exceed
 efx->type->max_rx_ip_filters on some EF10 configurations, leading to out-
 of-bounds array writes.
So, in efx_filter_rfs_work(), convert this back into an index (which is
 what the remove call in the expiry path expects, anyway).

Fixes: 3af0f342 ("sfc: replace asynchronous filter operations")
Signed-off-by: default avatarEdward Cree <ecree@solarflare.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 988bf724
...@@ -839,6 +839,8 @@ static void efx_filter_rfs_work(struct work_struct *data) ...@@ -839,6 +839,8 @@ static void efx_filter_rfs_work(struct work_struct *data)
int rc; int rc;
rc = efx->type->filter_insert(efx, &req->spec, true); rc = efx->type->filter_insert(efx, &req->spec, true);
if (rc >= 0)
rc %= efx->type->max_rx_ip_filters;
if (efx->rps_hash_table) { if (efx->rps_hash_table) {
spin_lock_bh(&efx->rps_hash_lock); spin_lock_bh(&efx->rps_hash_lock);
rule = efx_rps_hash_find(efx, &req->spec); rule = efx_rps_hash_find(efx, &req->spec);
......
Markdown is supported
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