linux/drivers/i2c/chips
Jean Delvare 9ab1ee2ab7 [PATCH] I2C: New max6875 driver may corrupt EEPROMs
After a careful code analysis on the new max6875 driver
(drivers/i2c/chips/max6875.c), I have come to the conclusion that this
driver may cause EEPROM corruptions if used on random systems.

The EEPROM part of the MAX6875 chip is accessed using rather uncommon
I2C sequences. What is seen by the MAX6875 as reads can be seen by a
standard EEPROM (24C02) as writes. If you check the detection method
used by the driver, you'll find that the first SMBus command it will
send on the bus is i2c_smbus_write_byte_data(client, 0x80, 0x40). For
the MAX6875 it makes an internal pointer point to a specific offset of
the EEPROM waiting for a subsequent read command, so it's not an actual
data write operation, but for a standard EEPROM, this instead means
writing value 0x40 to offset 0x80. Blame Philips and Intel for the
obscure protocol.

Since the MAX6875 and the standard, common 24C02 EEPROMs share two I2C
addresses (0x50 and 0x52), loading the max6875 driver on a system with
standard EEPROMs at either address will trigger a write on these
EEPROMs, which will lead to their corruption if they happen not to be
write protected. This kind of EEPROMs can be found on memory modules
(SPD), ethernet adapters (MAC address), laptops (proprietary data) and
displays (EDID/DDC). Most of these are hopefully write-protected, but
not all of them.

For this reason, I would recommend that the max6875 driver be
neutralized, in a way that nobody can corrupt his/her EEPROMs by just
loading the driver. This means either deleting the driver completely, or
not listing any default address for it. I'd like this to be done before
2.6.13-rc1 is released.

Additionally, the max6875 driver lacks the 24RF08 corruption preventer
present in the eeprom driver, which means that loading this driver in a
system with such a chip would corrupt it as well.

