diff mbox series

[net-next] octeontx2-pf: flower: check for unsupported control flags

Message ID 20240422152735.175693-1-ast@fiberby.net (mailing list archive)
State Accepted
Commit 3c3adb22510cf1c9bb4c43e3f74650a8ff2d85d7
Delegated to: Netdev Maintainers
Headers show
Series [net-next] octeontx2-pf: flower: check for unsupported control flags | expand

Checks

Context Check Description
netdev/series_format success Single patches do not need cover letters
netdev/tree_selection success Clearly marked for net-next
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 8 this patch: 8
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers success CCed 8 of 8 maintainers
netdev/build_clang success Errors and warnings before: 937 this patch: 937
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 937 this patch: 937
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 20 lines checked
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0
netdev/contest success net-next-2024-04-24--15-00 (tests: 995)

Commit Message

Asbjørn Sloth Tønnesen April 22, 2024, 3:27 p.m. UTC
Use flow_rule_is_supp_control_flags() to reject filters with
unsupported control flags.

In case any unsupported control flags are masked,
flow_rule_is_supp_control_flags() sets a NL extended
error message, and we return -EOPNOTSUPP.

Remove FLOW_DIS_FIRST_FRAG specific error message,
and treat it as any other unsupported control flag.

Only compile-tested.

Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net>
---
 drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Comments

Jacob Keller April 22, 2024, 11:41 p.m. UTC | #1
On 4/22/2024 8:27 AM, Asbjørn Sloth Tønnesen wrote:
> Use flow_rule_is_supp_control_flags() to reject filters with
> unsupported control flags.
> 
> In case any unsupported control flags are masked,
> flow_rule_is_supp_control_flags() sets a NL extended
> error message, and we return -EOPNOTSUPP.
> 
> Remove FLOW_DIS_FIRST_FRAG specific error message,
> and treat it as any other unsupported control flag.
> 
> Only compile-tested.
> 
> Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net>
> ---
>  drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
> index 6d4ce2ece8d0..e63cc1eb6d89 100644
> --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
> @@ -700,10 +700,6 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node,
>  		u32 val;
>  
>  		flow_rule_match_control(rule, &match);
> -		if (match.mask->flags & FLOW_DIS_FIRST_FRAG) {
> -			NL_SET_ERR_MSG_MOD(extack, "HW doesn't support frag first/later");
> -			return -EOPNOTSUPP;
> -		}
>  
>  		if (match.mask->flags & FLOW_DIS_IS_FRAGMENT) {
>  			val = match.key->flags & FLOW_DIS_IS_FRAGMENT;
> @@ -721,6 +717,10 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node,
>  				return -EOPNOTSUPP;
>  			}
>  		}
> +
> +		if (!flow_rule_is_supp_control_flags(FLOW_DIS_IS_FRAGMENT,
> +						     match.mask->flags, extack))
> +			return -EOPNOTSUPP;

This confuses me since you pass FLOW_DIS_IS_FRAGMENT here, but you
removed the check for FLOW_DIS_FIRST_FRAG??

Am I misunderstanding how flow_rule_is_supp_control_flags works?

The code just above this appears to support FLOW_DIS_IS_FRAGMENT.

Here is the implementation of flow_rule_is_supp_control_flags for reference:

> /**
>  * flow_rule_is_supp_control_flags() - check for supported control flags
>  * @supp_flags: control flags supported by driver
>  * @ctrl_flags: control flags present in rule
>  * @extack: The netlink extended ACK for reporting errors.
>  *
>  * Return: true if only supported control flags are set, false otherwise.
>  */
> static inline bool flow_rule_is_supp_control_flags(const u32 supp_flags,
>                                                    const u32 ctrl_flags,
>                                                    struct netlink_ext_ack *extack)
> {
>         if (likely((ctrl_flags & ~supp_flags) == 0))
>                 return true;
> 
>         NL_SET_ERR_MSG_FMT_MOD(extack,
>                                "Unsupported match on control.flags %#x",
>                                ctrl_flags);
> 
>         return false;
> }
> 

