* [PATCH v2 0/2] fix MAP_DROPPABLE not supported errno
@ 2026-04-02 23:59 Anthony Yznaga
2026-04-02 23:59 ` [PATCH v2 1/2] mm: fix mmap errno value when MAP_DROPPABLE is not supported Anthony Yznaga
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Anthony Yznaga @ 2026-04-02 23:59 UTC (permalink / raw)
To: linux-mm, linux-kernel, linux-kselftest
Cc: akpm, david, ljs, Liam.Howlett, vbabka, rppt, surenb, mhocko,
jannh, pfalcato, Jason, shuah
Mark Brown reported seeing a regression in -next on 32 bit arm with the
mlock selftests. Before exiting and marking the tests failed, the following
message was logged after an attempt to create a MAP_DROPPABLE mapping:
Bail out! mmap error: Unknown error 524
It turns out error 524 is ENOTSUPP which is an error that userspace is not
supposed to see, but it indicates in this instance that MAP_DROPPABLE is
not supported.
The first patch changes the errno returned to EOPNOTSUPP. The second patch
is a second version of a prior patch to introduce selftests to verify
locking behavior with droppable mappings with the additonal change to skip
the tests when MAP_DROPPABLE is not supported.
v2:
- Remove unnecessary mlock() call from selftest (DavidH)
- Change tests to not exit on failure (DavidH)
Anthony Yznaga (2):
mm: fix mmap errno value when MAP_DROPPABLE is not supported
selftests/mm: verify droppable mappings cannot be locked
mm/mmap.c | 2 +-
tools/testing/selftests/mm/mlock2-tests.c | 87 ++++++++++++++++++++---
2 files changed, 79 insertions(+), 10 deletions(-)
--
2.47.3
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH v2 1/2] mm: fix mmap errno value when MAP_DROPPABLE is not supported 2026-04-02 23:59 [PATCH v2 0/2] fix MAP_DROPPABLE not supported errno Anthony Yznaga @ 2026-04-02 23:59 ` Anthony Yznaga 2026-04-03 18:16 ` Vlastimil Babka (SUSE) ` (2 more replies) 2026-04-02 23:59 ` [PATCH v2 2/2] selftests/mm: verify droppable mappings cannot be locked Anthony Yznaga 2026-04-03 17:37 ` [PATCH v2 0/2] fix MAP_DROPPABLE not supported errno Andrew Morton 2 siblings, 3 replies; 8+ messages in thread From: Anthony Yznaga @ 2026-04-02 23:59 UTC (permalink / raw) To: linux-mm, linux-kernel, linux-kselftest Cc: akpm, david, ljs, Liam.Howlett, vbabka, rppt, surenb, mhocko, jannh, pfalcato, Jason, shuah On configs where MAP_DROPPABLE is not supported (currently any 32-bit config except for PPC32), mmap fails with errno set to ENOTSUPP. However, ENOTSUPP is not a standard error value that userspace knows about. The acceptable userspace-visible errno to use is EOPNOTSUPP. checkpatch.pl has a warning to this effect. Fixes: 9651fcedf7b9 ("mm: add MAP_DROPPABLE for designating always lazily freeable mappings") Cc: <stable@vger.kernel.org> Signed-off-by: Anthony Yznaga <anthony.yznaga@oracle.com> --- mm/mmap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/mmap.c b/mm/mmap.c index 5754d1c36462..2311ae7c2ff4 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -504,7 +504,7 @@ unsigned long do_mmap(struct file *file, unsigned long addr, break; case MAP_DROPPABLE: if (VM_DROPPABLE == VM_NONE) - return -ENOTSUPP; + return -EOPNOTSUPP; /* * A locked or stack area makes no sense to be droppable. * -- 2.47.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] mm: fix mmap errno value when MAP_DROPPABLE is not supported 2026-04-02 23:59 ` [PATCH v2 1/2] mm: fix mmap errno value when MAP_DROPPABLE is not supported Anthony Yznaga @ 2026-04-03 18:16 ` Vlastimil Babka (SUSE) 2026-04-06 8:35 ` Pedro Falcato 2026-04-07 10:05 ` Lorenzo Stoakes (Oracle) 2 siblings, 0 replies; 8+ messages in thread From: Vlastimil Babka (SUSE) @ 2026-04-03 18:16 UTC (permalink / raw) To: Anthony Yznaga, linux-mm, linux-kernel, linux-kselftest Cc: akpm, david, ljs, Liam.Howlett, rppt, surenb, mhocko, jannh, pfalcato, Jason, shuah On 4/3/26 01:59, Anthony Yznaga wrote: > On configs where MAP_DROPPABLE is not supported (currently any 32-bit > config except for PPC32), mmap fails with errno set to ENOTSUPP. > However, ENOTSUPP is not a standard error value that userspace knows > about. The acceptable userspace-visible errno to use is EOPNOTSUPP. > checkpatch.pl has a warning to this effect. > > Fixes: 9651fcedf7b9 ("mm: add MAP_DROPPABLE for designating always lazily freeable mappings") > Cc: <stable@vger.kernel.org> > Signed-off-by: Anthony Yznaga <anthony.yznaga@oracle.com> Acked-by: Vlastimil Babka (SUSE) <vbabka@kernel.org> > --- > mm/mmap.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/mmap.c b/mm/mmap.c > index 5754d1c36462..2311ae7c2ff4 100644 > --- a/mm/mmap.c > +++ b/mm/mmap.c > @@ -504,7 +504,7 @@ unsigned long do_mmap(struct file *file, unsigned long addr, > break; > case MAP_DROPPABLE: > if (VM_DROPPABLE == VM_NONE) > - return -ENOTSUPP; > + return -EOPNOTSUPP; > /* > * A locked or stack area makes no sense to be droppable. > * ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] mm: fix mmap errno value when MAP_DROPPABLE is not supported 2026-04-02 23:59 ` [PATCH v2 1/2] mm: fix mmap errno value when MAP_DROPPABLE is not supported Anthony Yznaga 2026-04-03 18:16 ` Vlastimil Babka (SUSE) @ 2026-04-06 8:35 ` Pedro Falcato 2026-04-07 10:05 ` Lorenzo Stoakes (Oracle) 2 siblings, 0 replies; 8+ messages in thread From: Pedro Falcato @ 2026-04-06 8:35 UTC (permalink / raw) To: Anthony Yznaga Cc: linux-mm, linux-kernel, linux-kselftest, akpm, david, ljs, Liam.Howlett, vbabka, rppt, surenb, mhocko, jannh, Jason, shuah On Thu, Apr 02, 2026 at 04:59:32PM -0700, Anthony Yznaga wrote: > On configs where MAP_DROPPABLE is not supported (currently any 32-bit > config except for PPC32), mmap fails with errno set to ENOTSUPP. > However, ENOTSUPP is not a standard error value that userspace knows > about. The acceptable userspace-visible errno to use is EOPNOTSUPP. > checkpatch.pl has a warning to this effect. > > Fixes: 9651fcedf7b9 ("mm: add MAP_DROPPABLE for designating always lazily freeable mappings") > Cc: <stable@vger.kernel.org> > Signed-off-by: Anthony Yznaga <anthony.yznaga@oracle.com> FWIW I'm not a huge fan of EOPNOTSUPP here, because there's no precedent for EOPNOTSUPP (it would perhaps normally be EINVAL, but the kernel does recognize the flag, it just can't implement it...) Anyway, Reviewed-by: Pedro Falcato <pfalcato@suse.de> -- Pedro ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] mm: fix mmap errno value when MAP_DROPPABLE is not supported 2026-04-02 23:59 ` [PATCH v2 1/2] mm: fix mmap errno value when MAP_DROPPABLE is not supported Anthony Yznaga 2026-04-03 18:16 ` Vlastimil Babka (SUSE) 2026-04-06 8:35 ` Pedro Falcato @ 2026-04-07 10:05 ` Lorenzo Stoakes (Oracle) 2 siblings, 0 replies; 8+ messages in thread From: Lorenzo Stoakes (Oracle) @ 2026-04-07 10:05 UTC (permalink / raw) To: Anthony Yznaga Cc: linux-mm, linux-kernel, linux-kselftest, akpm, david, Liam.Howlett, vbabka, rppt, surenb, mhocko, jannh, pfalcato, Jason, shuah On Thu, Apr 02, 2026 at 04:59:32PM -0700, Anthony Yznaga wrote: > On configs where MAP_DROPPABLE is not supported (currently any 32-bit > config except for PPC32), mmap fails with errno set to ENOTSUPP. > However, ENOTSUPP is not a standard error value that userspace knows > about. The acceptable userspace-visible errno to use is EOPNOTSUPP. > checkpatch.pl has a warning to this effect. Hmm, weird it was missed on initial patchset, but checkpatch.pl is unfortunately overly noisy about silly things quite often so things can be missed fairly easily. > > Fixes: 9651fcedf7b9 ("mm: add MAP_DROPPABLE for designating always lazily freeable mappings") > Cc: <stable@vger.kernel.org> > Signed-off-by: Anthony Yznaga <anthony.yznaga@oracle.com> Nice catch, LGTM, so: Reviewed-by: Lorenzo Stoakes (Oracle) <ljs@kernel.org> > --- > mm/mmap.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/mmap.c b/mm/mmap.c > index 5754d1c36462..2311ae7c2ff4 100644 > --- a/mm/mmap.c > +++ b/mm/mmap.c > @@ -504,7 +504,7 @@ unsigned long do_mmap(struct file *file, unsigned long addr, > break; > case MAP_DROPPABLE: > if (VM_DROPPABLE == VM_NONE) > - return -ENOTSUPP; > + return -EOPNOTSUPP; > /* > * A locked or stack area makes no sense to be droppable. > * > -- > 2.47.3 > Cheers, Lorenzo ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 2/2] selftests/mm: verify droppable mappings cannot be locked 2026-04-02 23:59 [PATCH v2 0/2] fix MAP_DROPPABLE not supported errno Anthony Yznaga 2026-04-02 23:59 ` [PATCH v2 1/2] mm: fix mmap errno value when MAP_DROPPABLE is not supported Anthony Yznaga @ 2026-04-02 23:59 ` Anthony Yznaga 2026-04-03 19:31 ` Andrew Morton 2026-04-03 17:37 ` [PATCH v2 0/2] fix MAP_DROPPABLE not supported errno Andrew Morton 2 siblings, 1 reply; 8+ messages in thread From: Anthony Yznaga @ 2026-04-02 23:59 UTC (permalink / raw) To: linux-mm, linux-kernel, linux-kselftest Cc: akpm, david, ljs, Liam.Howlett, vbabka, rppt, surenb, mhocko, jannh, pfalcato, Jason, shuah For configs that support MAP_DROPPABLE verify that a mapping created with MAP_DROPPABLE cannot be locked via mlock(), and that it will not be locked if it's created after mlockall(MCL_FUTURE). Signed-off-by: Anthony Yznaga <anthony.yznaga@oracle.com> --- tools/testing/selftests/mm/mlock2-tests.c | 87 ++++++++++++++++++++--- 1 file changed, 78 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/mm/mlock2-tests.c b/tools/testing/selftests/mm/mlock2-tests.c index b474f2b20def..353d0e5daa44 100644 --- a/tools/testing/selftests/mm/mlock2-tests.c +++ b/tools/testing/selftests/mm/mlock2-tests.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 #define _GNU_SOURCE #include <sys/mman.h> +#include <linux/mman.h> #include <stdint.h> #include <unistd.h> #include <string.h> @@ -163,14 +164,17 @@ static int lock_check(unsigned long addr) return (vma_rss == vma_size); } -static int unlock_lock_check(char *map) +static int unlock_lock_check(char *map, bool mlock_supported) { - if (is_vmflag_set((unsigned long)map, LOCKED)) { + if (!is_vmflag_set((unsigned long)map, LOCKED)) + return 0; + + if (mlock_supported) ksft_print_msg("VMA flag %s is present on page 1 after unlock\n", LOCKED); - return 1; - } + else + ksft_print_msg("VMA flag %s is present on an unsupported VMA\n", LOCKED); - return 0; + return 1; } static void test_mlock_lock(void) @@ -196,7 +200,7 @@ static void test_mlock_lock(void) ksft_exit_fail_msg("munlock(): %s\n", strerror(errno)); } - ksft_test_result(!unlock_lock_check(map), "%s: Unlocked\n", __func__); + ksft_test_result(!unlock_lock_check(map, true), "%s: Unlocked\n", __func__); munmap(map, 2 * page_size); } @@ -296,7 +300,7 @@ static void test_munlockall0(void) ksft_exit_fail_msg("munlockall(): %s\n", strerror(errno)); } - ksft_test_result(!unlock_lock_check(map), "%s: No locked memory\n", __func__); + ksft_test_result(!unlock_lock_check(map, true), "%s: No locked memory\n", __func__); munmap(map, 2 * page_size); } @@ -336,7 +340,70 @@ static void test_munlockall1(void) ksft_exit_fail_msg("munlockall() %s\n", strerror(errno)); } - ksft_test_result(!unlock_lock_check(map), "%s: No locked memory\n", __func__); + ksft_test_result(!unlock_lock_check(map, true), "%s: No locked memory\n", __func__); + munmap(map, 2 * page_size); +} + +/* + * Droppable memory should not be lockable. + */ +static void test_mlock_droppable(void) +{ + char *map; + unsigned long page_size = getpagesize(); + + /* + * Ensure MCL_FUTURE is not set. + */ + if (munlockall()) { + ksft_test_result_fail("munlockall() %s\n", strerror(errno)); + return; + } + + map = mmap(NULL, 2 * page_size, PROT_READ | PROT_WRITE, + MAP_ANONYMOUS | MAP_DROPPABLE, -1, 0); + if (map == MAP_FAILED) { + if (errno == EOPNOTSUPP) + ksft_test_result_skip("%s: MAP_DROPPABLE not supported\n", __func__); + else + ksft_test_result_fail("mmap error: %s\n", strerror(errno)); + return; + } + + if (mlock2_(map, 2 * page_size, 0)) + ksft_test_result_fail("mlock2(0): %s\n", strerror(errno)); + else + ksft_test_result(!unlock_lock_check(map, false), + "%s: droppable memory not locked\n", __func__); + + munmap(map, 2 * page_size); +} + +static void test_mlockall_future_droppable(void) +{ + char *map; + unsigned long page_size = getpagesize(); + + if (mlockall(MCL_CURRENT | MCL_FUTURE)) { + ksft_test_result_fail("mlockall(MCL_CURRENT | MCL_FUTURE): %s\n", strerror(errno)); + return; + } + + map = mmap(NULL, 2 * page_size, PROT_READ | PROT_WRITE, + MAP_ANONYMOUS | MAP_DROPPABLE, -1, 0); + + if (map == MAP_FAILED) { + if (errno == EOPNOTSUPP) + ksft_test_result_skip("%s: MAP_DROPPABLE not supported\n", __func__); + else + ksft_test_result_fail("mmap error: %s\n", strerror(errno)); + return; + } + + ksft_test_result(!unlock_lock_check(map, false), "%s: droppable memory not locked\n", + __func__); + + munlockall(); munmap(map, 2 * page_size); } @@ -442,7 +509,7 @@ int main(int argc, char **argv) munmap(map, size); - ksft_set_plan(13); + ksft_set_plan(15); test_mlock_lock(); test_mlock_onfault(); @@ -451,6 +518,8 @@ int main(int argc, char **argv) test_lock_onfault_of_present(); test_vma_management(true); test_mlockall(); + test_mlock_droppable(); + test_mlockall_future_droppable(); ksft_finished(); } -- 2.47.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 2/2] selftests/mm: verify droppable mappings cannot be locked 2026-04-02 23:59 ` [PATCH v2 2/2] selftests/mm: verify droppable mappings cannot be locked Anthony Yznaga @ 2026-04-03 19:31 ` Andrew Morton 0 siblings, 0 replies; 8+ messages in thread From: Andrew Morton @ 2026-04-03 19:31 UTC (permalink / raw) To: Anthony Yznaga Cc: linux-mm, linux-kernel, linux-kselftest, david, ljs, Liam.Howlett, vbabka, rppt, surenb, mhocko, jannh, pfalcato, Jason, shuah On Thu, 2 Apr 2026 16:59:33 -0700 Anthony Yznaga <anthony.yznaga@oracle.com> wrote: > For configs that support MAP_DROPPABLE verify that a mapping created > with MAP_DROPPABLE cannot be locked via mlock(), and that it will not > be locked if it's created after mlockall(MCL_FUTURE). There are a few queries from the AI reviewbot; https://sashiko.dev/#/patchset/20260402235933.10588-1-anthony.yznaga@oracle.com ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 0/2] fix MAP_DROPPABLE not supported errno 2026-04-02 23:59 [PATCH v2 0/2] fix MAP_DROPPABLE not supported errno Anthony Yznaga 2026-04-02 23:59 ` [PATCH v2 1/2] mm: fix mmap errno value when MAP_DROPPABLE is not supported Anthony Yznaga 2026-04-02 23:59 ` [PATCH v2 2/2] selftests/mm: verify droppable mappings cannot be locked Anthony Yznaga @ 2026-04-03 17:37 ` Andrew Morton 2 siblings, 0 replies; 8+ messages in thread From: Andrew Morton @ 2026-04-03 17:37 UTC (permalink / raw) To: Anthony Yznaga Cc: linux-mm, linux-kernel, linux-kselftest, david, ljs, Liam.Howlett, vbabka, rppt, surenb, mhocko, jannh, pfalcato, Jason, shuah, Mark Brown On Thu, 2 Apr 2026 16:59:31 -0700 Anthony Yznaga <anthony.yznaga@oracle.com> wrote: > Mark Brown reported seeing a regression in -next on 32 bit arm with the > mlock selftests. Before exiting and marking the tests failed, the following > message was logged after an attempt to create a MAP_DROPPABLE mapping: > > Bail out! mmap error: Unknown error 524 > > It turns out error 524 is ENOTSUPP which is an error that userspace is not > supposed to see, but it indicates in this instance that MAP_DROPPABLE is > not supported. > > The first patch changes the errno returned to EOPNOTSUPP. The second patch > is a second version of a prior patch to introduce selftests to verify > locking behavior with droppable mappings with the additonal change to skip > the tests when MAP_DROPPABLE is not supported. Thanks, I updated mm.git's mm-unstable branch to this version. In [1/2] I added Mark's Reported.by:. We had David's Acked-by: on v1's [1/2] patch so I reinstated that. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-04-07 10:06 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-04-02 23:59 [PATCH v2 0/2] fix MAP_DROPPABLE not supported errno Anthony Yznaga 2026-04-02 23:59 ` [PATCH v2 1/2] mm: fix mmap errno value when MAP_DROPPABLE is not supported Anthony Yznaga 2026-04-03 18:16 ` Vlastimil Babka (SUSE) 2026-04-06 8:35 ` Pedro Falcato 2026-04-07 10:05 ` Lorenzo Stoakes (Oracle) 2026-04-02 23:59 ` [PATCH v2 2/2] selftests/mm: verify droppable mappings cannot be locked Anthony Yznaga 2026-04-03 19:31 ` Andrew Morton 2026-04-03 17:37 ` [PATCH v2 0/2] fix MAP_DROPPABLE not supported errno Andrew Morton
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox