Linux 内核小bug

linux 内核warn_on/Bug_on 本文介绍了Linux内核中两种错误处理机制:warn_on()和bug_on()。warn_on()用于报告潜在问题,会打印警告信息和调用堆栈但允许继续执行;而bug_on()用于严重错误,会触发Oops并打印详细错误信息(包括调用堆栈),通常导致进程终止或系统崩溃。两者都通过条件判断触发,但处理方式不同:warn_on()记录警告后继续执行,bug_on()则终止执行并打印完整调试信息。文中通过代码示例展示了两种机制的具体使用场景和输出格式,并说明了如何通过串口、dmesg或系统日志获取这些调试信息。 阅读详情

今天读着读着代码,竟然无意中发现Linux 0.11内核有个小bug,呵呵,人非圣贤孰能无过。

 

// 在目录项数据块中搜索匹配指定文件名的目录项,首先让de 指向数据块,并在不超过目录中目录项数
// 的条件下,循环执行搜索。
    i = 0;
    de 
= (struct dir_entry *) bh->b_data;
    
while (i < entries)
    
{
// 如果当前目录项数据块已经搜索完,还没有找到匹配的目录项,则释放当前目录项数据块。
        if ((char *)de >= BLOCK_SIZE+bh->b_data) 
        
{
            brelse(bh);
            bh 
= NULL;
// 在读入下一目录项数据块。若这块为空,则只要还没有搜索完目录中的所有目录项,就跳过该块,
// 继续读下一目录项数据块。若该块不空,就让de 指向该目录项数据块,继续搜索。
            if (!(block = bmap(*dir,i/DIR_ENTRIES_PER_BLOCK)) || !(bh = bread((*dir)->i_dev,block)))
            
{
                i 
+= DIR_ENTRIES_PER_BLOCK;
                
continue;
            }

            de 
= (struct dir_entry *) bh->b_data;
        }

// 如果找到匹配的目录项的话,则返回该目录项结构指针和该目录项数据块指针,退出。
        if (match(namelen,name,de))
        
{
            
*res_dir = de;
            
return bh;
        }

// 否则继续在目录项数据块中比较下一个目录项。
        de++;
        i
++;
    }

 

   其中 if (!(block = bmap(*dir,i/DIR_ENTRIES_PER_BLOCK)) || !(bh = bread((*dir)->i_dev,block)))  如果bh读取失败,将跳出本次循环,然而在下次循环时又会引用bh这个结构指针,因为上次调用是失败的,所以可能出现内存无效引用,导致出现错误。不过听赵博说这个错误其实 "很少发生或者几乎不会发生",所以一直到Linux 1.00版这个bug才修正!

内核208天bug分析 腾讯大神写的内核timer调试笔记,典型的208天才重现一次的bug调试技巧 立即下载

相关推荐

Anki小白必看:手把手教你打造高颜值个性化笔记模板(附Leaflyer模板下载)

本文为Anki新手提供详细的个性化笔记模板设计指南,从基础配置到高级定制技巧,帮助用户打造高效记忆系统。特别推荐Leaflyer模板下载,通过视觉优化和功能强化,显著提升学习体验和记忆效率。

weixin_28717969的博客 433

Linux 内核小bug

Linux内核小bug刺猬@http://blog.youkuaiyun.com/littlehedgehog 今天读着读着代码,竟然无意中发现Linux 0.11内核有个小bug,呵呵,人非圣贤孰能无过。 // 在目录项数据块中搜索匹配指定文件名的目录项,首先让de 指向数据块,并在不超过目录中目录项数// 的条件下,循环执行搜索。    i = 0;    de = (struct

刺猬小屋 1307

[kriging](一)网上下载的kriging克里金的C++程序的初步调试

笔者在网上下载了一份克里金的C++程序,水平有限,正在逐步地调试中。 初步 克里金法现在在许多软件都已经有集成了,据笔者所知: arcgis : 看过有的arcgis培训视频里面简略介绍了里面的插值方法,有克里金。 surfer :笔者用过这个,效果很好。 gocad :听说有 landmark &jason :研究生时候用的专业的石油物探软件,里面有克里金法,万恶的开始。 pykrig...

FOREST优快云 5610

严谨的态度很重要

liangtaopc的专栏 568

Cadence Allegro 17.2 PCB设计避坑指南:从焊盘制作到封装绘制的完整流程

本文详细解析了Cadence Allegro 17.2在PCB设计中的关键操作技巧,从焊盘制作到封装绘制的完整流程。通过0402电阻和2.54mm排针的实例,揭示新手常见错误及解决方案,包括焊盘参数设置、层类型区分和坐标输入规范,帮助工程师避免设计返工和生产事故。

