在linux内核中,从相对路径到绝对路径。

问题描述 投票:0回答:1

当我从钩子上收集args时,我遇到了一些困难。sys_opensys_execve.

两个系统调用都使用文件名作为第一个参数,参数可以是绝对路径或相对路径。我想得到的是 绝对路径 是绝对路径还是相对路径。

例如:如果文件名是

如果文件名是 "/root/Desktop/../Downloads",我需要把它改成 "/root/Downloads".

我想操作系统的源码是有分辨率的,但我最终读到的源码为 "__link_path_walk".

该功能 "__link_path_walk" 是用来处理 "../" and "./"但似乎该函数没有得到绝对路径,而是得到了最后的条目(在源代码中注明)。我的操作系统代码版本是 linux-2.6.32-754.el6。.

希望得到任何帮助。

linux-kernel system-calls
1个回答
0
投票

我花了2天时间解决了这个问题,我在sys_stat中找到了解决方案,代码如下。

int get_absolute_path(const char __user *filename){
struct path path;
int dfd=AT_FDCWD;
char *ret_ptr=NULL;
int error = -EINVAL,flag=0;
unsigned int lookup_flags = 0;
char *tpath=kmalloc(1024,GFP_KERNEL);
if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT)) != 0)
    goto out;
if (!(flag & AT_SYMLINK_NOFOLLOW))
    lookup_flags |= LOOKUP_FOLLOW;
error = user_path_at(dfd, filename, lookup_flags, &path);
if (error)
    goto out;
ret_ptr = d_path(&path, tpath, 1024);
printk("%s\n",ret_ptr);
kfree(tpath);
return 0;
out:
kfree(tpath);
return error;

}

© www.soinside.com 2019 - 2024. All rights reserved.