net: dsa: microchip: Fix uninitialized var in ksz9477_acl_move_entries()
authorOleksij Rempel <o.rempel@pengutronix.de>
Fri, 6 Oct 2023 11:58:22 +0000 (13:58 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 10 Oct 2023 09:12:01 +0000 (11:12 +0200)
Address an issue in ksz9477_acl_move_entries() where, in the scenario
(src_idx == dst_idx), ksz9477_validate_and_get_src_count() returns 0,
leading to usage of uninitialized src_count and dst_count variables,
which causes undesired behavior as it attempts to move ACL entries
around.

Fixes: 002841be134e ("net: dsa: microchip: Add partial ACL support for ksz9477 switches")
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Suggested-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Link: https://lore.kernel.org/r/20231006115822.144152-1-o.rempel@pengutronix.de
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/dsa/microchip/ksz9477_acl.c

index 06d74c19eb945614d585f337521f33ff1acefcd9..7ba778df63acef989b11b10e7d7d61ff9e4993b7 100644 (file)
@@ -420,10 +420,6 @@ static int ksz9477_validate_and_get_src_count(struct ksz_device *dev, int port,
                return -EINVAL;
        }
 
-       /* Nothing to do */
-       if (src_idx == dst_idx)
-               return 0;
-
        /* Validate if the source entries are contiguous */
        ret = ksz9477_acl_get_cont_entr(dev, port, src_idx);
        if (ret < 0)
@@ -556,6 +552,10 @@ static int ksz9477_acl_move_entries(struct ksz_device *dev, int port,
        struct ksz9477_acl_entries *acles = &acl->acles;
        int src_count, ret, dst_count;
 
+       /* Nothing to do */
+       if (src_idx == dst_idx)
+               return 0;
+
        ret = ksz9477_validate_and_get_src_count(dev, port, src_idx, dst_idx,
                                                 &src_count, &dst_count);
        if (ret)