- 论坛徽章:
- 0
|
static ssize_t sock_sendpage(struct file *file, struct page *page,
int offset, size_t size, loff_t *ppos, int more)
{
struct socket *sock;
int flags;
sock = file->private_data;
flags = !(file->f_flags & O_NONBLOCK) ? 0 : MSG_DONTWAIT;
if (more)
flags |= MSG_MORE;
return sock->ops->sendpage(sock, page, offset, size, flags);/*这里没有对指针进行安全检查,如果proto_ops结构的sendpage成员没有初始化就会引用一个空指针,执行 0x00000000处的指令。如果能用mmap分配到一段从0x00000000开始的线性区,把代码放到里面,在执行 sock->ops->sendpage时这段代码就会被执行。只要内核参数vm.mmap_min_addr不为0就申请不到这段线性区了,但是装了selinux反而能绕过这种保护*/
} |
|