2015-08-24 66 views
1

我想掛鉤unlinkat.my掛鉤函數。如何從文件描述符獲得內核空間的絕對路徑

但我只獲取文件名而不是絕對路徑.so我想絕對路徑來比較string.when我嘗試rm -r比我只獲得文件名如果我獲得絕對路徑然後它work.so請告訴我如何我得到絕對路徑。
我的代碼是

long mw_sys_unlink(int dfd, const char *filename ,int flag) 
{ 
     long ret; 
     if(strstr(filename,"/tmp/a/")) 
     { 
       printk(KERN_INFO "file %s has not been deleted by kernel module\n", filename); 
       return -1; 
     } 
     else 
     { 
       ret = orig_sys_unlink(dfd ,filename,flag); 
       printk(KERN_INFO "file %s has been deleted", filename); 
       return ret; 
     } 
} 

回答

1

嘗試以下操作:

char *tmp = (char*)__get_free_page(GFP_TEMPORARY); 

    file *file = fget(dfd); 
    if (!file) { 
     goto out 
    } 

    char *path = d_path(&file->f_path, tmp, PAGE_SIZE); 
    if (IS_ERR(path)) { 
     printk("error: %d\n", (int)path); 
     goto out; 
    } 

    printk("path: %s\n", path); 
out: 
    free_page((unsigned long)tmp); 
+0

感謝亞瑟它爲RM -r。 –

+0

但是當我在當前目錄中使用rm命令刪除單個文件而不是路徑時,不會給出任何東西。 –

+0

在這種情況下,你的'unlink'函數是否正常調用?或者只是路徑返回無效值?無論如何,我相信你可以自己調試它。 – Arthur

相關問題