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

Linus 震怒!内核整数溢出“安全”之争:从华为案例看 Linux Kernel 的硬核防御演进

前言在 C 语言的世界里整数溢出就像一个潜伏在暗处的幽灵。你以为 $2^{31}-1 1$ 会变成一个巨大的正数结果它却变成了一个负数。这种“数学奇点”在内核空间往往意味着系统权限的彻底丧失。最近内核社区围绕“陷阱整数”展开了一场长达一年的技术博弈。Linus Torvalds 的亲自下场开喷让原本枯燥的补丁讨论变成了关于“什么才是真正的安全”的哲学思辨。一、 深度复盘华为 HSO 驱动漏洞CVE-2021-39290作为 Linux 内核的重要贡献者华为在追求极致性能的同时也时刻在与底层的算术错误作斗争。这个著名的漏洞生动地展示了一个简单的加法是如何毁掉整个系统防御的。1. 漏洞成因消失的边界检查在华为维护的hso网络驱动中处理数据包skb时需要计算缓冲区的总长度。// 简化后的逻辑 int len header_len payload_len; if (len MAX_BUFFER_SIZE) { return -EINVAL; } unsigned char *buf kmalloc(len, GFP_KERNEL);致命点攻击者可以从用户态构造一个极大的payload_len例如0xFFFFFFF0。当它与header_len相加时结果发生了整数回绕变成了一个极小的正数如15。这个小数字顺利通过了MAX_BUFFER_SIZE的检查导致kmalloc只分配了一个极小的内存块。2. 连锁反应堆溢出与 Panic接下来的memcpy或copy_from_user依然会按照原始巨大的payload_len进行拷贝。结果就是小小的缓冲区被瞬间撑破相邻的内核对象被恶意覆盖。攻击者借此可以篡改函数指针甚至直接获取 Root 权限。3. 华为的解决方案华为工程师与社区协作迅速推动了补丁。核心逻辑是引入了内核安全算术库强制校验严禁直接使用或*计算内存大小。引入check_add_overflow使用编译器内置的溢出检测机制在加法发生的瞬间捕捉异常。代码审计华为内部以此为契机对网络协议栈中所有涉及size计算的逻辑进行了地毯式扫描。二、 举一反三这些整数风险你避开了吗除了华为遇到的缓冲区分配问题整数溢出在内核中还有以下变种参考计数溢出Reference Count Overflow当一个内核对象的引用计数refcount被非法增加到溢出并回绕至 0 时内核会误认为该对象已不再使用并将其释放Free。然而系统中可能仍有指针指向它这就造成了Use-After-Free (UAF)漏洞这是目前内核中最易被利用的漏洞类型。循环计数器陷阱for (i 0; i count; i) { ... }如果count来自用户态且由于溢出变成了一个负数对于有符号整型循环可能完全不执行或者如果i溢出导致条件永远为真则会引发内核死循环导致 CPU 100% 占用系统瞬间宕机。数组索引越界计算数组下标时发生溢出可能导致指针访问到数组边界之外的地址。即便溢出后的偏移量很小也可能修改到内核的关键全局变量。三、 社区大地震Kees Cook 与 Linus 的“生死战”面对这些层出不穷的漏洞安全专家 Kees Cook 提出了他的“终极武器”属性标注系统。__ob_wrap官方认证的“回绕”。告诉工具我知道这里会溢出我是故意的比如哈希算法。__ob_trap一旦溢出直接让 CPU 报错停止运行。Linus 的怒火死掉的机器不是安全的Linus Torvalds 对此大发雷霆。他的观点非常务实“一个直接崩溃Oops的系统对用户来说和被黑了同样糟糕。”Linus 认为安全不应该以“自杀”为代价。他提出如果发生了溢出系统应该优雅地跳出当前逻辑清理现场然后报错返回而不是简单粗暴地让整个内核崩掉。四、 最终共识带标签的跳转机制在 Linus 的坚持下社区达成了一个折中且精妙的方案“溢出标签跳转”。int __overflow_label(out_of_bounds) process_data(u32 a, u32 b) { // 标注 count 为“陷阱类型” u32 __attribute__((overflow_behavior(trap))) count; // 执行逻辑 count a b; // 如果这里溢出自动跳转到 out_of_bounds return 0; out_of_bounds: // 优雅清理资源并报错Linus 觉得这很 Cool pr_err(Detect integer overflow! Recovering...\n); return -ERANGE; }五、 结语从华为的补丁实战到内核社区的架构之争我们看到 Linux 内核正在从“防御 Bug”向“改变语言规范”演进。作为内核开发者或底层驱动开发者我们要记住数学不会骗人但 C 语言会。永远不要相信用户输入的长度永远优先使用check_add_overflow和array_size等安全宏。

相关文章:

Linus 震怒!内核整数溢出“安全”之争:从华为案例看 Linux Kernel 的硬核防御演进

前言在 C 语言的世界里,整数溢出就像一个潜伏在暗处的幽灵。你以为 $2^{31}-1 1$ 会变成一个巨大的正数,结果它却变成了一个负数。这种“数学奇点”在内核空间往往意味着系统权限的彻底丧失。最近,内核社区围绕“陷阱整数”展开了一场长达一…...

