sst-linux/Documentation/core-api
David Howells 476c1dfefa mm: Don't pin ZERO_PAGE in pin_user_pages()
[ Upstream commit c8070b78751955e59b42457b974bea4a4fe00187 ]

Make pin_user_pages*() leave a ZERO_PAGE unpinned if it extracts a pointer
to it from the page tables and make unpin_user_page*() correspondingly
ignore a ZERO_PAGE when unpinning.  We don't want to risk overrunning a
zero page's refcount as we're only allowed ~2 million pins on it -
something that userspace can conceivably trigger.

Add a pair of functions to test whether a page or a folio is a ZERO_PAGE.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Christoph Hellwig <hch@infradead.org>
cc: David Hildenbrand <david@redhat.com>
cc: Lorenzo Stoakes <lstoakes@gmail.com>
cc: Andrew Morton <akpm@linux-foundation.org>
cc: Jens Axboe <axboe@kernel.dk>
cc: Al Viro <viro@zeniv.linux.org.uk>
cc: Matthew Wilcox <willy@infradead.org>
cc: Jan Kara <jack@suse.cz>
cc: Jeff Layton <jlayton@kernel.org>
cc: Jason Gunthorpe <jgg@nvidia.com>
cc: Logan Gunthorpe <logang@deltatee.com>
cc: Hillf Danton <hdanton@sina.com>
cc: Christian Brauner <brauner@kernel.org>
cc: Linus Torvalds <torvalds@linux-foundation.org>
cc: linux-fsdevel@vger.kernel.org
cc: linux-block@vger.kernel.org
cc: linux-kernel@vger.kernel.org
cc: linux-mm@kvack.org
Reviewed-by: Lorenzo Stoakes <lstoakes@gmail.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Acked-by: David Hildenbrand <david@redhat.com>
Link: https://lore.kernel.org/r/20230526214142.958751-2-dhowells@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Stable-dep-of: bddf10d26e6e ("uprobes: Reject the shared zeropage in uprobe_write_opcode()")
Signed-off-by: Sasha Levin <sashal@kernel.org>
2025-03-07 16:56:47 +01:00
..
irq
wrappers
asm-annotations.rst
assoc_array.rst
boot-time-mm.rst
cachetlb.rst
circular-buffers.rst
cpu_hotplug.rst
debug-objects.rst
debugging-via-ohci1394.rst
dma-api-howto.rst
dma-api.rst
dma-attributes.rst
dma-isa-lpc.rst
entry.rst
errseq.rst
genalloc.rst
generic-radix-tree.rst
genericirq.rst
gfp_mask-from-fs-io.rst
idr.rst
index.rst
kernel-api.rst
kobject.rst
kref.rst
librs.rst
local_ops.rst
maple_tree.rst
memory-allocation.rst
memory-hotplug.rst
mm-api.rst
packing.rst
padata.rst
pin_user_pages.rst
printk-basics.rst
printk-formats.rst
printk-index.rst
protection-keys.rst
rbtree.rst
refcount-vs-atomic.rst
symbol-namespaces.rst
this_cpu_ops.rst
timekeeping.rst
tracepoint.rst
unaligned-memory-access.rst
watch_queue.rst
workqueue.rst
xarray.rst