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) <[email protected]>
---
 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


Reply via email to