[LTP] [PATCH v2] mmap_24-1: Change vm.max_map_count if needed
Li Wang
liwang@redhat.com
Fri May 9 14:08:44 CEST 2025
On Fri, May 9, 2025 at 7:32 PM Martin Doucha <mdoucha@suse.cz> wrote:
>
> If vm.max_map_count system parameter is too high, mmap24-1 may get
> killed by OOM. Set the parameter to a reasonable low value so that
> mmap() quickly fails as expected.
>
> Signed-off-by: Martin Doucha <mdoucha@suse.cz>
> Reviewed-by: Petr Vorel <pvorel@suse.cz>
> Reviewed-by: Cyril Hrubis <chrubis@suse.cz>
> ---
>
> Changes since v1:
> - Print warning if procfile cannot be opened
> - Use fopen(..., "r") instead of "r+" in main()
>
> .../conformance/interfaces/mmap/24-1.c | 37 ++++++++++++++++++-
> 1 file changed, 36 insertions(+), 1 deletion(-)
>
> diff --git a/testcases/open_posix_testsuite/conformance/interfaces/mmap/24-1.c b/testcases/open_posix_testsuite/conformance/interfaces/mmap/24-1.c
> index 6cc8349e1..49673d603 100644
> --- a/testcases/open_posix_testsuite/conformance/interfaces/mmap/24-1.c
> +++ b/testcases/open_posix_testsuite/conformance/interfaces/mmap/24-1.c
As I pointed in the previous thread, we should update the code
comments to explicitly state that the failure is caused by exceeding
the maximum number of memory mappings (vm.max_map_count),
rather than overall memory exhaustion.
Without this clarification, readers may be misled by the current comments
and mistakenly assume that the code is intended to test total memory
exhaustion, which is not the case.
Anyway, patch itself looks good.
And I vote for merging this before a new release.
Reviewed-by: Li Wang <liwang@redhat.com>
> @@ -31,12 +31,42 @@
> #include <stdint.h>
> #include "posixtest.h"
>
> +#define MAX_MAP_COUNT_PATH "/proc/sys/vm/max_map_count"
> +#define MAP_COUNT_LIMIT 65530
> +
> +void proc_write_val(const char *path, size_t val)
> +{
> + FILE *procfile;
> +
> + procfile = fopen(path, "r+");
> +
> + if (!procfile) {
> + printf("Warning: Could not open %s\n", path);
> + return;
> + }
> +
> + fprintf(procfile, "%zu", val);
> + fclose(procfile);
> +}
> +
> int main(void)
> {
> char tmpfname[256];
> void *pa;
> - size_t len;
> + size_t len, max_map_count = 0;
> int fd;
> + FILE *procfile;
> +
> + /* Change vm.max_map_count to avoid OOM */
> + procfile = fopen(MAX_MAP_COUNT_PATH, "r");
> +
> + if (procfile) {
> + fscanf(procfile, "%zu", &max_map_count);
> + fclose(procfile);
> + }
> +
> + if (max_map_count > MAP_COUNT_LIMIT)
> + proc_write_val(MAX_MAP_COUNT_PATH, MAP_COUNT_LIMIT);
>
> /* Size of the shared memory object */
> size_t shm_size = 1024;
> @@ -78,5 +108,10 @@ int main(void)
>
> close(fd);
> printf("Test FAILED: Did not get ENOMEM as expected\n");
> +
> + /* Restore original vm.max_map_count */
> + if (max_map_count > MAP_COUNT_LIMIT)
> + proc_write_val(MAX_MAP_COUNT_PATH, max_map_count);
> +
> return PTS_FAIL;
> }
> --
> 2.49.0
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
>
--
Regards,
Li Wang
More information about the ltp
mailing list