Commit 198e5472 authored by Simon Horman's avatar Simon Horman Committed by Liu Jian
Browse files

net: stmmac: xgmac: use #define for string constants

stable inclusion
from stable-v5.10.210
commit 78115a3473b1f91818077860ef74c2f55ca11720
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I9DNZK
CVE: CVE-2024-26684

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=78115a3473b1f91818077860ef74c2f55ca11720



---------------------------

commit 1692b9775e745f84b69dc8ad0075b0855a43db4e upstream.

The cited commit introduces and uses the string constants dpp_tx_err and
dpp_rx_err. These are assigned to constant fields of the array
dwxgmac3_error_desc.

It has been reported that on GCC 6 and 7.5.0 this results in warnings
such as:

  .../dwxgmac2_core.c:836:20: error: initialiser element is not constant
   { true, "TDPES0", dpp_tx_err },

I have been able to reproduce this using: GCC 7.5.0, 8.4.0, 9.4.0 and 10.5.0.
But not GCC 13.2.0.

So it seems this effects older compilers but not newer ones.
As Jon points out in his report, the minimum compiler supported by
the kernel is GCC 5.1, so it does seem that this ought to be fixed.

It is not clear to me what combination of 'const', if any, would address
this problem.  So this patch takes of using #defines for the string
constants

Compile tested only.

Fixes: 46eba193d04f ("net: stmmac: xgmac: fix handling of DPP safety error for DMA channels")
Reported-by: default avatarJon Hunter <jonathanh@nvidia.com>
Closes: https://lore.kernel.org/netdev/c25eb595-8d91-40ea-9f52-efa15ebafdbc@nvidia.com/


Reported-by: default avatarkernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202402081135.lAxxBXHk-lkp@intel.com/


Signed-off-by: default avatarSimon Horman <horms@kernel.org>
Link: https://lore.kernel.org/r/20240208-xgmac-const-v1-1-e69a1eeabfc8@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarLiu Jian <liujian56@huawei.com>
parent 9fa827f8
Loading
Loading
Loading
Loading
+35 −34
Original line number Diff line number Diff line
@@ -788,41 +788,42 @@ static const struct dwxgmac3_error_desc dwxgmac3_dma_errors[32]= {
	{ false, "UNKNOWN", "Unknown Error" }, /* 31 */
};

static const char * const dpp_rx_err = "Read Rx Descriptor Parity checker Error";
static const char * const dpp_tx_err = "Read Tx Descriptor Parity checker Error";
#define DPP_RX_ERR "Read Rx Descriptor Parity checker Error"
#define DPP_TX_ERR "Read Tx Descriptor Parity checker Error"

static const struct dwxgmac3_error_desc dwxgmac3_dma_dpp_errors[32] = {
	{ true, "TDPES0", dpp_tx_err },
	{ true, "TDPES1", dpp_tx_err },
	{ true, "TDPES2", dpp_tx_err },
	{ true, "TDPES3", dpp_tx_err },
	{ true, "TDPES4", dpp_tx_err },
	{ true, "TDPES5", dpp_tx_err },
	{ true, "TDPES6", dpp_tx_err },
	{ true, "TDPES7", dpp_tx_err },
	{ true, "TDPES8", dpp_tx_err },
	{ true, "TDPES9", dpp_tx_err },
	{ true, "TDPES10", dpp_tx_err },
	{ true, "TDPES11", dpp_tx_err },
	{ true, "TDPES12", dpp_tx_err },
	{ true, "TDPES13", dpp_tx_err },
	{ true, "TDPES14", dpp_tx_err },
	{ true, "TDPES15", dpp_tx_err },
	{ true, "RDPES0", dpp_rx_err },
	{ true, "RDPES1", dpp_rx_err },
	{ true, "RDPES2", dpp_rx_err },
	{ true, "RDPES3", dpp_rx_err },
	{ true, "RDPES4", dpp_rx_err },
	{ true, "RDPES5", dpp_rx_err },
	{ true, "RDPES6", dpp_rx_err },
	{ true, "RDPES7", dpp_rx_err },
	{ true, "RDPES8", dpp_rx_err },
	{ true, "RDPES9", dpp_rx_err },
	{ true, "RDPES10", dpp_rx_err },
	{ true, "RDPES11", dpp_rx_err },
	{ true, "RDPES12", dpp_rx_err },
	{ true, "RDPES13", dpp_rx_err },
	{ true, "RDPES14", dpp_rx_err },
	{ true, "RDPES15", dpp_rx_err },
	{ true, "TDPES0", DPP_TX_ERR },
	{ true, "TDPES1", DPP_TX_ERR },
	{ true, "TDPES2", DPP_TX_ERR },
	{ true, "TDPES3", DPP_TX_ERR },
	{ true, "TDPES4", DPP_TX_ERR },
	{ true, "TDPES5", DPP_TX_ERR },
	{ true, "TDPES6", DPP_TX_ERR },
	{ true, "TDPES7", DPP_TX_ERR },
	{ true, "TDPES8", DPP_TX_ERR },
	{ true, "TDPES9", DPP_TX_ERR },
	{ true, "TDPES10", DPP_TX_ERR },
	{ true, "TDPES11", DPP_TX_ERR },
	{ true, "TDPES12", DPP_TX_ERR },
	{ true, "TDPES13", DPP_TX_ERR },
	{ true, "TDPES14", DPP_TX_ERR },
	{ true, "TDPES15", DPP_TX_ERR },
	{ true, "RDPES0", DPP_RX_ERR },
	{ true, "RDPES1", DPP_RX_ERR },
	{ true, "RDPES2", DPP_RX_ERR },
	{ true, "RDPES3", DPP_RX_ERR },
	{ true, "RDPES4", DPP_RX_ERR },
	{ true, "RDPES5", DPP_RX_ERR },
	{ true, "RDPES6", DPP_RX_ERR },
	{ true, "RDPES7", DPP_RX_ERR },
	{ true, "RDPES8", DPP_RX_ERR },
	{ true, "RDPES9", DPP_RX_ERR },
	{ true, "RDPES10", DPP_RX_ERR },
	{ true, "RDPES11", DPP_RX_ERR },
	{ true, "RDPES12", DPP_RX_ERR },
	{ true, "RDPES13", DPP_RX_ERR },
	{ true, "RDPES14", DPP_RX_ERR },
	{ true, "RDPES15", DPP_RX_ERR },
};

static void dwxgmac3_handle_dma_err(struct net_device *ndev,