基本信息
percpu_ref_data
kmalloc-64
源码路径:https://elixir.bootlin.com/linux/v5.15/source/include/linux/percpu-refcount.h#L95

分配点:io_ring_ctx_alloc()
->percpu_ref_init()
API: io_uring_setup
分配,close
释放;
源码回溯
https://elixir.bootlin.com/linux/v5.15/source/fs/io_uring.c#L10390





调用链很长:
__do_sys_io_uring_setup io_uring_setup io_uring_create io_ring_ctx_alloc per_cpu_ref_init
|
实操&调试

回顾笔者有关io_uring的学习笔记,相关代码如下:
#define _GNU_SOURCE #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/syscall.h> #include <stdint.h> #include <errno.h>
#define SYS_io_uring_setup 425
struct io_uring_params { __u32 sq_entries; __u32 cq_entries; __u32 flags; __u32 sq_thread_cpu; __u32 sq_thread_idle; __u32 features; __u32 wq_fd; __u32 resv[3]; __u64 sq_off[6]; __u64 cq_off[6]; };
int main() { struct io_uring_params p; memset(&p, 0, sizeof(p));
int ring_fd = syscall(SYS_io_uring_setup, 8, &p); if (ring_fd < 0) { perror("io_uring_setup failed"); return 1; }
printf("io_uring_setup succeeded, ring fd: %d\n", ring_fd);
close(ring_fd); return 0; }
|
参考
https://bsauce.github.io/2022/07/26/CVE-2022-34918/