Skip to contentSkip to conversation

e1000: fix memcpy in e1000_get_strings

PATCH In review Auke Kok 2 participants 3 messages Dec 5, 2007 – Dec 7, 2007

Subsystems (2)
lore
Share & tools
lore

Auke Kok

author
#0 lore raw

PATCH 1/2 e1000: fix memcpy in e1000_get_strings

From: Roel Kluin <[email protected]>

drivers/net/e1000/e1000_ethtool.c:113:
#define E1000_TEST_LEN sizeof(e1000_gstrings_test) / ETH_GSTRING_LEN

drivers/net/e1000e/ethtool.c:106:
#define E1000_TEST_LEN sizeof(e1000_gstrings_test) / ETH_GSTRING_LEN

E1000_TEST_LEN*ETH_GSTRING_LEN will expand to sizeof(e1000_gstrings_test) / (ETH_GSTRING_LEN * ETH_GSTRING_LEN)

A lack of parentheses around defines causes unexpected results due to operator precedences.

---

 drivers/net/e1000/e1000_ethtool.c |    2 +-
 drivers/net/e1000e/ethtool.c      |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/net/e1000/e1000_ethtool.c +1 -1
index 0542b10..d876787 100644
@@ -1949,7 +1949,7 @@ e1000_get_strings(struct net_device *netdev, uint32_t stringset, uint8_t *data)
 	switch (stringset) {
 	case ETH_SS_TEST:
 		memcpy(data, *e1000_gstrings_test,
-			E1000_TEST_LEN*ETH_GSTRING_LEN);
+			sizeof(e1000_gstrings_test));
 		break;
 	case ETH_SS_STATS:
 		for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
drivers/net/e1000e/ethtool.c +1 -1
index d824914..6d9c27f 100644
@@ -1760,7 +1760,7 @@ static void e1000_get_strings(struct net_device *netdev, u32 stringset,
 	switch (stringset) {
 	case ETH_SS_TEST:
 		memcpy(data, *e1000_gstrings_test,
-			E1000_TEST_LEN*ETH_GSTRING_LEN);
+			sizeof(e1000_gstrings_test));
 		break;
 	case ETH_SS_STATS:
 		for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
author
#1 lore raw

PATCH 2/2 e100: cleanup unneeded math

No need to convert to bytes and back - cleanup unneeded code.

Adapted from fix from 'Roel Kluin <[email protected]>'

---

 drivers/net/e100.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)
drivers/net/e100.c +2 -4
index 9189aff..27f4d4a 100644
@@ -2284,13 +2284,11 @@ static void e100_get_drvinfo(struct net_device *netdev,
 	strcpy(info->bus_info, pci_name(nic->pdev));
 }
 
+#define E100_PHY_REGS 0x1C
 static int e100_get_regs_len(struct net_device *netdev)
 {
 	struct nic *nic = netdev_priv(netdev);
-#define E100_PHY_REGS		0x1C
-#define E100_REGS_LEN		1 + E100_PHY_REGS + \
-	sizeof(nic->mem->dump_buf) / sizeof(u32)
-	return E100_REGS_LEN * sizeof(u32);
+	return 1 + E100_PHY_REGS + sizeof(nic->mem->dump_buf);
 }
 
 static void e100_get_regs(struct net_device *netdev,
#2 lore raw
In reply to Auke Kok
Quoted 14 lines · Auke Kok

From: Roel Kluin <[email protected]>

drivers/net/e1000/e1000_ethtool.c:113:
#define E1000_TEST_LEN sizeof(e1000_gstrings_test) / ETH_GSTRING_LEN

drivers/net/e1000e/ethtool.c:106:
#define E1000_TEST_LEN sizeof(e1000_gstrings_test) / ETH_GSTRING_LEN

E1000_TEST_LEN*ETH_GSTRING_LEN will expand to sizeof(e1000_gstrings_test) / (ETH_GSTRING_LEN * ETH_GSTRING_LEN)

A lack of parentheses around defines causes unexpected results due to operator precedences.

Quoted 7 lines

---

 drivers/net/e1000/e1000_ethtool.c |    2 +-
 drivers/net/e1000e/ethtool.c      |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

applied 1-2 to #upstream-fixes