在redhat linux 3.10.0的862版本出现此问题,断开蓝牙键鼠设备连接时出现死机,该问题在957版本得到修复。
原因是断开连接时经过hid模块的hidinput_cleanup_battery(),其内部的power_supply_unregister() 已经释放过一次的内存被下面的kfree又释放了一次,造成内存问题,所以出现死机的问题。修改方式如下:
修改文件:kernel/driver/hid/hid-input.c
static void hidinput_cleanup_battery(struct hid_device *dev)
{
+ const struct power_supply_desc *psy_desc;
+
if (!dev->battery)
return;
+ psy_desc = dev->battery->desc;
power_supply_unregister(dev->battery);
- kfree(dev->battery->desc->name);
- kfree(dev->battery->desc);
+ kfree(psy_desc->name);
+ kfree(psy_desc);
dev->battery = NULL;
}
#else /* !CONFIG_HID_BATTERY_STRENGTH */
按如上代码即可修复死机问题。