[openwrt/openwrt] kernel: use struct group to wipe psb6970 volatile priv data

LEDE Commits lede-commits at lists.infradead.org
Sat Jun 10 10:09:23 PDT 2023


chunkeey pushed a commit to openwrt/openwrt.git, branch openwrt-23.05:
https://git.openwrt.org/7d4868461264eefcb21a6e2d3ff6d02871d9ad5b

commit 7d4868461264eefcb21a6e2d3ff6d02871d9ad5b
Author: Aleksander Jan Bajkowski <olek2 at wp.pl>
AuthorDate: Thu May 25 22:20:15 2023 +0200

    kernel: use struct group to wipe psb6970 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.
    
    Fix compilation warning:
    | inlined from 'psb6970_reset_switch' at drivers/net/phy/psb6970.c:275:2:
    | ./include/linux/fortify-string.h:314:25: error: call to '__write_overflow_field'
    | declared with attribute warning: detected write beyond size of field
    | (1st parameter); maybe use struct_group()? [-Werror=attribute-warning]
    |  314 |                         __write_overflow_field(p_size_field, size);
    |      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |cc1: all warnings being treated as errors
    
    Signed-off-by: Aleksander Jan Bajkowski <olek2 at wp.pl>
    (cherry picked from commit d69becd3071d560cd1c9ea655cbba26adce91f61)
---
 target/linux/generic/files/drivers/net/phy/psb6970.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/target/linux/generic/files/drivers/net/phy/psb6970.c b/target/linux/generic/files/drivers/net/phy/psb6970.c
index af64704b16..2587b99913 100644
--- a/target/linux/generic/files/drivers/net/phy/psb6970.c
+++ b/target/linux/generic/files/drivers/net/phy/psb6970.c
@@ -60,11 +60,13 @@ struct psb6970_priv {
 	struct mutex reg_mutex;
 
 	/* all fields below are cleared on reset */
-	bool vlan;
-	u16 vlan_id[PSB6970_MAX_VLANS];
-	u8 vlan_table[PSB6970_MAX_VLANS];
-	u8 vlan_tagged;
-	u16 pvid[PSB6970_NUM_PORTS];
+	struct_group(psb6970_priv_volatile,
+		bool vlan;
+		u16 vlan_id[PSB6970_MAX_VLANS];
+		u8 vlan_table[PSB6970_MAX_VLANS];
+		u8 vlan_tagged;
+		u16 pvid[PSB6970_NUM_PORTS];
+	);
 };
 
 #define to_psb6970(_dev) container_of(_dev, struct psb6970_priv, dev)
@@ -272,8 +274,8 @@ static int psb6970_reset_switch(struct switch_dev *dev)
 
 	mutex_lock(&priv->reg_mutex);
 
-	memset(&priv->vlan, 0, sizeof(struct psb6970_priv) -
-	       offsetof(struct psb6970_priv, vlan));
+	memset(&priv->psb6970_priv_volatile, 0,
+		sizeof(priv->psb6970_priv_volatile));
 
 	for (i = 0; i < PSB6970_MAX_VLANS; i++)
 		priv->vlan_id[i] = i;




More information about the lede-commits mailing list