From 34ff3a700a0b972ab5b16727fa3015dc4ed0a4c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Fri, 1 Aug 2025 14:22:21 +0200 Subject: [PATCH] Emulate -EINVAL for MADV_GUARD_{INSTALL,REMOVE}. Fixes #3997 --- src/kernel_supplement.h | 6 ++++++ src/record_syscall.cc | 4 ++++ src/test/madvise_misc.c | 2 ++ src/test/util.h | 6 ++++++ 4 files changed, 18 insertions(+) diff --git a/src/kernel_supplement.h b/src/kernel_supplement.h index 490b433ae95..9fb2b069508 100644 --- a/src/kernel_supplement.h +++ b/src/kernel_supplement.h @@ -281,6 +281,12 @@ struct rr_input_mask { #ifndef MADV_COLLAPSE #define MADV_COLLAPSE 25 #endif +#ifndef MADV_GUARD_INSTALL +#define MADV_GUARD_INSTALL 102 +#endif +#ifndef MADV_GUARD_REMOVE +#define MADV_GUARD_REMOVE 103 +#endif #ifndef BUS_MCEERR_AR #define BUS_MCEERR_AR 4 diff --git a/src/record_syscall.cc b/src/record_syscall.cc index bee9f5506d6..363f94f3a81 100644 --- a/src/record_syscall.cc +++ b/src/record_syscall.cc @@ -5245,6 +5245,10 @@ static Switchable rec_prepare_syscall_arch(RecordTask* t, t->set_regs(r); break; } + case MADV_GUARD_INSTALL: + case MADV_GUARD_REMOVE: + syscall_state.emulate_result(-EINVAL); + break; default: syscall_state.expect_errno = EINVAL; break; diff --git a/src/test/madvise_misc.c b/src/test/madvise_misc.c index bda2ea0650e..a6b0fe576fc 100644 --- a/src/test/madvise_misc.c +++ b/src/test/madvise_misc.c @@ -29,6 +29,8 @@ int main(void) { DO_MADVISE(MADV_POPULATE_READ); DO_MADVISE(MADV_POPULATE_WRITE); DO_MADVISE(MADV_COLLAPSE); + DO_MADVISE(MADV_GUARD_INSTALL); + DO_MADVISE(MADV_GUARD_REMOVE); atomic_puts("EXIT-SUCCESS"); diff --git a/src/test/util.h b/src/test/util.h index e4c4aa52d83..f7a751b79a1 100644 --- a/src/test/util.h +++ b/src/test/util.h @@ -497,6 +497,12 @@ struct open_how { #ifndef MADV_COLLAPSE #define MADV_COLLAPSE 25 #endif +#ifndef MADV_GUARD_INSTALL +#define MADV_GUARD_INSTALL 102 +#endif +#ifndef MADV_GUARD_REMOVE +#define MADV_GUARD_REMOVE 103 +#endif #ifndef F_OFD_GETLK #define F_OFD_GETLK 36