good for merge

On Sun, 2010-05-16 at 18:40 +1000, Angus Salkeld wrote:
> 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

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

Reply via email to