Signed-off-by: Angus Salkeld <[email protected]>
---
 exec/coroipcs.c |   29 +++++++++++++++++++++++++----
 lib/coroipcc.c  |   16 ++++++++++++++++
 2 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/exec/coroipcs.c b/exec/coroipcs.c
index b2d780c..a2deb8a 100644
--- a/exec/coroipcs.c
+++ b/exec/coroipcs.c
@@ -263,13 +263,21 @@ memory_map (
 
        unlink (path);
 
-       if (fd >= 0) {
-               res = ftruncate (fd, bytes);
+       if (fd == -1) {
+               return (-1);
        }
+
+       res = ftruncate (fd, bytes);
+       if (res == -1) {
+               close (fd);
+               return (-1);
+       }
+
        addr_orig = mmap (NULL, bytes, PROT_NONE,
                MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
 
        if (addr_orig == MAP_FAILED) {
+               close (fd);
                return (-1);
        }
 
@@ -277,6 +285,7 @@ memory_map (
                MAP_FIXED | MAP_SHARED, fd, 0);
 
        if (addr != addr_orig) {
+               close (fd);
                return (-1);
        }
 #ifdef COROSYNC_BSD
@@ -306,13 +315,20 @@ circular_memory_map (
 
        unlink (path);
 
-       if (fd >= 0) {
-               res = ftruncate (fd, bytes);
+       if (fd == -1) {
+               return (-1);
        }
+       res = ftruncate (fd, bytes);
+       if (res == -1) {
+               close (fd);
+               return (-1);
+       }
+
        addr_orig = mmap (NULL, bytes << 1, PROT_NONE,
                MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
 
        if (addr_orig == MAP_FAILED) {
+               close (fd);
                return (-1);
        }
 
@@ -320,6 +336,7 @@ circular_memory_map (
                MAP_FIXED | MAP_SHARED, fd, 0);
 
        if (addr != addr_orig) {
+               close (fd);
                return (-1);
        }
 #ifdef COROSYNC_BSD
@@ -329,6 +346,10 @@ circular_memory_map (
        addr = mmap (((char *)addr_orig) + bytes,
                   bytes, PROT_READ | PROT_WRITE,
                   MAP_FIXED | MAP_SHARED, fd, 0);
+       if (addr == MAP_FAILED) {
+               close (fd);
+               return (-1);
+       }
 #ifdef COROSYNC_BSD
        madvise(((char *)addr_orig) + bytes, bytes, MADV_NOSYNC);
 #endif
diff --git a/lib/coroipcc.c b/lib/coroipcc.c
index c66d687..c453a7a 100644
--- a/lib/coroipcc.c
+++ b/lib/coroipcc.c
@@ -300,11 +300,16 @@ circular_memory_map (char *path, const char *file, void 
**buf, size_t bytes)
        }
 
        res = ftruncate (fd, bytes);
+       if (res == -1) {
+               close (fd);
+               return (-1);
+       }
 
        addr_orig = mmap (NULL, bytes << 1, PROT_NONE,
                MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
 
        if (addr_orig == MAP_FAILED) {
+               close (fd);
                return (-1);
        }
 
@@ -312,6 +317,7 @@ circular_memory_map (char *path, const char *file, void 
**buf, size_t bytes)
                MAP_FIXED | MAP_SHARED, fd, 0);
 
        if (addr != addr_orig) {
+               close (fd);
                return (-1);
        }
 #ifdef COROSYNC_BSD
@@ -321,6 +327,10 @@ circular_memory_map (char *path, const char *file, void 
**buf, size_t bytes)
        addr = mmap (((char *)addr_orig) + bytes,
                   bytes, PROT_READ | PROT_WRITE,
                   MAP_FIXED | MAP_SHARED, fd, 0);
+       if (addr == MAP_FAILED) {
+               close (fd);
+               return (-1);
+       }
 #ifdef COROSYNC_BSD
        madvise(((char *)addr_orig) + bytes, bytes, MADV_NOSYNC);
 #endif
@@ -372,11 +382,16 @@ memory_map (char *path, const char *file, void **buf, 
size_t bytes)
        }
 
        res = ftruncate (fd, bytes);
+       if (res == -1) {
+               close (fd);
+               return (-1);
+       }
 
        addr_orig = mmap (NULL, bytes, PROT_NONE,
                MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
 
        if (addr_orig == MAP_FAILED) {
+               close (fd);
                return (-1);
        }
 
@@ -384,6 +399,7 @@ memory_map (char *path, const char *file, void **buf, 
size_t bytes)
                MAP_FIXED | MAP_SHARED, fd, 0);
 
        if (addr != addr_orig) {
+               close (fd);
                return (-1);
        }
 #ifdef COROSYNC_BSD
-- 
1.6.6.1

_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to