All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Biggers <ebiggers@kernel.org>
To: Herbert Xu <herbert@gondor.apana.org.au>
Cc: syzbot <syzbot+f7baccc38dcc1e094e77@syzkaller.appspotmail.com>,
	davem@davemloft.net, linux-crypto@vger.kernel.org,
	linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com
Subject: Re: lib/mpi: Fix karactx leak in mpi_powm
Date: Mon, 24 Jun 2019 14:17:37 -0700	[thread overview]
Message-ID: <20190624211736.GA237341@gmail.com> (raw)
In-Reply-To: <20190624103226.fbjvc6eumu325ifw@gondor.apana.org.au>

On Mon, Jun 24, 2019 at 06:32:26PM +0800, Herbert Xu wrote:
> On Mon, Jun 24, 2019 at 12:27:08AM -0700, syzbot wrote:
> > Hello,
> > 
> > syzbot found the following crash on:
> > 
> > HEAD commit:    abf02e29 Merge tag 'pm-5.2-rc6' of git://git.kernel.org/pu..
> > git tree:       upstream
> > console output: https://syzkaller.appspot.com/x/log.txt?x=17a8bfeaa00000
> > kernel config:  https://syzkaller.appspot.com/x/.config?x=56f1da14935c3cce
> > dashboard link: https://syzkaller.appspot.com/bug?extid=f7baccc38dcc1e094e77
> > compiler:       gcc (GCC) 9.0.0 20181231 (experimental)
> > syz repro:      https://syzkaller.appspot.com/x/repro.syz?x=171aa7e6a00000
> > C reproducer:   https://syzkaller.appspot.com/x/repro.c?x=153306cea00000
> > 
> > IMPORTANT: if you fix the bug, please add the following tag to the commit:
> > Reported-by: syzbot+f7baccc38dcc1e094e77@syzkaller.appspotmail.com
> 
> The only memory leak that I can find is on the out-of-memory error
> path:
> 
> ---8<---
> Sometimes mpi_powm will leak karactx because a memory allocation
> failure causes a bail-out that skips the freeing of karactx.  This
> patch moves the freeing of karactx to the end of the function like
> everything else so that it can't be skipped.
> 
> Reported-by: syzbot+f7baccc38dcc1e094e77@syzkaller.appspotmail.com
> Fixes: cdec9cb5167a ("crypto: GnuPG based MPI lib - source files...")
> Cc: <stable@vger.kernel.org>
> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
> 
> diff --git a/lib/mpi/mpi-pow.c b/lib/mpi/mpi-pow.c
> index 82b19e4f1189..2fd7a46d55ec 100644
> --- a/lib/mpi/mpi-pow.c
> +++ b/lib/mpi/mpi-pow.c
> @@ -24,6 +24,7 @@
>  int mpi_powm(MPI res, MPI base, MPI exp, MPI mod)
>  {
>  	mpi_ptr_t mp_marker = NULL, bp_marker = NULL, ep_marker = NULL;
> +	struct karatsuba_ctx karactx = {};
>  	mpi_ptr_t xp_marker = NULL;
>  	mpi_ptr_t tspace = NULL;
>  	mpi_ptr_t rp, ep, mp, bp;
> @@ -150,13 +151,11 @@ int mpi_powm(MPI res, MPI base, MPI exp, MPI mod)
>  		int c;
>  		mpi_limb_t e;
>  		mpi_limb_t carry_limb;
> -		struct karatsuba_ctx karactx;
>  
>  		xp = xp_marker = mpi_alloc_limb_space(2 * (msize + 1));
>  		if (!xp)
>  			goto enomem;
>  
> -		memset(&karactx, 0, sizeof karactx);
>  		negative_result = (ep[0] & 1) && base->sign;
>  
>  		i = esize - 1;
> @@ -281,8 +280,6 @@ int mpi_powm(MPI res, MPI base, MPI exp, MPI mod)
>  		if (mod_shift_cnt)
>  			mpihelp_rshift(rp, rp, rsize, mod_shift_cnt);
>  		MPN_NORMALIZE(rp, rsize);
> -
> -		mpihelp_release_karatsuba_ctx(&karactx);
>  	}
>  
>  	if (negative_result && rsize) {
> @@ -299,6 +296,7 @@ int mpi_powm(MPI res, MPI base, MPI exp, MPI mod)
>  leave:
>  	rc = 0;
>  enomem:
> +	mpihelp_release_karatsuba_ctx(&karactx);
>  	if (assign_rp)
>  		mpi_assign_limb_space(res, rp, size);
>  	if (mp_marker)
> -- 

Reviewed-by: Eric Biggers <ebiggers@kernel.org>

- Eric

      reply	other threads:[~2019-06-24 21:17 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-24  7:27 memory leak in mpihelp_mul_karatsuba_case syzbot
2019-06-24 10:32 ` lib/mpi: Fix karactx leak in mpi_powm Herbert Xu
2019-06-24 21:17   ` Eric Biggers [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=20190624211736.GA237341@gmail.com \
    --to=ebiggers@kernel.org \
    --cc=davem@davemloft.net \
    --cc=herbert@gondor.apana.org.au \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=syzbot+f7baccc38dcc1e094e77@syzkaller.appspotmail.com \
    --cc=syzkaller-bugs@googlegroups.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.