根据谷歌Gerrit代码评审平台上每日提交的更新,2026年10月27日的AOSP开源项目日报梳理出内核与Android全栈的若干技术演进。这批改动围绕P3S(4KB子页运行于16KB宿主页)场景下的内存管理适配展开,同时覆盖调度、网络、虚拟化、USB/HID、RISC-V与BPF、硬件抽象层等多个方向。

VMA切片与mremap:16KB宿主页里如何定位4KB子页

针对内核内存管理,社区新增了vm_slice_off字段,用来记录4KB子页在16KB宿主页内部所处的位置;当VMA发生复制或分裂时该值会被保留,从而让文件映射在混合页粒度的环境中依旧能找到对应的数据切片。执行mremap搬移VMA时,代码会强制按16KB切片对齐,防止搬移后子页横跨宿主页边界,造成匿名映射或文件映射位置错乱。合并逻辑也收紧了条件:只有切片彼此连续的VMA才被允许合并,避免把属于不同宿主页的相邻区间错误拼到一起,进而干扰缺页与回写行为。

区间树方面,VMA改为依据宿主folio的跨度来索引,使反向映射、页面回收和缺页处理都能识别16KB宿主页内部的4KB子页切片。页遍历函数会把遍历范围限制在进程真实的页大小之内,杜绝子页切片情况下越界访问页表项或地址空间。此外,madvise与print_vma_addr里的文件偏移计算得到修正,16KB页粒度下操作的区间与VMA切片保持一致,不会误丢弃地址或打印错误地址;msync则以VMA切片偏移推算需要同步的文件偏移,确保4KB子页上的脏数据写回backing file的正确位置。另有一处XEN PV相关修复,纠正folio_pte_batch在XEN PV下的错误合并,避免因宿主页与子页关系判断失误而批量操作了错误的PTE。

用户态可见接口:coredump、proc与maps按页粒度缩放

在P3S对用户态暴露的接口层面,ELF coredump改为按4KB子页切片转储,使16KB页粒度下生成的核心文件与进程地址空间布局吻合,方便调试器还原内存内容。proc接口按照读取者自身的页大小上报页计数,防止16KB宿主页与4KB读取页混用造成PSS/RSS等指标失真。maps、smaps与pagemap则依据当前MM的页大小缩放权限与地址范围,用户态解析这些接口时可获得正确的4KB或16KB页视图。共享内存策略节点按宿主folio大小分配,保证16KB页粒度下策略查询不会触碰未初始化内存或越界。

AOSP内核为16KB页粒度改造VMA,P3S适配细节公开

内存分配路径新增vendor hooks,GKI符号同步更新

面向厂商适配,页面迁移流程中插入了vendor hook,厂商可在迁移前后施加延迟控制或调整迁移策略,用于异构内存与NUMA优化。direct reclaim阶段也新增钩子,便于厂商观测或介入直接回收路径,抑制长尾回收引起的应用卡顿。特定分配路径可通过vendor hook跳过内存回收throttle,加快分配速度,适用于对延迟敏感的前台或实时任务。页面分配路径同样建立了vendor hooks,并导出prep_new_page符号供vendor module调用,扩展了分配过程的可观测性与可调性。cgroup方面修复了kmi_ext_info分配失败时的清理逻辑,防止半初始化的扩展信息泄漏或引发后续访问错误。GKI符号列表针对xiaomi、db845c等平台做了补充,并更新x86 desktop与virtual_device的GKI ABI,使vendor模块能够依赖新增的钩子与函数。

调度、同步与文件系统:Rust屏障与多处并发修复

上游Rust sync模块引入通用内存屏障以及mb、dma_mb辅助函数,为Rust编写的内核并发代码提供顺序保证,降低数据竞争风险。代理调度中,do_activate_blocked_waiter可能出现的延迟被修复,阻塞等待者能及时激活,调度尾延迟随之减少。rust_binder修复了get_node_debug_info的溢出问题,以及自工作排队到poll线程时未唤醒epoll的缺陷;binder调试日志的偏移计算出错也已更正。

PM/EM在计算能量成本前加入除数校验,避免不对称CPU或极端算力值触发除零。FUSE passthrough模式把vfs_fadvise建议转发给backing_file,让预读、回收策略作用于真实文件。fsverity_info改用RCU延迟释放,消除查询路径仍在读取结构时被释放的use-after-free隐患。f2fs在checkpoint禁用时跳过f2fs_balance_fs,并为gc_valid_thresh_ratio、gc_boost_zoned_gc_percent、gc_no_zoned_gc_percent加上边界检查;提交super block时bio未释放导致的内存泄漏也得到修复。swap路径在操作VMA前会确认地址空间稳定,避免并发修改导致换出落在错误的VMA上。migrate_pages_batch调整了部分迁移失败时的统计口径,使迁移计数反映真实成功页数。

网络协议栈与虚拟化加固

网络侧,fib6删除路由时会传递具体原因并经RTM_DELROUTE暴露给用户态,网络管理程序可据此诊断内核发起删除的根因;IPv6 route get请求新增flow label字段,支持基于流标签选路,服务多路径与流分类。sock_gettstamp()在读取时间戳前加socket锁,避免与接收路径并发访问同一结构。IPv4在完成校验和之前先校验checksum_start,防止损坏报文引发越界访问或错误校验。nfnetlink_queue对SCTP协议的处理错误被修复,SCTP流量经队列时可正确解析转发;BQL禁用时的网络构建失败也已解决;Bluetooth mgmt在取消时出队待处理的mesh_send_sync,避免悬挂请求或重复发送。

虚拟化方面,pKVM x86把.pkvm.text映射为宿主MMU只读并将其列入kprobes黑名单,阻止宿主内核修改或探测pKVM代码。pKVM VMX拒绝用户空间发起的宿主hypercall,收缩宿主用户态攻击pKVM的入口。KVM arm64在依赖ID寄存器值后禁止其再变更,并按guest-wide到per-vCPU的顺序完成系统寄存器配置,确保vCPU之间一致。FF-A拒绝宿主回收guest的FF-A transfer,重复RXTX_MAP时取消共享旧缓冲,防止跨虚拟机数据泄露或缓冲混淆;npVMs则复制POR_EL0、POR_EL1与SCTLR2_EL1,使权限覆盖与系统控制寄存器配置在虚拟CPU上生效。