From: Pekka Enberg <[EMAIL PROTECTED]>

Fix a zero-length kmalloc in the case where there is nothing to revoke.

Signed-off-by: Pekka Enberg <[EMAIL PROTECTED]>
---
 fs/revoke.c |   21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

Index: 26-mm/fs/revoke.c
===================================================================
--- 26-mm.orig/fs/revoke.c      2007-05-22 22:58:17.000000000 +0300
+++ 26-mm/fs/revoke.c   2007-05-22 23:01:17.000000000 +0300
@@ -547,22 +547,12 @@ static struct fileset *__alloc_revoke_fs
        return NULL;
 }
 
-static struct fileset *alloc_revoke_fset(struct inode *inode, struct file 
*to_exclude)
-{
-       unsigned long nr_fds;
-
-       read_lock(&tasklist_lock);
-       nr_fds = inode_fds(inode, to_exclude);
-       read_unlock(&tasklist_lock);
-
-       return __alloc_revoke_fset(nr_fds);
-}
-
 static int do_revoke(struct inode *inode, struct file *to_exclude)
 {
        struct revoke_details details;
        struct fileset *fset = NULL;
        struct task_struct *g, *p;
+       unsigned long nr_fds;
        int err = 0;
 
        if (current->fsuid != inode->i_uid && !capable(CAP_FOWNER)) {
@@ -576,11 +566,18 @@ static int do_revoke(struct inode *inode
                goto out;
        }
 
+       read_lock(&tasklist_lock);
+       nr_fds = inode_fds(inode, to_exclude);
+       read_unlock(&tasklist_lock);
+
+       if (!nr_fds)
+               goto out;
+
        /*
         * Pre-allocate memory because the first pass is done under
         * tasklist_lock.
         */
-       fset = alloc_revoke_fset(inode, to_exclude);
+       fset = __alloc_revoke_fset(nr_fds);
        if (!fset) {
                err = -ENOMEM;
                goto out;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to