Here is a proposed quick patch addressing the issue, although I wouldn't
mind a complete removal if it makes everyone feel safer. I think Ben
has plans to replace this driver by a much simplified one anyway.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2005-07-11 14:10:36 -07:00
..
Kconfig [PATCH] I2C: minor TPS6501x cleanups 2005-07-11 14:10:36 -07:00
Makefile [PATCH] I2C: Add support for Maxim/Dallas DS1374 Real-Time Clock Chip (1/2) 2005-06-21 21:52:06 -07:00
adm1021.c [PATCH] I2C: driver adm1021: remove die_code 2005-06-21 21:51:58 -07:00
adm1025.c [PATCH] I2C: sysfs names: rename to cpu0_vid, take 3 2005-06-21 21:51:56 -07:00
adm1026.c [PATCH] I2C: rename i2c-sysfs.h to hwmon-sysfs.h 2005-06-21 21:52:05 -07:00
adm1031.c [PATCH] Spelling fixes for drivers/i2c. 2005-06-21 21:51:55 -07:00
adm9240.c [PATCH] I2C: fix up some sysfs device attribute file parameters 2005-06-21 21:51:59 -07:00
asb100.c [PATCH] I2C: Kill common macro abuse in chip drivers 2005-06-21 21:51:57 -07:00
atxp1.c [PATCH] Don't fill up log with atxp1 vcore messages change message 2005-06-29 09:08:00 -07:00
ds1337.c [PATCH] I2C: drivers/i2c/*: #include <linux/config.h> cleanup 2005-06-21 21:51:53 -07:00
ds1374.c [PATCH] I2C: fix ds1374 build 2005-06-21 21:55:00 -07:00
ds1621.c [PATCH] Spelling fixes for drivers/i2c. 2005-06-21 21:51:55 -07:00
eeprom.c [PATCH] I2C: drivers/i2c/*: #include <linux/config.h> cleanup 2005-06-21 21:51:53 -07:00
fscher.c [PATCH] I2C: drivers/i2c/*: #include <linux/config.h> cleanup 2005-06-21 21:51:53 -07:00
fscpos.c [PATCH] Driver Core: drivers/i2c/chips/adm1031.c - lm75.c: update device attribute callbacks 2005-06-20 15:15:33 -07:00
gl518sm.c [PATCH] I2C: drivers/i2c/*: #include <linux/config.h> cleanup 2005-06-21 21:51:53 -07:00
gl520sm.c [PATCH] Driver Core: drivers/i2c/chips/adm1031.c - lm75.c: update device attribute callbacks 2005-06-20 15:15:33 -07:00
isp1301_omap.c [PATCH] I2C: Kill address ranges in non-sensors i2c chip drivers 2005-06-21 21:51:48 -07:00
it87.c [PATCH] I2C: rename i2c-sysfs.h to hwmon-sysfs.h 2005-06-21 21:52:05 -07:00
lm63.c [PATCH] I2C: rename i2c-sysfs.h to hwmon-sysfs.h 2005-06-21 21:52:05 -07:00
lm75.c [PATCH] I2C: drivers/i2c/*: #include <linux/config.h> cleanup 2005-06-21 21:51:53 -07:00
lm75.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
lm77.c [PATCH] I2C: drivers/i2c/*: #include <linux/config.h> cleanup 2005-06-21 21:51:53 -07:00
lm78.c [PATCH] Spelling fixes for drivers/i2c. 2005-06-21 21:51:55 -07:00
lm80.c [PATCH] I2C: drivers/i2c/*: #include <linux/config.h> cleanup 2005-06-21 21:51:53 -07:00
lm83.c [PATCH] I2C: rename i2c-sysfs.h to hwmon-sysfs.h 2005-06-21 21:52:05 -07:00
lm85.c [PATCH] I2C: Kill common macro abuse in chip drivers 2005-06-21 21:51:57 -07:00
lm87.c [PATCH] I2C: drivers/i2c/*: #include <linux/config.h> cleanup 2005-06-21 21:51:53 -07:00
lm90.c [PATCH] I2C: rename i2c-sysfs.h to hwmon-sysfs.h 2005-06-21 21:52:05 -07:00
lm92.c [PATCH] Driver Core: drivers/i2c/chips/lm77.c - max1619.c: update device attribute callbacks 2005-06-20 15:15:33 -07:00
m41t00.c [PATCH] I2C: Kill address ranges in non-sensors i2c chip drivers 2005-06-21 21:51:48 -07:00
max1619.c [PATCH] I2C: drivers/i2c/*: #include <linux/config.h> cleanup 2005-06-21 21:51:53 -07:00
max6875.c [PATCH] I2C: New max6875 driver may corrupt EEPROMs 2005-07-11 14:10:36 -07:00
pc87360.c [PATCH] I2C: drivers/i2c/*: #include <linux/config.h> cleanup 2005-06-21 21:51:53 -07:00
pca9539.c [PATCH] I2C: add new pca9539 driver 2005-06-21 21:52:05 -07:00
pcf8574.c [PATCH] I2C: pcf8574 driver cleanup 2005-06-21 21:52:03 -07:00
pcf8591.c [PATCH] Driver Core: drivers/i2c/chips/pc87360.c - w83627hf.c: update device attribute callbacks 2005-06-20 15:15:33 -07:00
rtc8564.c [PATCH] I2C: rtc8564.c remove duplicate include 2005-06-21 21:51:49 -07:00
rtc8564.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sis5595.c [PATCH] I2C: include of jiffies.h for some i2c drivers 2005-06-21 21:51:57 -07:00
smsc47b397.c [PATCH] Driver Core: drivers/i2c/chips/pc87360.c - w83627hf.c: update device attribute callbacks 2005-06-20 15:15:33 -07:00
smsc47m1.c [PATCH] I2C: Add support for the LPC47M15x and LPC47M192 chips to smsc47m1 2005-06-21 21:51:54 -07:00
tps65010.c [PATCH] I2C: minor TPS6501x cleanups 2005-07-11 14:10:36 -07:00
via686a.c [PATCH] I2C: Coding style cleanups to via686a 2005-07-11 14:10:36 -07:00
w83l785ts.c [PATCH] I2C: drivers/i2c/*: #include <linux/config.h> cleanup 2005-06-21 21:51:53 -07:00
w83627ehf.c [PATCH] I2C: fix up some sysfs device attribute file parameters 2005-06-21 21:51:59 -07:00
w83627hf.c [PATCH] I2C: Setting w83627hf fan divisor 128 fails. 2005-06-21 21:51:56 -07:00
w83781d.c [PATCH] I2C: w83781d: remove non-i2c sensor chips 2005-06-21 21:52:07 -07:00