[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 12/13] linux-user: Fix shmdt
From: |
Richard Henderson |
Subject: |
[PULL 12/13] linux-user: Fix shmdt |
Date: |
Fri, 1 Sep 2023 13:42:50 -0700 |
If the shm region is not mapped at shmaddr, EINVAL.
Do not unmap the region until the syscall succeeds.
Use mmap_reserve_or_unmap to preserve reserved_va semantics.
Tested-by: Helge Deller <deller@gmx.de>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
linux-user/mmap.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/linux-user/mmap.c b/linux-user/mmap.c
index f45b2d307c..44116c014b 100644
--- a/linux-user/mmap.c
+++ b/linux-user/mmap.c
@@ -1102,14 +1102,25 @@ abi_long target_shmdt(abi_ulong shmaddr)
/* shmdt pointers are always untagged */
WITH_MMAP_LOCK_GUARD() {
- for (int i = 0; i < N_SHM_REGIONS; ++i) {
+ int i;
+
+ for (i = 0; i < N_SHM_REGIONS; ++i) {
if (shm_regions[i].in_use && shm_regions[i].start == shmaddr) {
- shm_regions[i].in_use = false;
- page_set_flags(shmaddr, shmaddr + shm_regions[i].size - 1, 0);
break;
}
}
+ if (i == N_SHM_REGIONS) {
+ return -TARGET_EINVAL;
+ }
+
rv = get_errno(shmdt(g2h_untagged(shmaddr)));
+ if (rv == 0) {
+ abi_ulong size = shm_regions[i].size;
+
+ shm_regions[i].in_use = false;
+ page_set_flags(shmaddr, shmaddr + size - 1, 0);
+ mmap_reserve_or_unmap(shmaddr, size);
+ }
}
return rv;
}
--
2.34.1
- [PULL 00/13] linux-user patch queue, Richard Henderson, 2023/09/01
- [PULL 03/13] linux-user: Emulate /proc/cpuinfo for Alpha, Richard Henderson, 2023/09/01
- [PULL 01/13] linux-user: Split out cpu/target_proc.h, Richard Henderson, 2023/09/01
- [PULL 02/13] linux-user: Emulate /proc/cpuinfo on aarch64 and arm, Richard Henderson, 2023/09/01
- [PULL 06/13] linux-user: Adjust brk for load_bias, Richard Henderson, 2023/09/01
- [PULL 04/13] util/selfmap: Use dev_t and ino_t in MapInfo, Richard Henderson, 2023/09/01
- [PULL 05/13] linux-user: Use walk_memory_regions for open_self_maps, Richard Henderson, 2023/09/01
- [PULL 08/13] linux-user: Emulate the Anonymous: keyword in /proc/self/smaps, Richard Henderson, 2023/09/01
- [PULL 09/13] linux-user: Remove ELF_START_MMAP and image_info.start_mmap, Richard Henderson, 2023/09/01
- [PULL 07/13] linux-user: Show heap address in /proc/pid/maps, Richard Henderson, 2023/09/01
- [PULL 12/13] linux-user: Fix shmdt,
Richard Henderson <=
- [PULL 11/13] linux-user: Use WITH_MMAP_LOCK_GUARD in target_{shmat, shmdt}, Richard Henderson, 2023/09/01
- [PULL 10/13] linux-user: Move shmat and shmdt implementations to mmap.c, Richard Henderson, 2023/09/01
- [PULL 13/13] linux-user: Track shm regions with an interval tree, Richard Henderson, 2023/09/01
- Re: [PULL 00/13] linux-user patch queue, Stefan Hajnoczi, 2023/09/06