Относительный путь к Абсолютному пути в ядре linux - PullRequest
0 голосов
/ 29 апреля 2020

Я столкнулся с некоторыми трудностями, когда собирал аргументы от перехвата sys_open и sys_execve.

Оба systemcall используют имя файла в качестве первого аргумента, и аргумент может быть абсолютным или относительным путем. Я хочу получить абсолютный путь , будь то абсолютный или относительный путь.

Пример:

если имя файла "/root/Desktop/../Downloads", мне нужно изменить его на "/root/Downloads".

Я полагаю, исходный код ОС имеет разрешение, но я заканчиваю чтение исходного кода "__link_path_walk".

Функция "__link_path_walk" используется для работы с "../" and "./", но кажется, что функция не получает абсолютный путь, а получает окончательную запись (отмечено в источнике код). Моя версия кода ОС - linux -2.6.32-754.el6 .

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 29 апреля 2020

Я провожу 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;

}

...