Reading a symbolic link in kernel-space

2019-02-21 18:00发布

问题:

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).

回答1:

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().