docs: procs -- Describe /proc/<pid>/map_files entry
PATCH 1/1 docs: procs -- Describe /proc/<pid>/map_files entry
---
Gentlemen, could you please take a look once time permit. Which questions this text raises so I could add more info here (how we use it in criu, ptrace_may_access guards?)
Documentation/filesystems/proc.txt | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)
Documentation/filesystems/proc.txt +23 -0
@@ -42,6 +42,7 @@ Table of Contents 3.6 /proc/<pid>/comm & /proc/<pid>/task/<tid>/comm 3.7 /proc/<pid>/task/<tid>/children - Information about task children 3.8 /proc/<pid>/fdinfo/<fd> - Information about opened file + 3.9 /proc/<pid>/map_files - Information about memory mapped files 4 Configuring procfs 4.1 Mount options
@@ -1763,6 +1764,28 @@ pair provide additional information part with TIMER_ABSTIME option which will be shown in 'settime flags', but 'it_value' still exhibits timer's remaining time. +3.9 /proc/<pid>/map_files - Information about memory mapped files +--------------------------------------------------------------------- +This directory consists of simbolic links which represent memory mapped files +the process is carrying. A typical output is like the following + + | lr-------- 1 root root 64 Jan 27 11:24 333c600000-333c620000 -> /usr/lib64/ld-2.18.so + | lr-------- 1 root root 64 Jan 27 11:24 333c81f000-333c820000 -> /usr/lib64/ld-2.18.so + | lr-------- 1 root root 64 Jan 27 11:24 333c820000-333c821000 -> /usr/lib64/ld-2.18.so + | ... + | lr-------- 1 root root 64 Jan 27 11:24 35d0421000-35d0422000 -> /usr/lib64/libselinux.so.1 + | lr-------- 1 root root 64 Jan 27 11:24 400000-41a000 -> /usr/bin/ls + +The name of a link is virtual memory bounds a particular map exhibits, i.e. +vm_area_struct::vm_start-vm_area_struct::vm_end. + +The main purpose of map_files directory is to be able to retrieve a set of +memory mapped files in a fast way instead of parsing /proc/<pid>/maps or +/proc/<pid>/smaps which contain a way more records. Same time one can open(2) +mappings from the listings of two processes and comparing inodes figure out +which anonymous memory areas are actually shared. + + ------------------------------------------------------------------------------ Configuring procfs ------------------------------------------------------------------------------
Quoted 46 lines · Cyrill Gorcunov
Signed-off-by Cyrill Gorcunov <[email protected]>CC Kees Cook <[email protected]>CC Andrew Morton <[email protected]>CC "Kirill A. Shutemov" <[email protected]>CC Calvin Owens <[email protected]>CC Alexey Dobriyan <[email protected]>CC Oleg Nesterov <[email protected]>CC "Eric W. Biederman" <[email protected]>CC Al Viro <[email protected]>CC Peter Feiner <[email protected]>CC Pavel Emelyanov <[email protected]>---
Gentlemen, could you please take a look once time permit. Which questions this text raises so I could add more info here (how we use it in criu,
ptrace_may_accessguards?)Documentation/filesystems/proc.txt | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)Index:
linux-2.6.git/Documentation/filesystems/proc.txt
===================================================================Documentation/filesystems/proc.txt +11
-0@@ -42,6 +42,7 @@ Table of Contents 3.6 /proc/<pid>/comm & /proc/<pid>/task/<tid>/comm 3.7 /proc/<pid>/task/<tid>/children - Information about task children 3.8 /proc/<pid>/fdinfo/<fd> - Information about opened file + 3.9 /proc/<pid>/map_files - Information about memory mapped files 4 Configuring procfs 4.1 Mount options@@ -1763,6 +1764,28 @@ pair provide additional information part with TIMER_ABSTIME option which will be shown in 'settime flags', but 'it_value' still exhibits timer's remaining time. +3.9 /proc/<pid>/map_files - Information about memory mapped files +--------------------------------------------------------------------- +This directory consists of simbolic links which represent memory mapped files +the process is carrying. A typical output is like the following + + | lr-------- 1 root root 64 Jan 27 11:24 333c600000-333c620000 -> /usr/lib64/ld-2.18.so + | lr-------- 1 root root 64 Jan 27 11:24 333c81f000-333c820000 -> /usr/lib64/ld-2.18.so + | lr-------- 1 root root 64 Jan 27 11:24 333c820000-333c821000 -> /usr/lib64/ld-2.18.so + | ... + | lr-------- 1 root root 64 Jan 27 11:24 35d0421000-35d0422000 -> /usr/lib64/libselinux.so.1
Documentation/filesystems/proc.txt pair provide additional information part · line 1786
Quoted 10 lines
Documentation/filesystems/proc.txt +10
-0+ | lr-------- 1 root root 64 Jan 27 11:24 400000-41a000 -> /usr/bin/ls + +The name of a link is virtual memory bounds a particular map exhibits, i.e. +vm_area_struct::vm_start-vm_area_struct::vm_end. + +The main purpose of map_files directory is to be able to retrieve a set of +memory mapped files in a fast way instead of parsing /proc/<pid>/maps or +/proc/<pid>/smaps which contain a way more records. Same time one can open(2) +mappings from the listings of two processes and comparing inodes figure out +which anonymous memory areas are actually shared.
Thanks for details! I still don't understand how this is used for checkpoint/restore when the mmap offset isn't shown. Can't a process map, say 4K of a file, from different offsets, and it would show up as:
400000-401000 -> /some/file
401000-402000 -> /some/file
but there'd be no way to know how to restore that mapping?
Are these symlinks "regular" symlinks, or are they something more special that bypasses VFS? If it bypasses VFS, I think adding and open check with PTRACE_ATTACH is needed, since now you're able to _modify_ the memory space of the target process instead of just reading it.
-Kees
-Kees
Signature · 2 lines
Kees Cook Chrome OS Security
Quoted 63 lines · Kees Cook
Quoted 46 lines · Cyrill Gorcunov
Signed-off-by Cyrill Gorcunov <[email protected]>CC Kees Cook <[email protected]>CC Andrew Morton <[email protected]>CC "Kirill A. Shutemov" <[email protected]>CC Calvin Owens <[email protected]>CC Alexey Dobriyan <[email protected]>CC Oleg Nesterov <[email protected]>CC "Eric W. Biederman" <[email protected]>CC Al Viro <[email protected]>CC Peter Feiner <[email protected]>CC Pavel Emelyanov <[email protected]>---
Gentlemen, could you please take a look once time permit. Which questions this text raises so I could add more info here (how we use it in criu,
ptrace_may_accessguards?)Documentation/filesystems/proc.txt | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)Index:
linux-2.6.git/Documentation/filesystems/proc.txt
===================================================================Documentation/filesystems/proc.txt +11
-0@@ -42,6 +42,7 @@ Table of Contents 3.6 /proc/<pid>/comm & /proc/<pid>/task/<tid>/comm 3.7 /proc/<pid>/task/<tid>/children - Information about task children 3.8 /proc/<pid>/fdinfo/<fd> - Information about opened file + 3.9 /proc/<pid>/map_files - Information about memory mapped files 4 Configuring procfs 4.1 Mount options@@ -1763,6 +1764,28 @@ pair provide additional information part with TIMER_ABSTIME option which will be shown in 'settime flags', but 'it_value' still exhibits timer's remaining time. +3.9 /proc/<pid>/map_files - Information about memory mapped files +--------------------------------------------------------------------- +This directory consists of simbolic links which represent memory mapped files +the process is carrying. A typical output is like the following + + | lr-------- 1 root root 64 Jan 27 11:24 333c600000-333c620000 -> /usr/lib64/ld-2.18.so + | lr-------- 1 root root 64 Jan 27 11:24 333c81f000-333c820000 -> /usr/lib64/ld-2.18.so + | lr-------- 1 root root 64 Jan 27 11:24 333c820000-333c821000 -> /usr/lib64/ld-2.18.so + | ... + | lr-------- 1 root root 64 Jan 27 11:24 35d0421000-35d0422000 -> /usr/lib64/libselinux.so.1Documentation/filesystems/proc.txt pair provide additional information part · line 1786
Quoted 10 lines
Documentation/filesystems/proc.txt +10
-0+ | lr-------- 1 root root 64 Jan 27 11:24 400000-41a000 -> /usr/bin/ls + +The name of a link is virtual memory bounds a particular map exhibits, i.e. +vm_area_struct::vm_start-vm_area_struct::vm_end. + +The main purpose of map_files directory is to be able to retrieve a set of +memory mapped files in a fast way instead of parsing /proc/<pid>/maps or +/proc/<pid>/smaps which contain a way more records. Same time one can open(2) +mappings from the listings of two processes and comparing inodes figure out +which anonymous memory areas are actually shared.Thanks for details! I still don't understand how this is used for checkpoint/restore when the mmap offset isn't shown. Can't a process map, say 4K of a file, from different offsets, and it would show up as:
Quoted 4 lines
400000-401000 -> /some/file
401000-402000 -> /some/filebut there'd be no way to know how to restore that mapping?
IIUC, it's complementry to data in maps/smap. If the file was closed and unlinked, it's the only way to get file descriptor which points the inode under mapping.
Signature · 1 line
Kirill A. Shutemov
Quoted 12 lines · Kees Cook
Documentation/filesystems/proc.txt pair provide additional information part · line 1786
Quoted 6 lines
Documentation/filesystems/proc.txt +6
-0+ +The main purpose of map_files directory is to be able to retrieve a set of +memory mapped files in a fast way instead of parsing /proc/<pid>/maps or +/proc/<pid>/smaps which contain a way more records. Same time one can open(2) +mappings from the listings of two processes and comparing inodes figure out +which anonymous memory areas are actually shared.Thanks for details! I still don't understand how this is used for checkpoint/restore when the mmap offset isn't shown. Can't a process map, say 4K of a file, from different offsets, and it would show up as:
Quoted 4 lines
400000-401000 -> /some/file
401000-402000 -> /some/filebut there'd be no way to know how to restore that mapping?
In criu we use a few sources of information (ie we scan not only map_files, but have to use /proc/pid/smaps as well which has offset for mapping). So at the end we have all picture under our hands.
Quoted 4 lines
Are these symlinks "regular" symlinks, or are they something more special that bypasses VFS? If it bypasses VFS, I think adding and open check with
PTRACE_ATTACHis needed, since now you're able to _modify_ the memory space of the target process instead of just reading it.
Opening them goes same way as open of /proc/pid/fd/ entries as far as I can tell. This should be enough, or I miss something obvious here? Otherwise opening /proc/pid/fd/ should use PTRACE_ATTACH instead of PTRACE_MODE_READ (as in proc_fd_access_allowed).
Quoted 28 lines · Cyrill Gorcunov
Quoted 12 lines · Kees Cook
Documentation/filesystems/proc.txt pair provide additional information part · line 1786
Quoted 6 lines
Documentation/filesystems/proc.txt +6
-0+ +The main purpose of map_files directory is to be able to retrieve a set of +memory mapped files in a fast way instead of parsing /proc/<pid>/maps or +/proc/<pid>/smaps which contain a way more records. Same time one can open(2) +mappings from the listings of two processes and comparing inodes figure out +which anonymous memory areas are actually shared.Thanks for details! I still don't understand how this is used for checkpoint/restore when the mmap offset isn't shown. Can't a process map, say 4K of a file, from different offsets, and it would show up as:
Quoted 4 lines
400000-401000 -> /some/file
401000-402000 -> /some/filebut there'd be no way to know how to restore that mapping?
In criu we use a few sources of information (ie we scan not only
map_files, but have to use/proc/pid/smapsas well which has offset for mapping). So at the end we have all picture under our hands.Quoted 4 lines
Are these symlinks "regular" symlinks, or are they something more special that bypasses VFS? If it bypasses VFS, I think adding and open check with
PTRACE_ATTACHis needed, since now you're able to _modify_ the memory space of the target process instead of just reading it.
Quoted 4 lines
Opening them goes same way as open of
/proc/pid/fd/entries as far as I can tell. This should be enough, or I miss something obvious here? Otherwise opening/proc/pid/fd/should usePTRACE_ATTACHinstead ofPTRACE_MODE_READ(as inproc_fd_access_allowed).
I wouldn't object to enhancing the check to ATTACH from READ, but I worry what would break on the existing interface.
-Kees
Signature · 2 lines
Kees Cook Chrome OS Security