From a5d13670f485694327290e7dcce388f50efd1927 Mon Sep 17 00:00:00 2001 From: Brendan Le Foll Date: Wed, 15 Jul 2015 13:50:28 +0100 Subject: [PATCH] mraa.c: Fix buffer overfow in mraa_find_i2c_bus All files in sysfs are 4K minimum so allocate a 4k buffer to hold the result - even if it'll never be that big Signed-off-by: Brendan Le Foll --- src/mraa.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mraa.c b/src/mraa.c index 6a4914e..739f371 100644 --- a/src/mraa.c +++ b/src/mraa.c @@ -453,7 +453,7 @@ mraa_count_files(const char* path, const struct stat* sb, int flag, struct FTW* int mraa_find_i2c_bus(const char* devname, int startfrom) { - char path[64], value[64]; + char path[64]; int fd; int i = startfrom; int ret = -1; @@ -493,15 +493,23 @@ mraa_find_i2c_bus(const char* devname, int startfrom) close(fd); break; } + char* value = malloc(size); + if (value == NULL) { + syslog(LOG_ERR, "mraa: failed to allocate memory for i2c file"); + close(fd); + break; + } ssize_t r = read(fd, value, size); if (r > 0) { if (strcasestr(value, devname) != NULL) { + free(value); close(fd); return i; } } else { syslog(LOG_ERR, "mraa: sysfs i2cdev failed"); } + free(value); close(fd); } } else {