intel_de3815.c: Add error handling to seeks and avoid reading past buffer size
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
@@ -126,15 +126,31 @@ mraa_intel_de3815()
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
int suc = 0;
|
int suc = 0;
|
||||||
for (i = 0; i < 9; i++) {
|
for (i = 0; i < 9; i++) {
|
||||||
|
off_t size, err;
|
||||||
char path[MAX_SIZE];
|
char path[MAX_SIZE];
|
||||||
|
char value[MAX_SIZE];
|
||||||
snprintf(path, MAX_SIZE, "/sys/class/i2c-dev/i2c-%u/name", i);
|
snprintf(path, MAX_SIZE, "/sys/class/i2c-dev/i2c-%u/name", i);
|
||||||
fd = open(path, O_RDONLY);
|
fd = open(path, O_RDONLY);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
off_t size = lseek(fd, 0, SEEK_END);
|
size = lseek(fd, 0, SEEK_END);
|
||||||
char value[MAX_SIZE];
|
if (size < 0) {
|
||||||
lseek(fd, 0, SEEK_SET);
|
syslog(LOG_WARNING, "mraa: failed to seek i2c filename file");
|
||||||
|
close(fd);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
err = lseek(fd, 0, SEEK_SET);
|
||||||
|
if (err < 0) {
|
||||||
|
syslog(LOG_WARNING, "mraa: failed to seek i2c filename file");
|
||||||
|
close(fd);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (size >= MAX_SIZE) {
|
||||||
|
syslog(LOG_NOTICE, "mraa: i2c filename file too big, skipping");
|
||||||
|
close(fd);
|
||||||
|
break;
|
||||||
|
}
|
||||||
ssize_t r = read(fd, value, size);
|
ssize_t r = read(fd, value, size);
|
||||||
if (r > 0) {
|
if (r > 0) {
|
||||||
if (strcasestr(value, I2CNAME) != NULL) {
|
if (strcasestr(value, I2CNAME) != NULL) {
|
||||||
|
|||||||
Reference in New Issue
Block a user