aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc/rtc-s3c.c
diff options
context:
space:
mode:
authorBertrand Achard <ba@cykian.net>2013-04-29 16:19:26 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2013-04-29 18:28:28 -0700
commitbc48b9023b0ee7ec4ad0d6b3332804d3b3e77fa8 (patch)
tree8e5a0f78bff1aa581681a0f338602b932c612b8f /drivers/rtc/rtc-s3c.c
parentdrivers/rtc/rtc-tegra.c: use managed rtc_device_register() (diff)
downloadlinux-dev-bc48b9023b0ee7ec4ad0d6b3332804d3b3e77fa8.tar.xz
linux-dev-bc48b9023b0ee7ec4ad0d6b3332804d3b3e77fa8.zip
drivers/rtc/rtc-ds1307.c: long block operations bugfix
The rtc-ds1307 driver does not properly handle block operations bigger than 32 bytes in either of the two modes supported (SMbus native, or emulated if not supported by the SMbus platform driver). It also does not properly handle userland-supplied input (block operation length) through sysfs and may suffer a type of buffer overrun. The driver has been modified with proper input validation, buffer sizes, and now splits block transfers bigger than 32 bytes into separate transfers. Explanation : Buffer size allocated is I2C_SMBUS_BLOCK_MAX which equals to 32 as per the SMbus spec. Reads and write may be up to 56 bytes (to the NVRAM). This patch allocated a 255 byte buffer, the maximum allowable (address is an u8). It's not only a buffer problem, SMbus only supports up to 32 bytes transfer at once, so it's needed to split bigger transfers. Patch successfully tested on 3.2.27; cleanly applies on 3.7-rc4. [akpm@linux-foundation.org: rework code to avoid 80-column overflows] Signed-off-by: Bertrand Achard <ba@cykian.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions