Message ID | 1566124514-3507-1-git-send-email-bianpan2016@163.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | block/bio-integrity: fix mismatched alloc free | expand |
On 8/18/19 3:35 AM, Pan Bian wrote: > The function kmalloc rather than mempool_alloc is called to allocate > memory when the memory pool is unavailable. However, mempool_alloc is > used to release the memory chunck in both cases when error occurs. This > patch fixes the bug. > > Signed-off-by: Pan Bian <bianpan2016@163.com> > --- > block/bio-integrity.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/block/bio-integrity.c b/block/bio-integrity.c > index fb95dbb..011dfc8 100644 > --- a/block/bio-integrity.c > +++ b/block/bio-integrity.c > @@ -75,7 +75,10 @@ struct bio_integrity_payload *bio_integrity_alloc(struct bio *bio, > > return bip; > err: > - mempool_free(bip, &bs->bio_integrity_pool); > + if (!bs || !mempool_initialized(&bs->bio_integrity_pool)) > + kfree(bip); > + else > + mempool_free(bip, &bs->bio_integrity_pool); > return ERR_PTR(-ENOMEM); > } > EXPORT_SYMBOL(bio_integrity_alloc); > Also for this patch, please add "Fixes:" and "Cc: stable" tags. Thanks, Bart.
diff --git a/block/bio-integrity.c b/block/bio-integrity.c index fb95dbb..011dfc8 100644 --- a/block/bio-integrity.c +++ b/block/bio-integrity.c @@ -75,7 +75,10 @@ struct bio_integrity_payload *bio_integrity_alloc(struct bio *bio, return bip; err: - mempool_free(bip, &bs->bio_integrity_pool); + if (!bs || !mempool_initialized(&bs->bio_integrity_pool)) + kfree(bip); + else + mempool_free(bip, &bs->bio_integrity_pool); return ERR_PTR(-ENOMEM); } EXPORT_SYMBOL(bio_integrity_alloc);
The function kmalloc rather than mempool_alloc is called to allocate memory when the memory pool is unavailable. However, mempool_alloc is used to release the memory chunck in both cases when error occurs. This patch fixes the bug. Signed-off-by: Pan Bian <bianpan2016@163.com> --- block/bio-integrity.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)