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

湖北智能网站建设制作广州市网站建设公

湖北智能网站建设制作,广州市网站建设公,乌兰察布做网站公司,网站绑定微信账号背景 最近移植TI电量计芯片bq40z50的驱动,移植完毕后,能正常读取电池信息了,但是无意中发现驱动卸载会导致Linux卡死,死前终端闪过大量打印,将putty的缓冲区都耗尽了,必须启用syslog转发并用visual syslog…

背景

最近移植TI电量计芯片bq40z50的驱动,移植完毕后,能正常读取电池信息了,但是无意中发现驱动卸载会导致Linux卡死,死前终端闪过大量打印,将putty的缓冲区都耗尽了,必须启用syslog转发并用visual syslog server接收才能全部看到:
驱动卸载导致Linux卡死
虽然实际应用中一般不会卸载此类驱动,但考虑到后果严重,还是想解决一下。

问题根因

其实,这是一个double freeBUG。

驱动在加载时调用devm_power_supply_register()注册了一个power_supply对象,在卸载时调用power_supply_unregister() 释放了之前注册的power_supply对象。

看上去一切正常,然而devm前缀意味着Linux会在驱动卸载后再次调用一次power_supply_unregister() ,释放devm_power_supply_register()之前注册的对象——即刚才已经释放了的power_supply对象——从而产生了double free操作,导致Linux卡死。

解决方法

fg_psy_register()函数里的devm_power_supply_register()替换成power_supply_register(),即去掉devm前缀。

直接删除fg_psy_unregister函数及对其的调用更好吧?

是的,这样更好,因为devres会在驱动加载失败时或卸载时自动(逆序)释放devm_xxx申请的资源。

不过考虑到有些设备相关操作可能会在第m个资源和第n个资源之间执行,如果用devm接口,则该操作就提前到所有资源释放前执行,可能会引入问题,还是保守点吧。

http://www.laogonggong.com/news/60250.html

相关文章:

  • 优秀的个人网站设计网站项目案例
  • 重庆有哪些做网站的公司wordpress添加 logo
  • 有些网站突然无法访问买空间服务器做网站怎么弄
  • 宝安网站 建设seo信科河北石家庄最新数据消息
  • 网站建设误区图wordpress模板转为emlog
  • 网站建设有哪些软件网站建设项目描述
  • 网站策划与运营考试题前端开发是什么意思
  • 如何做视频网站 需要注意的地方ppt模板图片 背景
  • 高端网站建设机构flash 网站
  • 网站互动永久免费可联网的进销存软件
  • 视频网站建设类图贵州网络科技有限公司
  • 网站开发教程lnmp装wordpress
  • 创建网站容易吗山东泰安建筑工程集团有限公司
  • soho需要建网站吗做拍卖的网站
  • 服装网站模板下载资源下载WordPress主题
  • 响应式网站咨询免费的开发网站建设
  • 如何做配送网站互联网+创新创业项目计划书案例
  • wechat下载网站seo重庆
  • 企业网站开发方案我要表白网在线生成
  • 乡镇网站建设和培训个体户门头图片
  • 微商城网站建设平台合同范本医疗网站建设渠道
  • 广东商城网站建设报价网战
  • dede网站后台导入文档网站建设费用预算模板
  • 网站设计改版深圳创业补贴去哪里申请
  • h5响应式的网站洮南住建局网站
  • 2023年税收最新政策seo查询百科
  • 做网站的空间要多大的下载 asp网站
  • 中国建设住建网站php 网站超市
  • 深圳坪山网站建设公司惠州市博罗县建设局网站
  • zencart 网站搬家开一个设计工作室需要什么