2014-07-24 54 views
2

給定一個套接字結構,有沒有什麼辦法可以在內核模塊中獲得這個套接字的所有者進程?也就是說,給定一個套接字結構,我試圖獲取它的所有者進程的進程描述符(task_struct結構)?如何獲取套接字的所有者進程?

我最初的想法是遍歷任務列表。對於遍歷的每個進程p,只需檢查p的打開文件描述符是否包含與套接字結構相關的文件描述符。 (在struct socket中,有一個字段結構文件*文件)。

我不確定內核是否允許我遍歷任務列表。任何人都有一些想法如何做到這一點?謝謝。

回答

0

我認爲這不是一個壞主意。看看我寫的代碼有一天:

struct task_struct *task; 
struct list_head *t, *t1; 
... 
list_for_each(t, t1) { 
#ifdef CONFIG_UIDGID_STRICT_TYPE_CHECKS 
    if ((task_uid(task)).val == 0) /* no root processes, only userspace*/ 
#else 
    if ((task_uid(task)) == 0) 
#endif 
    continue; 
    task = list_entry(t, struct task_struct, tasks); 
    /*Now you have task_struct of userspace program*/ 
    /*and may do whatever you want))) */ 
    /*E.g. to figure out opened file descriptors*/ 
} 

有一點補充:我想你知道這個代碼應該在單內核線程中運行。內核模塊的init函數沒有執行的功能。

+0

謝謝,這有幫助。順便說一句,你的模塊代碼運行哪個內核版本? – ppsun

+0

反對?可能是你的意思是...在跑? 我在內核版本3.2.0,3.10.2上測試過 – 0xDen