Re: [PATCH] proc.5: Fix caps needed to read map_files contents

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Younes,

On 1/17/23 19:03, Younes Manton wrote:
> imachug@xxxxxxxxx testing CRIU noticed that the documentation for
> proc's map_files directory with respect to CAP_CHECKPOINT_RESTORE and
> namespaces appears to be wrong. The text reads:
> 
>> since Linux 5.9, the reading process must have
>> either CAP_SYS_ADMIN or CAP_CHECKPOINT_RESTORE in the user
>> namespace where it resides.
> 
> The reporter noted that the user actually needs the capabilities in
> the initial user namespace, not in the namespace the process resides
> in. As far as I can tell this appears to be the case.
> 
> The text was introduced in 167f94b707148bcd46fe39c7d4ebfada9eed88f6
> and refers to kernel commit 12886f8ab10ce6a09af1d92535d49c81aaa215a8.
> 
> The code and message in the kernel commit refer to the initial user namespace.
> 
> An example program and shell session verifying the existing behaviour
> follows:
> 
> $ uname -r
> 5.15.0-52-generic
> 
> $ ./test.sh
> + make rmf
> cc rmf.c -o rmf
> + sudo setcap cap_checkpoint_restore-eip ./rmf
> + ./rmf
> 19582: =
> Can't read map_files/ entry: Operation not permitted
> + sudo setcap cap_checkpoint_restore+eip ./rmf
> + ./rmf
> 19588: cap_checkpoint_restore=ep
> + unshare --user ./rmf
> 19591: cap_checkpoint_restore=ep
> Can't read map_files/ entry: Operation not permitted
> 
> $ cat rmf.c
> 
> int main(int argc, char **argv)
> {
>     DIR *mfd;
>     struct dirent *mfe;
>     struct stat mfstat;
>     int ret;
> 
>     system("getpcaps $PPID");
> 
>     chdir("/proc/self/map_files");
>     mfd = opendir(".");
>     do {
>         mfe = readdir(mfd);
>     } while (!strcmp(mfe->d_name, ".") || !strcmp(mfe->d_name, ".."));
>     if (ret = stat(mfe->d_name, &mfstat))
>         perror("Can't read map_files/ entry");
>     closedir(mfd);
> 
>     return ret;
> }
> 
> Signed-off-by: Younes Manton <younes.m@xxxxxxxxx>

Thanks a lot for the detailed commit message.  And sorry for the delay!
Patch applied.

Cheers,
Alex

> ---
>  man5/proc.5 | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/man5/proc.5 b/man5/proc.5
> index 1217cea89..981310562 100644
> --- a/man5/proc.5
> +++ b/man5/proc.5
> @@ -1267,7 +1267,7 @@ since Linux 5.9, the reading process must have either
>  .B CAP_SYS_ADMIN
>  or
>  .B CAP_CHECKPOINT_RESTORE
> -in the user namespace where it resides.
> +in the initial (i.e. root) user namespace.
>  .TP
>  .IR /proc/ pid /maps
>  A file containing the currently mapped memory regions and their access

-- 
<http://www.alejandro-colomar.es/>
GPG key fingerprint: A9348594CE31283A826FBDD8D57633D441E25BB5

Attachment: OpenPGP_signature
Description: OpenPGP digital signature


[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux