When employing MCL_FUTURE we don't actually want it to impose
immediate population of malloc()-ed pages. Hence let's set
MCL_ONFAULT everywhere.
Additionally, specify MCL_CURRENT to ensure future memory allocations
on already mapped pages are covered too. (Addresses
https://github.com/systemd/systemd/pull/40319#discussion_r2693726196)
Note that in shutdown the mlockall() is done to avoid keeping swap space
busy, hence a dedicated call w/ MCL_CURRENT and w/o MCL_ONFAULT is made.
return r;
/* A delicious drop of snake oil */
- (void) mlockall(MCL_FUTURE);
+ (void) mlockall(MCL_CURRENT|MCL_FUTURE|MCL_ONFAULT);
cryptsetup_enable_logging(NULL);
volume, source, strempty(arg_type), strempty(arg_cipher));
/* A delicious drop of snake oil */
- (void) mlockall(MCL_FUTURE);
+ (void) mlockall(MCL_CURRENT|MCL_FUTURE|MCL_ONFAULT);
if (key_file && arg_keyfile_erase)
destroy_key_file = key_file; /* let's get this baby erased when we leave */
init_watchdog();
/* Lock us into memory */
- (void) mlockall(MCL_CURRENT|MCL_FUTURE);
+ (void) mlockall(MCL_FUTURE|MCL_ONFAULT);
+ (void) mlockall(MCL_CURRENT);
/* We need to make mounts private so that we can MS_MOVE in unmount_all(). Kernel does not allow
* MS_MOVE when parent mountpoints have shared propagation. */