lightrec: handle a case of ignored MAP_FIXED_NOREPLACE
authornotaz <notasas@gmail.com>
Wed, 11 Oct 2023 18:22:17 +0000 (21:22 +0300)
committernotaz <notasas@gmail.com>
Wed, 11 Oct 2023 18:22:17 +0000 (21:22 +0300)
libpcsxcore/lightrec/mem.c

index b5caa78..9134d89 100644 (file)
@@ -95,11 +95,16 @@ static int lightrec_mmap_ram(bool hugetlb)
                base = supported_io_bases[i];
 
                for (j = 0; j < 4; j++) {
-                       map = mmap_huge((void *)(base + j * 0x200000),
-                                       0x200000, PROT_READ | PROT_WRITE,
+                       void *base_ptr = (void *)(base + j * 0x200000);
+                       map = mmap_huge(base_ptr, 0x200000, PROT_READ | PROT_WRITE,
                                        MAP_SHARED | MAP_FIXED_NOREPLACE, memfd, 0);
                        if (map == MAP_FAILED)
                                break;
+                       // some systems ignore MAP_FIXED_NOREPLACE
+                       if (map != base_ptr) {
+                               munmap(map, 0x200000);
+                               break;
+                       }
                }
 
                /* Impossible to map using this base */