当前位置: 首页 > news >正文

Unix垃圾回收器重制版:重写过程、漏洞分析与复现方法揭秘

Unix垃圾回收器重制版资讯

AF_UNIX垃圾回收器是内核中有趣的部分,因套接字发送后可能在用户空间不可访问但内核仍让其存活,造成内存效率低下,垃圾回收器会介入释放。不久前该子系统基于图/强连通分量模型重写,但仍易出现漏洞。本文详细介绍重写过程,探讨使用后释放(Use - After - Free)的漏洞。

AF_UNIX垃圾回收器——背景

每个子系统的垃圾回收器负责回收无法通过用户空间句柄访问的内核对象。AF_UNIX的入口点是`unix_gc()`,实际核心代码在`__unix_gc()`中。

对于`unix_sock`结构体,关键字段是`inflight`。当套接字的`struct file *`作为SCM_RIGHTS有效负载传输时处于“传输中”状态,每次发送`inflight`递增,接收递减。垃圾回收器寻找`file_count == inflight`的套接字。

内核维护全局的`unix_tot_inflight`计数器,每次进入传输状态递增,接收递减。垃圾回收触发条件有两个:一是传输中的套接字过多;二是关闭套接字时,若有套接字处于传输中。

旧的垃圾回收器

2024年之前的垃圾回收器在相关文章中有详细描述,涵盖算法和2021年在Android系统中的实际利用情况。旧的垃圾回收器会遍历传输中的图,标记循环,并检查`inflight != refcount`,以确定每个循环是否可以回收。

新的垃圾回收器

新的垃圾回收器取代当前实现,减少锁定每个套接字队列的影响,在无循环引用或传输中文件描述符图形状未更新时保持轻量级。

图的表示方面,每个传输中的套接字为“顶点”,每个在SCM_RIGHTS控制消息中携带的`struct file *`为有向“边”。使用Tarjan算法将图划分为强连通分量(SCC),循环是顶点可回收的必要但不充分条件。

`__unix_gc`的调度方面,当添加新边且两端点都处于传输中时,`unix_graph_maybe_cyclic`会被置为真。在慢速和快速路径之间进行调度。

慢速路径`unix_walk_scc()`是实际构建SCC的地方,索引从`UNIX_VERTEX_INDEX_START`开始,遍历开始时假设图无环,只有找到循环才标记为有环。

Tarjan算法用于处理有向图并生成其SCC,具体细节可参考维基百科页面。

快速路径`unix_walk_scc_fast()`在图形状未改变时重用现有SCC,以逆序遍历每个缓存的SCC,将顶点移动到已访问列表,并对其运行`unix_vertex_dead()`。

CVE - 2025 - 40214——kCTF漏洞分析

补丁内容对相关代码进行了修改,根本原因是`unix_add_edge()`未初始化`struct unix_vertex`的`scc_index`字段,快速路径的死SCC检查会比较顶点之间的`scc_index`,可能导致活跃套接字被错误标记为死亡,出现使用后释放漏洞。补丁通过分配单调递增的`unix_vertex_max_scc_index`计数器修复问题。

作者描述了发现漏洞的策略,本文作者设计了接近的方法。复现过程分为阶段1 - 喷射顶点、阶段2 - `B ↔ A`循环、阶段3 - 虚假链,然后关闭并触发。在存在漏洞的内核上添加`printk`补丁可确认SCC死亡。

还给出了复现代码,包括发送和接收文件描述符、喷射顶点、触发垃圾回收等功能。

本文详细介绍了重写后的AF_UNIX垃圾回收器、CVE - 2025 - 40214中`scc_index`未初始化字段的漏洞,以及两种复现方法。那么,这些复现方法在实际应用中还会有哪些潜在影响呢?

http://www.rkmt.cn/news/1508192.html

相关文章:

  • 5大核心功能:League Akari如何成为英雄联盟玩家的智能游戏助手
  • AI能预测下一条谣言吗?网络谣言传播背后的技术攻防战
  • 064、社区 Skill 最佳实践:代码审查、安全审查、测试驱动开发的技能化
  • NDS游戏资源编辑终极指南:如何使用Tinke零基础提取和修改任天堂DS游戏文件
  • ECOD异常检测模型的可解释性到底有多强?手把手教你拆解每个特征的“异常贡献度”
  • 系统架构设计师-计算机系统基础核心考点精析
  • SART vs OS-SART:在低剂量CT扫描中,如何选择与调参才能又快又清晰?
  • 从工厂到云端:拆解Android 13 RKP如何重塑设备密钥管理与安全认证
  • WinForm下用CEFSharp 110+拦截并改写WSS请求的可运行工程
  • 【趣解】RAID0/1/5/10:数据存储的“排列组合游戏“
  • 如何用本地图像搜索引擎告别图片管理困境:ImageSearch全功能实战指南
  • 别再乱改刀路了!NX/UG二次开发中,不同事件类型(Event Subtype)的进给设置为何会失效?
  • 手机拍视频总抖?聊聊EIS防抖的“黑边”是怎么没的,以及为什么有时稳像会失效
  • 从DevEco Studio到真机:HarmonyOS应用签名与Hap包全流程实战
  • 告别棋盘效应!用PGGAN(ProGAN)从4x4到1024x4高清人脸生成保姆级教程(附PyTorch代码)
  • 终极免费解锁WeMod Pro会员:Wand-Enhancer完整使用指南
  • 深入理解F28335 XINTF的‘写后读’保护:为什么你的外部设备数据会出错?
  • 基于SpringBoot+Vue的高校专业实习管理系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 工业机房供电隐患解析:市电波动与瞬断对精密设备的损伤解决方案
  • 基于微信小程序的高校校园社交平台的设计与实现
  • MAX6675实战指南:从冷端补偿到SPI通信的温度采集方案
  • 告别‘鸡同鸭讲’:用SECS/GEM统一你的半导体设备通信(含E30/E37标准解析)
  • 手把手教你配置F28335的XINTF时序:从SRAM读写实战到DMA搬运避坑
  • 别再烧芯片了!手把手教你用AMS1117-3.3计算LDO最大安全电流(附SOT-89/SOT-223/TO-252封装对比)
  • CH395Q驱动库深度解析:从官方库到原子哥修改版,我们到底改了啥?
  • SpringBoot+Vue 交通管理在线服务系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 从‘无穷细分’到‘一键求和’:牛顿-莱布尼茨公式如何成为现代科学计算的基石?
  • 文本管理grep sed awk
  • 原神祈愿数据分析工具:从数据收集到深度洞察的专业解决方案
  • 2026年石英砂厂家哪家口碑好?从四川到全国供应商电话与选型指南(附真实案例) - 优质品牌商家