Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: dsa: bcm_sf2_cfp: fix an incorrect NULL check on list iterator

The bug is here:
return rule;

The list iterator value 'rule' will *always* be set and non-NULL
by list_for_each_entry(), so it is incorrect to assume that the
iterator value will be NULL if the list is empty or no element
is found.

To fix the bug, return 'rule' when found, otherwise return NULL.

Fixes: ae7a5aff783c7 ("net: dsa: bcm_sf2: Keep copy of inserted rules")
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Xiaomeng Tong <xiam0nd.tong@gmail.com>
Link: https://lore.kernel.org/r/20220328032431.22538-1-xiam0nd.tong@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Xiaomeng Tong and committed by
Jakub Kicinski
6da69b1d dcf50006

+3 -3
+3 -3
drivers/net/dsa/bcm_sf2_cfp.c
··· 567 567 static struct cfp_rule *bcm_sf2_cfp_rule_find(struct bcm_sf2_priv *priv, 568 568 int port, u32 location) 569 569 { 570 - struct cfp_rule *rule = NULL; 570 + struct cfp_rule *rule; 571 571 572 572 list_for_each_entry(rule, &priv->cfp.rules_list, next) { 573 573 if (rule->port == port && rule->fs.location == location) 574 - break; 574 + return rule; 575 575 } 576 576 577 - return rule; 577 + return NULL; 578 578 } 579 579 580 580 static int bcm_sf2_cfp_rule_cmp(struct bcm_sf2_priv *priv, int port,