]> err.no Git - linux-2.6/blobdiff - net/compat.c
introduce WEXT scan capabilities
[linux-2.6] / net / compat.c
index 9a0f5f2b90c80653acbe2282d3820e8502307429..f4ef4c0486525f02f2d36b726247c5daee6b934e 100644 (file)
@@ -254,6 +254,8 @@ int put_cmsg_compat(struct msghdr *kmsg, int level, int type, int len, void *dat
        if (copy_to_user(CMSG_COMPAT_DATA(cm), data, cmlen - sizeof(struct compat_cmsghdr)))
                return -EFAULT;
        cmlen = CMSG_COMPAT_SPACE(len);
+       if (kmsg->msg_controllen < cmlen)
+               cmlen = kmsg->msg_controllen;
        kmsg->msg_control += cmlen;
        kmsg->msg_controllen -= cmlen;
        return 0;
@@ -276,7 +278,8 @@ void scm_detach_fds_compat(struct msghdr *kmsg, struct scm_cookie *scm)
                err = security_file_receive(fp[i]);
                if (err)
                        break;
-               err = get_unused_fd();
+               err = get_unused_fd_flags(MSG_CMSG_CLOEXEC & kmsg->msg_flags
+                                         ? O_CLOEXEC : 0);
                if (err < 0)
                        break;
                new_fd = err;
@@ -322,8 +325,8 @@ struct compat_ipt_replace {
        u32                     valid_hooks;
        u32                     num_entries;
        u32                     size;
-       u32                     hook_entry[NF_IP_NUMHOOKS];
-       u32                     underflow[NF_IP_NUMHOOKS];
+       u32                     hook_entry[NF_INET_NUMHOOKS];
+       u32                     underflow[NF_INET_NUMHOOKS];
        u32                     num_counters;
        compat_uptr_t           counters;       /* struct ipt_counters * */
        struct ipt_entry        entries[0];
@@ -388,7 +391,7 @@ static int do_netfilter_replace(int fd, int level, int optname,
                           origsize))
                goto out;
 
-       for (i = 0; i < NF_IP_NUMHOOKS; i++) {
+       for (i = 0; i < NF_INET_NUMHOOKS; i++) {
                if (__get_user(tmp32, &urepl->hook_entry[i]) ||
                    __put_user(tmp32, &repl_nat->hook_entry[i]) ||
                    __get_user(tmp32, &urepl->underflow[i]) ||