From: Jon Wilson Date: Wed, 24 Sep 2025 01:52:28 +0000 (-0700) Subject: linux-user: Support MADV_DONTDUMP, MADV_DODUMP X-Git-Tag: v10.2.0-rc1~63^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a79fbb6988f6aad36a64ef9fd1a5fc226a8e4130;p=thirdparty%2Fqemu.git linux-user: Support MADV_DONTDUMP, MADV_DODUMP Set and clear PAGE_DONTDUMP, and honor that in vma_dump_size. Signed-off-by: Jon Wilson [rth: Use new page_set_flags semantics; also handle DODUMP] Signed-off-by: Richard Henderson --- diff --git a/include/exec/page-protection.h b/include/exec/page-protection.h index 5a18f98a3a..c50ce57d15 100644 --- a/include/exec/page-protection.h +++ b/include/exec/page-protection.h @@ -30,7 +30,11 @@ #define PAGE_PASSTHROUGH 0x40 /* For linux-user, indicates that the page is MAP_ANON. */ #define PAGE_ANON 0x0080 - +/* + * For linux-user, indicates that the page should not be + * included in a core dump. + */ +#define PAGE_DONTDUMP 0x0100 /* Target-specific bits that will be used via page_get_flags(). */ #define PAGE_TARGET_1 0x0200 #define PAGE_TARGET_2 0x0400 diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 1370ec59be..0002d5be2f 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -2127,8 +2127,8 @@ static void bswap_note(struct elf_note *en) */ static size_t vma_dump_size(vaddr start, vaddr end, int flags) { - /* The area must be readable. */ - if (!(flags & PAGE_READ)) { + /* The area must be readable and dumpable. */ + if (!(flags & PAGE_READ) || (flags & PAGE_DONTDUMP)) { return 0; } diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 527ca5f211..423c77856a 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -1248,6 +1248,12 @@ abi_long target_madvise(abi_ulong start, abi_ulong len_in, int advice) */ mmap_lock(); switch (advice) { + case MADV_DONTDUMP: + page_set_flags(start, start + len - 1, PAGE_DONTDUMP, 0); + break; + case MADV_DODUMP: + page_set_flags(start, start + len - 1, 0, PAGE_DONTDUMP); + break; case MADV_WIPEONFORK: case MADV_KEEPONFORK: ret = -EINVAL;