diff options
author | Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com> | 2013-10-28 13:05:15 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-10-29 19:24:33 -0400 |
commit | 7c65e29250a3154cac18b527b6ccfc61f8f08c58 (patch) | |
tree | d9f6f559b4f85249eba7b59b30aed91a905bf9ec /drivers/misc/eeprom | |
parent | 95f774c5268843e78fdb732cd4f27e510bbbba83 (diff) |
misc/at24: avoid infinite loop on write()
This change fixes a problem of infinite zero byte write() without
an error status, if there is an attempt to write a file bigger than
EEPROM size over sysfs interface.
Signed-off-by: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
Cc: Wolfram Sang <w.sang@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/misc/eeprom')
-rw-r--r-- | drivers/misc/eeprom/at24.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c index 5d4fd69d04ca..94b8a3324319 100644 --- a/drivers/misc/eeprom/at24.c +++ b/drivers/misc/eeprom/at24.c | |||
@@ -428,6 +428,9 @@ static ssize_t at24_bin_write(struct file *filp, struct kobject *kobj, | |||
428 | { | 428 | { |
429 | struct at24_data *at24; | 429 | struct at24_data *at24; |
430 | 430 | ||
431 | if (unlikely(off >= attr->size)) | ||
432 | return -EFBIG; | ||
433 | |||
431 | at24 = dev_get_drvdata(container_of(kobj, struct device, kobj)); | 434 | at24 = dev_get_drvdata(container_of(kobj, struct device, kobj)); |
432 | return at24_write(at24, buf, off, count); | 435 | return at24_write(at24, buf, off, count); |
433 | } | 436 | } |