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).
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()
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With