weixin_28683391的博客 407

国家基因组科学数据中心(NGDC)---组学原始数据如何上传GSA

在发表文章之前我们需要将测序的原始数据上传到一个公共库,并在文中提供accession number,实现数据的公开共享,这是国际惯例。以前我们上传数据时只能上传到美国国立生物技术信息中心(NCBI)、欧洲生物信息学研究所(EBI)、日本核酸数据库(DDBJ),现在中国科学院北京基因组研究所(国家生物信息中心)国家基因组科学数据中心 (CNCB-NGDC)—中国的 "NCBI" 已经建立并日渐完善。组学原始数据归档库(GSA)是组学原始数据汇交、存储、管理与共享系统,是国内首个被国际期刊认可的组学数据发布平

sisichen 1万+

Linux 0.11中进程睡眠和唤醒机制思考

当进程尝试访问一个边界数据时,有可能由于资源已经被占用而进入睡眠状态。当资源被释放后,就需要把睡眠的进程唤醒。

水土精灵的专栏 1200

浅谈功放PA的VBW

摘要:VBW(视频带宽)反映功放的宽带非线性特性和记忆效应,影响数字预失真(DPD)校正能力。其成因是功放管寄生参数(如Cshunt和Leff)形成低频并联谐振,导致供电臂阻抗增大,引发电压波动和记忆效应。测试方法包括双音IM3/IM5测试(以两侧IM3差≥3dB定义VBW)和魔T测试(通过S21曲线测量谐振频率)。改善措施主要是减小Leff,如采用双电源平衡馈电。VBW指标要求通常为魔T测试结果大于3倍信号带宽,以确保功放线性度。

weixin_49761275的博客 1573

Linux内核oops panic简析

内核异常的级别大致分为三个:BUG、oops、panic。BUG是指那些不符合内核的正常设计,但内核能够检测出来并且对系统运行不会产生影响的问题,比如在原子上下文中休眠,在内核中用 BUG 标识。Oops杀死导致异常的进程或者挂起系统。panic本意是“恐慌”的意思,这里意旨 kernel 发生了致命错误导致无法继续运行下去的情况。根据实际情况 Oops最终也可能会导致panic 的发生。本文将简单分析下这三种异常的流程。

私房菜 6107

开放平台 - 互动玩法演进之路

随着直播业务和用户规模日益壮大,如何丰富直播间内容、增强直播间内用户互动效果,提升营收数据变得更加关键。

bilibili_TC的博客 1738

SAP ABAP Append structure 介绍

所有在 append structure 上增强的字段都是 append structure 的一部分,这意味着对这些增强所做的任何更改仅仅施加在 append structure 上,而不会影响被增强的 ABAP DDIC 结构。这同样适用于 transport. 激活数据库表或结构时,会找到所有关联的 append structure,并将它们的组件附加到数据库表或结构。Append structure(附加结构)是 ABAP 字典中附加到另一个结构或数据库表并将其组件附加到它们的结构。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1165

炫技!bug 排查大曝光,涉及Linux 内核的那种

注意 CPU 那一列,显示 CPU 占用率为0%,我们发现此时该进程几乎没有占用CPU,这基本上是在告诉我们该进程是被卡死在内核态,进程要进入内核态那么就是因为调用了某个阻塞式系统调用导致被操作系统挂起,那么该怎么知道进程调用了什么系统调用呢?这里值得注意的是,因为 ps 打印的只是运行ps命令这一时刻相应进程的状态,也就是说运行一次 ps 相当于一次采样,因此你应该多运行几次ps,确保运行结果没有变化,否则只运行一次并且时间足够巧那么有可能会获得到一个错误的线索。就在这时博主的脑海里浮现出了岛国的。

hknaruto的专栏 328

1、工作流介绍

工作流起源于办公自动化,是对软件中业务流程的抽象。通过工作流将各个任务有序组织起来形成一个完整的业务闭环。比如:请假审批流程,网上购物流程,银行贷款流程;!

leyoliu的博客 5108

linux内核中的BUG 和 BUG_ON

linux内核中的BUG 和 BUG_ON 在内核代码中,经常会看到一些调试函数,如BUG,BUG_ON等。 使用前,先在内核配置中把kernel debug选上: make menuconfig: kernel hacking--> kernel debug   作用:一些内核调用可以用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BU

chenglinhust的专栏 5110

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

linux的内核有多小,Linux 内核有小bug?

