linux 从路径名获取规范路径

t5fffqht  于 2023-03-07  发布在  Linux
关注(0)|答案(1)|浏览(161)

我正在编写一个内核模块,它劫持了几个系统调用。其中几个系统调用将路径作为参数。出于我的目的,我需要使用完整路径,但由于这些参数是作为字符串传递的,因此可以是"documents""/home/main/../bob""../lib"等任何内容。我需要获得这些引用的真实的路径,但我不知道使用哪个函数或需要哪些信息(例如,当前工作目录等)。
显然,内核有某种方法可以使路径标准化,以便它可以执行SELinux、IMA和许多其他操作所必需的操作。

jhdbpxl9

jhdbpxl91#

char *get_full_path(int dfd, const char *__user fname) 
{    
struct path tmp_path;
unsigned int lookup_flags = LOOKUP_EMPTY;

#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0)
    int error = user_path_at(dfd, fname, lookup_flags, &tmp_path);
#else
    int empty = 0;
    int error = user_path_at_empty(dfd, fname, lookup_flags, &tmp_path, &empty);
#endif
if (0 == error) 
{
    char tpath[512] = { 0 };
    char *p_full_path = d_path(&tmp_path, tpath, 512);      
    return p_full_path;
}   
return "";
}

相关问题