From: Chengguang Xu <cgxu...@mykernel.net>

[ Upstream commit 0b8eb629a700c0ef15a437758db8255f8444e76c ]

Release bip using kfree() in error path when that was allocated
by kmalloc().

Signed-off-by: Chengguang Xu <cgxu...@mykernel.net>
Reviewed-by: Christoph Hellwig <h...@lst.de>
Acked-by: Martin K. Petersen <martin.peter...@oracle.com>
Signed-off-by: Jens Axboe <ax...@kernel.dk>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 block/bio-integrity.c | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/block/bio-integrity.c b/block/bio-integrity.c
index ae07dd78e9518..c9dc2b17ce251 100644
--- a/block/bio-integrity.c
+++ b/block/bio-integrity.c
@@ -24,6 +24,18 @@ void blk_flush_integrity(void)
        flush_workqueue(kintegrityd_wq);
 }
 
+void __bio_integrity_free(struct bio_set *bs, struct bio_integrity_payload 
*bip)
+{
+       if (bs && mempool_initialized(&bs->bio_integrity_pool)) {
+               if (bip->bip_vec)
+                       bvec_free(&bs->bvec_integrity_pool, bip->bip_vec,
+                                 bip->bip_slab);
+               mempool_free(bip, &bs->bio_integrity_pool);
+       } else {
+               kfree(bip);
+       }
+}
+
 /**
  * bio_integrity_alloc - Allocate integrity payload and attach it to bio
  * @bio:       bio to attach integrity metadata to
@@ -75,7 +87,7 @@ struct bio_integrity_payload *bio_integrity_alloc(struct bio 
*bio,
 
        return bip;
 err:
-       mempool_free(bip, &bs->bio_integrity_pool);
+       __bio_integrity_free(bs, bip);
        return ERR_PTR(-ENOMEM);
 }
 EXPORT_SYMBOL(bio_integrity_alloc);
@@ -96,14 +108,7 @@ void bio_integrity_free(struct bio *bio)
                kfree(page_address(bip->bip_vec->bv_page) +
                      bip->bip_vec->bv_offset);
 
-       if (bs && mempool_initialized(&bs->bio_integrity_pool)) {
-               bvec_free(&bs->bvec_integrity_pool, bip->bip_vec, 
bip->bip_slab);
-
-               mempool_free(bip, &bs->bio_integrity_pool);
-       } else {
-               kfree(bip);
-       }
-
+       __bio_integrity_free(bs, bip);
        bio->bi_integrity = NULL;
        bio->bi_opf &= ~REQ_INTEGRITY;
 }
-- 
2.25.1



Reply via email to