RE: [PATCH net-next v2] net/mlx5e: Ensure macsec_rule is always initiailized in macsec_fs_{r,t}x_add_rule()

From: Raed Salem
Date: Sun Sep 11 2022 - 06:35:44 EST




>-----Original Message-----
>From: Nathan Chancellor <nathan@xxxxxxxxxx>
>Sent: Sunday, 11 September 2022 11:58
>To: Saeed Mahameed <saeedm@xxxxxxxxxx>; Leon Romanovsky
><leon@xxxxxxxxxx>; David S. Miller <davem@xxxxxxxxxxxxx>; Eric Dumazet
><edumazet@xxxxxxxxxx>; Jakub Kicinski <kuba@xxxxxxxxxx>; Paolo Abeni
><pabeni@xxxxxxxxxx>
>Cc: Nick Desaulniers <ndesaulniers@xxxxxxxxxx>; Tom Rix
><trix@xxxxxxxxxx>; Boris Pismenny <borisp@xxxxxxxxxx>; Raed Salem
><raeds@xxxxxxxxxx>; Lior Nahmanson <liorna@xxxxxxxxxx>;
>netdev@xxxxxxxxxxxxxxx; linux-rdma@xxxxxxxxxxxxxxx; linux-
>kernel@xxxxxxxxxxxxxxx; llvm@xxxxxxxxxxxxxxx; patches@xxxxxxxxxxxxxxx;
>Nathan Chancellor <nathan@xxxxxxxxxx>
>Subject: [PATCH net-next v2] net/mlx5e: Ensure macsec_rule is always
>initiailized in macsec_fs_{r,t}x_add_rule()
>
>External email: Use caution opening links or attachments
>
>
>Clang warns:
>
> drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c:539:6:
>error: variable 'macsec_rule' is used uninitialized whenever 'if' condition is
>true [-Werror,-Wsometimes-uninitialized]
> if (err)
> ^~~
> drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c:598:9:
>note: uninitialized use occurs here
> return macsec_rule;
> ^~~~~~~~~~~
> drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c:539:2:
>note: remove the 'if' if its condition is always false
> if (err)
> ^~~~~~~~
> drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c:523:38:
>note: initialize the variable 'macsec_rule' to silence this warning
> union mlx5e_macsec_rule *macsec_rule;
> ^
> = NULL
> drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c:1131:6:
>error: variable 'macsec_rule' is used uninitialized whenever 'if' condition is
>true [-Werror,-Wsometimes-uninitialized]
> if (err)
> ^~~
> drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c:1215:9:
>note: uninitialized use occurs here
> return macsec_rule;
> ^~~~~~~~~~~
> drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c:1131:2:
>note: remove the 'if' if its condition is always false
> if (err)
> ^~~~~~~~
> drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c:1118:38:
>note: initialize the variable 'macsec_rule' to silence this warning
> union mlx5e_macsec_rule *macsec_rule;
> ^
> = NULL
> 2 errors generated.
>
>If macsec_fs_{r,t}x_ft_get() fail, macsec_rule will be uninitialized.
>Initialize it to NULL at the top of each function so that it cannot be used
>uninitialized.
>
>Fixes: e467b283ffd5 ("net/mlx5e: Add MACsec TX steering rules")
>Fixes: 3b20949cb21b ("net/mlx5e: Add MACsec RX steering rules")
>Link: https://github.com/ClangBuiltLinux/linux/issues/1706
>Signed-off-by: Nathan Chancellor <nathan@xxxxxxxxxx>
>---
Reviewed-by: Raed Salem <raeds@xxxxxxxxxx>
>
>v1 -> v2: https://lore.kernel.org/20220908153207.4048871-1-
>nathan@xxxxxxxxxx/
>
>* Don't use a label and goto, just initialize it to NULL at the top of
> the functions (Raed).
>
>Tom, I did not carry forward your reviewed-by tag, even though this is a pretty
>obvious fix.
>
>Blurb from v1:
>
>I thought netdev was doing testing with clang so that new warnings do not
>show up. Did something break or stop working since this is the second time in
>two weeks that new warnings have appeared in -next?
>
> drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c
>b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c
>index 608fbbaa5a58..13dc628b988a 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_accel/macsec_fs.c
>@@ -518,9 +518,9 @@ macsec_fs_tx_add_rule(struct mlx5e_macsec_fs
>*macsec_fs,
> struct mlx5_pkt_reformat_params reformat_params = {};
> struct mlx5e_macsec_tx *tx_fs = macsec_fs->tx_fs;
> struct net_device *netdev = macsec_fs->netdev;
>+ union mlx5e_macsec_rule *macsec_rule = NULL;
> struct mlx5_flow_destination dest = {};
> struct mlx5e_macsec_tables *tx_tables;
>- union mlx5e_macsec_rule *macsec_rule;
> struct mlx5e_macsec_tx_rule *tx_rule;
> struct mlx5_flow_act flow_act = {};
> struct mlx5_flow_handle *rule;
>@@ -1112,10 +1112,10 @@ macsec_fs_rx_add_rule(struct mlx5e_macsec_fs
>*macsec_fs,
> u8 action[MLX5_UN_SZ_BYTES(set_add_copy_action_in_auto)] = {};
> struct mlx5e_macsec_rx *rx_fs = macsec_fs->rx_fs;
> struct net_device *netdev = macsec_fs->netdev;
>+ union mlx5e_macsec_rule *macsec_rule = NULL;
> struct mlx5_modify_hdr *modify_hdr = NULL;
> struct mlx5_flow_destination dest = {};
> struct mlx5e_macsec_tables *rx_tables;
>- union mlx5e_macsec_rule *macsec_rule;
> struct mlx5e_macsec_rx_rule *rx_rule;
> struct mlx5_flow_act flow_act = {};
> struct mlx5e_flow_table *ft_crypto;
>
>base-commit: 169ccf0e40825d9e465863e4707d8e8546d3c3cb
>--
>2.37.3