kernek: use struct_group to wipe ar8216 volatile priv data
authorChristian Marangi <ansuelsmth@gmail.com>
Mon, 22 May 2023 00:34:20 +0000 (02:34 +0200)
committerChristian Marangi <ansuelsmth@gmail.com>
Mon, 22 May 2023 20:28:18 +0000 (22:28 +0200)
Instead of reference vlan and do strange subtraction, use the handy
struct_group() to create a virtual struct of the same size of the
members. This permits to have a more secure memset and fix compilation
warning in 6.1 where additional checks are done.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
target/linux/generic/files/drivers/net/phy/ar8216.c
target/linux/generic/files/drivers/net/phy/ar8216.h

index 876754597a9cd7cf918d23cc3caaeedc1a365f6d..850bcefb74e26e8cffa62fa0993533c40300339f 100644 (file)
@@ -1419,8 +1419,7 @@ ar8xxx_sw_reset_switch(struct switch_dev *dev)
        int i;
 
        mutex_lock(&priv->reg_mutex);
-       memset(&priv->vlan, 0, sizeof(struct ar8xxx_priv) -
-               offsetof(struct ar8xxx_priv, vlan));
+       memset(&priv->ar8xxx_priv_volatile, 0, sizeof(priv->ar8xxx_priv_volatile));
 
        for (i = 0; i < dev->vlans; i++)
                priv->vlan_id[i] = i;
@@ -2461,7 +2460,7 @@ ar8xxx_phy_config_init(struct phy_device *phydev)
                dev->phy_ptr = priv;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(6,1,0)
                dev->priv_flags |= IFF_NO_IP_ALIGN;
-#else LINUX_VERSION_CODE >= KERNEL_VERSION(5,15,0)
+#else
                dev->extra_priv_flags |= IFF_NO_IP_ALIGN;
 #endif
                dev->eth_mangle_rx = ar8216_mangle_rx;
@@ -2700,7 +2699,7 @@ ar8xxx_phy_detach(struct phy_device *phydev)
        dev->phy_ptr = NULL;
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(6,1,0)
        dev->priv_flags &= ~IFF_NO_IP_ALIGN;
-#else LINUX_VERSION_CODE >= KERNEL_VERSION(5,15,0)
+#else
        dev->extra_priv_flags &= ~IFF_NO_IP_ALIGN;
 #endif
        dev->eth_mangle_rx = NULL;
index d62cf60f57e640c124ebbe531c0cd38a3684de1d..f046b35f43fba99cf49c842cbbf91bcd64113d99 100644 (file)
@@ -506,20 +506,22 @@ struct ar8xxx_priv {
        unsigned int use_count;
 
        /* all fields below are cleared on reset */
-       bool vlan;
-
-       u16 vlan_id[AR8XXX_MAX_VLANS];
-       u8 vlan_table[AR8XXX_MAX_VLANS];
-       u8 vlan_tagged;
-       u16 pvid[AR8X16_MAX_PORTS];
-       int arl_age_time;
-
-       /* mirroring */
-       bool mirror_rx;
-       bool mirror_tx;
-       int source_port;
-       int monitor_port;
-       u8 port_vlan_prio[AR8X16_MAX_PORTS];
+       struct_group(ar8xxx_priv_volatile,
+               bool vlan;
+
+               u16 vlan_id[AR8XXX_MAX_VLANS];
+               u8 vlan_table[AR8XXX_MAX_VLANS];
+               u8 vlan_tagged;
+               u16 pvid[AR8X16_MAX_PORTS];
+               int arl_age_time;
+
+               /* mirroring */
+               bool mirror_rx;
+               bool mirror_tx;
+               int source_port;
+               int monitor_port;
+               u8 port_vlan_prio[AR8X16_MAX_PORTS];
+       );
 };
 
 u32