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