The following patch adds a few missing statements related to error checking.

Signed-off-by: Sotirios-Efstathios Maneas <sman...@cs.toronto.edu>
---
 lib/libf2fs.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/lib/libf2fs.c b/lib/libf2fs.c
index a1f8beb..4ef9d7f 100644
--- a/lib/libf2fs.c
+++ b/lib/libf2fs.c
@@ -541,9 +541,8 @@ const char *get_rootdev()
 #else
        struct stat sb;
        int fd, ret;
-       char buf[32];
+       char buf[32] = {0};
        char *uevent, *ptr;
-
        static char rootdev[PATH_MAX + 1];
 
        if (stat("/", &sb) == -1)
@@ -553,7 +552,6 @@ const char *get_rootdev()
                major(sb.st_dev), minor(sb.st_dev));
 
        fd = open(buf, O_RDONLY);
-
        if (fd < 0)
                return NULL;
 
@@ -565,18 +563,29 @@ const char *get_rootdev()
                return NULL;
        }
 
-       uevent = malloc(ret + 1);
+       uevent = calloc(ret + 1, 1);
+       if (!uevent) {
+               close(fd);
+               return NULL;
+       }
-       uevent[ret] = '\0';
 
        ret = read(fd, uevent, ret);
        close(fd);
+       if (ret <= 0) {
+               free(uevent);
+               return NULL;
+       }
 
        ptr = strstr(uevent, "DEVNAME");
-       if (!ptr)
+       if (!ptr) {
+               free(uevent);
                return NULL;
+       }
 
-       ret = sscanf(ptr, "DEVNAME=%s\n", buf);
+       sscanf(ptr, "DEVNAME=%s\n", buf);
        snprintf(rootdev, PATH_MAX + 1, "/dev/%s", buf);
+       free(uevent);
 
        return rootdev;
 #endif
-- 
2.10.1

Kind regards,
Stathis Maneas




_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to