From: Wenwen Wang <wenwen@cs.uga.edu>
To: Ming Lei <tom.leiming@gmail.com>
Cc: Jens Axboe <axboe@kernel.dk>,
"open list:BLOCK LAYER" <linux-block@vger.kernel.org>,
open list <linux-kernel@vger.kernel.org>,
Wenwen Wang <wenwen@cs.uga.edu>
Subject: Re: [PATCH] block/bio-integrity: fix a memory leak bug
Date: Thu, 11 Jul 2019 14:18:42 -0500 [thread overview]
Message-ID: <CAAa=b7fUF1NSDa-dr7VqCZ4wBm1vChe9BRpgx9A_S8wM_OoNAg@mail.gmail.com> (raw)
In-Reply-To: <CACVXFVO-gwVhZRajRx41_sYJKDTX2qZUnZVRXCB0NcegVVTGVw@mail.gmail.com>
On Thu, Jul 11, 2019 at 4:22 AM Ming Lei <tom.leiming@gmail.com> wrote:
>
> On Thu, Jul 11, 2019 at 3:36 PM Wenwen Wang <wang6495@umn.edu> wrote:
> >
> > From: Wenwen Wang <wenwen@cs.uga.edu>
> >
> > In bio_integrity_prep(), a kernel buffer is allocated through kmalloc() to
> > hold integrity metadata. Later on, the buffer will be attached to the bio
> > structure through bio_integrity_add_page(), which returns the number of
> > bytes of integrity metadata attached. Due to unexpected situations,
> > bio_integrity_add_page() may return 0. As a result, bio_integrity_prep()
> > needs to be terminated with 'false' returned to indicate this error.
> > However, the allocated kernel buffer is not freed on this execution path,
> > leading to a memory leak.
> >
> > To fix this issue, free the allocated buffer before returning from
> > bio_integrity_prep().
> >
> > Signed-off-by: Wenwen Wang <wenwen@cs.uga.edu>
> > ---
> > block/bio-integrity.c | 4 +++-
> > 1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/block/bio-integrity.c b/block/bio-integrity.c
> > index 4db6208..bfae10c 100644
> > --- a/block/bio-integrity.c
> > +++ b/block/bio-integrity.c
> > @@ -276,8 +276,10 @@ bool bio_integrity_prep(struct bio *bio)
> > ret = bio_integrity_add_page(bio, virt_to_page(buf),
> > bytes, offset);
> >
> > - if (ret == 0)
> > + if (ret == 0) {
> > + kfree(buf);
> > return false;
> > + }
>
> This way may not be enough, and the bio payload needs to be freed.
>
> And you may refer to the error handling for 'IS_ERR(bip)', and bio->bi_status
> needs to be set, and bio_endio() needs to be called too.
Thanks for your comments! I will rework the patch.
Wenwen
prev parent reply other threads:[~2019-07-11 19:59 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-11 7:27 [PATCH] block/bio-integrity: fix a memory leak bug Wenwen Wang
2019-07-11 9:21 ` Ming Lei
2019-07-11 19:18 ` Wenwen Wang [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAAa=b7fUF1NSDa-dr7VqCZ4wBm1vChe9BRpgx9A_S8wM_OoNAg@mail.gmail.com' \
--to=wenwen@cs.uga.edu \
--cc=axboe@kernel.dk \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tom.leiming@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).