+10
−0
Loading
When a VMA is split (e.g., by partial munmap or MAP_FIXED), the kernel calls vm_ops->close on each portion. For trace buffer mappings, this results in ring_buffer_unmap() being called multiple times while ring_buffer_map() was only called once. This causes ring_buffer_unmap() to return -ENODEV on subsequent calls because user_mapped is already 0, triggering a WARN_ON. Trace buffer mappings cannot support partial mappings because the ring buffer structure requires the complete buffer including the meta page. Fix this by adding a may_split callback that returns -EINVAL to prevent VMA splits entirely. Cc: stable@vger.kernel.org Fixes: cf9f0f7c ("tracing: Allow user-space mapping of the ring-buffer") Link: https://patch.msgid.link/20251119064019.25904-1-kartikey406@gmail.com Closes: https://syzkaller.appspot.com/bug?extid=a72c325b042aae6403c7 Tested-by:<syzbot+a72c325b042aae6403c7@syzkaller.appspotmail.com> Reported-by:
<syzbot+a72c325b042aae6403c7@syzkaller.appspotmail.com> Signed-off-by:
Deepanshu Kartikey <kartikey406@gmail.com> Signed-off-by:
Steven Rostedt (Google) <rostedt@goodmis.org>