The loop that checks if the current address is already mapped uses
the same local variable for the chanin node as the newly allocated
chain node so the allocated chain node gets over written.

Added a new local variable for the loop that checks the address
---
 cpukit/posix/src/mmap.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/cpukit/posix/src/mmap.c b/cpukit/posix/src/mmap.c
index d9b663d..e53cafa 100644
--- a/cpukit/posix/src/mmap.c
+++ b/cpukit/posix/src/mmap.c
@@ -114,6 +114,7 @@ void *mmap(
 {
   struct stat     sb;
   mmap_mapping   *mapping;
+  mmap_mapping   *current_mapping;
   ssize_t         r;
   rtems_libio_t  *iop;
   bool            map_fixed;
@@ -319,9 +320,9 @@ void *mmap(
        * error. POSIX allows us to also return successfully by unmapping
        * the overlapping prior mappings.
        */
-      mapping = (mmap_mapping*) node;
-      if ( ( addr >= mapping->addr ) &&
-           ( addr < ( mapping->addr + mapping->len )) ) {
+      current_mapping = (mmap_mapping*) node;
+      if ( ( addr >= current_mapping->addr ) &&
+           ( addr < ( current_mapping->addr + current_mapping->len )) ) {
         free( mapping );
         mmap_mappings_lock_release( );
         errno = ENXIO;
--
1.9.1

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to