Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reading a symbolic link in kernel-space

I'm writing a LKM and need to find out where a specific symlink is pointing to. Basically I need the functionality of the syscall readlinkat (or readlink) but in kernel-space. Is there an easy way to do this?

Using readlinkat directly is not working for me, I'm always getting EFAULT (I guess this is because my buffer is obviously in kernel memory space and not in user-space).

like image 733
St0rmi Avatar asked Nov 09 '14 16:11

St0rmi


1 Answers

Firstly, you can't use user space system calls(readlinkat() or readlink()) directly in your kernel module. Rather you need to use exported function / symbol within the kernel space.

Next, may want to look into the struct inode_operations specific to the file system which you are using. Also look into generic_readlink() which internally call vfs_readlink().

like image 127
askb Avatar answered Oct 21 '22 21:10

askb