--- /dev/null
+http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-2692
+
+--- a/net/socket.c
++++ b/net/socket.c
+@@ -607,6 +607,9 @@ ssize_t sock_sendpage(struct file *file,
+ if (more)
+ flags |= MSG_MORE;
+
++ if (!sock->ops->sendpage)
++ return sock_no_sendpage(sock, page, offset, size, flags);
++
+ return sock->ops->sendpage(sock, page, offset, size, flags);
+ }
+
--- /dev/null
+http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-2692
+
+--- a/net/socket.c
++++ b/net/socket.c
+@@ -687,7 +687,7 @@ static ssize_t sock_sendpage(struct file
+ if (more)
+ flags |= MSG_MORE;
+
+- return sock->ops->sendpage(sock, page, offset, size, flags);
++ return kernel_sendpage(sock, page, offset, size, flags);
+ }
+
+ static struct sock_iocb *alloc_sock_iocb(struct kiocb *iocb,
--- /dev/null
+http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-2692
+
+--- a/net/socket.c
++++ b/net/socket.c
+@@ -688,7 +688,7 @@ static ssize_t sock_sendpage(struct file
+ if (more)
+ flags |= MSG_MORE;
+
+- return sock->ops->sendpage(sock, page, offset, size, flags);
++ return kernel_sendpage(sock, page, offset, size, flags);
+ }
+
+ static struct sock_iocb *alloc_sock_iocb(struct kiocb *iocb,
--- /dev/null
+http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-2692
+
+--- a/net/socket.c
++++ b/net/socket.c
+@@ -692,7 +692,7 @@ static ssize_t sock_sendpage(struct file
+ if (more)
+ flags |= MSG_MORE;
+
+- return sock->ops->sendpage(sock, page, offset, size, flags);
++ return kernel_sendpage(sock, page, offset, size, flags);
+ }
+
+ static ssize_t sock_splice_read(struct file *file, loff_t *ppos,
--- /dev/null
+http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-2692
+
+--- a/net/socket.c
++++ b/net/socket.c
+@@ -692,7 +692,7 @@ static ssize_t sock_sendpage(struct file
+ if (more)
+ flags |= MSG_MORE;
+
+- return sock->ops->sendpage(sock, page, offset, size, flags);
++ return kernel_sendpage(sock, page, offset, size, flags);
+ }
+
+ static ssize_t sock_splice_read(struct file *file, loff_t *ppos,