]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: dsa: lantiq_gswip: Fix start index in gswip_port_fdb()
authorMartin Blumenstingl <martin.blumenstingl@googlemail.com>
Wed, 18 May 2022 22:00:50 +0000 (00:00 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 20 May 2022 01:40:45 +0000 (18:40 -0700)
The first N entries in priv->vlans are reserved for managing ports which
are not part of a bridge. Use priv->hw_info->max_ports to consistently
access per-bridge entries at index 7. Starting at
priv->hw_info->cpu_port (6) is harmless in this case because
priv->vlan[6].bridge is always NULL so the comparison result is always
false (which results in this entry being skipped).

Acked-by: Hauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/lantiq_gswip.c

index 12c15da55664b9de63e2bef6e46477700289f0da..0c313db23451037bb778631038471191d9542ab3 100644 (file)
@@ -1360,7 +1360,7 @@ static int gswip_port_fdb(struct dsa_switch *ds, int port,
        struct net_device *bridge = dsa_port_bridge_dev_get(dsa_to_port(ds, port));
        struct gswip_priv *priv = ds->priv;
        struct gswip_pce_table_entry mac_bridge = {0,};
-       unsigned int cpu_port = priv->hw_info->cpu_port;
+       unsigned int max_ports = priv->hw_info->max_ports;
        int fid = -1;
        int i;
        int err;
@@ -1368,7 +1368,7 @@ static int gswip_port_fdb(struct dsa_switch *ds, int port,
        if (!bridge)
                return -EINVAL;
 
-       for (i = cpu_port; i < ARRAY_SIZE(priv->vlans); i++) {
+       for (i = max_ports; i < ARRAY_SIZE(priv->vlans); i++) {
                if (priv->vlans[i].bridge == bridge) {
                        fid = priv->vlans[i].fid;
                        break;