diff mbox series

[net-next] net: stmmac: fix gcc-10 -Wrestrict warning

Message ID 20210421134743.3260921-1-arnd@kernel.org
State Superseded
Headers show
Series [net-next] net: stmmac: fix gcc-10 -Wrestrict warning | expand

Commit Message

Arnd Bergmann April 21, 2021, 1:47 p.m. UTC
From: Arnd Bergmann <arnd@arndb.de>


gcc-10 and later warn about a theoretical array overrun when
accessing priv->int_name_rx_irq[i] with an out of bounds value
of 'i':

drivers/net/ethernet/stmicro/stmmac/stmmac_main.c: In function 'stmmac_request_irq_multi_msi':
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:3528:17: error: 'snprintf' argument 4 may overlap destination object 'dev' [-Werror=restrict]
 3528 |                 snprintf(int_name, int_name_len, "%s:%s-%d", dev->name, "tx", i);
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:3404:60: note: destination object referenced by 'restrict'-qualified argument 1 was declared here
 3404 | static int stmmac_request_irq_multi_msi(struct net_device *dev)
      |                                         ~~~~~~~~~~~~~~~~~~~^~~

The warning is a bit strange since it's not actually about the array
bounds but rather about possible string operations with overlapping
arguments, but it's not technically wrong.

Avoid the warning by adding an extra bounds check.

Fixes: 8532f613bc78 ("net: stmmac: introduce MSI Interrupt routines for mac, safety, RX & TX")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

---
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 4 ++++
 1 file changed, 4 insertions(+)

-- 
2.29.2

Comments

David Laight April 21, 2021, 2:38 p.m. UTC | #1
From: Arnd Bergmann

> Sent: 21 April 2021 14:47

> 

> From: Arnd Bergmann <arnd@arndb.de>

> 

> gcc-10 and later warn about a theoretical array overrun when

> accessing priv->int_name_rx_irq[i] with an out of bounds value

> of 'i':

> 

> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c: In function 'stmmac_request_irq_multi_msi':

> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:3528:17: error: 'snprintf' argument 4 may overlap

> destination object 'dev' [-Werror=restrict]

>  3528 |                 snprintf(int_name, int_name_len, "%s:%s-%d", dev->name, "tx", i);

>       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:3404:60: note: destination object referenced by

> 'restrict'-qualified argument 1 was declared here

>  3404 | static int stmmac_request_irq_multi_msi(struct net_device *dev)

>       |                                         ~~~~~~~~~~~~~~~~~~~^~~

> 

> The warning is a bit strange since it's not actually about the array

> bounds but rather about possible string operations with overlapping

> arguments, but it's not technically wrong.

> 

> Avoid the warning by adding an extra bounds check.

> 

> Fixes: 8532f613bc78 ("net: stmmac: introduce MSI Interrupt routines for mac, safety, RX & TX")

> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

> ---

>  drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 4 ++++

>  1 file changed, 4 insertions(+)

> 

> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

> b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

> index d1ca07c846e6..aadac783687b 100644

> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

> @@ -3498,6 +3498,8 @@ static int stmmac_request_irq_multi_msi(struct net_device *dev)

> 

>  	/* Request Rx MSI irq */

