)]}'
{
  "log": [
    {
      "commit": "8acfe468b0384e834a303f08ebc4953d72fb690a",
      "tree": "7ecee335efdbd283a122bcba1d5d9b533906142a",
      "parents": [
        "349f6c5c5d827db909a69e5b9e844e8623c8e881"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Oct 28 11:41:55 2010 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Oct 28 11:47:52 2010 -0700"
      },
      "message": "net: Limit socket I/O iovec total length to INT_MAX.\n\nThis helps protect us from overflow issues down in the\nindividual protocol sendmsg/recvmsg handlers.  Once\nwe hit INT_MAX we truncate out the rest of the iovec\nby setting the iov_len members to zero.\n\nThis works because:\n\n1) For SOCK_STREAM and SOCK_SEQPACKET sockets, partial\n   writes are allowed and the application will just continue\n   with another write to send the rest of the data.\n\n2) For datagram oriented sockets, where there must be a\n   one-to-one correspondance between write() calls and\n   packets on the wire, INT_MAX is going to be far larger\n   than the packet size limit the protocol is going to\n   check for and signal with -EMSGSIZE.\n\nBased upon a patch by Linus Torvalds.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "c6d409cfd0fd41e7a0847875e4338ad648c9b96b",
      "tree": "7f346c6f41db5b448ebab504f3fae6bb0f28cf79",
      "parents": [
        "849c45423c0c108e08d67644728cc9b0ed225fa1"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Thu Jun 03 20:03:40 2010 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jun 03 20:03:40 2010 -0700"
      },
      "message": "From abbffa2aa9bd6f8df16d0d0a102af677510d8b9a Mon Sep 17 00:00:00 2001\nFrom: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nDate: Thu, 3 Jun 2010 04:29:41 +0000\nSubject: [PATCH 2/3] net: net/socket.c and net/compat.c cleanups\n\ncleanup patch, to match modern coding style.\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n---\n net/compat.c |   47 ++++++++---------\n net/socket.c |  165 ++++++++++++++++++++++++++++------------------------------\n 2 files changed, 102 insertions(+), 110 deletions(-)\n\ndiff --git a/net/compat.c b/net/compat.c\nindex 1cf7590..63d260e 100644\n--- a/net/compat.c\n+++ b/net/compat.c\n@@ -81,7 +81,7 @@ int verify_compat_iovec(struct msghdr *kern_msg, struct iovec *kern_iov,\n \tint tot_len;\n\n \tif (kern_msg-\u003emsg_namelen) {\n-\t\tif (mode\u003d\u003dVERIFY_READ) {\n+\t\tif (mode \u003d\u003d VERIFY_READ) {\n \t\t\tint err \u003d move_addr_to_kernel(kern_msg-\u003emsg_name,\n \t\t\t\t\t\t      kern_msg-\u003emsg_namelen,\n \t\t\t\t\t\t      kern_address);\n@@ -354,7 +354,7 @@ static int do_set_attach_filter(struct socket *sock, int level, int optname,\n static int do_set_sock_timeout(struct socket *sock, int level,\n \t\tint optname, char __user *optval, unsigned int optlen)\n {\n-\tstruct compat_timeval __user *up \u003d (struct compat_timeval __user *) optval;\n+\tstruct compat_timeval __user *up \u003d (struct compat_timeval __user *)optval;\n \tstruct timeval ktime;\n \tmm_segment_t old_fs;\n \tint err;\n@@ -367,7 +367,7 @@ static int do_set_sock_timeout(struct socket *sock, int level,\n \t\treturn -EFAULT;\n \told_fs \u003d get_fs();\n \tset_fs(KERNEL_DS);\n-\terr \u003d sock_setsockopt(sock, level, optname, (char *) \u0026ktime, sizeof(ktime));\n+\terr \u003d sock_setsockopt(sock, level, optname, (char *)\u0026ktime, sizeof(ktime));\n \tset_fs(old_fs);\n\n \treturn err;\n@@ -389,11 +389,10 @@ asmlinkage long compat_sys_setsockopt(int fd, int level, int optname,\n \t\t\t\tchar __user *optval, unsigned int optlen)\n {\n \tint err;\n-\tstruct socket *sock;\n+\tstruct socket *sock \u003d sockfd_lookup(fd, \u0026err);\n\n-\tif ((sock \u003d sockfd_lookup(fd, \u0026err))!\u003dNULL)\n-\t{\n-\t\terr \u003d security_socket_setsockopt(sock,level,optname);\n+\tif (sock) {\n+\t\terr \u003d security_socket_setsockopt(sock, level, optname);\n \t\tif (err) {\n \t\t\tsockfd_put(sock);\n \t\t\treturn err;\n@@ -453,7 +452,7 @@ static int compat_sock_getsockopt(struct socket *sock, int level, int optname,\n int compat_sock_get_timestamp(struct sock *sk, struct timeval __user *userstamp)\n {\n \tstruct compat_timeval __user *ctv \u003d\n-\t\t\t(struct compat_timeval __user*) userstamp;\n+\t\t\t(struct compat_timeval __user *) userstamp;\n \tint err \u003d -ENOENT;\n \tstruct timeval tv;\n\n@@ -477,7 +476,7 @@ EXPORT_SYMBOL(compat_sock_get_timestamp);\n int compat_sock_get_timestampns(struct sock *sk, struct timespec __user *userstamp)\n {\n \tstruct compat_timespec __user *ctv \u003d\n-\t\t\t(struct compat_timespec __user*) userstamp;\n+\t\t\t(struct compat_timespec __user *) userstamp;\n \tint err \u003d -ENOENT;\n \tstruct timespec ts;\n\n@@ -502,12 +501,10 @@ asmlinkage long compat_sys_getsockopt(int fd, int level, int optname,\n \t\t\t\tchar __user *optval, int __user *optlen)\n {\n \tint err;\n-\tstruct socket *sock;\n+\tstruct socket *sock \u003d sockfd_lookup(fd, \u0026err);\n\n-\tif ((sock \u003d sockfd_lookup(fd, \u0026err))!\u003dNULL)\n-\t{\n-\t\terr \u003d security_socket_getsockopt(sock, level,\n-\t\t\t\t\t\t\t   optname);\n+\tif (sock) {\n+\t\terr \u003d security_socket_getsockopt(sock, level, optname);\n \t\tif (err) {\n \t\t\tsockfd_put(sock);\n \t\t\treturn err;\n@@ -557,7 +554,7 @@ struct compat_group_filter {\n\n int compat_mc_setsockopt(struct sock *sock, int level, int optname,\n \tchar __user *optval, unsigned int optlen,\n-\tint (*setsockopt)(struct sock *,int,int,char __user *,unsigned int))\n+\tint (*setsockopt)(struct sock *, int, int, char __user *, unsigned int))\n {\n \tchar __user\t*koptval \u003d optval;\n \tint\t\tkoptlen \u003d optlen;\n@@ -640,12 +637,11 @@ int compat_mc_setsockopt(struct sock *sock, int level, int optname,\n \t}\n \treturn setsockopt(sock, level, optname, koptval, koptlen);\n }\n-\n EXPORT_SYMBOL(compat_mc_setsockopt);\n\n int compat_mc_getsockopt(struct sock *sock, int level, int optname,\n \tchar __user *optval, int __user *optlen,\n-\tint (*getsockopt)(struct sock *,int,int,char __user *,int __user *))\n+\tint (*getsockopt)(struct sock *, int, int, char __user *, int __user *))\n {\n \tstruct compat_group_filter __user *gf32 \u003d (void *)optval;\n \tstruct group_filter __user *kgf;\n@@ -681,7 +677,7 @@ int compat_mc_getsockopt(struct sock *sock, int level, int optname,\n \t    __put_user(interface, \u0026kgf-\u003egf_interface) ||\n \t    __put_user(fmode, \u0026kgf-\u003egf_fmode) ||\n \t    __put_user(numsrc, \u0026kgf-\u003egf_numsrc) ||\n-\t    copy_in_user(\u0026kgf-\u003egf_group,\u0026gf32-\u003egf_group,sizeof(kgf-\u003egf_group)))\n+\t    copy_in_user(\u0026kgf-\u003egf_group, \u0026gf32-\u003egf_group, sizeof(kgf-\u003egf_group)))\n \t\treturn -EFAULT;\n\n \terr \u003d getsockopt(sock, level, optname, (char __user *)kgf, koptlen);\n@@ -714,21 +710,22 @@ int compat_mc_getsockopt(struct sock *sock, int level, int optname,\n \t\tcopylen \u003d numsrc * sizeof(gf32-\u003egf_slist[0]);\n \t\tif (copylen \u003e klen)\n \t\t\tcopylen \u003d klen;\n-\t        if (copy_in_user(gf32-\u003egf_slist, kgf-\u003egf_slist, copylen))\n+\t\tif (copy_in_user(gf32-\u003egf_slist, kgf-\u003egf_slist, copylen))\n \t\t\treturn -EFAULT;\n \t}\n \treturn err;\n }\n-\n EXPORT_SYMBOL(compat_mc_getsockopt);\n\n /* Argument list sizes for compat_sys_socketcall */\n #define AL(x) ((x) * sizeof(u32))\n-static unsigned char nas[20]\u003d{AL(0),AL(3),AL(3),AL(3),AL(2),AL(3),\n-\t\t\t\tAL(3),AL(3),AL(4),AL(4),AL(4),AL(6),\n-\t\t\t\tAL(6),AL(2),AL(5),AL(5),AL(3),AL(3),\n-\t\t\t\tAL(4),AL(5)};\n+static unsigned char nas[20] \u003d {\n+\tAL(0), AL(3), AL(3), AL(3), AL(2), AL(3),\n+\tAL(3), AL(3), AL(4), AL(4), AL(4), AL(6),\n+\tAL(6), AL(2), AL(5), AL(5), AL(3), AL(3),\n+\tAL(4), AL(5)\n+};\n #undef AL\n\n asmlinkage long compat_sys_sendmsg(int fd, struct compat_msghdr __user *msg, unsigned flags)\n@@ -827,7 +824,7 @@ asmlinkage long compat_sys_socketcall(int call, u32 __user *args)\n \t\t\t\t\t  compat_ptr(a[4]), compat_ptr(a[5]));\n \t\tbreak;\n \tcase SYS_SHUTDOWN:\n-\t\tret \u003d sys_shutdown(a0,a1);\n+\t\tret \u003d sys_shutdown(a0, a1);\n \t\tbreak;\n \tcase SYS_SETSOCKOPT:\n \t\tret \u003d compat_sys_setsockopt(a0, a1, a[2],\ndiff --git a/net/socket.c b/net/socket.c\nindex 367d547..b63c051 100644\n--- a/net/socket.c\n+++ b/net/socket.c\n@@ -124,7 +124,7 @@ static int sock_fasync(int fd, struct file *filp, int on);\n static ssize_t sock_sendpage(struct file *file, struct page *page,\n \t\t\t     int offset, size_t size, loff_t *ppos, int more);\n static ssize_t sock_splice_read(struct file *file, loff_t *ppos,\n-\t\t\t        struct pipe_inode_info *pipe, size_t len,\n+\t\t\t\tstruct pipe_inode_info *pipe, size_t len,\n \t\t\t\tunsigned int flags);\n\n /*\n@@ -162,7 +162,7 @@ static const struct net_proto_family *net_families[NPROTO] __read_mostly;\n  *\tStatistics counters of the socket lists\n  */\n\n-static DEFINE_PER_CPU(int, sockets_in_use) \u003d 0;\n+static DEFINE_PER_CPU(int, sockets_in_use);\n\n /*\n  * Support routines.\n@@ -309,9 +309,9 @@ static int init_inodecache(void)\n }\n\n static const struct super_operations sockfs_ops \u003d {\n-\t.alloc_inode \u003d\tsock_alloc_inode,\n-\t.destroy_inode \u003dsock_destroy_inode,\n-\t.statfs \u003d\tsimple_statfs,\n+\t.alloc_inode\t\u003d sock_alloc_inode,\n+\t.destroy_inode\t\u003d sock_destroy_inode,\n+\t.statfs\t\t\u003d simple_statfs,\n };\n\n static int sockfs_get_sb(struct file_system_type *fs_type,\n@@ -411,6 +411,7 @@ int sock_map_fd(struct socket *sock, int flags)\n\n \treturn fd;\n }\n+EXPORT_SYMBOL(sock_map_fd);\n\n static struct socket *sock_from_file(struct file *file, int *err)\n {\n@@ -422,7 +423,7 @@ static struct socket *sock_from_file(struct file *file, int *err)\n }\n\n /**\n- *\tsockfd_lookup\t- \tGo from a file number to its socket slot\n+ *\tsockfd_lookup - Go from a file number to its socket slot\n  *\t@fd: file handle\n  *\t@err: pointer to an error code return\n  *\n@@ -450,6 +451,7 @@ struct socket *sockfd_lookup(int fd, int *err)\n \t\tfput(file);\n \treturn sock;\n }\n+EXPORT_SYMBOL(sockfd_lookup);\n\n static struct socket *sockfd_lookup_light(int fd, int *err, int *fput_needed)\n {\n@@ -540,6 +542,7 @@ void sock_release(struct socket *sock)\n \t}\n \tsock-\u003efile \u003d NULL;\n }\n+EXPORT_SYMBOL(sock_release);\n\n int sock_tx_timestamp(struct msghdr *msg, struct sock *sk,\n \t\t      union skb_shared_tx *shtx)\n@@ -586,6 +589,7 @@ int sock_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)\n \t\tret \u003d wait_on_sync_kiocb(\u0026iocb);\n \treturn ret;\n }\n+EXPORT_SYMBOL(sock_sendmsg);\n\n int kernel_sendmsg(struct socket *sock, struct msghdr *msg,\n \t\t   struct kvec *vec, size_t num, size_t size)\n@@ -604,6 +608,7 @@ int kernel_sendmsg(struct socket *sock, struct msghdr *msg,\n \tset_fs(oldfs);\n \treturn result;\n }\n+EXPORT_SYMBOL(kernel_sendmsg);\n\n static int ktime2ts(ktime_t kt, struct timespec *ts)\n {\n@@ -664,7 +669,6 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,\n \t\tput_cmsg(msg, SOL_SOCKET,\n \t\t\t SCM_TIMESTAMPING, sizeof(ts), \u0026ts);\n }\n-\n EXPORT_SYMBOL_GPL(__sock_recv_timestamp);\n\n inline void sock_recv_drops(struct msghdr *msg, struct sock *sk, struct sk_buff *skb)\n@@ -720,6 +724,7 @@ int sock_recvmsg(struct socket *sock, struct msghdr *msg,\n \t\tret \u003d wait_on_sync_kiocb(\u0026iocb);\n \treturn ret;\n }\n+EXPORT_SYMBOL(sock_recvmsg);\n\n static int sock_recvmsg_nosec(struct socket *sock, struct msghdr *msg,\n \t\t\t      size_t size, int flags)\n@@ -752,6 +757,7 @@ int kernel_recvmsg(struct socket *sock, struct msghdr *msg,\n \tset_fs(oldfs);\n \treturn result;\n }\n+EXPORT_SYMBOL(kernel_recvmsg);\n\n static void sock_aio_dtor(struct kiocb *iocb)\n {\n@@ -774,7 +780,7 @@ static ssize_t sock_sendpage(struct file *file, struct page *page,\n }\n\n static ssize_t sock_splice_read(struct file *file, loff_t *ppos,\n-\t\t\t        struct pipe_inode_info *pipe, size_t len,\n+\t\t\t\tstruct pipe_inode_info *pipe, size_t len,\n \t\t\t\tunsigned int flags)\n {\n \tstruct socket *sock \u003d file-\u003eprivate_data;\n@@ -887,7 +893,7 @@ static ssize_t sock_aio_write(struct kiocb *iocb, const struct iovec *iov,\n  */\n\n static DEFINE_MUTEX(br_ioctl_mutex);\n-static int (*br_ioctl_hook) (struct net *, unsigned int cmd, void __user *arg) \u003d NULL;\n+static int (*br_ioctl_hook) (struct net *, unsigned int cmd, void __user *arg);\n\n void brioctl_set(int (*hook) (struct net *, unsigned int, void __user *))\n {\n@@ -895,7 +901,6 @@ void brioctl_set(int (*hook) (struct net *, unsigned int, void __user *))\n \tbr_ioctl_hook \u003d hook;\n \tmutex_unlock(\u0026br_ioctl_mutex);\n }\n-\n EXPORT_SYMBOL(brioctl_set);\n\n static DEFINE_MUTEX(vlan_ioctl_mutex);\n@@ -907,7 +912,6 @@ void vlan_ioctl_set(int (*hook) (struct net *, void __user *))\n \tvlan_ioctl_hook \u003d hook;\n \tmutex_unlock(\u0026vlan_ioctl_mutex);\n }\n-\n EXPORT_SYMBOL(vlan_ioctl_set);\n\n static DEFINE_MUTEX(dlci_ioctl_mutex);\n@@ -919,7 +923,6 @@ void dlci_ioctl_set(int (*hook) (unsigned int, void __user *))\n \tdlci_ioctl_hook \u003d hook;\n \tmutex_unlock(\u0026dlci_ioctl_mutex);\n }\n-\n EXPORT_SYMBOL(dlci_ioctl_set);\n\n static long sock_do_ioctl(struct net *net, struct socket *sock,\n@@ -1047,6 +1050,7 @@ out_release:\n \tsock \u003d NULL;\n \tgoto out;\n }\n+EXPORT_SYMBOL(sock_create_lite);\n\n /* No kernel lock held - perfect */\n static unsigned int sock_poll(struct file *file, poll_table *wait)\n@@ -1147,6 +1151,7 @@ call_kill:\n \trcu_read_unlock();\n \treturn 0;\n }\n+EXPORT_SYMBOL(sock_wake_async);\n\n static int __sock_create(struct net *net, int family, int type, int protocol,\n \t\t\t struct socket **res, int kern)\n@@ -1265,11 +1270,13 @@ int sock_create(int family, int type, int protocol, struct socket **res)\n {\n \treturn __sock_create(current-\u003ensproxy-\u003enet_ns, family, type, protocol, res, 0);\n }\n+EXPORT_SYMBOL(sock_create);\n\n int sock_create_kern(int family, int type, int protocol, struct socket **res)\n {\n \treturn __sock_create(\u0026init_net, family, type, protocol, res, 1);\n }\n+EXPORT_SYMBOL(sock_create_kern);\n\n SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)\n {\n@@ -1474,7 +1481,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,\n \t\tgoto out;\n\n \terr \u003d -ENFILE;\n-\tif (!(newsock \u003d sock_alloc()))\n+\tnewsock \u003d sock_alloc();\n+\tif (!newsock)\n \t\tgoto out_put;\n\n \tnewsock-\u003etype \u003d sock-\u003etype;\n@@ -1861,8 +1869,7 @@ SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags)\n \tif (MSG_CMSG_COMPAT \u0026 flags) {\n \t\tif (get_compat_msghdr(\u0026msg_sys, msg_compat))\n \t\t\treturn -EFAULT;\n-\t}\n-\telse if (copy_from_user(\u0026msg_sys, msg, sizeof(struct msghdr)))\n+\t} else if (copy_from_user(\u0026msg_sys, msg, sizeof(struct msghdr)))\n \t\treturn -EFAULT;\n\n \tsock \u003d sockfd_lookup_light(fd, \u0026err, \u0026fput_needed);\n@@ -1964,8 +1971,7 @@ static int __sys_recvmsg(struct socket *sock, struct msghdr __user *msg,\n \tif (MSG_CMSG_COMPAT \u0026 flags) {\n \t\tif (get_compat_msghdr(msg_sys, msg_compat))\n \t\t\treturn -EFAULT;\n-\t}\n-\telse if (copy_from_user(msg_sys, msg, sizeof(struct msghdr)))\n+\t} else if (copy_from_user(msg_sys, msg, sizeof(struct msghdr)))\n \t\treturn -EFAULT;\n\n \terr \u003d -EMSGSIZE;\n@@ -2191,10 +2197,10 @@ SYSCALL_DEFINE5(recvmmsg, int, fd, struct mmsghdr __user *, mmsg,\n /* Argument list sizes for sys_socketcall */\n #define AL(x) ((x) * sizeof(unsigned long))\n static const unsigned char nargs[20] \u003d {\n-\tAL(0),AL(3),AL(3),AL(3),AL(2),AL(3),\n-\tAL(3),AL(3),AL(4),AL(4),AL(4),AL(6),\n-\tAL(6),AL(2),AL(5),AL(5),AL(3),AL(3),\n-\tAL(4),AL(5)\n+\tAL(0), AL(3), AL(3), AL(3), AL(2), AL(3),\n+\tAL(3), AL(3), AL(4), AL(4), AL(4), AL(6),\n+\tAL(6), AL(2), AL(5), AL(5), AL(3), AL(3),\n+\tAL(4), AL(5)\n };\n\n #undef AL\n@@ -2340,6 +2346,7 @@ int sock_register(const struct net_proto_family *ops)\n \tprintk(KERN_INFO \"NET: Registered protocol family %d\\n\", ops-\u003efamily);\n \treturn err;\n }\n+EXPORT_SYMBOL(sock_register);\n\n /**\n  *\tsock_unregister - remove a protocol handler\n@@ -2366,6 +2373,7 @@ void sock_unregister(int family)\n\n \tprintk(KERN_INFO \"NET: Unregistered protocol family %d\\n\", family);\n }\n+EXPORT_SYMBOL(sock_unregister);\n\n static int __init sock_init(void)\n {\n@@ -2490,13 +2498,13 @@ static int dev_ifconf(struct net *net, struct compat_ifconf __user *uifc32)\n \t\tifc.ifc_req \u003d NULL;\n \t\tuifc \u003d compat_alloc_user_space(sizeof(struct ifconf));\n \t} else {\n-\t\tsize_t len \u003d((ifc32.ifc_len / sizeof (struct compat_ifreq)) + 1) *\n-\t\t\tsizeof (struct ifreq);\n+\t\tsize_t len \u003d ((ifc32.ifc_len / sizeof(struct compat_ifreq)) + 1) *\n+\t\t\tsizeof(struct ifreq);\n \t\tuifc \u003d compat_alloc_user_space(sizeof(struct ifconf) + len);\n \t\tifc.ifc_len \u003d len;\n \t\tifr \u003d ifc.ifc_req \u003d (void __user *)(uifc + 1);\n \t\tifr32 \u003d compat_ptr(ifc32.ifcbuf);\n-\t\tfor (i \u003d 0; i \u003c ifc32.ifc_len; i +\u003d sizeof (struct compat_ifreq)) {\n+\t\tfor (i \u003d 0; i \u003c ifc32.ifc_len; i +\u003d sizeof(struct compat_ifreq)) {\n \t\t\tif (copy_in_user(ifr, ifr32, sizeof(struct compat_ifreq)))\n \t\t\t\treturn -EFAULT;\n \t\t\tifr++;\n@@ -2516,9 +2524,9 @@ static int dev_ifconf(struct net *net, struct compat_ifconf __user *uifc32)\n \tifr \u003d ifc.ifc_req;\n \tifr32 \u003d compat_ptr(ifc32.ifcbuf);\n \tfor (i \u003d 0, j \u003d 0;\n-             i + sizeof (struct compat_ifreq) \u003c\u003d ifc32.ifc_len \u0026\u0026 j \u003c ifc.ifc_len;\n-\t     i +\u003d sizeof (struct compat_ifreq), j +\u003d sizeof (struct ifreq)) {\n-\t\tif (copy_in_user(ifr32, ifr, sizeof (struct compat_ifreq)))\n+\t     i + sizeof(struct compat_ifreq) \u003c\u003d ifc32.ifc_len \u0026\u0026 j \u003c ifc.ifc_len;\n+\t     i +\u003d sizeof(struct compat_ifreq), j +\u003d sizeof(struct ifreq)) {\n+\t\tif (copy_in_user(ifr32, ifr, sizeof(struct compat_ifreq)))\n \t\t\treturn -EFAULT;\n \t\tifr32++;\n \t\tifr++;\n@@ -2567,7 +2575,7 @@ static int compat_siocwandev(struct net *net, struct compat_ifreq __user *uifr32\n \tcompat_uptr_t uptr32;\n \tstruct ifreq __user *uifr;\n\n-\tuifr \u003d compat_alloc_user_space(sizeof (*uifr));\n+\tuifr \u003d compat_alloc_user_space(sizeof(*uifr));\n \tif (copy_in_user(uifr, uifr32, sizeof(struct compat_ifreq)))\n \t\treturn -EFAULT;\n\n@@ -2601,9 +2609,9 @@ static int bond_ioctl(struct net *net, unsigned int cmd,\n \t\t\treturn -EFAULT;\n\n \t\told_fs \u003d get_fs();\n-\t\tset_fs (KERNEL_DS);\n+\t\tset_fs(KERNEL_DS);\n \t\terr \u003d dev_ioctl(net, cmd, \u0026kifr);\n-\t\tset_fs (old_fs);\n+\t\tset_fs(old_fs);\n\n \t\treturn err;\n \tcase SIOCBONDSLAVEINFOQUERY:\n@@ -2710,9 +2718,9 @@ static int compat_sioc_ifmap(struct net *net, unsigned int cmd,\n \t\treturn -EFAULT;\n\n \told_fs \u003d get_fs();\n-\tset_fs (KERNEL_DS);\n+\tset_fs(KERNEL_DS);\n \terr \u003d dev_ioctl(net, cmd, (void __user *)\u0026ifr);\n-\tset_fs (old_fs);\n+\tset_fs(old_fs);\n\n \tif (cmd \u003d\u003d SIOCGIFMAP \u0026\u0026 !err) {\n \t\terr \u003d copy_to_user(uifr32, \u0026ifr, sizeof(ifr.ifr_name));\n@@ -2734,7 +2742,7 @@ static int compat_siocshwtstamp(struct net *net, struct compat_ifreq __user *uif\n \tcompat_uptr_t uptr32;\n \tstruct ifreq __user *uifr;\n\n-\tuifr \u003d compat_alloc_user_space(sizeof (*uifr));\n+\tuifr \u003d compat_alloc_user_space(sizeof(*uifr));\n \tif (copy_in_user(uifr, uifr32, sizeof(struct compat_ifreq)))\n \t\treturn -EFAULT;\n\n@@ -2750,20 +2758,20 @@ static int compat_siocshwtstamp(struct net *net, struct compat_ifreq __user *uif\n }\n\n struct rtentry32 {\n-\tu32   \t\trt_pad1;\n+\tu32\t\trt_pad1;\n \tstruct sockaddr rt_dst;         /* target address               */\n \tstruct sockaddr rt_gateway;     /* gateway addr (RTF_GATEWAY)   */\n \tstruct sockaddr rt_genmask;     /* target network mask (IP)     */\n-\tunsigned short  rt_flags;\n-\tshort           rt_pad2;\n-\tu32   \t\trt_pad3;\n-\tunsigned char   rt_tos;\n-\tunsigned char   rt_class;\n-\tshort           rt_pad4;\n-\tshort           rt_metric;      /* +1 for binary compatibility! */\n+\tunsigned short\trt_flags;\n+\tshort\t\trt_pad2;\n+\tu32\t\trt_pad3;\n+\tunsigned char\trt_tos;\n+\tunsigned char\trt_class;\n+\tshort\t\trt_pad4;\n+\tshort\t\trt_metric;      /* +1 for binary compatibility! */\n \t/* char * */ u32 rt_dev;        /* forcing the device at add    */\n-\tu32   \t\trt_mtu;         /* per route MTU/Window         */\n-\tu32   \t\trt_window;      /* Window clamping              */\n+\tu32\t\trt_mtu;         /* per route MTU/Window         */\n+\tu32\t\trt_window;      /* Window clamping              */\n \tunsigned short  rt_irtt;        /* Initial RTT                  */\n };\n\n@@ -2793,29 +2801,29 @@ static int routing_ioctl(struct net *net, struct socket *sock,\n\n \tif (sock \u0026\u0026 sock-\u003esk \u0026\u0026 sock-\u003esk-\u003esk_family \u003d\u003d AF_INET6) { /* ipv6 */\n \t\tstruct in6_rtmsg32 __user *ur6 \u003d argp;\n-\t\tret \u003d copy_from_user (\u0026r6.rtmsg_dst, \u0026(ur6-\u003ertmsg_dst),\n+\t\tret \u003d copy_from_user(\u0026r6.rtmsg_dst, \u0026(ur6-\u003ertmsg_dst),\n \t\t\t3 * sizeof(struct in6_addr));\n-\t\tret |\u003d __get_user (r6.rtmsg_type, \u0026(ur6-\u003ertmsg_type));\n-\t\tret |\u003d __get_user (r6.rtmsg_dst_len, \u0026(ur6-\u003ertmsg_dst_len));\n-\t\tret |\u003d __get_user (r6.rtmsg_src_len, \u0026(ur6-\u003ertmsg_src_len));\n-\t\tret |\u003d __get_user (r6.rtmsg_metric, \u0026(ur6-\u003ertmsg_metric));\n-\t\tret |\u003d __get_user (r6.rtmsg_info, \u0026(ur6-\u003ertmsg_info));\n-\t\tret |\u003d __get_user (r6.rtmsg_flags, \u0026(ur6-\u003ertmsg_flags));\n-\t\tret |\u003d __get_user (r6.rtmsg_ifindex, \u0026(ur6-\u003ertmsg_ifindex));\n+\t\tret |\u003d __get_user(r6.rtmsg_type, \u0026(ur6-\u003ertmsg_type));\n+\t\tret |\u003d __get_user(r6.rtmsg_dst_len, \u0026(ur6-\u003ertmsg_dst_len));\n+\t\tret |\u003d __get_user(r6.rtmsg_src_len, \u0026(ur6-\u003ertmsg_src_len));\n+\t\tret |\u003d __get_user(r6.rtmsg_metric, \u0026(ur6-\u003ertmsg_metric));\n+\t\tret |\u003d __get_user(r6.rtmsg_info, \u0026(ur6-\u003ertmsg_info));\n+\t\tret |\u003d __get_user(r6.rtmsg_flags, \u0026(ur6-\u003ertmsg_flags));\n+\t\tret |\u003d __get_user(r6.rtmsg_ifindex, \u0026(ur6-\u003ertmsg_ifindex));\n\n \t\tr \u003d (void *) \u0026r6;\n \t} else { /* ipv4 */\n \t\tstruct rtentry32 __user *ur4 \u003d argp;\n-\t\tret \u003d copy_from_user (\u0026r4.rt_dst, \u0026(ur4-\u003ert_dst),\n+\t\tret \u003d copy_from_user(\u0026r4.rt_dst, \u0026(ur4-\u003ert_dst),\n \t\t\t\t\t3 * sizeof(struct sockaddr));\n-\t\tret |\u003d __get_user (r4.rt_flags, \u0026(ur4-\u003ert_flags));\n-\t\tret |\u003d __get_user (r4.rt_metric, \u0026(ur4-\u003ert_metric));\n-\t\tret |\u003d __get_user (r4.rt_mtu, \u0026(ur4-\u003ert_mtu));\n-\t\tret |\u003d __get_user (r4.rt_window, \u0026(ur4-\u003ert_window));\n-\t\tret |\u003d __get_user (r4.rt_irtt, \u0026(ur4-\u003ert_irtt));\n-\t\tret |\u003d __get_user (rtdev, \u0026(ur4-\u003ert_dev));\n+\t\tret |\u003d __get_user(r4.rt_flags, \u0026(ur4-\u003ert_flags));\n+\t\tret |\u003d __get_user(r4.rt_metric, \u0026(ur4-\u003ert_metric));\n+\t\tret |\u003d __get_user(r4.rt_mtu, \u0026(ur4-\u003ert_mtu));\n+\t\tret |\u003d __get_user(r4.rt_window, \u0026(ur4-\u003ert_window));\n+\t\tret |\u003d __get_user(r4.rt_irtt, \u0026(ur4-\u003ert_irtt));\n+\t\tret |\u003d __get_user(rtdev, \u0026(ur4-\u003ert_dev));\n \t\tif (rtdev) {\n-\t\t\tret |\u003d copy_from_user (devname, compat_ptr(rtdev), 15);\n+\t\t\tret |\u003d copy_from_user(devname, compat_ptr(rtdev), 15);\n \t\t\tr4.rt_dev \u003d devname; devname[15] \u003d 0;\n \t\t} else\n \t\t\tr4.rt_dev \u003d NULL;\n@@ -2828,9 +2836,9 @@ static int routing_ioctl(struct net *net, struct socket *sock,\n \t\tgoto out;\n \t}\n\n-\tset_fs (KERNEL_DS);\n+\tset_fs(KERNEL_DS);\n \tret \u003d sock_do_ioctl(net, sock, cmd, (unsigned long) r);\n-\tset_fs (old_fs);\n+\tset_fs(old_fs);\n\n out:\n \treturn ret;\n@@ -2993,11 +3001,13 @@ int kernel_bind(struct socket *sock, struct sockaddr *addr, int addrlen)\n {\n \treturn sock-\u003eops-\u003ebind(sock, addr, addrlen);\n }\n+EXPORT_SYMBOL(kernel_bind);\n\n int kernel_listen(struct socket *sock, int backlog)\n {\n \treturn sock-\u003eops-\u003elisten(sock, backlog);\n }\n+EXPORT_SYMBOL(kernel_listen);\n\n int kernel_accept(struct socket *sock, struct socket **newsock, int flags)\n {\n@@ -3022,24 +3032,28 @@ int kernel_accept(struct socket *sock, struct socket **newsock, int flags)\n done:\n \treturn err;\n }\n+EXPORT_SYMBOL(kernel_accept);\n\n int kernel_connect(struct socket *sock, struct sockaddr *addr, int addrlen,\n \t\t   int flags)\n {\n \treturn sock-\u003eops-\u003econnect(sock, addr, addrlen, flags);\n }\n+EXPORT_SYMBOL(kernel_connect);\n\n int kernel_getsockname(struct socket *sock, struct sockaddr *addr,\n \t\t\t int *addrlen)\n {\n \treturn sock-\u003eops-\u003egetname(sock, addr, addrlen, 0);\n }\n+EXPORT_SYMBOL(kernel_getsockname);\n\n int kernel_getpeername(struct socket *sock, struct sockaddr *addr,\n \t\t\t int *addrlen)\n {\n \treturn sock-\u003eops-\u003egetname(sock, addr, addrlen, 1);\n }\n+EXPORT_SYMBOL(kernel_getpeername);\n\n int kernel_getsockopt(struct socket *sock, int level, int optname,\n \t\t\tchar *optval, int *optlen)\n@@ -3056,6 +3070,7 @@ int kernel_getsockopt(struct socket *sock, int level, int optname,\n \tset_fs(oldfs);\n \treturn err;\n }\n+EXPORT_SYMBOL(kernel_getsockopt);\n\n int kernel_setsockopt(struct socket *sock, int level, int optname,\n \t\t\tchar *optval, unsigned int optlen)\n@@ -3072,6 +3087,7 @@ int kernel_setsockopt(struct socket *sock, int level, int optname,\n \tset_fs(oldfs);\n \treturn err;\n }\n+EXPORT_SYMBOL(kernel_setsockopt);\n\n int kernel_sendpage(struct socket *sock, struct page *page, int offset,\n \t\t    size_t size, int flags)\n@@ -3083,6 +3099,7 @@ int kernel_sendpage(struct socket *sock, struct page *page, int offset,\n\n \treturn sock_no_sendpage(sock, page, offset, size, flags);\n }\n+EXPORT_SYMBOL(kernel_sendpage);\n\n int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg)\n {\n@@ -3095,33 +3112,11 @@ int kernel_sock_ioctl(struct socket *sock, int cmd, unsigned long arg)\n\n \treturn err;\n }\n+EXPORT_SYMBOL(kernel_sock_ioctl);\n\n int kernel_sock_shutdown(struct socket *sock, enum sock_shutdown_cmd how)\n {\n \treturn sock-\u003eops-\u003eshutdown(sock, how);\n }\n-\n-EXPORT_SYMBOL(sock_create);\n-EXPORT_SYMBOL(sock_create_kern);\n-EXPORT_SYMBOL(sock_create_lite);\n-EXPORT_SYMBOL(sock_map_fd);\n-EXPORT_SYMBOL(sock_recvmsg);\n-EXPORT_SYMBOL(sock_register);\n-EXPORT_SYMBOL(sock_release);\n-EXPORT_SYMBOL(sock_sendmsg);\n-EXPORT_SYMBOL(sock_unregister);\n-EXPORT_SYMBOL(sock_wake_async);\n-EXPORT_SYMBOL(sockfd_lookup);\n-EXPORT_SYMBOL(kernel_sendmsg);\n-EXPORT_SYMBOL(kernel_recvmsg);\n-EXPORT_SYMBOL(kernel_bind);\n-EXPORT_SYMBOL(kernel_listen);\n-EXPORT_SYMBOL(kernel_accept);\n-EXPORT_SYMBOL(kernel_connect);\n-EXPORT_SYMBOL(kernel_getsockname);\n-EXPORT_SYMBOL(kernel_getpeername);\n-EXPORT_SYMBOL(kernel_getsockopt);\n-EXPORT_SYMBOL(kernel_setsockopt);\n-EXPORT_SYMBOL(kernel_sendpage);\n-EXPORT_SYMBOL(kernel_sock_ioctl);\n EXPORT_SYMBOL(kernel_sock_shutdown);\n+\n--\n1.7.0.4\n"
    },
    {
      "commit": "bc10502dba37d3b210efd9f3867212298f13b78e",
      "tree": "af4542eaab79cd509244578f839167f16f3ab02d",
      "parents": [
        "ba2d3587912f82d1ab4367975b1df460db60fb1e"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "eric.dumazet@gmail.com",
        "time": "Thu Jun 03 03:21:52 2010 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Jun 03 03:21:52 2010 -0700"
      },
      "message": "net: use __packed annotation\n\ncleanup patch.\n\nUse new __packed annotation in net/ and include/\n(except netfilter)\n\nSigned-off-by: Eric Dumazet \u003ceric.dumazet@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "5a0e3ad6af8660be21ca98a971cd00f331318c05",
      "tree": "5bfb7be11a03176a87296a43ac6647975c00a1d1",
      "parents": [
        "ed391f4ebf8f701d3566423ce8f17e614cde9806"
      ],
      "author": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Wed Mar 24 17:04:11 2010 +0900"
      },
      "committer": {
        "name": "Tejun Heo",
        "email": "tj@kernel.org",
        "time": "Tue Mar 30 22:02:32 2010 +0900"
      },
      "message": "include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h\n\npercpu.h is included by sched.h and module.h and thus ends up being\nincluded when building most .c files.  percpu.h includes slab.h which\nin turn includes gfp.h making everything defined by the two files\nuniversally available and complicating inclusion dependencies.\n\npercpu.h -\u003e slab.h dependency is about to be removed.  Prepare for\nthis change by updating users of gfp and slab facilities include those\nheaders directly instead of assuming availability.  As this conversion\nneeds to touch large number of source files, the following script is\nused as the basis of conversion.\n\n  http://userweb.kernel.org/~tj/misc/slabh-sweep.py\n\nThe script does the followings.\n\n* Scan files for gfp and slab usages and update includes such that\n  only the necessary includes are there.  ie. if only gfp is used,\n  gfp.h, if slab is used, slab.h.\n\n* When the script inserts a new include, it looks at the include\n  blocks and try to put the new include such that its order conforms\n  to its surrounding.  It\u0027s put in the include block which contains\n  core kernel includes, in the same order that the rest are ordered -\n  alphabetical, Christmas tree, rev-Xmas-tree or at the end if there\n  doesn\u0027t seem to be any matching order.\n\n* If the script can\u0027t find a place to put a new include (mostly\n  because the file doesn\u0027t have fitting include block), it prints out\n  an error message indicating which .h file needs to be added to the\n  file.\n\nThe conversion was done in the following steps.\n\n1. The initial automatic conversion of all .c files updated slightly\n   over 4000 files, deleting around 700 includes and adding ~480 gfp.h\n   and ~3000 slab.h inclusions.  The script emitted errors for ~400\n   files.\n\n2. Each error was manually checked.  Some didn\u0027t need the inclusion,\n   some needed manual addition while adding it to implementation .h or\n   embedding .c file was more appropriate for others.  This step added\n   inclusions to around 150 files.\n\n3. The script was run again and the output was compared to the edits\n   from #2 to make sure no file was left behind.\n\n4. Several build tests were done and a couple of problems were fixed.\n   e.g. lib/decompress_*.c used malloc/free() wrappers around slab\n   APIs requiring slab.h to be added manually.\n\n5. The script was run on all .h files but without automatically\n   editing them as sprinkling gfp.h and slab.h inclusions around .h\n   files could easily lead to inclusion dependency hell.  Most gfp.h\n   inclusion directives were ignored as stuff from gfp.h was usually\n   wildly available and often used in preprocessor macros.  Each\n   slab.h inclusion directive was examined and added manually as\n   necessary.\n\n6. percpu.h was updated not to include slab.h.\n\n7. Build test were done on the following configurations and failures\n   were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my\n   distributed build env didn\u0027t work with gcov compiles) and a few\n   more options had to be turned off depending on archs to make things\n   build (like ipr on powerpc/64 which failed due to missing writeq).\n\n   * x86 and x86_64 UP and SMP allmodconfig and a custom test config.\n   * powerpc and powerpc64 SMP allmodconfig\n   * sparc and sparc64 SMP allmodconfig\n   * ia64 SMP allmodconfig\n   * s390 SMP allmodconfig\n   * alpha SMP allmodconfig\n   * um on x86_64 SMP allmodconfig\n\n8. percpu.h modifications were reverted so that it could be applied as\n   a separate patch and serve as bisection point.\n\nGiven the fact that I had only a couple of failures from tests on step\n6, I\u0027m fairly confident about the coverage of this conversion patch.\nIf there is a breakage, it\u0027s likely to be something in one of the arch\nheaders which should be easily discoverable easily on most builds of\nthe specific arch.\n\nSigned-off-by: Tejun Heo \u003ctj@kernel.org\u003e\nGuess-its-ok-by: Christoph Lameter \u003ccl@linux-foundation.org\u003e\nCc: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\n"
    },
    {
      "commit": "de039f02d877af52b8d0fe77878b8343a0f99d8b",
      "tree": "81d312952e828bddb53ff5d540f37b0ce8b202f6",
      "parents": [
        "60c2ffd3d2cf12008747d920ae118df119006003"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Dec 09 20:59:15 2009 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Dec 11 15:07:57 2009 -0800"
      },
      "message": "net: use compat helper functions in compat_sys_recvmmsg\n\nUse (get|put)_compat_timespec helper functions to simplify the code.\n\nCc: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nAcked-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "60c2ffd3d2cf12008747d920ae118df119006003",
      "tree": "7b4e86de5eed6a5377bba5a875b326420fe3503b",
      "parents": [
        "ccdddf500f2b1b8e88ac8e3d4dfc15cce9f73886"
      ],
      "author": {
        "name": "Heiko Carstens",
        "email": "heiko.carstens@de.ibm.com",
        "time": "Wed Dec 09 20:58:16 2009 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Fri Dec 11 15:07:56 2009 -0800"
      },
      "message": "net: fix compat_sys_recvmmsg parameter type\n\ncompat_sys_recvmmsg has a compat_timespec parameter and not a\ntimespec parameter. This way we also get rid of an odd cast.\n\nCc: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: Heiko Carstens \u003cheiko.carstens@de.ibm.com\u003e\nAcked-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "5b23136bcf766a58160a319677b366c90f0cd223",
      "tree": "da895eecddb4ca3d6a14217917e2193eaca609ea",
      "parents": [
        "d7256d0eb4c82b789125f610fea11c6e82b1bcff"
      ],
      "author": {
        "name": "Jean-Mickael Guerin",
        "email": "jean-mickael.guerin@6wind.com",
        "time": "Tue Dec 01 07:52:16 2009 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Dec 02 01:23:23 2009 -0800"
      },
      "message": "net: compat_sys_recvmmsg user timespec arg can be NULL\n\nWe must test if user timespec is non-NULL before copying from userpace,\nsame as sys_recvmmsg().\n\nCommiter note: changed it so that we have just one branch.\n\nSigned-off-by: Jean-Mickael Guerin \u003cjean-mickael.guerin@6wind.com\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "65a1c4fffaaf5ca166a1263d84ca664d5192cda6",
      "tree": "4b78359d2af0a8e0912addbdff6fa07856f25f95",
      "parents": [
        "091bb8ab51c668635d1a75359019005921676881"
      ],
      "author": {
        "name": "roel kluin",
        "email": "roel.kluin@gmail.com",
        "time": "Fri Oct 23 05:59:21 2009 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Oct 29 01:39:54 2009 -0700"
      },
      "message": "net: Cleanup redundant tests on unsigned\n\noptlen is unsigned so the `\u003c 0\u0027 test is never true.\n\nSigned-off-by: Roel Kluin \u003croel.kluin@gmail.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "a2e2725541fad72416326798c2d7fa4dafb7d337",
      "tree": "6174be11da607e83eb8efb3775114ad4d6e0ca3a",
      "parents": [
        "c05e85a06e376f6b6d59e71e5333d707e956d78b"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Oct 12 23:40:10 2009 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Oct 12 23:40:10 2009 -0700"
      },
      "message": "net: Introduce recvmmsg socket syscall\n\nMeaning receive multiple messages, reducing the number of syscalls and\nnet stack entry/exit operations.\n\nNext patches will introduce mechanisms where protocols that want to\noptimize this operation will provide an unlocked_recvmsg operation.\n\nThis takes into account comments made by:\n\n. Paul Moore: sock_recvmsg is called only for the first datagram,\n  sock_recvmsg_nosec is used for the rest.\n\n. Caitlin Bestler: recvmmsg now has a struct timespec timeout, that\n  works in the same fashion as the ppoll one.\n\n  If the underlying protocol returns a datagram with MSG_OOB set, this\n  will make recvmmsg return right away with as many datagrams (+ the OOB\n  one) it has received so far.\n\n. Rémi Denis-Courmont \u0026 Steven Whitehouse: If we receive N \u003c vlen\n  datagrams and then recvmsg returns an error, recvmmsg will return\n  the successfully received datagrams, store the error and return it\n  in the next call.\n\nThis paves the way for a subsequent optimization, sk_prot-\u003eunlocked_recvmsg,\nwhere we will be able to acquire the lock only at batch start and end, not at\nevery underlying recvmsg call.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "b7058842c940ad2c08dd829b21e5c92ebe3b8758",
      "tree": "5fe78d599fc345ca0bcd4b083b79095a54b2921b",
      "parents": [
        "eb1cf0f8f7a9e5a6d573d5bd72c015686a042db0"
      ],
      "author": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Sep 30 16:12:20 2009 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Sep 30 16:12:20 2009 -0700"
      },
      "message": "net: Make setsockopt() optlen be unsigned.\n\nThis provides safety against negative optlen at the type\nlevel instead of depending upon (sometimes non-trivial)\nchecks against this sprinkled all over the the place, in\neach and every implementation.\n\nBased upon work done by Arjan van de Ven and feedback\nfrom Linus Torvalds.\n\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "1dacc76d0014a034b8aca14237c127d7c19d7726",
      "tree": "d3ba044578fab9076ef4a73694fa7d23d4a50969",
      "parents": [
        "4f45b2cd4e78b5e49d7d41548345b879d3fdfeae"
      ],
      "author": {
        "name": "Johannes Berg",
        "email": "johannes@sipsolutions.net",
        "time": "Wed Jul 01 11:26:02 2009 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Jul 15 08:53:39 2009 -0700"
      },
      "message": "net/compat/wext: send different messages to compat tasks\n\nWireless extensions have the unfortunate problem that events\nare multicast netlink messages, and are not independent of\npointer size. Thus, currently 32-bit tasks on 64-bit platforms\ncannot properly receive events and fail with all kinds of\nstrange problems, for instance wpa_supplicant never notices\ndisassociations, due to the way the 64-bit event looks (to a\n32-bit process), the fact that the address is all zeroes is\nlost, it thinks instead it is 00:00:00:00:01:00.\n\nThe same problem existed with the ioctls, until David Miller\nfixed those some time ago in an heroic effort.\n\nA different problem caused by this is that we cannot send the\nASSOCREQIE/ASSOCRESPIE events because sending them causes a\n32-bit wpa_supplicant on a 64-bit system to overwrite its\ninternal information, which is worse than it not getting the\ninformation at all -- so we currently resort to sending a\ncustom string event that it then parses. This, however, has a\nsevere size limitation we are frequently hitting with modern\naccess points; this limitation would can be lifted after this\npatch by sending the correct binary, not custom, event.\n\nA similar problem apparently happens for some other netlink\nusers on x86_64 with 32-bit tasks due to the alignment for\n64-bit quantities.\n\nIn order to fix these problems, I have implemented a way to\nsend compat messages to tasks. When sending an event, we send\nthe non-compat event data together with a compat event data in\nskb_shinfo(main_skb)-\u003efrag_list. Then, when the event is read\nfrom the socket, the netlink code makes sure to pass out only\nthe skb that is compatible with the task. This approach was\nsuggested by David Miller, my original approach required\nalways sending two skbs but that had various small problems.\n\nTo determine whether compat is needed or not, I have used the\nMSG_CMSG_COMPAT flag, and adjusted the call path for recv and\nrecvfrom to include it, even if those calls do not have a cmsg\nparameter.\n\nI have not solved one small part of the problem, and I don\u0027t\nthink it is necessary to: if a 32-bit application uses read()\nrather than any form of recvmsg() it will still get the wrong\n(64-bit) event. However, neither do applications actually do\nthis, nor would it be a regression.\n\nSigned-off-by: Johannes Berg \u003cjohannes@sipsolutions.net\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "20d4947353be60e909e6b1a79d241457edd6833f",
      "tree": "939ced518fc52e57df9ee9efb0cd14b6e26a3bc4",
      "parents": [
        "ac45f602ee3d1b6f326f68bc0c2591ceebf05ba4"
      ],
      "author": {
        "name": "Patrick Ohly",
        "email": "patrick.ohly@intel.com",
        "time": "Thu Feb 12 05:03:38 2009 +0000"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sun Feb 15 22:43:35 2009 -0800"
      },
      "message": "net: socket infrastructure for SO_TIMESTAMPING\n\nThe overlap with the old SO_TIMESTAMP[NS] options is handled so\nthat time stamping in software (net_enable_timestamp()) is\nenabled when SO_TIMESTAMP[NS] and/or SO_TIMESTAMPING_RX_SOFTWARE\nis set.  It\u0027s disabled if all of these are off.\n\nSigned-off-by: Patrick Ohly \u003cpatrick.ohly@intel.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "de11defebf00007677fb7ee91d9b089b78786fbb",
      "tree": "8219faf1b7992be77a612e778c2573c55f56cf19",
      "parents": [
        "cf7ee554f3a324e98181b0ea249d9d5be3a0acb8"
      ],
      "author": {
        "name": "Ulrich Drepper",
        "email": "drepper@redhat.com",
        "time": "Wed Nov 19 15:36:14 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Wed Nov 19 18:49:57 2008 -0800"
      },
      "message": "reintroduce accept4\n\nIntroduce a new accept4() system call.  The addition of this system call\nmatches analogous changes in 2.6.27 (dup3(), evenfd2(), signalfd4(),\ninotify_init1(), epoll_create1(), pipe2()) which added new system calls\nthat differed from analogous traditional system calls in adding a flags\nargument that can be used to access additional functionality.\n\nThe accept4() system call is exactly the same as accept(), except that\nit adds a flags bit-mask argument.  Two flags are initially implemented.\n(Most of the new system calls in 2.6.27 also had both of these flags.)\n\nSOCK_CLOEXEC causes the close-on-exec (FD_CLOEXEC) flag to be enabled\nfor the new file descriptor returned by accept4().  This is a useful\nsecurity feature to avoid leaking information in a multithreaded\nprogram where one thread is doing an accept() at the same time as\nanother thread is doing a fork() plus exec().  More details here:\nhttp://udrepper.livejournal.com/20407.html \"Secure File Descriptor Handling\",\nUlrich Drepper).\n\nThe other flag is SOCK_NONBLOCK, which causes the O_NONBLOCK flag\nto be enabled on the new open file description created by accept4().\n(This flag is merely a convenience, saving the use of additional calls\nfcntl(F_GETFL) and fcntl (F_SETFL) to achieve the same result.\n\nHere\u0027s a test program.  Works on x86-32.  Should work on x86-64, but\nI (mtk) don\u0027t have a system to hand to test with.\n\nIt tests accept4() with each of the four possible combinations of\nSOCK_CLOEXEC and SOCK_NONBLOCK set/clear in \u0027flags\u0027, and verifies\nthat the appropriate flags are set on the file descriptor/open file\ndescription returned by accept4().\n\nI tested Ulrich\u0027s patch in this thread by applying against 2.6.28-rc2,\nand it passes according to my test program.\n\n/* test_accept4.c\n\n  Copyright (C) 2008, Linux Foundation, written by Michael Kerrisk\n       \u003cmtk.manpages@gmail.com\u003e\n\n  Licensed under the GNU GPLv2 or later.\n*/\n#define _GNU_SOURCE\n#include \u003cunistd.h\u003e\n#include \u003csys/syscall.h\u003e\n#include \u003csys/socket.h\u003e\n#include \u003cnetinet/in.h\u003e\n#include \u003cstdlib.h\u003e\n#include \u003cfcntl.h\u003e\n#include \u003cstdio.h\u003e\n#include \u003cstring.h\u003e\n\n#define PORT_NUM 33333\n\n#define die(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0)\n\n/**********************************************************************/\n\n/* The following is what we need until glibc gets a wrapper for\n  accept4() */\n\n/* Flags for socket(), socketpair(), accept4() */\n#ifndef SOCK_CLOEXEC\n#define SOCK_CLOEXEC    O_CLOEXEC\n#endif\n#ifndef SOCK_NONBLOCK\n#define SOCK_NONBLOCK   O_NONBLOCK\n#endif\n\n#ifdef __x86_64__\n#define SYS_accept4 288\n#elif __i386__\n#define USE_SOCKETCALL 1\n#define SYS_ACCEPT4 18\n#else\n#error \"Sorry -- don\u0027t know the syscall # on this architecture\"\n#endif\n\nstatic int\naccept4(int fd, struct sockaddr *sockaddr, socklen_t *addrlen, int flags)\n{\n   printf(\"Calling accept4(): flags \u003d %x\", flags);\n   if (flags !\u003d 0) {\n       printf(\" (\");\n       if (flags \u0026 SOCK_CLOEXEC)\n           printf(\"SOCK_CLOEXEC\");\n       if ((flags \u0026 SOCK_CLOEXEC) \u0026\u0026 (flags \u0026 SOCK_NONBLOCK))\n           printf(\" \");\n       if (flags \u0026 SOCK_NONBLOCK)\n           printf(\"SOCK_NONBLOCK\");\n       printf(\")\");\n   }\n   printf(\"\\n\");\n\n#if USE_SOCKETCALL\n   long args[6];\n\n   args[0] \u003d fd;\n   args[1] \u003d (long) sockaddr;\n   args[2] \u003d (long) addrlen;\n   args[3] \u003d flags;\n\n   return syscall(SYS_socketcall, SYS_ACCEPT4, args);\n#else\n   return syscall(SYS_accept4, fd, sockaddr, addrlen, flags);\n#endif\n}\n\n/**********************************************************************/\n\nstatic int\ndo_test(int lfd, struct sockaddr_in *conn_addr,\n       int closeonexec_flag, int nonblock_flag)\n{\n   int connfd, acceptfd;\n   int fdf, flf, fdf_pass, flf_pass;\n   struct sockaddr_in claddr;\n   socklen_t addrlen;\n\n   printf(\"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\n\");\n\n   connfd \u003d socket(AF_INET, SOCK_STREAM, 0);\n   if (connfd \u003d\u003d -1)\n       die(\"socket\");\n   if (connect(connfd, (struct sockaddr *) conn_addr,\n               sizeof(struct sockaddr_in)) \u003d\u003d -1)\n       die(\"connect\");\n\n   addrlen \u003d sizeof(struct sockaddr_in);\n   acceptfd \u003d accept4(lfd, (struct sockaddr *) \u0026claddr, \u0026addrlen,\n                      closeonexec_flag | nonblock_flag);\n   if (acceptfd \u003d\u003d -1) {\n       perror(\"accept4()\");\n       close(connfd);\n       return 0;\n   }\n\n   fdf \u003d fcntl(acceptfd, F_GETFD);\n   if (fdf \u003d\u003d -1)\n       die(\"fcntl:F_GETFD\");\n   fdf_pass \u003d ((fdf \u0026 FD_CLOEXEC) !\u003d 0) \u003d\u003d\n              ((closeonexec_flag \u0026 SOCK_CLOEXEC) !\u003d 0);\n   printf(\"Close-on-exec flag is %sset (%s); \",\n           (fdf \u0026 FD_CLOEXEC) ? \"\" : \"not \",\n           fdf_pass ? \"OK\" : \"failed\");\n\n   flf \u003d fcntl(acceptfd, F_GETFL);\n   if (flf \u003d\u003d -1)\n       die(\"fcntl:F_GETFD\");\n   flf_pass \u003d ((flf \u0026 O_NONBLOCK) !\u003d 0) \u003d\u003d\n              ((nonblock_flag \u0026 SOCK_NONBLOCK) !\u003d0);\n   printf(\"nonblock flag is %sset (%s)\\n\",\n           (flf \u0026 O_NONBLOCK) ? \"\" : \"not \",\n           flf_pass ? \"OK\" : \"failed\");\n\n   close(acceptfd);\n   close(connfd);\n\n   printf(\"Test result: %s\\n\", (fdf_pass \u0026\u0026 flf_pass) ? \"PASS\" : \"FAIL\");\n   return fdf_pass \u0026\u0026 flf_pass;\n}\n\nstatic int\ncreate_listening_socket(int port_num)\n{\n   struct sockaddr_in svaddr;\n   int lfd;\n   int optval;\n\n   memset(\u0026svaddr, 0, sizeof(struct sockaddr_in));\n   svaddr.sin_family \u003d AF_INET;\n   svaddr.sin_addr.s_addr \u003d htonl(INADDR_ANY);\n   svaddr.sin_port \u003d htons(port_num);\n\n   lfd \u003d socket(AF_INET, SOCK_STREAM, 0);\n   if (lfd \u003d\u003d -1)\n       die(\"socket\");\n\n   optval \u003d 1;\n   if (setsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, \u0026optval,\n                  sizeof(optval)) \u003d\u003d -1)\n       die(\"setsockopt\");\n\n   if (bind(lfd, (struct sockaddr *) \u0026svaddr,\n            sizeof(struct sockaddr_in)) \u003d\u003d -1)\n       die(\"bind\");\n\n   if (listen(lfd, 5) \u003d\u003d -1)\n       die(\"listen\");\n\n   return lfd;\n}\n\nint\nmain(int argc, char *argv[])\n{\n   struct sockaddr_in conn_addr;\n   int lfd;\n   int port_num;\n   int passed;\n\n   passed \u003d 1;\n\n   port_num \u003d (argc \u003e 1) ? atoi(argv[1]) : PORT_NUM;\n\n   memset(\u0026conn_addr, 0, sizeof(struct sockaddr_in));\n   conn_addr.sin_family \u003d AF_INET;\n   conn_addr.sin_addr.s_addr \u003d htonl(INADDR_LOOPBACK);\n   conn_addr.sin_port \u003d htons(port_num);\n\n   lfd \u003d create_listening_socket(port_num);\n\n   if (!do_test(lfd, \u0026conn_addr, 0, 0))\n       passed \u003d 0;\n   if (!do_test(lfd, \u0026conn_addr, SOCK_CLOEXEC, 0))\n       passed \u003d 0;\n   if (!do_test(lfd, \u0026conn_addr, 0, SOCK_NONBLOCK))\n       passed \u003d 0;\n   if (!do_test(lfd, \u0026conn_addr, SOCK_CLOEXEC, SOCK_NONBLOCK))\n       passed \u003d 0;\n\n   close(lfd);\n\n   exit(passed ? EXIT_SUCCESS : EXIT_FAILURE);\n}\n\n[mtk.manpages@gmail.com: rewrote changelog, updated test program]\nSigned-off-by: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nTested-by: Michael Kerrisk \u003cmtk.manpages@gmail.com\u003e\nAcked-by: Michael Kerrisk \u003cmtk.manpages@gmail.com\u003e\nCc: \u003clinux-api@vger.kernel.org\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "d35aac10eb7bcb3b80bef16b60844af0313f47f7",
      "tree": "643428ea3f2d78cf9feb7470d812818f4a8dc690",
      "parents": [
        "8f65b5354b1a34a536641bd915958662e8af5320"
      ],
      "author": {
        "name": "Patrick Ohly",
        "email": "patrick.ohly@intel.com",
        "time": "Wed Nov 12 01:54:56 2008 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Wed Nov 12 01:54:56 2008 -0800"
      },
      "message": "net: put_cmsg_compat + SO_TIMESTAMP[NS]: use same name for value as caller\n\nIn __sock_recv_timestamp() the additional SCM_TIMESTAMP[NS] is used. This\nhas the same value as SO_TIMESTAMP[NS], so this is a purely cosmetic change.\n\nSigned-off-by: Patrick Ohly \u003cpatrick.ohly@intel.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "aaca0bdca573f3f51ea03139f9c7289541e7bca3",
      "tree": "d25b0baa73b5301d91a5c848a896bad0fb719acc",
      "parents": [
        "a677a039be7243357d93502bff2b40850c942e2d"
      ],
      "author": {
        "name": "Ulrich Drepper",
        "email": "drepper@redhat.com",
        "time": "Wed Jul 23 21:29:20 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jul 24 10:47:27 2008 -0700"
      },
      "message": "flag parameters: paccept\n\nThis patch is by far the most complex in the series.  It adds a new syscall\npaccept.  This syscall differs from accept in that it adds (at the userlevel)\ntwo additional parameters:\n\n- a signal mask\n- a flags value\n\nThe flags parameter can be used to set flag like SOCK_CLOEXEC.  This is\nimlpemented here as well.  Some people argued that this is a property which\nshould be inherited from the file desriptor for the server but this is against\nPOSIX.  Additionally, we really want the signal mask parameter as well\n(similar to pselect, ppoll, etc).  So an interface change in inevitable.\n\nThe flag value is the same as for socket and socketpair.  I think diverging\nhere will only create confusion.  Similar to the filesystem interfaces where\nthe use of the O_* constants differs, it is acceptable here.\n\nThe signal mask is handled as for pselect etc.  The mask is temporarily\ninstalled for the thread and removed before the call returns.  I modeled the\ncode after pselect.  If there is a problem it\u0027s likely also in pselect.\n\nFor architectures which use socketcall I maintained this interface instead of\nadding a system call.  The symmetry shouldn\u0027t be broken.\n\nThe following test must be adjusted for architectures other than x86 and\nx86-64 and in case the syscall numbers changed.\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n#include \u003cerrno.h\u003e\n#include \u003cfcntl.h\u003e\n#include \u003cpthread.h\u003e\n#include \u003csignal.h\u003e\n#include \u003cstdio.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003cnetinet/in.h\u003e\n#include \u003csys/socket.h\u003e\n#include \u003csys/syscall.h\u003e\n\n#ifndef __NR_paccept\n# ifdef __x86_64__\n#  define __NR_paccept 288\n# elif defined __i386__\n#  define SYS_PACCEPT 18\n#  define USE_SOCKETCALL 1\n# else\n#  error \"need __NR_paccept\"\n# endif\n#endif\n\n#ifdef USE_SOCKETCALL\n# define paccept(fd, addr, addrlen, mask, flags) \\\n  ({ long args[6] \u003d { \\\n       (long) fd, (long) addr, (long) addrlen, (long) mask, 8, (long) flags }; \\\n     syscall (__NR_socketcall, SYS_PACCEPT, args); })\n#else\n# define paccept(fd, addr, addrlen, mask, flags) \\\n  syscall (__NR_paccept, fd, addr, addrlen, mask, 8, flags)\n#endif\n\n#define PORT 57392\n\n#define SOCK_CLOEXEC O_CLOEXEC\n\nstatic pthread_barrier_t b;\n\nstatic void *\ntf (void *arg)\n{\n  pthread_barrier_wait (\u0026b);\n  int s \u003d socket (AF_INET, SOCK_STREAM, 0);\n  struct sockaddr_in sin;\n  sin.sin_family \u003d AF_INET;\n  sin.sin_addr.s_addr \u003d htonl (INADDR_LOOPBACK);\n  sin.sin_port \u003d htons (PORT);\n  connect (s, (const struct sockaddr *) \u0026sin, sizeof (sin));\n  close (s);\n\n  pthread_barrier_wait (\u0026b);\n  s \u003d socket (AF_INET, SOCK_STREAM, 0);\n  sin.sin_port \u003d htons (PORT);\n  connect (s, (const struct sockaddr *) \u0026sin, sizeof (sin));\n  close (s);\n  pthread_barrier_wait (\u0026b);\n\n  pthread_barrier_wait (\u0026b);\n  sleep (2);\n  pthread_kill ((pthread_t) arg, SIGUSR1);\n\n  return NULL;\n}\n\nstatic void\nhandler (int s)\n{\n}\n\nint\nmain (void)\n{\n  pthread_barrier_init (\u0026b, NULL, 2);\n\n  struct sockaddr_in sin;\n  pthread_t th;\n  if (pthread_create (\u0026th, NULL, tf, (void *) pthread_self ()) !\u003d 0)\n    {\n      puts (\"pthread_create failed\");\n      return 1;\n    }\n\n  int s \u003d socket (AF_INET, SOCK_STREAM, 0);\n  int reuse \u003d 1;\n  setsockopt (s, SOL_SOCKET, SO_REUSEADDR, \u0026reuse, sizeof (reuse));\n  sin.sin_family \u003d AF_INET;\n  sin.sin_addr.s_addr \u003d htonl (INADDR_LOOPBACK);\n  sin.sin_port \u003d htons (PORT);\n  bind (s, (struct sockaddr *) \u0026sin, sizeof (sin));\n  listen (s, SOMAXCONN);\n\n  pthread_barrier_wait (\u0026b);\n\n  int s2 \u003d paccept (s, NULL, 0, NULL, 0);\n  if (s2 \u003c 0)\n    {\n      puts (\"paccept(0) failed\");\n      return 1;\n    }\n\n  int coe \u003d fcntl (s2, F_GETFD);\n  if (coe \u0026 FD_CLOEXEC)\n    {\n      puts (\"paccept(0) set close-on-exec-flag\");\n      return 1;\n    }\n  close (s2);\n\n  pthread_barrier_wait (\u0026b);\n\n  s2 \u003d paccept (s, NULL, 0, NULL, SOCK_CLOEXEC);\n  if (s2 \u003c 0)\n    {\n      puts (\"paccept(SOCK_CLOEXEC) failed\");\n      return 1;\n    }\n\n  coe \u003d fcntl (s2, F_GETFD);\n  if ((coe \u0026 FD_CLOEXEC) \u003d\u003d 0)\n    {\n      puts (\"paccept(SOCK_CLOEXEC) does not set close-on-exec flag\");\n      return 1;\n    }\n  close (s2);\n\n  pthread_barrier_wait (\u0026b);\n\n  struct sigaction sa;\n  sa.sa_handler \u003d handler;\n  sa.sa_flags \u003d 0;\n  sigemptyset (\u0026sa.sa_mask);\n  sigaction (SIGUSR1, \u0026sa, NULL);\n\n  sigset_t ss;\n  pthread_sigmask (SIG_SETMASK, NULL, \u0026ss);\n  sigaddset (\u0026ss, SIGUSR1);\n  pthread_sigmask (SIG_SETMASK, \u0026ss, NULL);\n\n  sigdelset (\u0026ss, SIGUSR1);\n  alarm (4);\n  pthread_barrier_wait (\u0026b);\n\n  errno \u003d 0 ;\n  s2 \u003d paccept (s, NULL, 0, \u0026ss, 0);\n  if (s2 !\u003d -1 || errno !\u003d EINTR)\n    {\n      puts (\"paccept did not fail with EINTR\");\n      return 1;\n    }\n\n  close (s);\n\n  puts (\"OK\");\n\n  return 0;\n}\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n[akpm@linux-foundation.org: make it compile]\n[akpm@linux-foundation.org: add sys_ni stub]\nSigned-off-by: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nAcked-by: Davide Libenzi \u003cdavidel@xmailserver.org\u003e\nCc: Michael Kerrisk \u003cmtk.manpages@googlemail.com\u003e\nCc: \u003clinux-arch@vger.kernel.org\u003e\nCc: \"David S. Miller\" \u003cdavem@davemloft.net\u003e\nCc: Roland McGrath \u003croland@redhat.com\u003e\nCc: Kyle McMartin \u003ckyle@mcmartin.ca\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "230b183921ecbaa5fedc0d35ad6ba7bb64b6e06a",
      "tree": "2ea0a3bde5deab4b90ca9ed58e23b020494f25a0",
      "parents": [
        "53b7997fd5c62408d10b9aafb38974ce90fd2356"
      ],
      "author": {
        "name": "YOSHIFUJI Hideaki",
        "email": "yoshfuji@linux-ipv6.org",
        "time": "Sat Jul 19 22:35:47 2008 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sat Jul 19 22:35:47 2008 -0700"
      },
      "message": "net: Use standard structures for generic socket address structures.\n\nUse sockaddr_storage{} for generic socket address storage\nand ensures proper alignment.\nUse sockaddr{} for pointers to omit several casts.\n\nSigned-off-by: YOSHIFUJI Hideaki \u003cyoshfuji@linux-ipv6.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "42908c69f61f75dd70e424263ab89ee52040382b",
      "tree": "7c4333d2159d19cb33ae18f718259df258d7d137",
      "parents": [
        "be666e0a1345ed80f29cb30c73da0ec2ea5c5863"
      ],
      "author": {
        "name": "David L Stevens",
        "email": "dlstevens@us.ibm.com",
        "time": "Tue Apr 29 03:23:22 2008 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Apr 29 03:23:22 2008 -0700"
      },
      "message": "net: Add compat support for getsockopt (MCAST_MSFILTER)\n\nThis patch adds support for getsockopt for MCAST_MSFILTER for\nboth IPv4 and IPv6. It depends on the previous setsockopt patch,\nand uses the same method.\n\nSigned-off-by: David L Stevens \u003cdlstevens@us.ibm.com\u003e\nSigned-off-by: YOSHIFUJI Hideaki \u003cyoshfuji@linux-ipv6.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "be666e0a1345ed80f29cb30c73da0ec2ea5c5863",
      "tree": "46a29aa49e2357a3c1c69a39d9789a16c568fe9d",
      "parents": [
        "2ad17defd596ca7e8ba782d5fc6950ee0e99513c"
      ],
      "author": {
        "name": "David L Stevens",
        "email": "dlstevens@us.ibm.com",
        "time": "Tue Apr 29 03:23:00 2008 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Apr 29 03:23:00 2008 -0700"
      },
      "message": "net: Several cleanups for the setsockopt compat support.\n\n1) added missing \"__user\" for kgsr and kgf pointers\n2) verify read for only GROUP_FILTER_SIZE(0). The group_filter\n        structure definition (via RFC) includes space for one source\n        in the source list array, but that source need not be present.\n        So, sizeof(group_filter) \u003e GROUP_FILTER_SIZE(0). Fixed\n        the user read-check for minimum length to use the smaller size.\n3) remove unneeded \"\u0026\" for gf_slist addresses\n\nSigned-off-by: David L Stevens \u003cdlstevens@us.ibm.com\u003e\nSigned-off-by: YOSHIFUJI Hideaki \u003cyoshfuji@linux-ipv6.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "dae50295488f35d2d617b08a5fae43154c947eec",
      "tree": "afee67a0e85f4a168e0bb75423f1b703f48baad3",
      "parents": [
        "01a2202c95989a4df48e9a5b5e013cb80c6b2d66"
      ],
      "author": {
        "name": "David L Stevens",
        "email": "dlstevens@us.ibm.com",
        "time": "Sun Apr 27 01:06:07 2008 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sun Apr 27 14:26:53 2008 -0700"
      },
      "message": "ipv4/ipv6 compat: Fix SSM applications on 64bit kernels.\n\nAdd support on 64-bit kernels for seting 32-bit compatible MCAST*\nsocket options.\n\nSigned-off-by: David L Stevens \u003cdlstevens@us.ibm.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "3bc3fe5eed5e866c0871db6d745f3bf58af004ef",
      "tree": "01c1906660209aeebd21307d61b5078d37e5baed",
      "parents": [
        "d924357c50d83e76d30dd5b81b5804815a2ae31c"
      ],
      "author": {
        "name": "Patrick McHardy",
        "email": "kaber@trash.net",
        "time": "Mon Dec 17 21:50:37 2007 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:58:36 2008 -0800"
      },
      "message": "[NETFILTER]: ip6_tables: add compat support\n\nSigned-off-by: Patrick McHardy \u003ckaber@trash.net\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "6e23ae2a48750bda407a4a58f52a4865d7308bf5",
      "tree": "633fd60b2a42bf6fdb86564f0c05a6d52d8dc92b",
      "parents": [
        "1bf06cd2e338fd6fc29169d30eaf0df982338285"
      ],
      "author": {
        "name": "Patrick McHardy",
        "email": "kaber@trash.net",
        "time": "Mon Nov 19 18:53:30 2007 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Jan 28 14:53:55 2008 -0800"
      },
      "message": "[NETFILTER]: Introduce NF_INET_ hook values\n\nThe IPv4 and IPv6 hook values are identical, yet some code tries to figure\nout the \"correct\" value by looking at the address family. Introduce NF_INET_*\nvalues for both IPv4 and IPv6. The old values are kept in a #ifndef __KERNEL__\nsection for userspace compatibility.\n\nSigned-off-by: Patrick McHardy \u003ckaber@trash.net\u003e\nAcked-by: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "1ac70e7ad24a88710cf9b6d7ababaefa2b575df0",
      "tree": "175202f238aca605bf916f4871bc7ce04eebddc7",
      "parents": [
        "c5c0f33d8e5b1219c86757e6afffd6f96823e521"
      ],
      "author": {
        "name": "Wei Yongjun",
        "email": "yjwei@cn.fujitsu.com",
        "time": "Thu Dec 20 14:36:44 2007 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Thu Dec 20 14:36:44 2007 -0800"
      },
      "message": "[NET]: Fix function put_cmsg() which may cause usr application memory overflow\n\nWhen used function put_cmsg() to copy kernel information to user \napplication memory, if the memory length given by user application is \nnot enough, by the bad length calculate of msg.msg_controllen, \nput_cmsg() function may cause the msg.msg_controllen to be a large \nvalue, such as 0xFFFFFFF0, so the following put_cmsg() can also write \ndata to usr application memory even usr has no valid memory to store \nthis. This may cause usr application memory overflow.\n\nint put_cmsg(struct msghdr * msg, int level, int type, int len, void *data)\n{\n    struct cmsghdr __user *cm\n        \u003d (__force struct cmsghdr __user *)msg-\u003emsg_control;\n    struct cmsghdr cmhdr;\n    int cmlen \u003d CMSG_LEN(len);\n    ~~~~~~~~~~~~~~~~~~~~~\n    int err;\n\n    if (MSG_CMSG_COMPAT \u0026 msg-\u003emsg_flags)\n        return put_cmsg_compat(msg, level, type, len, data);\n\n    if (cm\u003d\u003dNULL || msg-\u003emsg_controllen \u003c sizeof(*cm)) {\n        msg-\u003emsg_flags |\u003d MSG_CTRUNC;\n        return 0; /* XXX: return error? check spec. */\n    }\n    if (msg-\u003emsg_controllen \u003c cmlen) {\n    ~~~~~~~~~~~~~~~~~~~~~~~~\n        msg-\u003emsg_flags |\u003d MSG_CTRUNC;\n        cmlen \u003d msg-\u003emsg_controllen;\n    }\n    cmhdr.cmsg_level \u003d level;\n    cmhdr.cmsg_type \u003d type;\n    cmhdr.cmsg_len \u003d cmlen;\n\n    err \u003d -EFAULT;\n    if (copy_to_user(cm, \u0026cmhdr, sizeof cmhdr))\n        goto out;\n    if (copy_to_user(CMSG_DATA(cm), data, cmlen - sizeof(struct cmsghdr)))\n        goto out;\n    cmlen \u003d CMSG_SPACE(len);\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    If MSG_CTRUNC flags is set, msg-\u003emsg_controllen is less than \nCMSG_SPACE(len), \"msg-\u003emsg_controllen -\u003d cmlen\" will cause unsinged int \ntype msg-\u003emsg_controllen to be a large value.\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n    msg-\u003emsg_control +\u003d cmlen;\n    msg-\u003emsg_controllen -\u003d cmlen;\n    ~~~~~~~~~~~~~~~~~~~~~\n    err \u003d 0;\nout:\n    return err;\n}\n\nThe same promble exists in put_cmsg_compat(). This patch can fix this \nproblem.\n\nSigned-off-by: Wei Yongjun \u003cyjwei@cn.fujitsu.com\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "4a19542e5f694cd408a32c3d9dc593ba9366e2d7",
      "tree": "12f5fd603b516b4e24ec4850d5589273d24be569",
      "parents": [
        "f23513e8d96cf5e6cf8d2ff0cb5dd6bbc33995e4"
      ],
      "author": {
        "name": "Ulrich Drepper",
        "email": "drepper@redhat.com",
        "time": "Sun Jul 15 23:40:34 2007 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Mon Jul 16 09:05:45 2007 -0700"
      },
      "message": "O_CLOEXEC for SCM_RIGHTS\n\nPart two in the O_CLOEXEC saga: adding support for file descriptors received\nthrough Unix domain sockets.\n\nThe patch is once again pretty minimal, it introduces a new flag for recvmsg\nand passes it just like the existing MSG_CMSG_COMPAT flag.  I think this bit\nis not used otherwise but the networking people will know better.\n\nThis new flag is not recognized by recvfrom and recv.  These functions cannot\nbe used for that purpose and the asymmetry this introduces is not worse than\nthe already existing MSG_CMSG_COMPAT situations.\n\nThe patch must be applied on the patch which introduced O_CLOEXEC.  It has to\nremove static from the new get_unused_fd_flags function but since scm.c cannot\nlive in a module the function still hasn\u0027t to be exported.\n\nHere\u0027s a test program to make sure the code works.  It\u0027s so much longer than\nthe actual patch...\n\n#include \u003cerrno.h\u003e\n#include \u003cerror.h\u003e\n#include \u003cfcntl.h\u003e\n#include \u003cstdio.h\u003e\n#include \u003cstring.h\u003e\n#include \u003cunistd.h\u003e\n#include \u003csys/socket.h\u003e\n#include \u003csys/un.h\u003e\n\n#ifndef O_CLOEXEC\n# define O_CLOEXEC 02000000\n#endif\n#ifndef MSG_CMSG_CLOEXEC\n# define MSG_CMSG_CLOEXEC 0x40000000\n#endif\n\nint\nmain (int argc, char *argv[])\n{\n  if (argc \u003e 1)\n    {\n      int fd \u003d atol (argv[1]);\n      printf (\"child: fd \u003d %d\\n\", fd);\n      if (fcntl (fd, F_GETFD) \u003d\u003d 0 || errno !\u003d EBADF)\n        {\n          puts (\"file descriptor valid in child\");\n          return 1;\n        }\n      return 0;\n\n    }\n\n  struct sockaddr_un sun;\n  strcpy (sun.sun_path, \"./testsocket\");\n  sun.sun_family \u003d AF_UNIX;\n\n  char databuf[] \u003d \"hello\";\n  struct iovec iov[1];\n  iov[0].iov_base \u003d databuf;\n  iov[0].iov_len \u003d sizeof (databuf);\n\n  union\n  {\n    struct cmsghdr hdr;\n    char bytes[CMSG_SPACE (sizeof (int))];\n  } buf;\n  struct msghdr msg \u003d { .msg_iov \u003d iov, .msg_iovlen \u003d 1,\n                        .msg_control \u003d buf.bytes,\n                        .msg_controllen \u003d sizeof (buf) };\n  struct cmsghdr *cmsg \u003d CMSG_FIRSTHDR (\u0026msg);\n\n  cmsg-\u003ecmsg_level \u003d SOL_SOCKET;\n  cmsg-\u003ecmsg_type \u003d SCM_RIGHTS;\n  cmsg-\u003ecmsg_len \u003d CMSG_LEN (sizeof (int));\n\n  msg.msg_controllen \u003d cmsg-\u003ecmsg_len;\n\n  pid_t child \u003d fork ();\n  if (child \u003d\u003d -1)\n    error (1, errno, \"fork\");\n  if (child \u003d\u003d 0)\n    {\n      int sock \u003d socket (PF_UNIX, SOCK_STREAM, 0);\n      if (sock \u003c 0)\n        error (1, errno, \"socket\");\n\n      if (bind (sock, (struct sockaddr *) \u0026sun, sizeof (sun)) \u003c 0)\n        error (1, errno, \"bind\");\n      if (listen (sock, SOMAXCONN) \u003c 0)\n        error (1, errno, \"listen\");\n\n      int conn \u003d accept (sock, NULL, NULL);\n      if (conn \u003d\u003d -1)\n        error (1, errno, \"accept\");\n\n      *(int *) CMSG_DATA (cmsg) \u003d sock;\n      if (sendmsg (conn, \u0026msg, MSG_NOSIGNAL) \u003c 0)\n        error (1, errno, \"sendmsg\");\n\n      return 0;\n    }\n\n  /* For a test suite this should be more robust like a\n     barrier in shared memory.  */\n  sleep (1);\n\n  int sock \u003d socket (PF_UNIX, SOCK_STREAM, 0);\n  if (sock \u003c 0)\n    error (1, errno, \"socket\");\n\n  if (connect (sock, (struct sockaddr *) \u0026sun, sizeof (sun)) \u003c 0)\n    error (1, errno, \"connect\");\n  unlink (sun.sun_path);\n\n  *(int *) CMSG_DATA (cmsg) \u003d -1;\n\n  if (recvmsg (sock, \u0026msg, MSG_CMSG_CLOEXEC) \u003c 0)\n    error (1, errno, \"recvmsg\");\n\n  int fd \u003d *(int *) CMSG_DATA (cmsg);\n  if (fd \u003d\u003d -1)\n    error (1, 0, \"no descriptor received\");\n\n  char fdname[20];\n  snprintf (fdname, sizeof (fdname), \"%d\", fd);\n  execl (\"/proc/self/exe\", argv[0], fdname, NULL);\n  puts (\"execl failed\");\n  return 1;\n}\n\n[akpm@linux-foundation.org: Fix fastcall inconsistency noted by Michael Buesch]\n[akpm@linux-foundation.org: build fix]\nSigned-off-by: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Michael Buesch \u003cmb@bu3sch.de\u003e\nCc: Michael Kerrisk \u003cmtk-manpages@gmx.net\u003e\nAcked-by: David S. Miller \u003cdavem@davemloft.net\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "92f37fd2ee805aa77925c1e64fd56088b46094fc",
      "tree": "8251c38b83ab362116dac89d94412ce229b42831",
      "parents": [
        "c7a3c5da35055e2fa97ed4f0da3eec4bd0ef4c38"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "dada1@cosmosbay.com",
        "time": "Sun Mar 25 22:14:49 2007 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Wed Apr 25 22:24:21 2007 -0700"
      },
      "message": "[NET]: Adding SO_TIMESTAMPNS / SCM_TIMESTAMPNS support\n\nNow that network timestamps use ktime_t infrastructure, we can add a new\nSOL_SOCKET sockopt  SO_TIMESTAMPNS.\n\nThis command is similar to SO_TIMESTAMP, but permits transmission of\na \u0027timespec struct\u0027 instead of a \u0027timeval struct\u0027 control message.\n(nanosecond resolution instead of microsecond)\n\nControl message is labelled SCM_TIMESTAMPNS instead of SCM_TIMESTAMP\n\nA socket cannot mix SO_TIMESTAMP and SO_TIMESTAMPNS : the two modes are\nmutually exclusive.\n\nsock_recv_timestamp() became too big to be fully inlined so I added a\n__sock_recv_timestamp() helper function.\n\nSigned-off-by: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nCC: linux-arch@vger.kernel.org\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "e71a4783aae059931f63b2d4e7013e36529badef",
      "tree": "d9c2bad69b8d0512e12c8ff786237319990fbd00",
      "parents": [
        "add459aa1afe05472abc96f6a29aefd0c84e73d6"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "shemminger@linux-foundation.org",
        "time": "Tue Apr 10 20:10:33 2007 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Wed Apr 25 22:24:09 2007 -0700"
      },
      "message": "[NET] core: whitespace cleanup\n\nFix whitespace around keywords. Fix indentation especially of switch\nstatements.\n\nSigned-off-by: Stephen Hemminger \u003cshemminger@linux-foundation.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "ae40eb1ef30ab4120bd3c8b7e3da99ee53d27a23",
      "tree": "b5ae288b3c27d13bde9648c41d7db3cfe1884bc2",
      "parents": [
        "cb69cc52364690d7789940c480b3a9490784b680"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "dada1@cosmosbay.com",
        "time": "Sun Mar 18 17:33:16 2007 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Wed Apr 25 22:24:04 2007 -0700"
      },
      "message": "[NET]: Introduce SIOCGSTAMPNS ioctl to get timestamps with nanosec resolution\n\nNow network timestamps use ktime_t infrastructure, we can add a new\nioctl() SIOCGSTAMPNS command to get timestamps in \u0027struct timespec\u0027.\nUser programs can thus access to nanosecond resolution.\n\nSigned-off-by: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nCC: Stephen Hemminger \u003cshemminger@linux-foundation.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "b7aa0bf70c4afb9e38be25f5c0922498d0f8684c",
      "tree": "4bc9d61031f4eb40d73887d6bde09e7d6bf2b259",
      "parents": [
        "3927f2e8f9afa3424bb51ca81f7abac01ffd0005"
      ],
      "author": {
        "name": "Eric Dumazet",
        "email": "dada1@cosmosbay.com",
        "time": "Thu Apr 19 16:16:32 2007 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Wed Apr 25 22:23:34 2007 -0700"
      },
      "message": "[NET]: convert network timestamps to ktime_t\n\nWe currently use a special structure (struct skb_timeval) and plain\n\u0027struct timeval\u0027 to store packet timestamps in sk_buffs and struct\nsock.\n\nThis has some drawbacks :\n- Fixed resolution of micro second.\n- Waste of space on 64bit platforms where sizeof(struct timeval)\u003d16\n\nI suggest using ktime_t that is a nice abstraction of high resolution\ntime services, currently capable of nanosecond resolution.\n\nAs sizeof(ktime_t) is 8 bytes, using ktime_t in \u0027struct sock\u0027 permits\na 8 byte shrink of this structure on 64bit architectures. Some other\nstructures also benefit from this size reduction (struct ipq in\nipv4/ip_fragment.c, struct frag_queue in ipv6/reassembly.c, ...)\n\nOnce this ktime infrastructure adopted, we can more easily provide\nnanosecond resolution on top of it. (ioctl SIOCGSTAMPNS and/or\nSO_TIMESTAMPNS/SCM_TIMESTAMPNS)\n\nNote : this patch includes a bug correction in\ncompat_sock_get_timestamp() where a \"err \u003d 0;\" was missing (so this\nsyscall returned -ENOENT instead of 0)\n\nSigned-off-by: Eric Dumazet \u003cdada1@cosmosbay.com\u003e\nCC: Stephen Hemminger \u003cshemminger@linux-foundation.org\u003e\nCC: John find \u003clinux.kernel@free.fr\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "cd354f1ae75e6466a7e31b727faede57a1f89ca5",
      "tree": "09a2da1672465fefbc7fe06ff4e6084f1dd14c6b",
      "parents": [
        "3fc605a2aa38899c12180ca311f1eeb61a6d867e"
      ],
      "author": {
        "name": "Tim Schmielau",
        "email": "tim@physik3.uni-rostock.de",
        "time": "Wed Feb 14 00:33:14 2007 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Wed Feb 14 08:09:54 2007 -0800"
      },
      "message": "[PATCH] remove many unneeded #includes of sched.h\n\nAfter Al Viro (finally) succeeded in removing the sched.h #include in module.h\nrecently, it makes sense again to remove other superfluous sched.h includes.\nThere are quite a lot of files which include it but don\u0027t actually need\nanything defined in there.  Presumably these includes were once needed for\nmacros that used to live in sched.h, but moved to other header files in the\ncourse of cleaning it up.\n\nTo ease the pain, this time I did not fiddle with any header files and only\nremoved #includes from .c-files, which tend to cause less trouble.\n\nCompile tested against 2.6.20-rc2 and 2.6.20-rc2-mm2 (with offsets) on alpha,\narm, i386, ia64, mips, powerpc, and x86_64 with allnoconfig, defconfig,\nallmodconfig, and allyesconfig as well as a few randconfigs on x86_64 and all\nconfigs in arch/arm/configs on arm.  I also checked that no new warnings were\nintroduced by the patch (actually, some warnings are removed that were emitted\nby unnecessarily included header files).\n\nSigned-off-by: Tim Schmielau \u003ctim@physik3.uni-rostock.de\u003e\nAcked-by: Russell King \u003crmk+kernel@arm.linux.org.uk\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "4768fbcbcfbbcacb785ae08eef33767a0b4fdcdd",
      "tree": "600169e3a11494ee4ab1bb9cf1ee3348097b1247",
      "parents": [
        "a716c1197d608c55adfba45692a890ca64e10df0"
      ],
      "author": {
        "name": "YOSHIFUJI Hideaki",
        "email": "yoshfuji@linux-ipv6.org",
        "time": "Fri Feb 09 23:25:31 2007 +0900"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Sat Feb 10 23:20:27 2007 -0800"
      },
      "message": "[NET]: Fix whitespace errors.\n\nSigned-off-by: YOSHIFUJI Hideaki \u003cyoshfuji@linux-ipv6.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "effee6a00034a8d83a6dea6d221820d87364ac21",
      "tree": "7008bcfd7f2c2ece8e58365ff970a90292b6af08",
      "parents": [
        "6aa2551cf135f1d246d31482adc8c679eeea3a83"
      ],
      "author": {
        "name": "Miklos Szeredi",
        "email": "miklos@szeredi.hu",
        "time": "Mon Oct 09 21:42:14 2006 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@sunset.davemloft.net",
        "time": "Wed Oct 11 23:59:48 2006 -0700"
      },
      "message": "[NET]: File descriptor loss while receiving SCM_RIGHTS\n\nIf more than one file descriptor was sent with an SCM_RIGHTS message,\nand on the receiving end, after installing a nonzero (but not all)\nfile descritpors the process runs out of fds, then the already\ninstalled fds will be lost (userspace will have no way of knowing\nabout them).\n\nThe following patch makes sure, that at least the already installed\nfds are sent to userspace.  It doesn\u0027t solve the issue of losing file\ndescriptors in case of an EFAULT on the userspace buffer.\n\nSigned-off-by: Miklos Szeredi \u003cmiklos@szeredi.hu\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "2722971cbe831117686039d5c334f2c0f560be13",
      "tree": "b810ea96778e4f5de2a7713685c0551aa34c8f97",
      "parents": [
        "e64a70be5175ac2c209fa742123a6ce845852e0e"
      ],
      "author": {
        "name": "Dmitry Mishin",
        "email": "dim@openvz.org",
        "time": "Sat Apr 01 02:25:19 2006 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Sat Apr 01 02:25:19 2006 -0800"
      },
      "message": "[NETFILTER]: iptables 32bit compat layer\n\nThis patch extends current iptables compatibility layer in order to get\n32bit iptables to work on 64bit kernel. Current layer is insufficient due\nto alignment checks both in kernel and user space tools.\n\nPatch is for current net-2.6.17 with addition of move of ipt_entry_{match|\ntarget} definitions to xt_entry_{match|target}.\n\nSigned-off-by: Dmitry Mishin \u003cdim@openvz.org\u003e\nAcked-off-by: Kirill Korotaev \u003cdev@openvz.org\u003e\nSigned-off-by: Patrick McHardy \u003ckaber@trash.net\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "f0ac2614412e2b597e2d5bfbd3960b4f73718b41",
      "tree": "b1d6c3fabc0f143eec1dcb1ce7c5f6d2bcb64ee1",
      "parents": [
        "89bbfc95d65839d6ae23ddab8a3cc5af4ae88383"
      ],
      "author": {
        "name": "Shaun Pereira",
        "email": "spereira@tusc.com.au",
        "time": "Tue Mar 21 23:59:39 2006 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Mar 21 23:59:39 2006 -0800"
      },
      "message": "[NET]: socket timestamp 32 bit handler for 64 bit kernel\n\nGet socket timestamp handler function that does not use the\nioctl32_hash_table.\n\nSigned-off-by: Shaun Pereira \u003cspereira@tusc.com.au\u003e\nAcked-by: Arnd Bergmann \u003carnd@arndb.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "3fdadf7d27e3fbcf72930941884387d1f4936f04",
      "tree": "167072cf1e60b6b307610563614b435ff0caa52d",
      "parents": [
        "c750360938b403e6cc193d293cfbcb099dd6c60e"
      ],
      "author": {
        "name": "Dmitry Mishin",
        "email": "dim@openvz.org",
        "time": "Mon Mar 20 22:45:21 2006 -0800"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Mon Mar 20 22:45:21 2006 -0800"
      },
      "message": "[NET]: {get|set}sockopt compatibility layer\n\nThis patch extends {get|set}sockopt compatibility layer in order to\nmove protocol specific parts to their place and avoid huge universal\nnet/compat.c file in the future.\n\nSigned-off-by: Dmitry Mishin \u003cdim@openvz.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "8920e8f94c44e31a73bdf923b04721e26e88cadd",
      "tree": "7a0195643c37c63335224358256fab8cd445a671",
      "parents": [
        "5aa3b610a7330c3cd6f0cb264d2189a3a1dcf534"
      ],
      "author": {
        "name": "Al Viro",
        "email": "viro@zeniv.linux.org.uk",
        "time": "Wed Sep 07 18:28:51 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Thu Sep 08 08:14:11 2005 -0700"
      },
      "message": "[PATCH] Fix 32bit sendmsg() flaw\n\nWhen we copy 32bit -\u003emsg_control contents to kernel, we walk the same\nuserland data twice without sanity checks on the second pass.\n\nSecond version of this patch: the original broke with 64-bit arches\nrunning 32-bit-compat-mode executables doing sendmsg() syscalls with\nunaligned CMSG data areas\n\nAnother thing is that we use kmalloc() to allocate and sock_kfree_s()\nto free afterwards; less serious, but also needs fixing.\n\nSigned-off-by: Al Viro \u003cviro@zeniv.linux.org.uk\u003e\nSigned-off-by: David Woodhouse \u003cdwmw2@infradead.org\u003e\nSigned-off-by: Chris Wright \u003cchrisw@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "d64d3873721cfe870d49d73c3744f06260779ce7",
      "tree": "b49a930e65ed4f30b4f8f2aac4ddb08c41bc4b79",
      "parents": [
        "3501466941347f0e1992b2672affb3feb92925fd"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@osdl.org",
        "time": "Tue Aug 09 15:29:19 2005 -0700"
      },
      "committer": {
        "name": "David S. Miller",
        "email": "davem@davemloft.net",
        "time": "Tue Aug 09 15:29:19 2005 -0700"
      },
      "message": "[NET]: Fix memory leak in sys_{send,recv}msg() w/compat\n\nFrom: Dave Johnson \u003cdjohnson+linux-kernel@sw.starentnetworks.com\u003e\n\nsendmsg()/recvmsg() syscalls from o32/n32 apps to a 64bit kernel will\ncause a kernel memory leak if iov_len \u003e UIO_FASTIOV for each syscall!\n\nThis is because both sys_sendmsg() and verify_compat_iovec() kmalloc a\nnew iovec structure.  Only the one from sys_sendmsg() is free\u0027ed.\n\nI wrote a simple test program to confirm this after identifying the\nproblem:\n\nhttp://davej.org/programs/testsendmsg.c\n\nNote that the below fix will break solaris_sendmsg()/solaris_recvmsg() as\nit also calls verify_compat_iovec() but expects it to malloc internally.\n\n[ I fixed that. -DaveM ]\n\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: David S. Miller \u003cdavem@davemloft.net\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