今天读着读着Linux代码,竟然无意中发现Linux 0.11内核有个小bug,呵呵,人非圣贤孰能无过。// 在目录项数据块中搜索匹配指定文件名的目录项,首先让de 指向数据块,并在不超过目录中目录项数// 的条件下,循环执行搜索。i = 0;de = (struct dir_entry *) bh->b_data;while (i < entries)...{// 如果当前目录项数据...

weixin_39997443的博客 132

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

修复了Linux内核Linus写的一个bug

是真的。最近我的linux内核启动流程课程,讲到了文件系统相关的东西,所以这两天我在重新熟悉下代码。昨天晚上读代码时,偶然发现了一个小bug,所以马上发了一个patch给内核社区:然后,很快就得到了回复,确认我这个修复没啥问题:接着,又在刚刚,通知我这个patch被合并了:其实,这次的这个patch是个比较小的修改,倒是不值得写篇文章特意说下。但是,写这个bug的人可不一般啊,他可是真正的Linu...

嵌入式Linux 174

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Gdb远程调试Linux内核遇到的Bug

知识共享许可协议本作品采用知识共享署名 4.0 国际许可协议进行许可。转载保留声明头部与原文链接https://luzeshu.com/blog/gdb-bug 本博客同步在http://www.cnblogs.com/papertree/p/6298774.html 在用qemu + gdb 调试linux内核时,遇到一个gdb的bug:“Remote 'g' packet reply

umke888的博客 733

Linux 内核 BUG: Android 手机 USB 网络共享 故障

Linux 系统虽然可能 BUG 比较多, 但是因为有源代码, 随便来个人 (比如 穷人小水滴) 就可以随时随地修 BUG.这就是开源的好处!本文使用 CC-BY-SA 4.0 许可发布.

穷人小水滴的博客 1320

Linux内核bug分析,看Linux内核前辈解Bug你会有什么感想

本文转载自微信公众号「相遇Linux」,作者JeffXie。转载本文请联系相遇Linux公众号。一名叫John Garry的人给Linux内核社区上报了一个bug, 说有人升级内核到V5.10-rcX之后,执行dd和sync之后看到进程有hang住的情况:Someguysinternallyupgradedtov5.10-rcXandstarttoseeahangafterdd+sy...

weixin_31315567的博客 541

linux 内核态调试函数BUG_ON()

转载地址:https://www.cnblogs.com/woshare/p/5770905.html 一些内核调用可以用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BUG_ON()。 当被调用的时候,它们会引发oops,导致栈的回溯和错误信息的打印。为什么这些声明会导致 oops跟硬件的体系结构 是相关的。大部分体系结构把BUG()和BUG_ON()...

kunkliu的博客 374

j link linux内核_由内存池和Linux内核红黑树联合引发的bug

PainterEngine在使用x64编译的时候,出现了一个访问异常地址的错误。经过定位来到了px_rbtree.h,px_rbtree.c的代码,这段代码是由linux内核中的修改移植过来的,负责实现一个红黑树。 当时觉得很奇怪,linux内核移植过来的代码应该是足够的稳定且优秀,为什么会引发bug呢通过跟踪发现,这居然是由一个内存对齐引发的bug。 在最初移植rbtree代码时,...

weixin_39640646的博客 135

Java线上问题排障:Linux内核bug引发JVM死锁导致线程假死

Java本质上还是离不开操作系统,一来Java源码是用C/C++实现的,二来java进程还是需要依附于操作系统和硬件资源,有时候一些问题是操作系统级别导致的,下面的整个事件是源自一则真实的线上案例。 过程: JVM死锁导致线程不可用,然后会瞬间起N个线程,当然起再多也是不可用的,因为需要的对象发生死锁,然后耗尽文件句柄导致外部请求也就是TCP连接无法建立产生拒绝服务,看起来就像线程假死...

深度Java 6112

剖析一个由sendfile引发的linux内核BUG

在论坛上看到一个讲linux内核BUG的帖子,利用这个BUG,一个普通用户能够在运行某个程序之后,获得root权限。 示例的代码如下:http://www.securityfocus.com/data/vulnerabilities/exploits/36038-4.tgz 在ubuntu 9.04,内核版本2.6.28.12的机器上测试通过。(...

weixin_33712881的博客 118

linux内核bug问题排查过程详细报告

Linux Kernel BUG:soft lockup CPU#1 stuck分析 1.线上内核bug日志 kernel: Deltaway too big! 18428729675200069867 ts=18446743954022816244 write stamp =18014278822746377 kernel:------------[ cut here ]---------...

星.云计算 4289
上一篇: 自己动手写操作系统
下一篇: 电梯算法
jun2ran
博客等级 码龄19年 103粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值