linux-block.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

      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).