kprobe拦截的方法security_sb_umount中的无效安装路径

问题描述

我正在研究一个内核模块,该模块应该跟踪任何安装的卸载并打印安装点路径。源代码非常简单:

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 (将#修改为@)