C_and_CPP 板


LINE

请教一下两个问题,如下 为什麽path分配空间後,最後面写kfree(path)会导致crash,这样写法是错的吗? 另外code写free_token = token,然後最後kfree(free_token),为什麽要多写一个指标去free? 谢谢 int test(struct device *dev, const char *p_i8_buf, size_t count) { int i32_ret = 0; char *temp_buf, *token, *path; char *free_temp_buf, *free_token; unsigned long fun = 0; const char *delim = " ,"; temp_buf = kzalloc(RAYDIUM_FW_BIN_PATH_LENGTH + 1, GFP_KERNEL); if (temp_buf == NULL) { return -ENOMEM; } token = kzalloc(RAYDIUM_FW_BIN_PATH_LENGTH + 1, GFP_KERNEL); if (token == NULL) { kfree(temp_buf); return -ENOMEM; } path = kzalloc(RAYDIUM_FW_BIN_PATH_LENGTH + 1, GFP_KERNEL); if (path == NULL) { kfree(temp_buf); kfree(token); return -ENOMEM; } free_token = token; free_temp_buf = temp_buf; strlcpy(temp_buf, p_i8_buf, count); token = strsep(&temp_buf, delim); if(token == NULL) { kfree(free_token); kfree(free_temp_buf); kfree(path); return -EINVAL; } i32_ret = kstrtoul(token, 16, &fun); if (i32_ret < 0) { kfree(free_token); kfree(free_temp_buf); kfree(path); return i32_ret; } path = strsep(&temp_buf, delim);//log path parse(dev, fun, path); kfree(free_token); kfree(free_temp_buf); //kfree(path); //will not crash <----------------- or kfree(path); //will crash<------------------------ return count; } crash log: [ 1316.983483] Unable to handle kernel paging request at virtual address 00005e00 [ 1316.990498] pgd = db59c000 [ 1316.993168] [00005e00] *pgd=00000000 [ 1316.996642] Internal error: Oops: 5 [#1] PREEMPT SMP ARM [ 1317.001840] Modules linked in: drmboot(P) mali_kbase [ 1317.006705] CPU: 3 PID: 1326 Comm: sh Tainted: P 3.10.0 #6612 [ 1317.013355] task: db702a00 ti: db728000 task.ti: db728000 [ 1317.018648] PC is at kmem_cache_alloc_trace+0x7c/0x1c0 [ 1317.023676] LR is at test+0x98/0x2fc [ 1317.028707] pc : [<c0100620>] r : [<c04b39a8>] sr: 20010013 [ 1317.028707] sp : db729eb0 p : 00000000 p : 00000101 [ 1317.039960] r10: 00000f53 9 : 01328000 8 : c04b39a8 2. 通常看到都是写法3, 我在看很多别人写的code的写法都是1,请问是不是改成2才对? if(!handle)等价if(handle==NULL)吗? 谢谢回答 struct input_handle *handle; (1) handle = kzalloc(sizeof(*handle), GFP_KERNEL); if (!handle) return -ENOMEM; (2) handle = kzalloc(sizeof(*handle), GFP_KERNEL); if (!handle) { kfree(handle); return -ENOMEM; } (3) handle = kzalloc(sizeof(*handle), GFP_KERNEL); if (handle == NULL) { return -ENOMEM; } kfree(handle); ----- Sent from JPTT on my Asus ASUS_Z012DA. --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.200.98.254 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1682046179.A.E43.html
1F:推 Schottky: 问题出在 strsep 那一行,你 kfree() 的 path 不是当初 04/21 13:24
2F:→ Schottky: kzalloc() 出来的位址 04/21 13:25
3F:推 gusion: 你的path在strsep那行被更新了,变成指到temp_buf里面的某 04/21 13:25
4F:→ gusion: 个位置,不是原本kzalloc出来的那块,所以最後kfree(path) 04/21 13:25
5F:→ Schottky: 还有 code 麻烦缩排一下,我还要用 indent 缩排过才看得 04/21 13:25
6F:→ gusion: 才会出错,另外没有kfree(path),原本allocate的memory就 04/21 13:25
7F:→ gusion: 没人free,也会memory leak 04/21 13:25
8F:→ Schottky: 懂你在写什麽 04/21 13:25
9F:推 gusion: 另外,error handling我是习惯在尾巴加上label,用goto 04/21 13:28
10F:→ lycantrope: 2-(2)应该是拿枪射自己脚吧ww 04/21 17:48







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP