亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 3243 | 回復(fù): 2
打印 上一主題 下一主題

load executable失敗,但是execle函數(shù)仍然不返回 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-09-20 16:18 |只看該作者 |倒序?yàn)g覽
Hi ALL,
     小弟最近在ARM平臺(tái)的uclinux系統(tǒng)上寫程序,發(fā)現(xiàn)了一個(gè)問(wèn)題,在這里和大家共享一下,希望能得到大家的幫助!先謝啦!
    問(wèn)題描述:我在程序中通過(guò)vfork產(chǎn)生一個(gè)子進(jìn)程,在子進(jìn)程中通過(guò)exec函數(shù)族加載執(zhí)行一個(gè)新的executable,暫且把這個(gè)新executable叫做B,B中有一個(gè)大的全局?jǐn)?shù)組,所以導(dǎo)致其bss段很大,execve執(zhí)行B時(shí),kernel加載B失敗,按理exec應(yīng)該返回錯(cuò)誤,但是現(xiàn)在exec沒(méi)有返回,其在kernel中的call chain如下:
  sys_execve()->do_execve()->search_binary_handler()->load_flat_binary()->load_flat_file()...

  通過(guò)debug,現(xiàn)在基本上確定導(dǎo)致exec不返回的代碼是在load_flat_file()中,代碼如下:
===================================================
        /* Flush all traces of the currently running executable */
        if (id == 0) {
                result = flush_old_exec(bprm);
                if (result) {
                        ret = result;
                        goto err;
                }

                /* OK, This is the point of no return */
                set_personality(PER_LINUX_32BIT);
        }
==========================================================
在上面這段代碼后面,就是do_mmap() for text, data/bss section了,而我的程序B就是在do_mmap() for data/bss時(shí)因內(nèi)存不夠失敗的。

我想知道的是:load_flat_file()返回錯(cuò)誤后,call chain上就沒(méi)有函數(shù)做一些資源釋放或者rollback方面的工作嗎?因?yàn)槲矣谩皃s“命令查看,B進(jìn)程一直處在運(yùn)行狀態(tài),但是進(jìn)程名加了中括號(hào)。exec函數(shù)沒(méi)有返回,使用waitpid也檢測(cè)不到狀態(tài)改變。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2011-09-22 16:03 |只看該作者
沒(méi)人看俺的帖子嗎?

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2011-09-28 13:53 |只看該作者
這個(gè)問(wèn)題解決了。在load_flat_file()函數(shù)中,當(dāng)要執(zhí)行的程序完全脫離了父進(jìn)程之后,也即flush_old_exec()調(diào)用后,凡是有失敗的地方,都要調(diào)用send_sig(SIGKILL, current, 0)殺kill掉當(dāng)前的進(jìn)程,這樣的話,load失敗的process就不會(huì)永駐內(nèi)核了。

在aout/elf格式的loader中,也是這么個(gè)做法,為什么在flat格式的loader中,就沒(méi)有這么做呢?不明白。有可能是kernel的一個(gè)bug。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP