2010-02-08 06:57:30

by wzt wzt

[permalink] [raw]
Subject: [PATCH] security/integrity/ima/ima_iint.c: Remove goto out int ima_inode_alloc()

Signed-off-by: wzt <[email protected]>

diff --git a/security/integrity/ima/ima_iint.c
b/security/integrity/ima/ima_iint.c
index 0d83edc..4e2df22 100644
--- a/security/integrity/ima/ima_iint.c
+++ b/security/integrity/ima/ima_iint.c
@@ -57,18 +57,17 @@ int ima_inode_alloc(struct inode *inode)
return -ENOMEM;

rc = radix_tree_preload(GFP_NOFS);
- if (rc < 0)
- goto out;
+ if (rc < 0) {
+ kmem_cache_free(iint_cache, iint);
+ radix_tree_preload_end();
+ return rc;
+ }

spin_lock(&ima_iint_lock);
rc = radix_tree_insert(&ima_iint_store, (unsigned long)inode, iint);
spin_unlock(&ima_iint_lock);
-out:
- if (rc < 0)
- kmem_cache_free(iint_cache, iint);

radix_tree_preload_end();
-
return rc;
}


2010-02-08 07:08:45

by Xiaotian Feng

[permalink] [raw]
Subject: Re: [PATCH] security/integrity/ima/ima_iint.c: Remove goto out int ima_inode_alloc()

On Mon, Feb 8, 2010 at 2:57 PM, wzt wzt <[email protected]> wrote:
> Signed-off-by: wzt <[email protected]>
>
> diff --git a/security/integrity/ima/ima_iint.c
> b/security/integrity/ima/ima_iint.c
> index 0d83edc..4e2df22 100644
> --- a/security/integrity/ima/ima_iint.c
> +++ b/security/integrity/ima/ima_iint.c
> @@ -57,18 +57,17 @@ int ima_inode_alloc(struct inode *inode)
>                return -ENOMEM;
>
>        rc = radix_tree_preload(GFP_NOFS);
> -       if (rc < 0)
> -               goto out;
> +       if (rc < 0) {
> +               kmem_cache_free(iint_cache, iint);
> +               radix_tree_preload_end();
> +               return rc;
> +       }
>
>        spin_lock(&ima_iint_lock);
>        rc = radix_tree_insert(&ima_iint_store, (unsigned long)inode, iint);
>        spin_unlock(&ima_iint_lock);
> -out:
> -       if (rc < 0)
> -               kmem_cache_free(iint_cache, iint);

So if radix_tree_insert failed, the memory will be leaked.
This patch doesn't fix anything but introduces new bug....

>
>        radix_tree_preload_end();
> -
>        return rc;
>  }
> --
> 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/
>