Thread (5 messages) 5 messages, 4 authors, 4d ago

Re: [PATCH] net: ethernet: ax88796: initialize all fields of eeprom_93cx6 struct

From: David Laight <hidden>
Date: 2026-07-24 16:05:13
Also in: lkml

On Fri, 24 Jul 2026 17:04:03 +0200
Stanislaw Gruszka [off-list ref] wrote:
On Fri, Jul 24, 2026 at 02:57:33PM +0200, Andrew Lunn wrote:
quoted
On Fri, Jul 24, 2026 at 10:34:11AM +0200, stf_xl@wp.pl wrote:  
quoted
From: Stanislaw Gruszka <stf_xl@wp.pl>

Commit 7738a7ab9d12 ("misc: eeprom: eeprom_93cx6: Add quirk for extra
read clock cycle") added extra 'quirk' field to struct eeprom_93cx6,
which change how the data is read.

Some existing users of eeprom_93cx6, including ax88796 driver, allocate
the structure on the stack without initialization of all the fields.
As a result, the added quirk field has undefined value, what can
randomly cause reading wrong data from the EEPROM.

Fix by using designated initialization.  
The problem with this solution is that the next time another member is
added, it breaks again.  
I did not initialized 'quirks' explicitly in the patch.
quoted
struct eeprom_93cx6 eeprom = {0};

Will initialise all fields to 0, and then you can use the existing
code to set those fields as needed.  
This form:
		struct eeprom_93cx6 eeprom = {
			.data = ei_local,
			.register_read = ax_eeprom_register_read,
			.register_write = ax_eeprom_register_write,
			.width = PCI_EEPROM_WIDTH_93C56,
		};

will also initialize _all_ remaining fields to zero.

I believe it is guaranteed by C standard.
Unless there are unions or padding...

	David
Regards
Stanislaw
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help