SetupBBS 板


Maple 系列 Bug - str_decode 可能影響之系統: Maple v2.36, Maple v3.02, Maple v3.10, 以及其延伸版本 像是 Sob, Ptt, 以及 WD 等. 目前已經確定影響之系統: Maple v3.10 (自己的站) WD 全版本 (幫別人管的站) ----------------------------------------------------------------------------- 問題背景: str_decode.c (/home/bbs/src/lib) str_decode 是將一個原本以 QP/BASE64 編碼的字串內容,將其解碼後, 存放回原字串的一個函式。如果傳入了大於緩衝區數目的字元進入,那麼函式 運作期間,將導致 SIGSEGV (segmentation violation),程式終止運行. 有問題的程式區段如下: (以 Maple 為例子) void str_decode(str) unsigned char *str; { int adj; unsigned char *src, *dst; unsigned char buf[512]; ← (1) src = str; dst = buf; adj = 0; . . 中間為程式解碼過程 . *dst = 0; ← (2) strcpy(str, buf); } 問題即在上述 (1)、(2) 的地方。 假設一大串編碼資料送入 str_decode(),解碼過後的結果為 1024 bytes, 而原先 (1) 所配給 buf 緩衝區僅為 512 bytes, 程式執行到 (2) 的地方時, 指標已經超出了 buf 區段,將產生 Invalid memory reference. 接著就會產生 SIGSEGV 訊號, 程式終止運行. ----------------------------------------------------------------------------- 系統影響: 目前已知會產生大量的 0 byte 檔案在每個使用者目錄下. (如 /home/bbs/usr/c/chunhan, 檔名為 @???????? ) - Maple 系列 (如 /home/bbs/home/chunhan, 檔名為 M.??????????.A) - WD 系列 其他的影響還不知道, 請各位立即檢查 1. /home/bbs/run/mailog - Maple 系列 (WD 系列沒有 log 可以檢查) 裡面是否有以下記錄: (請在 /home/bbs/run 下 grep signal mailog 指令) 如果出現以下內容, 表示您的系統內有本 bug. 04/13 15:59:17 <bbsmail> signal [11] 04/16 09:42:49 <bbsmail> signal [11] 04/16 15:53:33 <bbsmail> signal [11] 04/22 05:21:15 <bbsmail> signal [11] 04/22 05:21:48 <bbsmail> signal [11] 2. 檢查每個使用者目錄下是否有許多為零的檔案: 請在 home/bbs/usr 下以下指令: (Maple 系列) find . -size 0 -name '@*' 請在 home/bbs/home 下以下指令: (WD 系列) find . -size 0 -name 'M*' 如果您發現每個人的目錄下都有不少這種 0 byte 的檔案, 那麼更可以確定您的系統有這個 bug 存在. 值得注意的是, 這些 0 byte 的檔案都不存在於 .DIR 當中, 可以將其刪除. 請參考後面介紹. 這些 0 byte 的檔案起因在於 bbsmail.c,由於外界以 E-mail 寄入站內信箱 時,bbsmail 無法順利處理單行超過 512 bytes 的信件,因此造成 SIGSEGV, 然而,之前開過的檔案並未因此而消失,因此在程式結束之後,會殘留 0 byte 的檔案於使用者的目錄當中. 當外界(如廣告信) 瘋狂丟這樣的信件到系統上時, 很容易照成檔案系統被垃圾塞滿. ----------------------------------------------------------------------------- 修正辦法: 以下將提出一些patch 辦法, 建議都做: 1.修正 str_decode.c (/home/bbs/src/lib) 不管是 WD 或是 Maple 都可以做以下修正: (如果您的系統是 Maple, 您可以修改如下) void str_decode(str) unsigned char *str; { int adj; unsigned char *src, *dst; /* unsigned char buf[512]; */ /* by chunhan 2002.04.28 : 將 buffer size 調高, 避免 SIGSEGV */ unsigned char buf[5120]; (如果您的系統是 WD, 您可以修改如下) void str_decode(str) unsigned char *str; { int code, c1, c2, c3, c4; unsigned char *src, *dst; /* unsigned char buf[512]; */ /* by chunhan 2002.04.28 : 將 buffer size 調高, 避免 SIGSEGV */ unsigned char buf[5120]; 以上是我自己的修正辦法, 如果您有其他改法請自行修改. 2.修正 bbsmail.c (/home/bbs/src/util) bbsmail.c (如果您的系統是 Maple, 您可以修改如下) /* parse header */ title[0] = sender[0] = '\0'; while (fgets(buf, sizeof(buf), stdin) && buf[0]) { /* by chunhan: 2002.04.27 強制 crop, 避免 SIGSEGV */ buf[511] = 0; /* ---------------------------------------------- */ if (!memcmp(buf, "From", 4)) { (如果您的系統是 WD, 您可以修改如下) fputs(genbuf, fout); while (fgets(genbuf, sizeof(genbuf), stdin) != NULL) { /* by chunhan: 2002.04.27 強制 crop, 避免 SIGSEGV */ genbuf[511] = 0; /* ---------------------------------------------- */ str_decode(genbuf); strcat(genbuf,"\n"); fputs(genbuf, fout); 如此修正之後,就不會有 SIGSEGV 的產生,也不會造成一堆廢檔案 存在系統當中. 以上是我自己的修正辦法, 如果您有其他改法請自行修改. ----------------------------------------------------------------------------- 補救辦法: 這邊的指令您可以當作參考, 他將幫助您刪除系統上這些為 0 byte 的廢檔案。 請在 home/bbs/usr 下以下指令: (Maple 系列) find . -size 0 -name '@*' -exec rm {} \; 請在 home/bbs/home 下以下指令: (WD 系列) find . -size 0 -name 'M*' -exec rm {} \; 進階補救: 所造成的垃圾檔案是否一定是 0 Byte? 絕大多數是. (在我的 Maple 系統上的確如此, 只有 0 byte 的檔案) 可是我意外的發現竟然也會有 4096, 8192, 16384 Bytes 等的檔案出現. (在 WD 的系統下) 因此我的建議是, 寫個小程式, 將 .DIR 解析出來。 若發現該使用者目錄中的檔案,沒有出現在 .DIR 中的話, 將其刪除之. (這部份的 source 請自行 implement) ----------------------------------------------------------------------------- 以上這份報告,希望能夠帶來幫助給大家。 若有任何的問題,歡迎討論。 - 2002.04.28 Chen Chun-Han. [email protected] Dept. of Computer & Information Science -- ※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: u5-214.u203-203.giga.net.tw
1F:→ Kukuxumusu: 只是偶爾悶悶的了 醫師當時是覺得不用處理 我也不能 05/06 01:27
2F:→ Kukuxumusu: 免強他 05/06 01:27







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燈, 水草
伺服器連線錯誤,造成您的不便還請多多包涵!
「贊助商連結」






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燈, 水草

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

TOP