From 36200a111c1f2c3c0acb0af6bfb1d04097cef088 Mon Sep 17 00:00:00 2001 From: chenjingwen Date: Wed, 31 Jan 2024 07:43:35 +0000 Subject: [PATCH] fix ringbuffer compile error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > [ 71s] /home/abuild/rpmbuild/BUILD/secDetector-v1.0/kerneldriver/core/response_unit/secDetector_ringbuffer.c:290:31: error: assignment of read-only member 'vm_flags' > [ 71s] 290 | vma->vm_flags &= ~VM_MAYWRITE; > [ 71s] | 使用封装的 vma 操作函数,来解决高版本内核下的编译问题。 class_create 不再需要第一个参数。 Signed-off-by: chenjingwen --- .../core/response_unit/secDetector_ringbuffer.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/kerneldriver/core/response_unit/secDetector_ringbuffer.c b/kerneldriver/core/response_unit/secDetector_ringbuffer.c index b367d74..430e07c 100644 --- a/kerneldriver/core/response_unit/secDetector_ringbuffer.c +++ b/kerneldriver/core/response_unit/secDetector_ringbuffer.c @@ -17,6 +17,7 @@ #include #include #include +#include static unsigned long rb_datasz; static unsigned long rb_mask; @@ -287,7 +288,11 @@ static int ringbuffer_mmap(struct file *flip, struct vm_area_struct *vma) vma->vm_end - vma->vm_start != PAGE_SIZE) return -EPERM; } else { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0) + vm_flags_clear(vma, VM_MAYWRITE); +#else vma->vm_flags &= ~VM_MAYWRITE; +#endif } /* remap_vmalloc_range() checks size and offset */ return remap_vmalloc_range(vma, g_rb, vma->vm_pgoff + RINGBUF_PGOFF); @@ -366,8 +371,11 @@ int __init secDetector_ringbuf_dev_init(unsigned int rb_sz) ret = major; goto error_free; } - +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0) + class = class_create(MODULE_DEVICE); +#else class = class_create(THIS_MODULE, MODULE_DEVICE); +#endif if (IS_ERR(class)) { ret = PTR_ERR(class); goto error_class_create; -- Gitee