Как получить читабельный pwd в ядре - PullRequest
0 голосов
/ 22 октября 2018

Я хочу получить текущий каталог, вот моя попытка

asmlinkage ssize_t fake_read(int __fd, void *__buf, size_t __nbytes){

    struct path pwd;
    get_fs_pwd(current->fs,&pwd);
    char x[1000];
    dentry_path_raw(pwd.dentry,x,999);
    fm_alert("read:%s\n",x);
    return real_read(__fd,__buf,__nbytes);
}

Тем не менее, вывод, который я получаю, похож на

[ 2170.293439] fsmonko.fake_read: read:ػ\xffffffaf\xffffff80
[ 2170.293466] fsmonko.fake_read: read:ػ\xffffffaf\xffffff80
[ 2170.293483] fsmonko.fake_read: read:\xffffffd8;\xffffff9b\xffffff84
[ 2170.293500] fsmonko.fake_read: read:ػ\xffffffaf\xffffff80
[ 2170.293524] fsmonko.fake_read: read:ػ\xffffffaf\xffffff80
[ 2170.293550] fsmonko.fake_read: read:ػ\xffffffaf\xffffff80
[ 2170.293556] fsmonko.fake_read: read:\xffffffd8;\xffffff9b\xffffff84

Предполагается напечатать читаемый pwd, чтоне так?

Моя версия ядра 4.13.0-36-generic Ubuntu 16.04.

1 Ответ

0 голосов
/ 22 октября 2018

dentry_path_raw помещает путь в конец буфера.Начало буфера (который вы печатаете) все еще содержит мусор.Фактическим началом пути является значение, возвращаемое dentry_path_raw.Попробуйте

    char * path = dentry_path_raw(pwd.dentry,x,999);
    fm_alert("read:%s\n", path);
...