lkml.org 
[lkml]   [2004]   [Jan]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
SubjectRe: [PATCH] i2c driver fixes for 2.6.1
Date
From
ChangeSet 1.1474.98.16, 2004/01/15 17:28:54-08:00, khali@linux-fr.org

[PATCH] I2C: restore correct vaio handling in eeprom driver

Here is a patch to the eeprom driver in 2.6.1 that changes the way Vaio
eeproms are handled. In 2.6.1, the eeprom is readable only by root,
which isn't consistent with the 2.4 driver which simple hides (i.e.
fills it with zeroes) the first row (16 bytes) of the eeprom to regular
users.

The patch restores a similar behaviour in the 2.6 driver.


drivers/i2c/chips/eeprom.c | 27 ++++++++++++++-------------
1 files changed, 14 insertions(+), 13 deletions(-)


diff -Nru a/drivers/i2c/chips/eeprom.c b/drivers/i2c/chips/eeprom.c
--- a/drivers/i2c/chips/eeprom.c Mon Jan 19 15:30:17 2004
+++ b/drivers/i2c/chips/eeprom.c Mon Jan 19 15:30:17 2004
@@ -27,6 +27,7 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/slab.h>
+#include <linux/sched.h>
#include <linux/i2c.h>
#include <linux/i2c-sensor.h>

@@ -62,6 +63,7 @@
char valid; /* !=0 if following fields are valid */
unsigned long last_updated; /* In jiffies */
u8 data[EEPROM_SIZE]; /* Register values */
+ enum eeprom_nature nature;
};


@@ -127,7 +129,16 @@
if (off + count > EEPROM_SIZE)
count = EEPROM_SIZE - off;

- memcpy(buf, &data->data[off], count);
+ /* Hide Vaio security settings to regular users (16 first bytes) */
+ if (data->nature == VAIO && off < 16 && !capable(CAP_SYS_ADMIN)) {
+ int in_row1 = 16 - off;
+ memset(buf, 0, in_row1);
+ if (count - in_row1 > 0)
+ memcpy(buf + in_row1, &data->data[16], count - in_row1);
+ } else {
+ memcpy(buf, &data->data[off], count);
+ }
+
return count;
}

@@ -151,7 +162,6 @@
int i, cs;
struct i2c_client *new_client;
struct eeprom_data *data;
- enum eeprom_nature nature = UNKNOWN;
int err = 0;

/* Make sure we aren't probing the ISA bus!! This is just a safety check
@@ -199,6 +209,7 @@
goto exit_kfree;
}

+ data->nature = UNKNOWN;
/* Detect the Vaio nature of EEPROMs.
We use the "PCG-" prefix as the signature. */
if (address == 0x57) {
@@ -206,17 +217,7 @@
i2c_smbus_read_byte_data(new_client, 0x81) == 'C' &&
i2c_smbus_read_byte_data(new_client, 0x82) == 'G' &&
i2c_smbus_read_byte_data(new_client, 0x83) == '-')
- nature = VAIO;
- }
-
- /* If this is a VIAO, then we only allow root to read from this file,
- as BIOS passwords can be present here in plaintext */
- switch (nature) {
- case VAIO:
- eeprom_attr.attr.mode = S_IRUSR;
- break;
- default:
- eeprom_attr.attr.mode = S_IRUGO;
+ data->nature = VAIO;
}

/* Fill in the remaining client fields */
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:00    [W:0.065 / U:0.184 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site