问题描述
我正在研究一个内核模块,该模块应该跟踪任何安装的卸载并打印安装点路径。源代码非常简单:
static int handler_pre(struct kprobe* p,struct pt_regs *regs)
{
struct vfsmount *mnt = (struct vfsmount *)regs->di;
char *tmp = (char *)__get_free_page(GFP_KERNEL);
char *mountpoint = dentry_path_raw(mnt->mnt_root,tmp,PAGE_SIZE);
pr_info("security_sb_umount: path=%s\n",mountpoint);
free_page((unsigned long)tmp);
return 0;
}
struct kprobe kp = {
.symbol_name = "security_sb_umount",.pre_handler = handler_pre
};
int init_module(void)
{
return register_kprobe(&kp);
}
void cleanup_module(void)
{
unregister_kprobe(&kp);
}
问题是,我在处理程序中打印的路径不正确。
命令cat /proc/mounts
将USB驱动程序的安装点路径显示为/media/mosa/DRIVE
,但是卸载驱动程序时处理程序中的路径仅显示/
。
对于/proc/mounts
中的NFS共享,它也显示路径/home/mosa/shared
,但是处理程序中的路径也显示/sharedfolder
。
你知道我在这里做错什么吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)