2013-07-29 01:52:55

by Gu Zheng

[permalink] [raw]
Subject: [PATCH RESEND] fs/bio-integrity: fix a potential mem leak

Free the bio_integrity_pool in the fail path of biovec_create_pool
in function bioset_integrity_create().

Signed-off-by: Gu Zheng <[email protected]>
---
fs/bio-integrity.c | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/fs/bio-integrity.c b/fs/bio-integrity.c
index 8fb4291..6025084 100644
--- a/fs/bio-integrity.c
+++ b/fs/bio-integrity.c
@@ -716,13 +716,14 @@ int bioset_integrity_create(struct bio_set *bs, int pool_size)
return 0;

bs->bio_integrity_pool = mempool_create_slab_pool(pool_size, bip_slab);
-
- bs->bvec_integrity_pool = biovec_create_pool(bs, pool_size);
- if (!bs->bvec_integrity_pool)
+ if (!bs->bio_integrity_pool)
return -1;

- if (!bs->bio_integrity_pool)
+ bs->bvec_integrity_pool = biovec_create_pool(bs, pool_size);
+ if (!bs->bvec_integrity_pool) {
+ mempool_destroy(bs->bio_integrity_pool);
return -1;
+ }

return 0;
}
--
1.7.7


2013-07-31 10:06:32

by Gu Zheng

[permalink] [raw]
Subject: Re: [PATCH RESEND] fs/bio-integrity: fix a potential mem leak

cc akpm

On 07/29/2013 09:49 AM, Gu Zheng wrote:

> Free the bio_integrity_pool in the fail path of biovec_create_pool
> in function bioset_integrity_create().
>
> Signed-off-by: Gu Zheng <[email protected]>
> ---
> fs/bio-integrity.c | 9 +++++----
> 1 files changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/fs/bio-integrity.c b/fs/bio-integrity.c
> index 8fb4291..6025084 100644
> --- a/fs/bio-integrity.c
> +++ b/fs/bio-integrity.c
> @@ -716,13 +716,14 @@ int bioset_integrity_create(struct bio_set *bs, int pool_size)
> return 0;
>
> bs->bio_integrity_pool = mempool_create_slab_pool(pool_size, bip_slab);
> -
> - bs->bvec_integrity_pool = biovec_create_pool(bs, pool_size);
> - if (!bs->bvec_integrity_pool)
> + if (!bs->bio_integrity_pool)
> return -1;
>
> - if (!bs->bio_integrity_pool)
> + bs->bvec_integrity_pool = biovec_create_pool(bs, pool_size);
> + if (!bs->bvec_integrity_pool) {
> + mempool_destroy(bs->bio_integrity_pool);
> return -1;
> + }
>
> return 0;
> }