Change the process limits for RLIMIT_MEMLOCK to RLIM_INFINITY when
executing :mincore_resid The default process limits in FreeBSD is 64kB for unprivileged users, which empirically is too low to run the :mincore_resid testcase. Process limits are inherited, so even though the default limit for root users is RLIM_INFINITY, the inherited limit with "sudo" with the default login.conf will be 64kB. Use setrlimit to set rlim_max for RLIMIT_MEMLOCK to RLIM_INFINITY to avoid ENOMEM issues when calling mlock to wire the mmap'ed address space. setrlimit requires root access to increase rlim_max, so require root privileges when running the test Discovered when executing the tests with sudo, e.g. "sudo kyua test -k /usr/tests/lib/libc/sys/Kyuafile mincore_test" MFC after: 2 weeks
This commit is contained in:
parent
b1dd83d1d0
commit
cc7734cbac
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=309837
@ -144,6 +144,9 @@ ATF_TC_WITH_CLEANUP(mincore_resid);
|
||||
ATF_TC_HEAD(mincore_resid, tc)
|
||||
{
|
||||
atf_tc_set_md_var(tc, "descr", "Test page residency with mincore(2)");
|
||||
#ifdef __FreeBSD__
|
||||
atf_tc_set_md_var(tc, "require.user", "root");
|
||||
#endif
|
||||
}
|
||||
|
||||
ATF_TC_BODY(mincore_resid, tc)
|
||||
@ -155,6 +158,13 @@ ATF_TC_BODY(mincore_resid, tc)
|
||||
struct rlimit rlim;
|
||||
|
||||
ATF_REQUIRE(getrlimit(RLIMIT_MEMLOCK, &rlim) == 0);
|
||||
#ifdef __FreeBSD__
|
||||
/*
|
||||
* Bump the mlock limit to unlimited so the rest of the testcase
|
||||
* passes instead of failing on the mlock call.
|
||||
*/
|
||||
rlim.rlim_max = RLIM_INFINITY;
|
||||
#endif
|
||||
rlim.rlim_cur = rlim.rlim_max;
|
||||
ATF_REQUIRE(setrlimit(RLIMIT_MEMLOCK, &rlim) == 0);
|
||||
|
||||
@ -206,8 +216,9 @@ ATF_TC_BODY(mincore_resid, tc)
|
||||
"might be low on memory");
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
ATF_REQUIRE_MSG(mlock(addr, npgs * page) == 0, "mlock failed: %s",
|
||||
strerror(errno));
|
||||
if (mlock(addr, npgs * page) == -1 && errno != ENOMEM)
|
||||
atf_tc_skip("could not wire anonymous test area, system might "
|
||||
"be low on memory");
|
||||
#endif
|
||||
ATF_REQUIRE(check_residency(addr, npgs) == npgs);
|
||||
ATF_REQUIRE(munmap(addr, npgs * page) == 0);
|
||||
|
Loading…
Reference in New Issue
Block a user