[PATCH 07/14] selinuxfs: convert mmap hooks to mmap_prepare

From: Lorenzo Stoakes (ARM)

Date: Thu Nov 05 2026 - 16:08:22 EST


Move from the deprecated mmap hook to the new mmap_prepare hook for the
policy and status files.

The policy file only sets VMA flags and operations. The status file remaps
a single page, so use the PFN remap mmap action to do so.

Signed-off-by: Lorenzo Stoakes (ARM) <ljs@xxxxxxxxxx>
---
security/selinux/selinuxfs.c | 24 +++++++++++-------------
1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
index 310e19efff1d..e78c65685020 100644
--- a/security/selinux/selinuxfs.c
+++ b/security/selinux/selinuxfs.c
@@ -236,27 +236,25 @@ static ssize_t sel_read_handle_status(struct file *filp, char __user *buf,
sizeof(struct selinux_kernel_status));
}

-static int sel_mmap_handle_status(struct file *filp,
- struct vm_area_struct *vma)
+static int sel_mmap_prepare_handle_status(struct vm_area_desc *desc)
{
- struct page *status = filp->private_data;
- unsigned long size = vma->vm_end - vma->vm_start;
+ struct page *status = desc->file->private_data;

BUG_ON(!status);

/* only allows one page from the head */
- if (vma->vm_pgoff > 0 || size != PAGE_SIZE)
+ if (desc->pgoff > 0 || vma_desc_size(desc) != PAGE_SIZE)
return -EIO;

- return remap_pfn_range(vma, vma->vm_start,
- page_to_pfn(status),
- size, vma->vm_page_prot);
+ mmap_action_remap_full(desc, page_to_pfn(status));
+
+ return 0;
}

static const struct file_operations sel_handle_status_ops = {
.open = sel_open_handle_status,
.read = sel_read_handle_status,
- .mmap = sel_mmap_handle_status,
+ .mmap_prepare = sel_mmap_prepare_handle_status,
.llseek = generic_file_llseek,
};

@@ -419,10 +417,10 @@ static const struct vm_operations_struct sel_mmap_policy_ops = {
.page_mkwrite = sel_mmap_policy_fault,
};

-static int sel_mmap_policy(struct file *filp, struct vm_area_struct *vma)
+static int sel_mmap_prepare_policy(struct vm_area_desc *desc)
{
- vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP);
- vma->vm_ops = &sel_mmap_policy_ops;
+ vma_desc_set_flags(desc, VMA_DONTEXPAND_BIT, VMA_DONTDUMP_BIT);
+ desc->vm_ops = &sel_mmap_policy_ops;

return 0;
}
@@ -430,7 +428,7 @@ static int sel_mmap_policy(struct file *filp, struct vm_area_struct *vma)
static const struct file_operations sel_policy_ops = {
.open = sel_open_policy,
.read = sel_read_policy,
- .mmap = sel_mmap_policy,
+ .mmap_prepare = sel_mmap_prepare_policy,
.release = sel_release_policy,
.llseek = generic_file_llseek,
};

--
2.56.0