From 378b516f2bb5292fbc6dc4d80734a57c3cffe952 Mon Sep 17 00:00:00 2001 From: yuhao_zhang Date: Sun, 14 Dec 2025 01:37:06 +0800 Subject: [PATCH 1/2] obmm: fix for PMD mapping euleros inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/IDBKX6 CVE: NA ------------------------------- This patch adds the get_unmapped_area ops to support unaligned PMD mapping. Fixes: 49ddfaab9aa3 ("obmm: Add mmap support for shared memory regions") Signed-off-by: yuhao_zhang --- drivers/ub/obmm/obmm_shm_dev.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/ub/obmm/obmm_shm_dev.c b/drivers/ub/obmm/obmm_shm_dev.c index 05de51ee167b..214031829f74 100644 --- a/drivers/ub/obmm/obmm_shm_dev.c +++ b/drivers/ub/obmm/obmm_shm_dev.c @@ -321,6 +321,11 @@ static int obmm_shm_fops_mmap(struct file *file, struct vm_area_struct *vma) pr_debug("trying hugepage mmap\n"); mmap_granu = OBMM_MMAP_GRANU_PMD; offset &= ~OBMM_MMAP_FLAG_HUGETLB_PMD; + if (vma->vm_start % PMD_SIZE || vma->vm_end % PMD_SIZE) { + pr_err("error running huge mmap for not pmd-aligned vma: %#lx-%#lx\n", + vma->vm_start, vma->vm_end); + return -EINVAL; + } } else { mmap_granu = OBMM_MMAP_GRANU_PAGE; } @@ -857,6 +862,7 @@ static long obmm_shm_fops_ioctl(struct file *file, unsigned int cmd, unsigned lo const struct file_operations obmm_shm_fops = { .owner = THIS_MODULE, .unlocked_ioctl = obmm_shm_fops_ioctl, .mmap = obmm_shm_fops_mmap, + .get_unmapped_area = thp_get_unmapped_area, .open = obmm_shm_fops_open, .flush = obmm_shm_fops_flush, .release = obmm_shm_fops_release }; -- Gitee From 9bf7547cefea50d206e2abbdc6cae66a18407006 Mon Sep 17 00:00:00 2001 From: yuhao_zhang Date: Sun, 14 Dec 2025 01:38:24 +0800 Subject: [PATCH 2/2] obmm: display mmaped region's Pagesize euleros inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/IDBKX6 CVE: NA ------------------------------- This patch adds pagesize ops to display right PageSize in /proc/pid/smaps. Fixes: 49ddfaab9aa3 ("obmm: Add mmap support for shared memory regions") Signed-off-by: yuhao_zhang --- drivers/ub/obmm/obmm_shm_dev.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/ub/obmm/obmm_shm_dev.c b/drivers/ub/obmm/obmm_shm_dev.c index 214031829f74..0272287fea64 100644 --- a/drivers/ub/obmm/obmm_shm_dev.c +++ b/drivers/ub/obmm/obmm_shm_dev.c @@ -155,6 +155,17 @@ static const char *obmm_vma_name(struct vm_area_struct *vma __always_unused) return "OBMM_SHM"; } +static unsigned long obmm_pagesize(struct vm_area_struct *vma) +{ + struct file *filp = vma->vm_file; + struct obmm_region *reg = (struct obmm_region *)filp->private_data; + + if (reg->mmap_granu == OBMM_MMAP_GRANU_PMD) + return PMD_SIZE; + else + return PAGE_SIZE; +} + static const struct vm_operations_struct obmm_vm_ops = { .open = obmm_vma_open, .close = obmm_vma_close, @@ -164,6 +175,7 @@ static const struct vm_operations_struct obmm_vm_ops = { .fault = obmm_vma_fault, .access = obmm_vma_access, .name = obmm_vma_name, + .pagesize = obmm_pagesize, }; static int obmm_shm_fops_open(struct inode *inode, struct file *file) -- Gitee