diff options
author | Christian Marangi <ansuelsmth@gmail.com> | 2023-05-22 02:34:20 +0200 |
---|---|---|
committer | Christian Marangi <ansuelsmth@gmail.com> | 2023-05-22 22:28:18 +0200 |
commit | 0605fa693e3ae5266c6d9b0a291ee12a3adac09b (patch) | |
tree | 2b53981580abf7da86a2d18b087cbc1e709580e3 /target | |
parent | fb6de77a824d6d7542ad314721448fcb8c6ccc1a (diff) |
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@gmail.com>
Diffstat (limited to 'target')
-rw-r--r-- | target/linux/generic/files/drivers/net/phy/ar8216.c | 7 | ||||
-rw-r--r-- | target/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 |