sfc: Fix MCDI command size for filter operations
The 8000 series adapters uses catch-all filters for encapsulated traffic
to support filtering VXLAN, NVGRE and GENEVE traffic.
This new filter functionality requires a longer MCDI command.
This patch increases the size of buffers on stack that were missed, which
fixes a kernel panic from the stack protector.
Fixes: 9b41080125
("sfc: insert catch-all filters for encapsulated traffic")
Signed-off-by: Martin Habets <mhabets@solarflare.com>
Acked-by: Edward Cree <ecree@solarflare.com>
Acked-by: Bert Kenward bkenward@solarflare.com
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b92b7d3312
commit
bb53f4d4f5
|
@ -4172,7 +4172,7 @@ found:
|
||||||
* recipients
|
* recipients
|
||||||
*/
|
*/
|
||||||
if (is_mc_recip) {
|
if (is_mc_recip) {
|
||||||
MCDI_DECLARE_BUF(inbuf, MC_CMD_FILTER_OP_IN_LEN);
|
MCDI_DECLARE_BUF(inbuf, MC_CMD_FILTER_OP_EXT_IN_LEN);
|
||||||
unsigned int depth, i;
|
unsigned int depth, i;
|
||||||
|
|
||||||
memset(inbuf, 0, sizeof(inbuf));
|
memset(inbuf, 0, sizeof(inbuf));
|
||||||
|
@ -4320,7 +4320,7 @@ static int efx_ef10_filter_remove_internal(struct efx_nic *efx,
|
||||||
efx_ef10_filter_set_entry(table, filter_idx, NULL, 0);
|
efx_ef10_filter_set_entry(table, filter_idx, NULL, 0);
|
||||||
} else {
|
} else {
|
||||||
efx_mcdi_display_error(efx, MC_CMD_FILTER_OP,
|
efx_mcdi_display_error(efx, MC_CMD_FILTER_OP,
|
||||||
MC_CMD_FILTER_OP_IN_LEN,
|
MC_CMD_FILTER_OP_EXT_IN_LEN,
|
||||||
NULL, 0, rc);
|
NULL, 0, rc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4453,7 +4453,7 @@ static s32 efx_ef10_filter_rfs_insert(struct efx_nic *efx,
|
||||||
struct efx_filter_spec *spec)
|
struct efx_filter_spec *spec)
|
||||||
{
|
{
|
||||||
struct efx_ef10_filter_table *table = efx->filter_state;
|
struct efx_ef10_filter_table *table = efx->filter_state;
|
||||||
MCDI_DECLARE_BUF(inbuf, MC_CMD_FILTER_OP_IN_LEN);
|
MCDI_DECLARE_BUF(inbuf, MC_CMD_FILTER_OP_EXT_IN_LEN);
|
||||||
struct efx_filter_spec *saved_spec;
|
struct efx_filter_spec *saved_spec;
|
||||||
unsigned int hash, i, depth = 1;
|
unsigned int hash, i, depth = 1;
|
||||||
bool replacing = false;
|
bool replacing = false;
|
||||||
|
@ -4940,7 +4940,7 @@ not_restored:
|
||||||
static void efx_ef10_filter_table_remove(struct efx_nic *efx)
|
static void efx_ef10_filter_table_remove(struct efx_nic *efx)
|
||||||
{
|
{
|
||||||
struct efx_ef10_filter_table *table = efx->filter_state;
|
struct efx_ef10_filter_table *table = efx->filter_state;
|
||||||
MCDI_DECLARE_BUF(inbuf, MC_CMD_FILTER_OP_IN_LEN);
|
MCDI_DECLARE_BUF(inbuf, MC_CMD_FILTER_OP_EXT_IN_LEN);
|
||||||
struct efx_filter_spec *spec;
|
struct efx_filter_spec *spec;
|
||||||
unsigned int filter_idx;
|
unsigned int filter_idx;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
Loading…
Reference in New Issue