iio: Check fd against != -1 and not > 0 and avoid leaks during error handling
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
@@ -109,7 +109,7 @@ mraa_iio_get_channel_data(mraa_iio_context dev)
|
|||||||
if (strcmp(ent->d_name + strlen(ent->d_name) - strlen("_index"), "_index") == 0) {
|
if (strcmp(ent->d_name + strlen(ent->d_name) - strlen("_index"), "_index") == 0) {
|
||||||
snprintf(buf, MAX_SIZE, IIO_SYSFS_DEVICE "%d/" IIO_SCAN_ELEM "/%s", dev->num, ent->d_name);
|
snprintf(buf, MAX_SIZE, IIO_SYSFS_DEVICE "%d/" IIO_SCAN_ELEM "/%s", dev->num, ent->d_name);
|
||||||
fd = open(buf, O_RDONLY);
|
fd = open(buf, O_RDONLY);
|
||||||
if (fd > 0) {
|
if (fd != -1) {
|
||||||
if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
|
if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -123,7 +123,7 @@ mraa_iio_get_channel_data(mraa_iio_context dev)
|
|||||||
// grab the type of the buffer
|
// grab the type of the buffer
|
||||||
snprintf(buf, MAX_SIZE, "%stype", str);
|
snprintf(buf, MAX_SIZE, "%stype", str);
|
||||||
fd = open(buf, O_RDONLY);
|
fd = open(buf, O_RDONLY);
|
||||||
if (fd > 0) {
|
if (fd != -1) {
|
||||||
read(fd, readbuf, 31 * sizeof(char));
|
read(fd, readbuf, 31 * sizeof(char));
|
||||||
ret = sscanf(readbuf, "%ce:%c%u/%u>>%u", &shortbuf, &signchar, &chan->bits_used,
|
ret = sscanf(readbuf, "%ce:%c%u/%u>>%u", &shortbuf, &signchar, &chan->bits_used,
|
||||||
&padint, &chan->shift);
|
&padint, &chan->shift);
|
||||||
@@ -153,10 +153,11 @@ mraa_iio_get_channel_data(mraa_iio_context dev)
|
|||||||
// grab the enable flag of channel
|
// grab the enable flag of channel
|
||||||
snprintf(buf, MAX_SIZE, "%sen", str);
|
snprintf(buf, MAX_SIZE, "%sen", str);
|
||||||
fd = open(buf, O_RDONLY);
|
fd = open(buf, O_RDONLY);
|
||||||
if (fd > 0) {
|
if (fd != -1) {
|
||||||
if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
|
if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
|
||||||
syslog(LOG_ERR, "iio: Failed to read a sensible value from sysfs");
|
syslog(LOG_ERR, "iio: Failed to read a sensible value from sysfs");
|
||||||
free(str);
|
free(str);
|
||||||
|
close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
chan->enabled = (int) strtol(readbuf, NULL, 10);
|
chan->enabled = (int) strtol(readbuf, NULL, 10);
|
||||||
@@ -392,8 +393,9 @@ mraa_iio_get_event_data(mraa_iio_context dev)
|
|||||||
event->name = strdup(ent->d_name);
|
event->name = strdup(ent->d_name);
|
||||||
snprintf(buf, MAX_SIZE, IIO_SYSFS_DEVICE "%d/" IIO_EVENTS "/%s", dev->num, ent->d_name);
|
snprintf(buf, MAX_SIZE, IIO_SYSFS_DEVICE "%d/" IIO_EVENTS "/%s", dev->num, ent->d_name);
|
||||||
fd = open(buf, O_RDONLY);
|
fd = open(buf, O_RDONLY);
|
||||||
if (fd > 0) {
|
if (fd != -1) {
|
||||||
if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
|
if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
|
||||||
|
close(fd);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
close(fd);
|
close(fd);
|
||||||
@@ -578,8 +580,9 @@ mraa_iio_update_channels(mraa_iio_context dev)
|
|||||||
if (strcmp(ent->d_name + strlen(ent->d_name) - strlen("_index"), "_index") == 0) {
|
if (strcmp(ent->d_name + strlen(ent->d_name) - strlen("_index"), "_index") == 0) {
|
||||||
snprintf(buf, MAX_SIZE, IIO_SYSFS_DEVICE "%d/" IIO_SCAN_ELEM "/%s", dev->num, ent->d_name);
|
snprintf(buf, MAX_SIZE, IIO_SYSFS_DEVICE "%d/" IIO_SCAN_ELEM "/%s", dev->num, ent->d_name);
|
||||||
fd = open(buf, O_RDONLY);
|
fd = open(buf, O_RDONLY);
|
||||||
if (fd > 0) {
|
if (fd != -1) {
|
||||||
if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
|
if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
|
||||||
|
close(fd);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
chan_num = ((int) strtol(readbuf, NULL, 10));
|
chan_num = ((int) strtol(readbuf, NULL, 10));
|
||||||
@@ -593,7 +596,7 @@ mraa_iio_update_channels(mraa_iio_context dev)
|
|||||||
// grab the enable flag of channel
|
// grab the enable flag of channel
|
||||||
snprintf(buf, MAX_SIZE, "%sen", str);
|
snprintf(buf, MAX_SIZE, "%sen", str);
|
||||||
fd = open(buf, O_RDONLY);
|
fd = open(buf, O_RDONLY);
|
||||||
if (fd > 0) {
|
if (fd != -1) {
|
||||||
if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
|
if (read(fd, readbuf, 2 * sizeof(char)) != 2) {
|
||||||
syslog(LOG_ERR, "iio: Failed to read a sensible value from sysfs");
|
syslog(LOG_ERR, "iio: Failed to read a sensible value from sysfs");
|
||||||
free(str);
|
free(str);
|
||||||
@@ -609,6 +612,9 @@ mraa_iio_update_channels(mraa_iio_context dev)
|
|||||||
// clean up str var
|
// clean up str var
|
||||||
free(str);
|
free(str);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ mraa_iio_detect()
|
|||||||
device->num = i;
|
device->num = i;
|
||||||
snprintf(filepath, 64, "/sys/bus/iio/devices/iio:device%d/name", i);
|
snprintf(filepath, 64, "/sys/bus/iio/devices/iio:device%d/name", i);
|
||||||
fd = open(filepath, O_RDONLY);
|
fd = open(filepath, O_RDONLY);
|
||||||
if (fd > 0) {
|
if (fd != -1) {
|
||||||
len = read(fd, &name, 64);
|
len = read(fd, &name, 64);
|
||||||
if (len > 1) {
|
if (len > 1) {
|
||||||
// remove any trailing CR/LF symbols
|
// remove any trailing CR/LF symbols
|
||||||
|
|||||||
Reference in New Issue
Block a user