mirror-linux/fs
Lorenzo Stoakes 8e2f2aeb8b fs/proc/task_mmu: add guard region bit to pagemap
Patch series "fs/proc/task_mmu: add guard region bit to pagemap".

Currently there is no means of determining whether a given page in a
mapping range is designated a guard region (as installed via madvise()
using the MADV_GUARD_INSTALL flag).

This is generally not an issue, but in some instances users may wish to
determine whether this is the case.

This series adds this ability via /proc/$pid/pagemap, updates the
documentation and adds a self test to assert that this functions
correctly.


This patch (of 2):

Currently there is no means by which users can determine whether a given
page in memory is in fact a guard region, that is having had the
MADV_GUARD_INSTALL madvise() flag applied to it.

This is intentional, as to provide this information in VMA metadata would
contradict the intent of the feature (providing a means to change fault
behaviour at a page table level rather than a VMA level), and would
require VMA metadata operations to scan page tables, which is
unacceptable.

In many cases, users have no need to reflect and determine what regions
have been designated guard regions, as it is the user who has established
them in the first place.

But in some instances, such as monitoring software, or software that
relies upon being able to ascertain the nature of mappings within a remote
process for instance, it becomes useful to be able to determine which
pages have the guard region marker applied.

This patch makes use of an unused pagemap bit (58) to provide this
information.

This patch updates the documentation at the same time as making the change
such that the implementation of the feature and the documentation of it
are tied together.

