* [PATCH net] i40e: fix memcmp of pointer in i40e_hw_set_dcb_config()
@ 2026-03-29 16:21 Aaron Esau
2026-04-01 7:54 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-05-06 5:52 ` Arland, ArpanaX
0 siblings, 2 replies; 3+ messages in thread
From: Aaron Esau @ 2026-03-29 16:21 UTC (permalink / raw)
To: intel-wired-lan
Cc: netdev, anthony.l.nguyen, przemyslaw.kitszel,
arkadiusz.kubalewski, stable, Aaron Esau
In i40e_hw_set_dcb_config(), both new_cfg and old_cfg are pointers to
struct i40e_dcbx_config, so sizeof(new_cfg) evaluates to the size of a
pointer (8 bytes on 64-bit) rather than the size of the struct. Likewise,
&new_cfg and &old_cfg are the addresses of the pointer variables on the
stack, not the addresses of the actual config structs.
As a result, the memcmp never compares the actual configuration data,
meaning the "no change needed" early return never fires. Every call to
this function performs a full DCB reconfiguration (quiescing all VSIs,
reprogramming via "Set LLDP MIB" AQC, and reconfiguring VEB/VSIs) even
when the configuration has not changed.
Fix this by comparing the structs themselves rather than the pointers.
Fixes: 4b208eaa8078 ("i40e: Add init and default config of software based DCB")
Cc: stable@vger.kernel.org
Signed-off-by: Aaron Esau <aaron1esau@gmail.com>
---
Found using Coccinelle/spatch with a semantic patch that matches
sizeof(ptr) and &ptr used together where ptr is a pointer type.
drivers/net/ethernet/intel/i40e/i40e_main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index XXXXXXX..XXXXXXX 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -6904,7 +6904,7 @@ static int i40e_hw_set_dcb_config(struct i40e_pf *pf,
int ret;
/* Check if need reconfiguration */
- if (!memcmp(&new_cfg, &old_cfg, sizeof(new_cfg))) {
+ if (!memcmp(new_cfg, old_cfg, sizeof(*new_cfg))) {
dev_dbg(&pf->pdev->dev, "No Change in DCB Config required.\n");
return 0;
}
--
2.49.0
^ permalink raw reply [flat|nested] 3+ messages in thread* RE: [Intel-wired-lan] [PATCH net] i40e: fix memcmp of pointer in i40e_hw_set_dcb_config()
2026-03-29 16:21 [PATCH net] i40e: fix memcmp of pointer in i40e_hw_set_dcb_config() Aaron Esau
@ 2026-04-01 7:54 ` Loktionov, Aleksandr
2026-05-06 5:52 ` Arland, ArpanaX
1 sibling, 0 replies; 3+ messages in thread
From: Loktionov, Aleksandr @ 2026-04-01 7:54 UTC (permalink / raw)
To: Aaron Esau, intel-wired-lan@lists.osuosl.org
Cc: netdev@vger.kernel.org, Nguyen, Anthony L, Kitszel, Przemyslaw,
Kubalewski, Arkadiusz, stable@vger.kernel.org
> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf
> Of Aaron Esau
> Sent: Sunday, March 29, 2026 6:22 PM
> To: intel-wired-lan@lists.osuosl.org
> Cc: netdev@vger.kernel.org; Nguyen, Anthony L
> <anthony.l.nguyen@intel.com>; Kitszel, Przemyslaw
> <przemyslaw.kitszel@intel.com>; Kubalewski, Arkadiusz
> <arkadiusz.kubalewski@intel.com>; stable@vger.kernel.org; Aaron Esau
> <aaron1esau@gmail.com>
> Subject: [Intel-wired-lan] [PATCH net] i40e: fix memcmp of pointer in
> i40e_hw_set_dcb_config()
>
> In i40e_hw_set_dcb_config(), both new_cfg and old_cfg are pointers to
> struct i40e_dcbx_config, so sizeof(new_cfg) evaluates to the size of a
> pointer (8 bytes on 64-bit) rather than the size of the struct.
> Likewise, &new_cfg and &old_cfg are the addresses of the pointer
> variables on the stack, not the addresses of the actual config
> structs.
>
> As a result, the memcmp never compares the actual configuration data,
> meaning the "no change needed" early return never fires. Every call to
> this function performs a full DCB reconfiguration (quiescing all VSIs,
> reprogramming via "Set LLDP MIB" AQC, and reconfiguring VEB/VSIs) even
> when the configuration has not changed.
>
> Fix this by comparing the structs themselves rather than the pointers.
>
> Fixes: 4b208eaa8078 ("i40e: Add init and default config of software
> based DCB")
> Cc: stable@vger.kernel.org
> Signed-off-by: Aaron Esau <aaron1esau@gmail.com>
> ---
>
> Found using Coccinelle/spatch with a semantic patch that matches
> sizeof(ptr) and &ptr used together where ptr is a pointer type.
>
> drivers/net/ethernet/intel/i40e/i40e_main.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c
> b/drivers/net/ethernet/intel/i40e/i40e_main.c
> index XXXXXXX..XXXXXXX 100644
> --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
> +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
> @@ -6904,7 +6904,7 @@ static int i40e_hw_set_dcb_config(struct i40e_pf
> *pf,
> int ret;
>
> /* Check if need reconfiguration */
> - if (!memcmp(&new_cfg, &old_cfg, sizeof(new_cfg))) {
> + if (!memcmp(new_cfg, old_cfg, sizeof(*new_cfg))) {
> dev_dbg(&pf->pdev->dev, "No Change in DCB Config
> required.\n");
> return 0;
> }
> --
> 2.49.0
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
^ permalink raw reply [flat|nested] 3+ messages in thread* RE: [Intel-wired-lan] [PATCH net] i40e: fix memcmp of pointer in i40e_hw_set_dcb_config()
2026-03-29 16:21 [PATCH net] i40e: fix memcmp of pointer in i40e_hw_set_dcb_config() Aaron Esau
2026-04-01 7:54 ` [Intel-wired-lan] " Loktionov, Aleksandr
@ 2026-05-06 5:52 ` Arland, ArpanaX
1 sibling, 0 replies; 3+ messages in thread
From: Arland, ArpanaX @ 2026-05-06 5:52 UTC (permalink / raw)
To: Aaron Esau, intel-wired-lan@lists.osuosl.org
Cc: netdev@vger.kernel.org, Nguyen, Anthony L, Kitszel, Przemyslaw,
Kubalewski, Arkadiusz, stable@vger.kernel.org
> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of Aaron Esau
> Sent: Sunday, March 29, 2026 9:52 PM
> To: intel-wired-lan@lists.osuosl.org
> Cc: netdev@vger.kernel.org; Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel, Przemyslaw <przemyslaw.kitszel@intel.com>; Kubalewski, Arkadiusz <arkadiusz.kubalewski@intel.com>; stable@vger.kernel.org; Aaron Esau <aaron1esau@gmail.com>
> Subject: [Intel-wired-lan] [PATCH net] i40e: fix memcmp of pointer in i40e_hw_set_dcb_config()
>
> In i40e_hw_set_dcb_config(), both new_cfg and old_cfg are pointers to struct i40e_dcbx_config, so sizeof(new_cfg) evaluates to the size of a pointer (8 bytes on 64-bit) rather than the size of the struct. > Likewise, &new_cfg and &old_cfg are the addresses of the pointer variables on the stack, not the addresses of the actual config structs.
>
> As a result, the memcmp never compares the actual configuration data, meaning the "no change needed" early return never fires. Every call to this function performs a full DCB reconfiguration (quiescing > all VSIs, reprogramming via "Set LLDP MIB" AQC, and reconfiguring VEB/VSIs) even when the configuration has not changed.
>
> Fix this by comparing the structs themselves rather than the pointers.
>
> Fixes: 4b208eaa8078 ("i40e: Add init and default config of software based DCB")
> Cc: stable@vger.kernel.org
> Signed-off-by: Aaron Esau <aaron1esau@gmail.com>
> ---
>
> Found using Coccinelle/spatch with a semantic patch that matches
> sizeof(ptr) and &ptr used together where ptr is a pointer type.
>
> drivers/net/ethernet/intel/i40e/i40e_main.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
Tested-by: Arpana Arland <arpanax.arland@intel.com> (A Contingent worker at Intel)
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-05-06 5:52 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-29 16:21 [PATCH net] i40e: fix memcmp of pointer in i40e_hw_set_dcb_config() Aaron Esau
2026-04-01 7:54 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-05-06 5:52 ` Arland, ArpanaX
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox