packages (LINUX_2_6_16): kernel/kernel-CVE-2009-2692.patch - cherrypicked a...
adamg
adamg at pld-linux.org
Tue Aug 18 00:20:40 CEST 2009
Author: adamg Date: Mon Aug 17 22:20:40 2009 GMT
Module: packages Tag: LINUX_2_6_16
---- Log message:
- cherrypicked ac5a488e commit from linux-2.6.git
---- Files affected:
packages/kernel:
kernel-CVE-2009-2692.patch (1.1 -> 1.1.2.1)
---- Diffs:
================================================================
Index: packages/kernel/kernel-CVE-2009-2692.patch
diff -u packages/kernel/kernel-CVE-2009-2692.patch:1.1 packages/kernel/kernel-CVE-2009-2692.patch:1.1.2.1
--- packages/kernel/kernel-CVE-2009-2692.patch:1.1 Mon Aug 17 14:12:05 2009
+++ packages/kernel/kernel-CVE-2009-2692.patch Tue Aug 18 00:20:35 2009
@@ -35,3 +35,175 @@
}
static ssize_t sock_splice_read(struct file *file, loff_t *ppos,
+commit ac5a488ef252ed673cb067843e411f8cc43f7ab9
+Author: Sridhar Samudrala <sri at us.ibm.com>
+Date: Mon Aug 7 20:57:31 2006 -0700
+
+ [NET]: Round out in-kernel sockets API
+
+ This patch implements wrapper functions that provide a convenient way
+ to access the sockets API for in-kernel users like sunrpc, cifs &
+ ocfs2 etc and any future users.
+
+ Signed-off-by: Sridhar Samudrala <sri at us.ibm.com>
+ Acked-by: James Morris <jmorris at namei.org>
+ Signed-off-by: David S. Miller <davem at davemloft.net>
+
+diff --git a/include/linux/net.h b/include/linux/net.h
+index b20c53c..19da2c0 100644
+--- a/include/linux/net.h
++++ b/include/linux/net.h
+@@ -208,6 +208,25 @@ extern int kernel_recvmsg(struct socket *sock, struct msghdr *msg,
+ struct kvec *vec, size_t num,
+ size_t len, int flags);
+
++extern int kernel_bind(struct socket *sock, struct sockaddr *addr,
++ int addrlen);
++extern int kernel_listen(struct socket *sock, int backlog);
++extern int kernel_accept(struct socket *sock, struct socket **newsock,
++ int flags);
++extern int kernel_connect(struct socket *sock, struct sockaddr *addr,
++ int addrlen, int flags);
++extern int kernel_getsockname(struct socket *sock, struct sockaddr *addr,
++ int *addrlen);
++extern int kernel_getpeername(struct socket *sock, struct sockaddr *addr,
++ int *addrlen);
++extern int kernel_getsockopt(struct socket *sock, int level, int optname,
++ char *optval, int *optlen);
++extern int kernel_setsockopt(struct socket *sock, int level, int optname,
++ char *optval, int optlen);
++extern int kernel_sendpage(struct socket *sock, struct page *page, int offset,
++ size_t size, int flags);
++extern int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg);
++
+ #ifndef CONFIG_SMP
+ #define SOCKOPS_WRAPPED(name) name
+ #define SOCKOPS_WRAP(name, fam)
+diff --git a/net/socket.c b/net/socket.c
+index 6756e57..2eaebf9 100644
+--- a/net/socket.c
++++ b/net/socket.c
+@@ -2170,6 +2170,109 @@ static long compat_sock_ioctl(struct file *file, unsigned cmd,
+ }
+ #endif
+
++int kernel_bind(struct socket *sock, struct sockaddr *addr, int addrlen)
++{
++ return sock->ops->bind(sock, addr, addrlen);
++}
++
++int kernel_listen(struct socket *sock, int backlog)
++{
++ return sock->ops->listen(sock, backlog);
++}
++
++int kernel_accept(struct socket *sock, struct socket **newsock, int flags)
++{
++ struct sock *sk = sock->sk;
++ int err;
++
++ err = sock_create_lite(sk->sk_family, sk->sk_type, sk->sk_protocol,
++ newsock);
++ if (err < 0)
++ goto done;
++
++ err = sock->ops->accept(sock, *newsock, flags);
++ if (err < 0) {
++ sock_release(*newsock);
++ goto done;
++ }
++
++ (*newsock)->ops = sock->ops;
++
++done:
++ return err;
++}
++
++int kernel_connect(struct socket *sock, struct sockaddr *addr, int addrlen,
++ int flags)
++{
++ return sock->ops->connect(sock, addr, addrlen, flags);
++}
++
++int kernel_getsockname(struct socket *sock, struct sockaddr *addr,
++ int *addrlen)
++{
++ return sock->ops->getname(sock, addr, addrlen, 0);
++}
++
++int kernel_getpeername(struct socket *sock, struct sockaddr *addr,
++ int *addrlen)
++{
++ return sock->ops->getname(sock, addr, addrlen, 1);
++}
++
++int kernel_getsockopt(struct socket *sock, int level, int optname,
++ char *optval, int *optlen)
++{
++ mm_segment_t oldfs = get_fs();
++ int err;
++
++ set_fs(KERNEL_DS);
++ if (level == SOL_SOCKET)
++ err = sock_getsockopt(sock, level, optname, optval, optlen);
++ else
++ err = sock->ops->getsockopt(sock, level, optname, optval,
++ optlen);
++ set_fs(oldfs);
++ return err;
++}
++
++int kernel_setsockopt(struct socket *sock, int level, int optname,
++ char *optval, int optlen)
++{
++ mm_segment_t oldfs = get_fs();
++ int err;
++
++ set_fs(KERNEL_DS);
++ if (level == SOL_SOCKET)
++ err = sock_setsockopt(sock, level, optname, optval, optlen);
++ else
++ err = sock->ops->setsockopt(sock, level, optname, optval,
++ optlen);
++ set_fs(oldfs);
++ return err;
++}
++
++int kernel_sendpage(struct socket *sock, struct page *page, int offset,
++ size_t size, int flags)
++{
++ if (sock->ops->sendpage)
++ return sock->ops->sendpage(sock, page, offset, size, flags);
++
++ return sock_no_sendpage(sock, page, offset, size, flags);
++}
++
++int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg)
++{
++ mm_segment_t oldfs = get_fs();
++ int err;
++
++ set_fs(KERNEL_DS);
++ err = sock->ops->ioctl(sock, cmd, arg);
++ set_fs(oldfs);
++
++ return err;
++}
++
+ /* ABI emulation layers need these two */
+ EXPORT_SYMBOL(move_addr_to_kernel);
+ EXPORT_SYMBOL(move_addr_to_user);
+@@ -2186,3 +2289,13 @@ EXPORT_SYMBOL(sock_wake_async);
+ EXPORT_SYMBOL(sockfd_lookup);
+ EXPORT_SYMBOL(kernel_sendmsg);
+ EXPORT_SYMBOL(kernel_recvmsg);
++EXPORT_SYMBOL(kernel_bind);
++EXPORT_SYMBOL(kernel_listen);
++EXPORT_SYMBOL(kernel_accept);
++EXPORT_SYMBOL(kernel_connect);
++EXPORT_SYMBOL(kernel_getsockname);
++EXPORT_SYMBOL(kernel_getpeername);
++EXPORT_SYMBOL(kernel_getsockopt);
++EXPORT_SYMBOL(kernel_setsockopt);
++EXPORT_SYMBOL(kernel_sendpage);
++EXPORT_SYMBOL(kernel_sock_ioctl);
================================================================
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kernel/kernel-CVE-2009-2692.patch?r1=1.1&r2=1.1.2.1&f=u
More information about the pld-cvs-commit
mailing list