Link: https://lkml.kernel.org/r/cover.1740139449.git.lorenzo.stoakes@oracle.com
Link: https://lkml.kernel.org/r/521d99c08b975fb06a1e7201e971cc24d68196d1.1740139449.git.lorenzo.stoakes@oracle.com
Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Acked-by: David Hildenbrand <david@redhat.com>
Cc: Jann Horn <jannh@google.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Kalesh Singh <kaleshsingh@google.com>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Matthew Wilcow (Oracle) <willy@infradead.org>
Cc: "Paul E . McKenney" <paulmck@kernel.org>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2025-03-16 22:06:41 -07:00
..
9p Provide stable parent and name to ->d_revalidate() instances 2025-01-30 09:13:35 -08:00
adfs
affs affs: don't write overlarge OFS data block size fields 2025-02-26 15:20:57 +01:00
afs afs: Give an afs_server object a ref on the afs_cell object it points to 2025-02-21 15:06:29 -08:00
autofs
bcachefs percpu: use TYPEOF_UNQUAL() in variable declarations 2025-03-16 22:05:53 -07:00
befs
bfs
btrfs for-6.14-rc5-tag 2025-03-07 11:17:30 -10:00
cachefiles treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
ceph A fix for a memory leak from Antoine (marked for stable) and two 2025-01-31 10:30:34 -08:00
coda Provide stable parent and name to ->d_revalidate() instances 2025-01-30 09:13:35 -08:00
configfs configfs: improve item creation performance 2024-11-14 07:45:20 +01:00
cramfs
crypto fscrypt_d_revalidate(): use stable parent inode passed by caller 2025-01-27 19:25:23 -05:00
debugfs debugfs: Fix the missing initializations in __debugfs_file_get() 2025-01-30 08:22:31 +01:00
devpts treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
dlm dlm: return -ENOENT if no comm was found 2024-12-19 13:11:24 -06:00
ecryptfs Pass parent directory inode and expected name to ->d_revalidate() 2025-01-27 19:25:23 -05:00
efivarfs efivarfs: allow creation of zero length files 2025-02-27 11:27:49 +01:00
efs
erofs lockref: remove count argument of lockref_init 2025-02-07 10:27:25 +01:00
exfat exfat: add a check for invalid data size 2025-03-05 21:53:20 +09:00
exportfs fs: prepare for "explicit connectable" file handles 2024-11-15 11:34:57 +01:00
ext2
ext4 fs: convert block_commit_write() to take a folio 2025-03-16 22:06:22 -07:00
f2fs f2fs-for-6.14-rc1 2025-01-27 20:58:58 -08:00
fat vfat_revalidate{,_ci}(): use stable parent inode passed by caller 2025-01-27 19:25:24 -05:00
freevxfs freevxfs: Replace one-element array with flexible array member 2024-11-06 10:42:06 +01:00
fuse fs/pipe: add simpler helpers for common cases 2025-03-06 18:25:35 -10:00
gfs2 lockref: remove count argument of lockref_init 2025-02-07 10:27:25 +01:00
hfs Provide stable parent and name to ->d_revalidate() instances 2025-01-30 09:13:35 -08:00
hfsplus vfs-6.13.misc 2024-11-18 09:35:30 -08:00
hostfs hostfs __dentry_name() fix 2025-01-31 09:33:54 -08:00
hpfs
hugetlbfs mm/hugetlb: rename avoid_reserve to cow_from_owner 2025-01-25 20:22:30 -08:00
iomap fs: convert block_commit_write() to take a folio 2025-03-16 22:06:22 -07:00
isofs isofs: Partially convert zisofs_read_folio to use a folio 2024-12-05 13:52:37 +01:00
jbd2 CRC updates for 6.14 2025-01-22 19:55:08 -08:00
jffs2 jffs2: Fix rtime decompressor 2024-12-05 12:31:40 +01:00
jfs Pass parent directory inode and expected name to ->d_revalidate() 2025-01-27 19:25:23 -05:00
kernfs assorted stuff for this merge window 2025-02-01 15:07:56 -08:00
lockd treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
minix
netfs netfs: Fix setting NETFS_RREQ_ALL_QUEUED to be after all subreqs queued 2025-02-13 16:00:48 +01:00
nfs 33 hotfixes. 24 are cc:stable and the remainder address post-6.13 issues 2025-03-08 14:34:06 -10:00
nfs_common nfs: fix incorrect error handling in LOCALIO 2025-01-21 11:34:43 -05:00
nfsd nfsd-6.14 fixes: 2025-02-10 13:11:24 -08:00
nilfs2 nilfs2: fix possible int overflows in nilfs_fiemap() 2025-02-01 03:53:26 -08:00
nls
notify fsnotify: use accessor to set FMODE_NONOTIFY_* 2025-02-07 10:27:26 +01:00
ntfs3 fs/ntfs3: Unify inode corruption marking with _ntfs_bad_inode() 2024-12-30 11:37:40 +03:00
ocfs2 fs: convert block_commit_write() to take a folio 2025-03-16 22:06:22 -07:00
omfs
openpromfs
orangefs orangefs: fix a oob in orangefs_debug_write 2025-01-31 09:40:31 -08:00
overlayfs ovl: fix UAF in ovl_dentry_update_reval by moving dput() in ovl_link_up 2025-02-19 18:06:53 +01:00
proc fs/proc/task_mmu: add guard region bit to pagemap 2025-03-16 22:06:41 -07:00
pstore pstore updates for v6.14-rc1 2025-01-20 13:37:14 -08:00
qnx4
qnx6 fs/qnx6: Fix building with GCC 15 2024-12-03 10:40:36 +01:00
quota treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
ramfs
romfs
smb cifs: fix incorrect validation for num_aces field of smb_acl 2025-03-02 22:50:54 -06:00
squashfs squashfs: fix invalid pointer dereference in squashfs_cache_delete 2025-03-16 17:40:24 -07:00
sysfs sysfs: constify bin_attribute argument of sysfs_bin_attr_simple_read() 2025-01-09 10:43:58 +01:00
sysv
tests
tracefs Pass parent directory inode and expected name to ->d_revalidate() 2025-01-27 19:25:23 -05:00
ubifs ubifs: skip dumping tnc tree when zroot is null 2025-01-18 15:31:35 +01:00
udf fs: convert block_commit_write() to take a folio 2025-03-16 22:06:22 -07:00
ufs ufs: ufs_sb_private_info: remove unused s_{2,3}apb fields 2024-11-12 19:02:12 -05:00
unicode Revert "unicode: Don't special case ignorable code points" 2024-12-11 14:11:23 -08:00
vboxsf vboxsf: fix building with GCC 15 2025-02-07 10:27:24 +01:00
verity treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
xfs xfs: remove the XBF_STALE check from xfs_buf_rele_cached 2025-02-25 13:05:59 +01:00
zonefs
Kconfig mm/sparse: allow for alternate vmemmap section init at boot 2025-03-16 22:06:27 -07:00
Kconfig.binfmt
Makefile
aio.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
anon_inodes.c add a string-to-qstr constructor 2025-01-27 19:25:45 -05:00
attr.c
backing-file.c tree-wide: s/revert_creds_light()/revert_creds()/g 2024-12-02 11:25:09 +01:00
bad_inode.c
binfmt_elf.c fs: don't block write during exec on pre-content watched files 2024-12-11 17:45:18 +01:00
binfmt_elf_fdpic.c fs: don't block write during exec on pre-content watched files 2024-12-11 17:45:18 +01:00
binfmt_flat.c binfmt_flat: Fix integer overflow bug on 32 bit systems 2025-01-10 08:49:05 -08:00
binfmt_misc.c execve updates for v6.14-rc1 2025-01-20 13:27:58 -08:00
binfmt_script.c
bpf_fs_kfuncs.c
buffer.c fs: convert block_commit_write() to take a folio 2025-03-16 22:06:22 -07:00
char_dev.c
compat_binfmt_elf.c
coredump.c coredump: Only sort VMAs when core_sort_vma sysctl is set 2025-02-24 10:51:57 -08:00
d_path.c
dax.c
dcache.c vfs-6.14-rc2.fixes 2025-02-07 09:22:31 -08:00
direct-io.c
drop_caches.c
eventfd.c
eventpoll.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
exec.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
fcntl.c fs: get rid of __FMODE_NONOTIFY kludge 2024-12-09 11:34:29 +01:00
fhandle.c exportfs: add permission method 2024-12-17 09:16:11 +01:00
file.c vfs-6.14-rc1.misc 2025-01-20 09:40:49 -08:00
file_table.c fsnotify: disable pre-content and permission events by default 2025-02-07 10:27:27 +01:00
filesystems.c
fs-writeback.c Merge patch series "two little writeback cleanups v2" 2024-11-13 14:08:34 +01:00
fs_context.c fs: fc_log replace magic number 7 with ARRAY_SIZE() 2024-12-22 11:29:52 +01:00
fs_parser.c bcachefs: add support for true/false & yes/no in bool-type options 2024-12-21 01:36:17 -05:00
fs_pin.c
fs_struct.c
fs_types.c
fsopen.c
init.c
inode.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
internal.h sanitize struct filename and lookup flags handling in statx 2024-11-18 14:54:10 -08:00
ioctl.c
kernel_read_file.c
libfs.c Provide stable parent and name to ->d_revalidate() instances 2025-01-30 09:13:35 -08:00
locks.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
mbcache.c
mnt_idmapping.c
mount.h fs: cache first and last mount 2025-01-09 16:58:54 +01:00
mpage.c
namei.c fuse: don't truncate cached, mutated symlink 2025-02-20 15:48:17 +01:00
namespace.c fs: fix adding security options to statmount.mnt_opt 2025-02-07 10:27:26 +01:00
nsfs.c nsfs: remove d_op->d_delete 2025-02-24 11:30:35 +01:00
open.c fsnotify: disable notification by default for all pseudo files 2025-02-07 10:27:26 +01:00
pidfs.c pidfs: remove d_op->d_delete 2025-02-24 11:27:02 +01:00
pipe.c fs/pipe: add simpler helpers for common cases 2025-03-06 18:25:35 -10:00
pnode.c fs: Fix grammar and spelling in propagate_umount() 2024-12-22 11:29:52 +01:00
pnode.h
posix_acl.c
proc_namespace.c
read_write.c the bulk of struct fd memory safety stuff 2024-11-18 12:24:06 -08:00
readdir.c
remap_range.c
select.c select: Fix unbalanced user_access_end() 2025-01-13 16:24:16 +01:00
seq_file.c
signalfd.c
splice.c fs/pipe: add simpler helpers for common cases 2025-03-06 18:25:35 -10:00
stack.c
stat.c fs/stat.c: avoid harmless garbage value problem in vfs_statx_path() 2025-02-07 10:27:24 +01:00
statfs.c
super.c lib/list_debug.c: add object information in case of invalid object 2025-01-25 20:22:23 -08:00
sync.c
sysctls.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
timerfd.c A rather large update for timekeeping and timers: 2024-11-19 16:35:06 -08:00
userfaultfd.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
utimes.c
xattr.c xattr: remove redundant check on variable err 2024-11-06 13:00:01 -05:00