Fiddler抓包与Jmeter性能测试实战:JXYCRM客户关系管理系统优化指南

在客户关系管理(CRM)软件,例如 JXYCRM 中,性能问题往往是用户体验的瓶颈。缓慢的页面加载速度、响应迟钝的操作,都会直接影响销售团队的工作效率。本文将结合 Fiddler 抓包工具和 Jmeter 压力测试工具,深入…...

立创EDA专业版 vs 标准版:焊接辅助工具等生产功能深度对比,教你按需选择

立创EDA专业版 vs 标准版:从焊接辅助到生产全流程的选型决策指南 在电子设计自动化(EDA)工具的选择上,工程师和团队经常面临功能需求与成本效益的权衡。立创EDA作为国内领先的云端EDA解决方案,其专业版与标准版的差异远不止于价格标签——它关…...

【电力系统】基于Matlab的中压电缆的局部放电传输模型

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...

2026届最火的十大降AI率网站推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要降低人工智能所生成文本呈现出的机械感觉,得从词汇,句法还有逻辑这…...

FPGA实现FM调制时,DDS频率控制字和累加器位宽到底怎么算?一次讲透

FPGA实现FM调制时DDS频率控制字与累加器位宽计算全解析 在数字信号处理领域,直接数字频率合成(DDS)技术因其高精度、快速频率切换和低相位噪声等优势,成为现代通信系统中的核心组件。特别是在FM调制实现过程中,DDS的频率控制字(Frequency Con…...

别再死记硬背公式了!用Python手写一个感知机,从鸢尾花分类理解机器学习的‘第一课’

用Python手写感知机:鸢尾花分类的代码可视化之旅 当我在咖啡厅第一次听到"机器学习"这个词时,脑海中浮现的是《终结者》里自我学习的机器人。直到亲手用Python实现了一个感知机模型,才发现原来机器学习的起点可以如此平易近人——不…...

免费快速转换QQ音乐加密格式的macOS终极教程

免费快速转换QQ音乐加密格式的macOS终极教程 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转换结果存储到~/Music…...

3分钟掌握百度网盘直链解析:告别限速实现满速下载的完整方案

3分钟掌握百度网盘直链解析:告别限速实现满速下载的完整方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的下载速度而烦恼吗?当网络…...

VisualCppRedist AIO终极指南:告别DLL缺失,一键修复Windows程序启动难题

VisualCppRedist AIO终极指南:告别DLL缺失,一键修复Windows程序启动难题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过…...

艾尔登法环存档迁移终极指南:如何安全备份和转移你的游戏进度

艾尔登法环存档迁移终极指南:如何安全备份和转移你的游戏进度 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 艾尔登法环存档迁移工具EldenRingSaveCopier是专门为《艾尔登法环》玩家设计的存档管…...

【数据科学】【管理科学】【社会科学】第七篇 个人/组织利益传承和捆绑和宣传模式01

编号类型个人/组织策略利益构建/传承/勾结/宣传/隐瞒的方法/语言/行为/姿态策略逐步推理思考的方法表达【语言/形态/模式/类型/姿态/姿势】关联知识和法律法规1利益构建个人信息控制与不对称获利方法:利用职权或内部人身份,获取未公开的关键信息&#xf…...

手把手教你写LSF esub脚本:从自动补全项目名到拦截危险作业,5个实战案例一次搞定

LSF esub脚本实战指南:5个自动化管理技巧提升集群效率 引言 在大型计算集群管理中,作业调度系统的灵活配置能力直接决定了资源利用效率和管理便捷性。LSF(Load Sharing Facility)作为企业级分布式计算资源管理平台,其e…...

ImageGlass:重新定义Windows图片浏览体验的轻量级利器

ImageGlass:重新定义Windows图片浏览体验的轻量级利器 【免费下载链接】ImageGlass 🏞 A lightweight, versatile image viewer 项目地址: https://gitcode.com/gh_mirrors/im/ImageGlass 还在为Windows自带的图片查看器功能单一而烦恼&#xff1…...

5个简单技巧:用Video Speed Controller让你的视频播放效率翻倍

5个简单技巧:用Video Speed Controller让你的视频播放效率翻倍 【免费下载链接】videospeed HTML5 video speed controller (for Google Chrome) 项目地址: https://gitcode.com/gh_mirrors/vi/videospeed 你是否经常感觉在线课程、会议录像或教学视频播放得…...

3大核心功能解锁《鸣潮》游戏体验:帧率优化、账号管理与抽卡分析

3大核心功能解锁《鸣潮》游戏体验:帧率优化、账号管理与抽卡分析 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 你是否曾因《鸣潮》60帧限制而感到画面卡顿?是否在多账号切换中频繁…...

顺序表完全指南:从原理到实现

引言在数据结构的学习中,线性表是最基础也是最重要的数据结构之一。线性表是n个数据元素的有限序列,这些元素具有相同的特性。线性表从存储结构上分为两种:顺序表:物理地址连续(数组)链表:物理地…...

避坑指南:Linux下用Ollama+MaxKB搭建私有知识库,我踩过的那些GPU和网络坑

避坑指南:Linux下用OllamaMaxKB搭建私有知识库,我踩过的那些GPU和网络坑 在Linux环境下搭建私有知识库,尤其是结合Ollama和MaxKB这样的工具,听起来是个很酷的主意。但说实话,这个过程远没有教程里写的那么一帆风顺。作…...

【限时公开】某金融级Java服务网格生产规范V2.3(含mTLS双向认证配置模板、策略白名单清单、熔断阈值黄金比例)

更多请点击: https://intelliparadigm.com 第一章:Java服务网格的核心架构与金融级合规要求 服务网格在Java生态中的定位演进 传统Java微服务依赖Spring Cloud Netflix组件实现服务发现、熔断与路由,但其侵入式SDK与生命周期耦合难以满足金…...

智能座舱“卡顿”是谁的锅?一次性能与兼容性测试实战复盘(含工具链)

智能座舱“卡顿”是谁的锅?一次性能与兼容性测试实战复盘(含工具链) 当用户按下启动按钮,期待的是丝滑流畅的交互体验,而非令人烦躁的延迟与卡顿。智能座舱作为人车交互的核心界面,其性能表现直接影响用户对…...

10个Gemini3.1Pro办公模板,效率翻倍

现在很多人都知道 AI 能提升办公效率,但真正用起来时,常常卡在第一步: 不知道怎么问、不会写提示词、模型输出结果不稳定。其实,办公场景里最实用的 AI 用法,不是追求“很炫”的效果,而是把高频任务标准化。…...

别再让VIP日志拖慢仿真了!手把手教你用UVM精准控制Synopsys验证VIP的打印与检查

芯片验证效率革命:UVM与Synopsys VIP的日志优化实战指南 当SoC设计规模突破亿门级,验证工程师最常遇到的噩梦是什么?不是复杂的协议时序,不是刁钻的corner case,而是——仿真速度。特别是在回归测试阶段,那…...

DINOv2与SiT-B/2结合的图像生成优化技术

1. 项目背景与核心价值在计算机视觉领域,图像生成技术正经历着从传统GAN到扩散模型的范式转移。DINOv2作为Meta开源的视觉特征提取器,通过自监督学习实现了强大的图像表征能力;而SiT-B/2(Scalable Diffusion Transformer&#xff…...

AI智能体开发实战:基于agent-recipes构建可复现的智能体配方

1. 项目概述:当AI智能体遇上“菜谱”,一场关于可复现性的革命最近在GitHub上闲逛,发现了一个挺有意思的项目,叫agent-recipes。光看名字,你可能会联想到烹饪,但这里的“菜谱”可不是教你做菜,而…...

利用SAR图像相位信息的YOLOv10遥感舰船检测:从原理到实战完全指南

大家好,我最近在做一个遥感目标检测的项目,用的是SAR图像。说实话,踩了不少坑。最开始用的是普通光学图像那套思路,结果发现SAR图像的特性完全不一样。后来查阅了大量文献,发现很多人忽视了SAR图像的一个重要特性——相位信息。这篇文章我就把自己这段时间的心得、代码实现…...

JTAG技术解析:从原理到嵌入式调试实践

1. JTAG技术概述:从测试接口到调试利器JTAG(Joint Test Action Group)这个名词在工程师群体中早已超越了其原始含义,成为硬件测试和嵌入式调试的代名词。这项技术最初由联合测试行动小组在1980年代提出,后来被IEEE采纳…...

蓝河工具箱下载6.6最新版

🔧 蓝河工具箱 - 您的Android好帮手 下载地址:从夸克网盘下载 从UC网盘下载 📱 智能优化,简单操作,专业体验 欢太工具箱 玄戒工具箱 蓝河工具箱是一款专为vivo、iQOO用户打造的全面系统优化工具&#…...

如何快速掌握TQVaultAE:终极泰坦之旅装备管理完整指南

如何快速掌握TQVaultAE:终极泰坦之旅装备管理完整指南 【免费下载链接】TQVaultAE Extra bank space for Titan Quest Anniversary Edition 项目地址: https://gitcode.com/gh_mirrors/tq/TQVaultAE 你是否曾在《泰坦之旅》中为仓库爆满而烦恼?是…...

别再只用if-else了!用状态机优化你的STM32循迹小车代码,让逻辑更清晰

用状态机重构STM32循迹小车:告别if-else的工程化实践 当你的循迹小车第一次成功沿着黑线跑起来时,那种成就感无与伦比。但随着功能不断增加——十字路口识别、起跑线检测、障碍物避让——你会发现原本清晰的if-else结构正在变成一团乱麻。每次修改都可能…...

避坑指南:nRF52832 SAADC配置中的那些‘坑’——增益、参考电压与EasyDMA缓冲区设置详解

nRF52832 SAADC实战避坑手册:从参数配置到DMA优化的深度解析 在嵌入式开发中,模拟信号采集是连接物理世界与数字系统的关键桥梁。nRF52832的SAADC(Successive Approximation Analog-to-Digital Converter)模块因其集成度高、功耗低…...