Am Freitag, 27. Juli 2018, 12:53:35 CEST schrieb Herbert Xu:

Hi Herbert,

> On Fri, Jul 20, 2018 at 07:42:01PM +0200, Stephan Müller wrote:
> > @@ -1747,10 +1733,18 @@ static int drbg_kcapi_sym_ctr(struct drbg_state
> > *drbg,> 
> >                           u8 *outbuf, u32 outlen)
> >  
> >  {
> >  
> >     struct scatterlist *sg_in = &drbg->sg_in, *sg_out = &drbg->sg_out;
> > 
> > +   u32 scratchpad_use = min_t(u32, outlen, DRBG_OUTSCRATCHLEN);
> > 
> >     int ret;
> > 
> > -   sg_set_buf(sg_in, inbuf, inlen);
> > -   sg_set_buf(sg_out, drbg->outscratchpad, DRBG_OUTSCRATCHLEN);
> > +   if (inbuf) {
> > +           /* Use caller-provided input buffer */
> > +           sg_set_buf(sg_in, inbuf, inlen);
> > +   } else {
> > +           /* Use scratchpad for in-place operation */
> > +           inlen = scratchpad_use;
> > +           memset(drbg->outscratchpad, 0, scratchpad_use);
> > +           sg_set_buf(sg_in, drbg->outscratchpad, scratchpad_use);
> > +   }
> 
> What guarantees that inbuf isn't on the stack?

This is guaranteed by the invokers of drbg_kcapi_sym_ctr as there are two 
only:

- the one in drbg_ctr_update uses the scratchpad for inbuf

- the one in drbg_ctr_generate uses NULL which implies that the outscratchpad 
is used.

Ciao
Stephan


Reply via email to