Re: [PATCH v2 1/3] net/ncsi: fix restricted cast warning of sparse

From: Joel Stanley
Date: Mon Jul 12 2021 - 05:14:18 EST


On Thu, 8 Jul 2021 at 12:27, Ivan Mikhaylov <i.mikhaylov@xxxxxxxxx> wrote:
>
> Sparse reports:
> net/ncsi/ncsi-rsp.c:406:24: warning: cast to restricted __be32
> net/ncsi/ncsi-manage.c:732:33: warning: cast to restricted __be32
> net/ncsi/ncsi-manage.c:756:25: warning: cast to restricted __be32
> net/ncsi/ncsi-manage.c:779:25: warning: cast to restricted __be32

Strange, I don't get these warnings from sparse on my system.

$ sparse --version
0.6.3 (Debian: 0.6.3-2)

>
> Signed-off-by: Ivan Mikhaylov <i.mikhaylov@xxxxxxxxx>
> ---
> net/ncsi/ncsi-manage.c | 6 +++---
> net/ncsi/ncsi-rsp.c | 2 +-
> 2 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/net/ncsi/ncsi-manage.c b/net/ncsi/ncsi-manage.c
> index ca04b6df1341..42b54a3da2e6 100644
> --- a/net/ncsi/ncsi-manage.c
> +++ b/net/ncsi/ncsi-manage.c
> @@ -700,7 +700,7 @@ static int ncsi_oem_gma_handler_bcm(struct ncsi_cmd_arg *nca)
> nca->payload = NCSI_OEM_BCM_CMD_GMA_LEN;
>
> memset(data, 0, NCSI_OEM_BCM_CMD_GMA_LEN);
> - *(unsigned int *)data = ntohl(NCSI_OEM_MFR_BCM_ID);
> + *(unsigned int *)data = ntohl((__force __be32)NCSI_OEM_MFR_BCM_ID);

This looks wrong, the value you're passing isn't big endian. It would
make more sense if the byte swap was ntohl, as it's coming from the
cpu and going into the NCSI packet.

> data[5] = NCSI_OEM_BCM_CMD_GMA;
>
> nca->data = data;
> @@ -724,7 +724,7 @@ static int ncsi_oem_gma_handler_mlx(struct ncsi_cmd_arg *nca)
> nca->payload = NCSI_OEM_MLX_CMD_GMA_LEN;
>
> memset(&u, 0, sizeof(u));
> - u.data_u32[0] = ntohl(NCSI_OEM_MFR_MLX_ID);
> + u.data_u32[0] = ntohl((__force __be32)NCSI_OEM_MFR_MLX_ID);
> u.data_u8[5] = NCSI_OEM_MLX_CMD_GMA;
> u.data_u8[6] = NCSI_OEM_MLX_CMD_GMA_PARAM;
>
> @@ -747,7 +747,7 @@ static int ncsi_oem_smaf_mlx(struct ncsi_cmd_arg *nca)
> int ret = 0;
>
> memset(&u, 0, sizeof(u));
> - u.data_u32[0] = ntohl(NCSI_OEM_MFR_MLX_ID);
> + u.data_u32[0] = ntohl((__force __be32)NCSI_OEM_MFR_MLX_ID);
> u.data_u8[5] = NCSI_OEM_MLX_CMD_SMAF;
> u.data_u8[6] = NCSI_OEM_MLX_CMD_SMAF_PARAM;
> memcpy(&u.data_u8[MLX_SMAF_MAC_ADDR_OFFSET],
> diff --git a/net/ncsi/ncsi-rsp.c b/net/ncsi/ncsi-rsp.c
> index 888ccc2d4e34..04bc50be5c01 100644
> --- a/net/ncsi/ncsi-rsp.c
> +++ b/net/ncsi/ncsi-rsp.c
> @@ -403,7 +403,7 @@ static int ncsi_rsp_handler_ev(struct ncsi_request *nr)
> /* Update to VLAN mode */
> cmd = (struct ncsi_cmd_ev_pkt *)skb_network_header(nr->cmd);
> ncm->enable = 1;
> - ncm->data[0] = ntohl(cmd->mode);
> + ncm->data[0] = ntohl((__force __be32)cmd->mode);
>
> return 0;
> }
> --
> 2.31.1
>