loop back mounting emits two system calls: mount and mlockall.
mount is obviously needed. mlockall is needed for encryption.
As the result both CAP_SYS_ADMIN and CAP_IPC_LOCK are needed
to do loopback mounting.
The problem is that CAP_IPC_LOCK is always needed through my
command doesn't need encryption.
With the following patch, mount calls mlockall only when
encryption is needed.
Signed-off-by: Masatake YAMATO <jet@gyve.org>
loopinfo64.lo_offset = offset;
-#ifdef MCL_FUTURE
+#ifdef MCL_FUTURE
/*
* Oh-oh, sensitive data coming up. Better lock into memory to prevent
* passwd etc being swapped out and left somewhere on disk.
*/
-
- if(mlockall(MCL_CURRENT | MCL_FUTURE)) {
- perror("memlock");
- fprintf(stderr, _("Couldn't lock into memory, exiting.\n"));
- exit(1);
+ if (loopinfo64.lo_encrypt_type != LO_CRYPT_NONE) {
+ if(mlockall(MCL_CURRENT | MCL_FUTURE)) {
+ perror("memlock");
+ fprintf(stderr, _("Couldn't lock into memory, exiting.\n"));
+ exit(1);
+ }
}
#endif