[1/1] net/sfc: add explicit fail path for unknown tunnel flow type

Message ID 20230714124102.6546-1-ivan.malov@arknetworks.am (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers
Series [1/1] net/sfc: add explicit fail path for unknown tunnel flow type |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/loongarch-compilation success Compilation OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-abi-testing success Testing PASS
ci/github-robot: build success github build: passed
ci/intel-Functional success Functional PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-aarch-unit-testing success Testing PASS
ci/iol-unit-testing fail Testing issues
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS

Commit Message

Ivan Malov July 14, 2023, 12:41 p.m. UTC
  The driver supports flow tunnel offload. When the parsed rule
type is unknown, which must not happen, the driver does not
properly indicate the failure in non-debug builds. That
presumably makes Coverity report possible NULL pointer
dereference in regard with uninitialised HW match
specification (which gets properly initialised
when the rule type check is successful).

In order to fix this, replace the debug
assert with a proper runtime fail path.

Coverity issue: 393675
Fixes: 73e01736868b ("net/sfc: turn MAE flow action rules into shareable resources")
Cc: stable@dpdk.org

Signed-off-by: Ivan Malov <ivan.malov@arknetworks.am>
---
 drivers/net/sfc/sfc_mae.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
  

Comments

Andrew Rybchenko July 17, 2023, 8:27 a.m. UTC | #1
On 7/14/23 15:41, Ivan Malov wrote:
> The driver supports flow tunnel offload. When the parsed rule
> type is unknown, which must not happen, the driver does not
> properly indicate the failure in non-debug builds. That
> presumably makes Coverity report possible NULL pointer
> dereference in regard with uninitialised HW match
> specification (which gets properly initialised
> when the rule type check is successful).
> 
> In order to fix this, replace the debug
> assert with a proper runtime fail path.
> 
> Coverity issue: 393675
> Fixes: 73e01736868b ("net/sfc: turn MAE flow action rules into shareable resources")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ivan Malov <ivan.malov@arknetworks.am>

Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
  
Ferruh Yigit July 17, 2023, 2:12 p.m. UTC | #2
On 7/17/2023 9:27 AM, Andrew Rybchenko wrote:
> On 7/14/23 15:41, Ivan Malov wrote:
>> The driver supports flow tunnel offload. When the parsed rule
>> type is unknown, which must not happen, the driver does not
>> properly indicate the failure in non-debug builds. That
>> presumably makes Coverity report possible NULL pointer
>> dereference in regard with uninitialised HW match
>> specification (which gets properly initialised
>> when the rule type check is successful).
>>
>> In order to fix this, replace the debug
>> assert with a proper runtime fail path.
>>
>> Coverity issue: 393675
>> Fixes: 73e01736868b ("net/sfc: turn MAE flow action rules into
>> shareable resources")
>> Cc: stable@dpdk.org
>>
>> Signed-off-by: Ivan Malov <ivan.malov@arknetworks.am>
> 
> Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
> 

Applied to dpdk-next-net/main, thanks.
  

Patch

diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c
index 60a54fd425..f5fe55b46f 100644
--- a/drivers/net/sfc/sfc_mae.c
+++ b/drivers/net/sfc/sfc_mae.c
@@ -3460,8 +3460,10 @@  sfc_mae_rule_parse_pattern(struct sfc_adapter *sa,
 		}
 		break;
 	default:
-		SFC_ASSERT(B_FALSE);
-		break;
+		rc = rte_flow_error_set(error, EINVAL,
+			RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
+			"FT: unexpected rule type");
+		goto fail_unexpected_ft_rule_type;
 	}
 
 	/*
@@ -3531,6 +3533,7 @@  sfc_mae_rule_parse_pattern(struct sfc_adapter *sa,
 	if (ctx_mae.match_spec_action != NULL)
 		efx_mae_match_spec_fini(sa->nic, ctx_mae.match_spec_action);
 
+fail_unexpected_ft_rule_type:
 fail_init_match_spec_action:
 fail_priority_check:
 	return rc;