This seems to me that it you accidentally passed FLOW_DIS_IS_FRAGMENT
when you meant FLOW_DIS_FIRST_FRAG??

I also think its a bit strange that you moved the placement of the check
instead of replacing in the same location as where the previous check was.


>  	}
>  
>  	if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_ETH_ADDRS)) {
Jacob Keller April 22, 2024, 11:43 p.m. UTC | #2
On 4/22/2024 4:41 PM, Jacob Keller wrote:
> 
> 
> On 4/22/2024 8:27 AM, Asbjørn Sloth Tønnesen wrote:
>> Use flow_rule_is_supp_control_flags() to reject filters with
>> unsupported control flags.
>>
>> In case any unsupported control flags are masked,
>> flow_rule_is_supp_control_flags() sets a NL extended
>> error message, and we return -EOPNOTSUPP.
>>
>> Remove FLOW_DIS_FIRST_FRAG specific error message,
>> and treat it as any other unsupported control flag.
>>
>> Only compile-tested.
>>
>> Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net>
>> ---
>>  drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c | 8 ++++----
>>  1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
>> index 6d4ce2ece8d0..e63cc1eb6d89 100644
>> --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
>> +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
>> @@ -700,10 +700,6 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node,
>>  		u32 val;
>>  
>>  		flow_rule_match_control(rule, &match);
>> -		if (match.mask->flags & FLOW_DIS_FIRST_FRAG) {
>> -			NL_SET_ERR_MSG_MOD(extack, "HW doesn't support frag first/later");
>> -			return -EOPNOTSUPP;
>> -		}
>>  
>>  		if (match.mask->flags & FLOW_DIS_IS_FRAGMENT) {
>>  			val = match.key->flags & FLOW_DIS_IS_FRAGMENT;
>> @@ -721,6 +717,10 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node,
>>  				return -EOPNOTSUPP;
>>  			}
>>  		}
>> +
>> +		if (!flow_rule_is_supp_control_flags(FLOW_DIS_IS_FRAGMENT,
>> +						     match.mask->flags, extack))
>> +			return -EOPNOTSUPP;
> 
> This confuses me since you pass FLOW_DIS_IS_FRAGMENT here, but you
> removed the check for FLOW_DIS_FIRST_FRAG??
> 
> Am I misunderstanding how flow_rule_is_supp_control_flags works?
> 
> The code just above this appears to support FLOW_DIS_IS_FRAGMENT.
> 
> Here is the implementation of flow_rule_is_supp_control_flags for reference:
> 
>> /**
>>  * flow_rule_is_supp_control_flags() - check for supported control flags
>>  * @supp_flags: control flags supported by driver
>>  * @ctrl_flags: control flags present in rule
>>  * @extack: The netlink extended ACK for reporting errors.
>>  *
>>  * Return: true if only supported control flags are set, false otherwise.
>>  */
>> static inline bool flow_rule_is_supp_control_flags(const u32 supp_flags,
>>                                                    const u32 ctrl_flags,
>>                                                    struct netlink_ext_ack *extack)
>> {
>>         if (likely((ctrl_flags & ~supp_flags) == 0))
>>                 return true;
>>
>>         NL_SET_ERR_MSG_FMT_MOD(extack,
>>                                "Unsupported match on control.flags %#x",
>>                                ctrl_flags);
>>
>>         return false;
>> }
>>
> 
> This seems to me that it you accidentally passed FLOW_DIS_IS_FRAGMENT
> when you meant FLOW_DIS_FIRST_FRAG??
> 
> I also think its a bit strange that you moved the placement of the check
> instead of replacing in the same location as where the previous check was.
> 
> 

Ah, I see what I missed. This takes the list of supported flags and
inverts it, and checks if any other flags were passed.

This is better since it guarantees future flags or other unknown flags
are rejected.

