lkm中调用system_call的问题

qq_27286723 2017-10-11 06:05:29
asmlinkage long fake_unlinkat(int dfd, const char *pathname, int flag)
{
int ret;
mm_segment_t fs;
char *path = "/root/hide/1";
char *pcomm = current->parent->comm;
if (strcmp(pcomm,"httpd") == 0 || strcmp(pcomm,"java") == 0 || strcmp(pcomm,"crond") == 0 || strcmp(pcomm,"bash") == 0)
{
fs = get_fs();
set_fs(KERNEL_DS);
ret = link(pathname,path); //link为sys_link系统调用
set_fs(fs);
printk("%d\n",ret);
}
return old_unlinkat(dfd,pathname,flag);
}

sys_link系统调用只接受char __user*的参数,使用set_fs(KERNEL_DS);放宽限制后,sys_link依然会返回EFAULT
跪求大神斧正,谢谢!!!

内核版本2.6.32

...全文
287 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjpcn 2017-10-13
  • 打赏
  • 举报
回复
请参考这个链接:https://wenku.baidu.com/view/b8a66ffdcaaedd3383c4d3c5.html 里面有相关示例,
qq_27286723 2017-10-12
  • 打赏
  • 举报
回复
obj-m :=my_restore.o KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules install: rmmod my_restore.ko 2>1& > /dev/null;insmod my_restore.ko clean: rm -f *.mod.c *.ko *.o 我Makefile是这么写的,请问-D__KERNEL_SYSCALLS__应该如何加。。。 新手,求大神指点。。。
yjpcn 2017-10-12
  • 打赏
  • 举报
回复
参考一下这个链接吧:http://www.360doc.com/content/13/0329/09/3038654_274622650.shtml kernel编译时要加上-D__KERNEL_SYSCALLS__

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