[openwrt/openwrt] kernek: use struct_group to wipe ar8216 volatile priv data

LEDE Commits lede-commits at lists.infradead.org
Mon May 22 13:40:34 PDT 2023


ansuel pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/0605fa693e3ae5266c6d9b0a291ee12a3adac09b

commit 0605fa693e3ae5266c6d9b0a291ee12a3adac09b
Author: Christian Marangi <ansuelsmth at gmail.com>
AuthorDate: Mon May 22 02:34:20 2023 +0200

    kernek: use struct_group to wipe ar8216 volatile priv data
    
    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 at gmail.com>
---
 .../linux/generic/files/drivers/net/phy/ar8216.c   |  7 +++--
 .../linux/generic/files/drivers/net/phy/ar8216.h   | 30 ++++++++++++----------
 2 files changed, 19 insertions(+), 18 deletions(-)

diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c
index 876754597a..850bcefb74 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8216.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8216.c
@@ -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;
diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.h b/target/linux/generic/files/drivers/net/phy/ar8216.h
index d62cf60f57..f046b35f43 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8216.h
+++ b/target/linux/generic/files/drivers/net/phy/ar8216.h
@@ -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




More information about the lede-commits mailing list