0x0 漏洞信息
http://cve.scap.org.cn/cve_detail.php?id=CVE-2009-2692
0x1 漏洞描述
Linux内核从2.6.0至2.6.30.4版本,以及2.4.4至2.4.37.4版本,没有为proto_ops结构中套接字操作的所有函数指针进行初始化,导致本地用户可以触发空指针引用,以及使用mmap来映射zero页面,在zero页面上放置任意代码,然后调用一个不可用的操作来获得权限.该漏洞通过PF_PPPOX套接字上的sendpage操作(sock_sendpage函数)进行了验证.
0x2 代码分析
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 = SOCKET_I(file->f_dentry->d_inode);
flags = !(file->f_flags & O_NONBLOCK) ? 0 : MSG_DONTWAIT;
if (more)
flags |= MSG_MORE;
/*
没有做类似的指针检查,就直接调用
if (unlikely(!sock->ops->sendpage))
return -EINVAL;
*/
return s