2015-08-24 40 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

相关问题