>  	for (i = 0; i < priv->plat->rx_queues_to_use; i++) {

> +		if (i > MTL_MAX_RX_QUEUES)

> +			break;

>  		if (priv->rx_irq[i] == 0)

>  			continue;


It might be best to do:
	num_queues = min(priv->plat->rx_queues_to_use, MTL_MAX_RX_QUEUES);
	if (i = 0; i < num_queues; i++) {
		...

Or just give up - if rx_queues_to_use is too big it's all
gone horribly wrong already.

The compile must be smoking weed again.

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
Dan Carpenter April 23, 2021, 9:42 a.m. UTC | #2
Hi Arnd,

url:    https://github.com/0day-ci/linux/commits/Arnd-Bergmann/net-stmmac-fix-gcc-10-Wrestrict-warning/20210421-215015
base:    b74523885a715463203d4ccc3cf8c85952d3701a
config: x86_64-randconfig-m001-20210421 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:3503 stmmac_request_irq_multi_msi() error: buffer overflow 'priv->rx_irq' 8 <= 8
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:3506 stmmac_request_irq_multi_msi() error: buffer overflow 'priv->int_name_rx_irq' 8 <= 8
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:3528 stmmac_request_irq_multi_msi() error: buffer overflow 'priv->tx_irq' 8 <= 8
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:3531 stmmac_request_irq_multi_msi() error: buffer overflow 'priv->int_name_tx_irq' 8 <= 8

Old smatch warnings:
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:1708 init_dma_rx_desc_rings() warn: always true condition '(queue >= 0) => (0-u32max >= 0)'
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:1708 init_dma_rx_desc_rings() warn: always true condition '(queue >= 0) => (0-u32max >= 0)'
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:3508 stmmac_request_irq_multi_msi() error: buffer overflow 'priv->rx_irq' 8 <= 8
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:3514 stmmac_request_irq_multi_msi() error: buffer overflow 'priv->rx_irq' 8 <= 8
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:3521 stmmac_request_irq_multi_msi() error: buffer overflow 'priv->rx_irq' 8 <= 8
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:3533 stmmac_request_irq_multi_msi() error: buffer overflow 'priv->tx_irq' 8 <= 8
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:3539 stmmac_request_irq_multi_msi() error: buffer overflow 'priv->tx_irq' 8 <= 8
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c:3546 stmmac_request_irq_multi_msi() error: buffer overflow 'priv->tx_irq' 8 <= 8

vim +3503 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

8532f613bc78b6 Ong Boon Leong 2021-03-26  3404  static int stmmac_request_irq_multi_msi(struct net_device *dev)
8532f613bc78b6 Ong Boon Leong 2021-03-26  3405  {
8532f613bc78b6 Ong Boon Leong 2021-03-26  3406  	enum request_irq_err irq_err = REQ_IRQ_ERR_NO;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3407  	struct stmmac_priv *priv = netdev_priv(dev);
8deec94c6040bb Ong Boon Leong 2021-04-01  3408  	cpumask_t cpu_mask;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3409  	int irq_idx = 0;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3410  	char *int_name;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3411  	int ret;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3412  	int i;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3413  
8532f613bc78b6 Ong Boon Leong 2021-03-26  3414  	/* For common interrupt */
8532f613bc78b6 Ong Boon Leong 2021-03-26  3415  	int_name = priv->int_name_mac;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3416  	sprintf(int_name, "%s:%s", dev->name, "mac");
8532f613bc78b6 Ong Boon Leong 2021-03-26  3417  	ret = request_irq(dev->irq, stmmac_mac_interrupt,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3418  			  0, int_name, dev);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3419  	if (unlikely(ret < 0)) {
8532f613bc78b6 Ong Boon Leong 2021-03-26  3420  		netdev_err(priv->dev,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3421  			   "%s: alloc mac MSI %d (error: %d)\n",
8532f613bc78b6 Ong Boon Leong 2021-03-26  3422  			   __func__, dev->irq, ret);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3423  		irq_err = REQ_IRQ_ERR_MAC;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3424  		goto irq_error;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3425  	}
8532f613bc78b6 Ong Boon Leong 2021-03-26  3426  
8532f613bc78b6 Ong Boon Leong 2021-03-26  3427  	/* Request the Wake IRQ in case of another line
8532f613bc78b6 Ong Boon Leong 2021-03-26  3428  	 * is used for WoL
8532f613bc78b6 Ong Boon Leong 2021-03-26  3429  	 */
8532f613bc78b6 Ong Boon Leong 2021-03-26  3430  	if (priv->wol_irq > 0 && priv->wol_irq != dev->irq) {
8532f613bc78b6 Ong Boon Leong 2021-03-26  3431  		int_name = priv->int_name_wol;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3432  		sprintf(int_name, "%s:%s", dev->name, "wol");
8532f613bc78b6 Ong Boon Leong 2021-03-26  3433  		ret = request_irq(priv->wol_irq,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3434  				  stmmac_mac_interrupt,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3435  				  0, int_name, dev);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3436  		if (unlikely(ret < 0)) {
8532f613bc78b6 Ong Boon Leong 2021-03-26  3437  			netdev_err(priv->dev,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3438  				   "%s: alloc wol MSI %d (error: %d)\n",
8532f613bc78b6 Ong Boon Leong 2021-03-26  3439  				   __func__, priv->wol_irq, ret);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3440  			irq_err = REQ_IRQ_ERR_WOL;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3441  			goto irq_error;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3442  		}
8532f613bc78b6 Ong Boon Leong 2021-03-26  3443  	}
8532f613bc78b6 Ong Boon Leong 2021-03-26  3444  
8532f613bc78b6 Ong Boon Leong 2021-03-26  3445  	/* Request the LPI IRQ in case of another line
8532f613bc78b6 Ong Boon Leong 2021-03-26  3446  	 * is used for LPI
8532f613bc78b6 Ong Boon Leong 2021-03-26  3447  	 */
8532f613bc78b6 Ong Boon Leong 2021-03-26  3448  	if (priv->lpi_irq > 0 && priv->lpi_irq != dev->irq) {
8532f613bc78b6 Ong Boon Leong 2021-03-26  3449  		int_name = priv->int_name_lpi;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3450  		sprintf(int_name, "%s:%s", dev->name, "lpi");
8532f613bc78b6 Ong Boon Leong 2021-03-26  3451  		ret = request_irq(priv->lpi_irq,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3452  				  stmmac_mac_interrupt,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3453  				  0, int_name, dev);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3454  		if (unlikely(ret < 0)) {
8532f613bc78b6 Ong Boon Leong 2021-03-26  3455  			netdev_err(priv->dev,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3456  				   "%s: alloc lpi MSI %d (error: %d)\n",
8532f613bc78b6 Ong Boon Leong 2021-03-26  3457  				   __func__, priv->lpi_irq, ret);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3458  			irq_err = REQ_IRQ_ERR_LPI;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3459  			goto irq_error;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3460  		}
8532f613bc78b6 Ong Boon Leong 2021-03-26  3461  	}
8532f613bc78b6 Ong Boon Leong 2021-03-26  3462  
8532f613bc78b6 Ong Boon Leong 2021-03-26  3463  	/* Request the Safety Feature Correctible Error line in
8532f613bc78b6 Ong Boon Leong 2021-03-26  3464  	 * case of another line is used
8532f613bc78b6 Ong Boon Leong 2021-03-26  3465  	 */
8532f613bc78b6 Ong Boon Leong 2021-03-26  3466  	if (priv->sfty_ce_irq > 0 && priv->sfty_ce_irq != dev->irq) {
8532f613bc78b6 Ong Boon Leong 2021-03-26  3467  		int_name = priv->int_name_sfty_ce;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3468  		sprintf(int_name, "%s:%s", dev->name, "safety-ce");
8532f613bc78b6 Ong Boon Leong 2021-03-26  3469  		ret = request_irq(priv->sfty_ce_irq,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3470  				  stmmac_safety_interrupt,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3471  				  0, int_name, dev);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3472  		if (unlikely(ret < 0)) {
8532f613bc78b6 Ong Boon Leong 2021-03-26  3473  			netdev_err(priv->dev,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3474  				   "%s: alloc sfty ce MSI %d (error: %d)\n",
8532f613bc78b6 Ong Boon Leong 2021-03-26  3475  				   __func__, priv->sfty_ce_irq, ret);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3476  			irq_err = REQ_IRQ_ERR_SFTY_CE;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3477  			goto irq_error;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3478  		}
8532f613bc78b6 Ong Boon Leong 2021-03-26  3479  	}
8532f613bc78b6 Ong Boon Leong 2021-03-26  3480  
8532f613bc78b6 Ong Boon Leong 2021-03-26  3481  	/* Request the Safety Feature Uncorrectible Error line in
8532f613bc78b6 Ong Boon Leong 2021-03-26  3482  	 * case of another line is used
8532f613bc78b6 Ong Boon Leong 2021-03-26  3483  	 */
8532f613bc78b6 Ong Boon Leong 2021-03-26  3484  	if (priv->sfty_ue_irq > 0 && priv->sfty_ue_irq != dev->irq) {
8532f613bc78b6 Ong Boon Leong 2021-03-26  3485  		int_name = priv->int_name_sfty_ue;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3486  		sprintf(int_name, "%s:%s", dev->name, "safety-ue");
8532f613bc78b6 Ong Boon Leong 2021-03-26  3487  		ret = request_irq(priv->sfty_ue_irq,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3488  				  stmmac_safety_interrupt,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3489  				  0, int_name, dev);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3490  		if (unlikely(ret < 0)) {
8532f613bc78b6 Ong Boon Leong 2021-03-26  3491  			netdev_err(priv->dev,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3492  				   "%s: alloc sfty ue MSI %d (error: %d)\n",
8532f613bc78b6 Ong Boon Leong 2021-03-26  3493  				   __func__, priv->sfty_ue_irq, ret);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3494  			irq_err = REQ_IRQ_ERR_SFTY_UE;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3495  			goto irq_error;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3496  		}
8532f613bc78b6 Ong Boon Leong 2021-03-26  3497  	}
8532f613bc78b6 Ong Boon Leong 2021-03-26  3498  
8532f613bc78b6 Ong Boon Leong 2021-03-26  3499  	/* Request Rx MSI irq */
8532f613bc78b6 Ong Boon Leong 2021-03-26  3500  	for (i = 0; i < priv->plat->rx_queues_to_use; i++) {
e4af3ad54243da Arnd Bergmann  2021-04-21  3501  		if (i > MTL_MAX_RX_QUEUES)
                                                                    ^^^^^^^^^^^^^^^^^^^^^
Off by one.

e4af3ad54243da Arnd Bergmann  2021-04-21  3502  			break;
8532f613bc78b6 Ong Boon Leong 2021-03-26 @3503  		if (priv->rx_irq[i] == 0)
                                                                          ^^^^^^^^^

8532f613bc78b6 Ong Boon Leong 2021-03-26  3504  			continue;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3505  
8532f613bc78b6 Ong Boon Leong 2021-03-26 @3506  		int_name = priv->int_name_rx_irq[i];
                                                                               ^^^^^^^^^^^^^^^^^^^^

8532f613bc78b6 Ong Boon Leong 2021-03-26  3507  		sprintf(int_name, "%s:%s-%d", dev->name, "rx", i);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3508  		ret = request_irq(priv->rx_irq[i],
8532f613bc78b6 Ong Boon Leong 2021-03-26  3509  				  stmmac_msi_intr_rx,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3510  				  0, int_name, &priv->rx_queue[i]);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3511  		if (unlikely(ret < 0)) {
8532f613bc78b6 Ong Boon Leong 2021-03-26  3512  			netdev_err(priv->dev,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3513  				   "%s: alloc rx-%d  MSI %d (error: %d)\n",
8532f613bc78b6 Ong Boon Leong 2021-03-26  3514  				   __func__, i, priv->rx_irq[i], ret);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3515  			irq_err = REQ_IRQ_ERR_RX;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3516  			irq_idx = i;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3517  			goto irq_error;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3518  		}
8deec94c6040bb Ong Boon Leong 2021-04-01  3519  		cpumask_clear(&cpu_mask);
8deec94c6040bb Ong Boon Leong 2021-04-01  3520  		cpumask_set_cpu(i % num_online_cpus(), &cpu_mask);
8deec94c6040bb Ong Boon Leong 2021-04-01  3521  		irq_set_affinity_hint(priv->rx_irq[i], &cpu_mask);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3522  	}
8532f613bc78b6 Ong Boon Leong 2021-03-26  3523  
8532f613bc78b6 Ong Boon Leong 2021-03-26  3524  	/* Request Tx MSI irq */
8532f613bc78b6 Ong Boon Leong 2021-03-26  3525  	for (i = 0; i < priv->plat->tx_queues_to_use; i++) {
e4af3ad54243da Arnd Bergmann  2021-04-21  3526  		if (i > MTL_MAX_TX_QUEUES)
                                                                    ^^^^^^^^^^^^^^^^^^^^^

e4af3ad54243da Arnd Bergmann  2021-04-21  3527  			break;
8532f613bc78b6 Ong Boon Leong 2021-03-26 @3528  		if (priv->tx_irq[i] == 0)
8532f613bc78b6 Ong Boon Leong 2021-03-26  3529  			continue;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3530  
8532f613bc78b6 Ong Boon Leong 2021-03-26 @3531  		int_name = priv->int_name_tx_irq[i];
8532f613bc78b6 Ong Boon Leong 2021-03-26  3532  		sprintf(int_name, "%s:%s-%d", dev->name, "tx", i);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3533  		ret = request_irq(priv->tx_irq[i],
8532f613bc78b6 Ong Boon Leong 2021-03-26  3534  				  stmmac_msi_intr_tx,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3535  				  0, int_name, &priv->tx_queue[i]);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3536  		if (unlikely(ret < 0)) {
8532f613bc78b6 Ong Boon Leong 2021-03-26  3537  			netdev_err(priv->dev,
8532f613bc78b6 Ong Boon Leong 2021-03-26  3538  				   "%s: alloc tx-%d  MSI %d (error: %d)\n",
8532f613bc78b6 Ong Boon Leong 2021-03-26  3539  				   __func__, i, priv->tx_irq[i], ret);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3540  			irq_err = REQ_IRQ_ERR_TX;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3541  			irq_idx = i;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3542  			goto irq_error;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3543  		}
8deec94c6040bb Ong Boon Leong 2021-04-01  3544  		cpumask_clear(&cpu_mask);
8deec94c6040bb Ong Boon Leong 2021-04-01  3545  		cpumask_set_cpu(i % num_online_cpus(), &cpu_mask);
8deec94c6040bb Ong Boon Leong 2021-04-01  3546  		irq_set_affinity_hint(priv->tx_irq[i], &cpu_mask);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3547  	}
8532f613bc78b6 Ong Boon Leong 2021-03-26  3548  
8532f613bc78b6 Ong Boon Leong 2021-03-26  3549  	return 0;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3550  
8532f613bc78b6 Ong Boon Leong 2021-03-26  3551  irq_error:
8532f613bc78b6 Ong Boon Leong 2021-03-26  3552  	stmmac_free_irq(dev, irq_err, irq_idx);
8532f613bc78b6 Ong Boon Leong 2021-03-26  3553  	return ret;
8532f613bc78b6 Ong Boon Leong 2021-03-26  3554  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff mbox series

Patch

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index d1ca07c846e6..aadac783687b 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -3498,6 +3498,8 @@  static int stmmac_request_irq_multi_msi(struct net_device *dev)
 
 	/* Request Rx MSI irq */
 	for (i = 0; i < priv->plat->rx_queues_to_use; i++) {
+		if (i > MTL_MAX_RX_QUEUES)
+			break;
 		if (priv->rx_irq[i] == 0)
 			continue;
 
@@ -3521,6 +3523,8 @@  static int stmmac_request_irq_multi_msi(struct net_device *dev)
 
 	/* Request Tx MSI irq */
 	for (i = 0; i < priv->plat->tx_queues_to_use; i++) {
+		if (i > MTL_MAX_TX_QUEUES)
+			break;
 		if (priv->tx_irq[i] == 0)
 			continue;