1124386Snjl// SPDX-License-Identifier: GPL-2.0 2124386Snjl#include <sys/mman.h> 3124386Snjl#include <stdio.h> 4124386Snjl#include <unistd.h> 5124386Snjl#include <string.h> 6124386Snjl#include <sys/time.h> 7124386Snjl#include <sys/resource.h> 8124386Snjl#include "../kselftest.h" 9124386Snjl 10124386Snjlstatic void test_limit(void) 11124386Snjl{ 12124386Snjl struct rlimit lims; 13124386Snjl void *map; 14124386Snjl 15124386Snjl if (getrlimit(RLIMIT_MEMLOCK, &lims)) 16124386Snjl ksft_exit_fail_msg("getrlimit: %s\n", strerror(errno)); 17124386Snjl 18124386Snjl if (mlockall(MCL_ONFAULT | MCL_FUTURE)) 19124386Snjl ksft_exit_fail_msg("mlockall: %s\n", strerror(errno)); 20124386Snjl 21124386Snjl map = mmap(NULL, 2 * lims.rlim_max, PROT_READ | PROT_WRITE, 22124386Snjl MAP_PRIVATE | MAP_ANONYMOUS | MAP_POPULATE, -1, 0); 23124386Snjl 24124386Snjl ksft_test_result(map == MAP_FAILED, "The map failed respecting mlock limits\n"); 25124386Snjl 26124386Snjl if (map != MAP_FAILED) 27124386Snjl munmap(map, 2 * lims.rlim_max); 28124386Snjl munlockall(); 29124386Snjl} 30124386Snjl 31124386Snjlint main(int argc, char **argv) 32124386Snjl{ 33124386Snjl ksft_print_header(); 34129882Sphk ksft_set_plan(1); 35124386Snjl 36124386Snjl if (!getuid()) 37193530Sjkim ksft_test_result_skip("The test must be run from a normal user\n"); 38193530Sjkim else 39124386Snjl test_limit(); 40124386Snjl 41138825Snjl ksft_finished(); 42138825Snjl} 43138825Snjl