dmidecode-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dmidecode] [PATCH 2/2] Fix error paths in mem_chunk


From: Jean Delvare
Subject: [dmidecode] [PATCH 2/2] Fix error paths in mem_chunk
Date: Fri, 2 Oct 2015 08:07:46 +0200

Use a common error path in function mem_chunk, to make sure it does
not leak memory and does not leave an opened file descriptor behind,
without duplicating the cleaning code.
---
 util.c |   24 ++++++++++--------------
 1 file changed, 10 insertions(+), 14 deletions(-)

--- dmidecode.orig/util.c       2015-09-29 11:37:24.746191083 +0200
+++ dmidecode/util.c    2015-09-29 11:53:21.107230164 +0200
@@ -166,7 +166,7 @@ void *mem_chunk(off_t base, size_t len,
        if ((p = malloc(len)) == NULL)
        {
                perror("malloc");
-               return NULL;
+               goto out;
        }
 
 #ifdef USE_MMAP
@@ -174,8 +174,7 @@ void *mem_chunk(off_t base, size_t len,
        {
                fprintf(stderr, "%s: ", devmem);
                perror("stat");
-               free(p);
-               return NULL;
+               goto err_free;
        }
 
        /*
@@ -186,8 +185,7 @@ void *mem_chunk(off_t base, size_t len,
        {
                fprintf(stderr, "mmap: Can't map beyond end of file %s\n",
                        devmem);
-               free(p);
-               return NULL;
+               goto err_free;
        }
 
 #ifdef _SC_PAGESIZE
@@ -220,19 +218,17 @@ try_read:
        {
                fprintf(stderr, "%s: ", devmem);
                perror("lseek");
-               free(p);
-               return NULL;
+               goto err_free;
        }
 
-       if (myread(fd, p, len, devmem) == -1)
-       {
-               free(p);
-               return NULL;
-       }
+       if (myread(fd, p, len, devmem) == 0)
+               goto out;
+
+err_free:
+       free(p);
+       p = NULL;
 
-#ifdef USE_MMAP
 out:
-#endif
        if (close(fd) == -1)
                perror(devmem);
 

-- 
Jean Delvare
SUSE L3 Support



reply via email to

[Prev in Thread] Current Thread [Next in Thread]