当调用原始 syscall 填充__user 空间指针后,紧接着访问这个指针是否需要 copy_from_user?

2021-08-02 15:07:53 +08:00
 fengjianxinghun

这里我做了 access_ok 检测 msg 指针,安全起见是否需要 copy_from_user ?

        ret = KHOOK_ORIGIN(sys_recvmsg, sockfd, msg, flags);

	/* Some error occured. Don't do anything. */
	if (ret < 0)
		return ret;

	/* check __user addr is safe */
	if (!access_ok(msg, sizeof(struct msghdr)) {
		return ret;
	}

	/* Extract netlink message header from message */
	nlh = (struct nlmsghdr *)(msg->msg_iov->iov_base);
	if (nlh == NULL) {
		//printk(KERN_WARNING "nlmsghdr is null");
		return ret;
	}
1065 次点击
所在节点    Linux
2 条回复
tomychen
2021-08-10 16:14:54 +08:00
看代码就是,你最终都要操作 msg,为啥不直接调 copy_from_user 一份出来呢?
fengjianxinghun
2021-08-11 00:27:44 +08:00
@tomychen 要修改内容,又需要 copy 回去。就是不想动这个。意味着你拷贝的时候要拷贝 msg 到拷贝 iov_base,这里面的嵌套很讨厌。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/793162

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX