]> Pileus Git - ~andy/linux/commitdiff
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 27 Jul 2008 03:23:44 +0000 (20:23 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 27 Jul 2008 03:23:44 +0000 (20:23 -0700)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (39 commits)
  [PATCH] fix RLIM_NOFILE handling
  [PATCH] get rid of corner case in dup3() entirely
  [PATCH] remove remaining namei_{32,64}.h crap
  [PATCH] get rid of indirect users of namei.h
  [PATCH] get rid of __user_path_lookup_open
  [PATCH] f_count may wrap around
  [PATCH] dup3 fix
  [PATCH] don't pass nameidata to __ncp_lookup_validate()
  [PATCH] don't pass nameidata to gfs2_lookupi()
  [PATCH] new (local) helper: user_path_parent()
  [PATCH] sanitize __user_walk_fd() et.al.
  [PATCH] preparation to __user_walk_fd cleanup
  [PATCH] kill nameidata passing to permission(), rename to inode_permission()
  [PATCH] take noexec checks to very few callers that care
  Re: [PATCH 3/6] vfs: open_exec cleanup
  [patch 4/4] vfs: immutable inode checking cleanup
  [patch 3/4] fat: dont call notify_change
  [patch 2/4] vfs: utimes cleanup
  [patch 1/4] vfs: utimes: move owner check into inode_change_ok()
  [PATCH] vfs: use kstrdup() and check failing allocation
  ...

1  2 
fs/proc/base.c
net/ipv4/af_inet.c
net/unix/af_unix.c
security/selinux/hooks.c

diff --combined fs/proc/base.c
index d744aa3c9f746ac527b4c1d6e46f8d625bc69f78,d82d800389f6018039abefa9668e7f7ad4f90c17..e74308bdabd3dc9d5b317dbf8eeadb4dc4f8ceab
@@@ -1859,8 -1859,7 +1859,7 @@@ static const struct file_operations pro
   * /proc/pid/fd needs a special permission handler so that a process can still
   * access /proc/self/fd after it has executed a setuid().
   */
- static int proc_fd_permission(struct inode *inode, int mask,
-                               struct nameidata *nd)
+ static int proc_fd_permission(struct inode *inode, int mask)
  {
        int rv;
  
@@@ -2406,18 -2405,35 +2405,18 @@@ static int do_io_accounting(struct task
        u64 rchar, wchar, syscr, syscw;
        struct task_io_accounting ioac;
  
 -      if (!whole) {
 -              rchar = task->rchar;
 -              wchar = task->wchar;
 -              syscr = task->syscr;
 -              syscw = task->syscw;
 -              memcpy(&ioac, &task->ioac, sizeof(ioac));
 -      } else {
 -              unsigned long flags;
 -              struct task_struct *t = task;
 -              rchar = wchar = syscr = syscw = 0;
 -              memset(&ioac, 0, sizeof(ioac));
 +      rchar = task->rchar;
 +      wchar = task->wchar;
 +      syscr = task->syscr;
 +      syscw = task->syscw;
 +      memcpy(&ioac, &task->ioac, sizeof(ioac));
  
 -              rcu_read_lock();
 -              do {
 -                      rchar += t->rchar;
 -                      wchar += t->wchar;
 -                      syscr += t->syscr;
 -                      syscw += t->syscw;
 -
 -                      ioac.read_bytes += t->ioac.read_bytes;
 -                      ioac.write_bytes += t->ioac.write_bytes;
 -                      ioac.cancelled_write_bytes +=
 -                                      t->ioac.cancelled_write_bytes;
 -                      t = next_thread(t);
 -              } while (t != task);
 -              rcu_read_unlock();
 +      if (whole) {
 +              unsigned long flags;
  
                if (lock_task_sighand(task, &flags)) {
                        struct signal_struct *sig = task->signal;
 +                      struct task_struct *t = task;
  
                        rchar += sig->rchar;
                        wchar += sig->wchar;
                        ioac.write_bytes += sig->ioac.write_bytes;
                        ioac.cancelled_write_bytes +=
                                        sig->ioac.cancelled_write_bytes;
 -
 +                      while_each_thread(task, t) {
 +                              rchar += t->rchar;
 +                              wchar += t->wchar;
 +                              syscr += t->syscr;
 +                              syscw += t->syscw;
 +
 +                              ioac.read_bytes += t->ioac.read_bytes;
 +                              ioac.write_bytes += t->ioac.write_bytes;
 +                              ioac.cancelled_write_bytes +=
 +                                      t->ioac.cancelled_write_bytes;
 +                      }
                        unlock_task_sighand(task, &flags);
                }
        }
 -
        return sprintf(buffer,
                        "rchar: %llu\n"
                        "wchar: %llu\n"
                        "read_bytes: %llu\n"
                        "write_bytes: %llu\n"
                        "cancelled_write_bytes: %llu\n",
 -                      (unsigned long long)rchar,
 -                      (unsigned long long)wchar,
 -                      (unsigned long long)syscr,
 -                      (unsigned long long)syscw,
 -                      (unsigned long long)ioac.read_bytes,
 -                      (unsigned long long)ioac.write_bytes,
 -                      (unsigned long long)ioac.cancelled_write_bytes);
 +                      rchar, wchar, syscr, syscw,
 +                      ioac.read_bytes, ioac.write_bytes,
 +                      ioac.cancelled_write_bytes);
  }
  
  static int proc_tid_io_accounting(struct task_struct *task, char *buffer)
diff --combined net/ipv4/af_inet.c
index d9f15ddac3160bc784c565da58f3ebfb10b271dc,354f6b54e492c2a19bf8cc67cd5f8ce54dbae4d0..8a3ac1fa71a976e8c8f4c4f2dfd9fa87af2f9a99
@@@ -148,10 -148,10 +148,10 @@@ void inet_sock_destruct(struct sock *sk
                return;
        }
  
 -      BUG_TRAP(!atomic_read(&sk->sk_rmem_alloc));
 -      BUG_TRAP(!atomic_read(&sk->sk_wmem_alloc));
 -      BUG_TRAP(!sk->sk_wmem_queued);
 -      BUG_TRAP(!sk->sk_forward_alloc);
 +      WARN_ON(atomic_read(&sk->sk_rmem_alloc));
 +      WARN_ON(atomic_read(&sk->sk_wmem_alloc));
 +      WARN_ON(sk->sk_wmem_queued);
 +      WARN_ON(sk->sk_forward_alloc);
  
        kfree(inet->opt);
        dst_release(sk->sk_dst_cache);
@@@ -338,7 -338,7 +338,7 @@@ lookup_protocol
        answer_flags = answer->flags;
        rcu_read_unlock();
  
 -      BUG_TRAP(answer_prot->slab != NULL);
 +      WARN_ON(answer_prot->slab == NULL);
  
        err = -ENOBUFS;
        sk = sk_alloc(net, PF_INET, GFP_KERNEL, answer_prot);
@@@ -658,8 -658,8 +658,8 @@@ int inet_accept(struct socket *sock, st
  
        lock_sock(sk2);
  
 -      BUG_TRAP((1 << sk2->sk_state) &
 -               (TCPF_ESTABLISHED | TCPF_CLOSE_WAIT | TCPF_CLOSE));
 +      WARN_ON(!((1 << sk2->sk_state) &
 +                (TCPF_ESTABLISHED | TCPF_CLOSE_WAIT | TCPF_CLOSE)));
  
        sock_graft(sk2, newsock);
  
@@@ -1439,6 -1439,10 +1439,10 @@@ static int __init inet_init(void
  
        (void)sock_register(&inet_family_ops);
  
+ #ifdef CONFIG_SYSCTL
+       ip_static_sysctl_init();
+ #endif
        /*
         *      Add all the base protocols.
         */
diff --combined net/unix/af_unix.c
index 24eb214581d56861be3d0b9b0fab9686b53a0434,6e7fec74bdb3f522250c194a91880bc627ea6c5b..015606b54d9b28325aad62a71ea4fc160b686cd8
@@@ -227,7 -227,7 +227,7 @@@ static void __unix_remove_socket(struc
  
  static void __unix_insert_socket(struct hlist_head *list, struct sock *sk)
  {
 -      BUG_TRAP(sk_unhashed(sk));
 +      WARN_ON(!sk_unhashed(sk));
        sk_add_node(sk, list);
  }
  
@@@ -350,9 -350,9 +350,9 @@@ static void unix_sock_destructor(struc
  
        skb_queue_purge(&sk->sk_receive_queue);
  
 -      BUG_TRAP(!atomic_read(&sk->sk_wmem_alloc));
 -      BUG_TRAP(sk_unhashed(sk));
 -      BUG_TRAP(!sk->sk_socket);
 +      WARN_ON(atomic_read(&sk->sk_wmem_alloc));
 +      WARN_ON(!sk_unhashed(sk));
 +      WARN_ON(sk->sk_socket);
        if (!sock_flag(sk, SOCK_DEAD)) {
                printk("Attempt to release alive unix socket: %p\n", sk);
                return;
@@@ -603,7 -603,7 +603,7 @@@ static struct sock * unix_create1(struc
        u->dentry = NULL;
        u->mnt    = NULL;
        spin_lock_init(&u->lock);
-       atomic_set(&u->inflight, 0);
+       atomic_long_set(&u->inflight, 0);
        INIT_LIST_HEAD(&u->link);
        mutex_init(&u->readlock); /* single task reading lock */
        init_waitqueue_head(&u->peer_wait);
diff --combined security/selinux/hooks.c
index da36dac6535f05cec337734ad5dfe9c06fee299e,5ba13908b5b4fd09e8b9470fffd0af8daf5a4553..40d06c533f89fb574efd68507142fbe9b770d9f7
@@@ -2624,12 -2624,11 +2624,11 @@@ static int selinux_inode_follow_link(st
        return dentry_has_perm(current, NULL, dentry, FILE__READ);
  }
  
- static int selinux_inode_permission(struct inode *inode, int mask,
-                                   struct nameidata *nd)
+ static int selinux_inode_permission(struct inode *inode, int mask)
  {
        int rc;
  
-       rc = secondary_ops->inode_permission(inode, mask, nd);
+       rc = secondary_ops->inode_permission(inode, mask);
        if (rc)
                return rc;
  
@@@ -5654,20 -5653,27 +5653,20 @@@ static struct nf_hook_ops selinux_ipv6_
  static int __init selinux_nf_ip_init(void)
  {
        int err = 0;
 -      u32 iter;
  
        if (!selinux_enabled)
                goto out;
  
        printk(KERN_DEBUG "SELinux:  Registering netfilter hooks\n");
  
 -      for (iter = 0; iter < ARRAY_SIZE(selinux_ipv4_ops); iter++) {
 -              err = nf_register_hook(&selinux_ipv4_ops[iter]);
 -              if (err)
 -                      panic("SELinux: nf_register_hook for IPv4: error %d\n",
 -                            err);
 -      }
 +      err = nf_register_hooks(selinux_ipv4_ops, ARRAY_SIZE(selinux_ipv4_ops));
 +      if (err)
 +              panic("SELinux: nf_register_hooks for IPv4: error %d\n", err);
  
  #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
 -      for (iter = 0; iter < ARRAY_SIZE(selinux_ipv6_ops); iter++) {
 -              err = nf_register_hook(&selinux_ipv6_ops[iter]);
 -              if (err)
 -                      panic("SELinux: nf_register_hook for IPv6: error %d\n",
 -                            err);
 -      }
 +      err = nf_register_hooks(selinux_ipv6_ops, ARRAY_SIZE(selinux_ipv6_ops));
 +      if (err)
 +              panic("SELinux: nf_register_hooks for IPv6: error %d\n", err);
  #endif        /* IPV6 */
  
  out:
@@@ -5679,11 -5685,15 +5678,11 @@@ __initcall(selinux_nf_ip_init)
  #ifdef CONFIG_SECURITY_SELINUX_DISABLE
  static void selinux_nf_ip_exit(void)
  {
 -      u32 iter;
 -
        printk(KERN_DEBUG "SELinux:  Unregistering netfilter hooks\n");
  
 -      for (iter = 0; iter < ARRAY_SIZE(selinux_ipv4_ops); iter++)
 -              nf_unregister_hook(&selinux_ipv4_ops[iter]);
 +      nf_unregister_hooks(selinux_ipv4_ops, ARRAY_SIZE(selinux_ipv4_ops));
  #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
 -      for (iter = 0; iter < ARRAY_SIZE(selinux_ipv6_ops); iter++)
 -              nf_unregister_hook(&selinux_ipv6_ops[iter]);
 +      nf_unregister_hooks(selinux_ipv6_ops, ARRAY_SIZE(selinux_ipv6_ops));
  #endif        /* IPV6 */
  }
  #endif