From: Agalakov Daniil <ade@amicon.ru>
To: Tony Nguyen <anthony.l.nguyen@intel.com>
Cc: Agalakov Daniil <ade@amicon.ru>,
Przemek Kitszel <przemyslaw.kitszel@intel.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
<intel-wired-lan@lists.osuosl.org>, <netdev@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <lvc-project@linuxtesting.org>,
"Daniil Iskhakov" <dish@amicon.ru>, Roman Razov <rrv@amicon.ru>
Subject: [PATCH net 1/3] e1000: check return value of e1000_read_eeprom
Date: Wed, 18 Mar 2026 15:05:05 +0300 [thread overview]
Message-ID: <20260318120512.687149-2-ade@amicon.ru> (raw)
In-Reply-To: <20260318120512.687149-1-ade@amicon.ru>
[Why]
e1000_set_eeprom() performs a read-modify-write operation when the write
range is not word-aligned. This requires reading the first and last words
of the range from the EEPROM to preserve the unmodified bytes.
However, the code does not check the return value of e1000_read_eeprom().
If the read fails, the operation continues using uninitialized data from
eeprom_buff. This results in corrupted data being written back to the
EEPROM for the boundary words.
Add the missing error checks and abort the operation if reading fails.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Co-developed-by: Iskhakov Daniil <dish@amicon.ru>
Signed-off-by: Iskhakov Daniil <dish@amicon.ru>
Signed-off-by: Agalakov Daniil <ade@amicon.ru>
---
drivers/net/ethernet/intel/e1000/e1000_ethtool.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
index ab232b3fbbd0..4dcbeabb3ad2 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_ethtool.c
@@ -496,14 +496,19 @@ static int e1000_set_eeprom(struct net_device *netdev,
*/
ret_val = e1000_read_eeprom(hw, first_word, 1,
&eeprom_buff[0]);
+ if (ret_val)
+ goto out;
+
ptr++;
}
- if (((eeprom->offset + eeprom->len) & 1) && (ret_val == 0)) {
+ if ((eeprom->offset + eeprom->len) & 1) {
/* need read/modify/write of last changed EEPROM word
* only the first byte of the word is being modified
*/
ret_val = e1000_read_eeprom(hw, last_word, 1,
&eeprom_buff[last_word - first_word]);
+ if (ret_val)
+ goto out;
}
/* Device's eeprom is always little-endian, word addressable */
@@ -522,6 +527,7 @@ static int e1000_set_eeprom(struct net_device *netdev,
if ((ret_val == 0) && (first_word <= EEPROM_CHECKSUM_REG))
e1000_update_eeprom_checksum(hw);
+out:
kfree(eeprom_buff);
return ret_val;
}
--
2.51.0
next prev parent reply other threads:[~2026-03-18 12:20 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-18 12:05 [PATCH net 0/3] e1000/e1000e: fix uninitialized memory access in EEPROM write Agalakov Daniil
2026-03-18 12:05 ` Agalakov Daniil [this message]
2026-03-18 15:38 ` [Intel-wired-lan] [PATCH net 1/3] e1000: check return value of e1000_read_eeprom Loktionov, Aleksandr
2026-03-18 12:05 ` [PATCH net 2/3] e1000: fix endianness conversion of uninitialized words Agalakov Daniil
2026-03-18 15:38 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-03-24 23:26 ` Tony Nguyen
2026-03-25 15:19 ` Fedor Pchelkin
2026-03-25 23:01 ` Jacob Keller
2026-03-18 12:05 ` [PATCH net 3/3] e1000e: " Agalakov Daniil
2026-03-18 15:39 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-03-24 23:27 ` Tony Nguyen
2026-03-25 15:02 ` [PATCH net v2] e1000: check return value of e1000_read_eeprom Agalakov Daniil
2026-03-25 15:42 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-03-25 15:16 ` [PATCH net-next v2 0/2] e1000/e1000e: limit endianness conversion to boundary words Agalakov Daniil
2026-03-25 15:16 ` [PATCH net-next v2 1/2] e1000: " Agalakov Daniil
2026-03-26 7:29 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-03-25 15:16 ` [PATCH net-next v2 2/2] e1000e: " Agalakov Daniil
2026-03-26 7:28 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-03-25 16:00 ` [PATCH net v3] e1000: check return value of e1000_read_eeprom Agalakov Daniil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260318120512.687149-2-ade@amicon.ru \
--to=ade@amicon.ru \
--cc=andrew+netdev@lunn.ch \
--cc=anthony.l.nguyen@intel.com \
--cc=davem@davemloft.net \
--cc=dish@amicon.ru \
--cc=edumazet@google.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lvc-project@linuxtesting.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=przemyslaw.kitszel@intel.com \
--cc=rrv@amicon.ru \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox