[dm-devel] [PATCH 4/6] kpartx: Improve reliability of find_loop_by_file()
Bart Van Assche
bart.vanassche at wdc.com
Thu Mar 1 19:29:33 UTC 2018
Avoid that the strchr() call in this function examines uninitialized
data on the stack. This patch avoids that Coverity reports the following:
CID 173252: Error handling issues (CHECKED_RETURN)
"read(int, void *, size_t)" returns the number of bytes read, but it is ignored.
Signed-off-by: Bart Van Assche <bart.vanassche at wdc.com>
---
kpartx/lopart.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/kpartx/lopart.c b/kpartx/lopart.c
index 02b29e8cf91d..69c1eda1cc5c 100644
--- a/kpartx/lopart.c
+++ b/kpartx/lopart.c
@@ -64,7 +64,7 @@ char *find_loop_by_file(const char *filename)
DIR *dir;
struct dirent *dent;
char dev[64], *found = NULL, *p;
- int fd;
+ int fd, bytes_read;
struct stat statbuf;
struct loop_info loopinfo;
const char VIRT_BLOCK[] = "/sys/devices/virtual/block";
@@ -86,14 +86,15 @@ char *find_loop_by_file(const char *filename)
if (fd < 0)
continue;
- if (read(fd, dev, sizeof(dev)) <= 0) {
+ bytes_read = read(fd, dev, sizeof(dev) - 1);
+ if (bytes_read <= 0) {
close(fd);
continue;
}
close(fd);
- dev[sizeof(dev)-1] = '\0';
+ dev[bytes_read] = '\0';
p = strchr(dev, '\n');
if (p != NULL)
*p = '\0';
--
2.16.2
More information about the dm-devel
mailing list