Ok. Sorry for the confusion.

Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Sunil Kovvuri Goutham April 23, 2024, 4:54 a.m. UTC | #3
> -----Original Message-----
> From: Asbjørn Sloth Tønnesen <ast@fiberby.net>
> Sent: Monday, April 22, 2024 8:58 PM
> To: netdev@vger.kernel.org
> Cc: Asbjørn Sloth Tønnesen <ast@fiberby.net>; linux-kernel@vger.kernel.org;
> David S. Miller <davem@davemloft.net>; Eric Dumazet
> <edumazet@google.com>; Jakub Kicinski <kuba@kernel.org>; Paolo Abeni
> <pabeni@redhat.com>; Sunil Kovvuri Goutham <sgoutham@marvell.com>;
> Geethasowjanya Akula <gakula@marvell.com>; Subbaraya Sundeep Bhatta
> <sbhatta@marvell.com>; Hariprasad Kelam <hkelam@marvell.com>; Suman
> Ghosh <sumang@marvell.com>
> Subject: [EXTERNAL] [PATCH net-next] octeontx2-pf: flower: check for
> unsupported control flags
> 
> Use flow_rule_is_supp_control_flags() to reject filters with unsupported
> control flags.
> 
> In case any unsupported control flags are masked,
> flow_rule_is_supp_control_flags() sets a NL extended error message, and we
> return -EOPNOTSUPP.
> 
> Remove FLOW_DIS_FIRST_FRAG specific error message, and treat it as any
> other unsupported control flag.
> 
> Only compile-tested.
> 
> Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net>
> ---
>  drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
> b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
> index 6d4ce2ece8d0..e63cc1eb6d89 100644
> --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
> @@ -700,10 +700,6 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic,
> struct otx2_tc_flow *node,
>  		u32 val;
> 
>  		flow_rule_match_control(rule, &match);
> -		if (match.mask->flags & FLOW_DIS_FIRST_FRAG) {
> -			NL_SET_ERR_MSG_MOD(extack, "HW doesn't
> support frag first/later");
> -			return -EOPNOTSUPP;
> -		}
> 
>  		if (match.mask->flags & FLOW_DIS_IS_FRAGMENT) {
>  			val = match.key->flags & FLOW_DIS_IS_FRAGMENT;
> @@ -721,6 +717,10 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic,
> struct otx2_tc_flow *node,
>  				return -EOPNOTSUPP;
>  			}
>  		}
> +
> +		if
> (!flow_rule_is_supp_control_flags(FLOW_DIS_IS_FRAGMENT,
> +						     match.mask->flags,
> extack))
> +			return -EOPNOTSUPP;
>  	}
> 
>  	if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_ETH_ADDRS)) {
> --
> 2.43.0

Reviewed-by: Sunil Goutham <sgoutham@marvell.com>
patchwork-bot+netdevbpf@kernel.org April 25, 2024, 3:10 a.m. UTC | #4
Hello:

This patch was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Mon, 22 Apr 2024 15:27:34 +0000 you wrote:
> Use flow_rule_is_supp_control_flags() to reject filters with
> unsupported control flags.
> 
> In case any unsupported control flags are masked,
> flow_rule_is_supp_control_flags() sets a NL extended
> error message, and we return -EOPNOTSUPP.
> 
> [...]

Here is the summary with links:
  - [net-next] octeontx2-pf: flower: check for unsupported control flags
    https://git.kernel.org/netdev/net-next/c/3c3adb22510c

You are awesome, thank you!
diff mbox series

Patch

diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
index 6d4ce2ece8d0..e63cc1eb6d89 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c
@@ -700,10 +700,6 @@  static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node,
 		u32 val;
 
 		flow_rule_match_control(rule, &match);
-		if (match.mask->flags & FLOW_DIS_FIRST_FRAG) {
-			NL_SET_ERR_MSG_MOD(extack, "HW doesn't support frag first/later");
-			return -EOPNOTSUPP;
-		}
 
 		if (match.mask->flags & FLOW_DIS_IS_FRAGMENT) {
 			val = match.key->flags & FLOW_DIS_IS_FRAGMENT;
@@ -721,6 +717,10 @@  static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node,
 				return -EOPNOTSUPP;
 			}
 		}
+
+		if (!flow_rule_is_supp_control_flags(FLOW_DIS_IS_FRAGMENT,
+						     match.mask->flags, extack))
+			return -EOPNOTSUPP;
 	}
 
 	if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_ETH_ADDRS)) {