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. --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.200.98.254 (臺灣)
※ 文章網址: https://webptt.com/m.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燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP