Index | Thread | Search

From:
Claudio Jeker <cjeker@diehard.n-r-g.com>
Subject:
Re: [5/7] relayd: use imsg_get_ibuf() for variable-length CA key operations
To:
Rafael Sadowski <rafael@sizeofvoid.org>
Cc:
tech@openbsd.org
Date:
Wed, 10 Jun 2026 10:29:36 +0200

Download raw body.

Thread
On Wed, Jun 10, 2026 at 10:04:34AM +0200, Rafael Sadowski wrote:
> On Mon Jun 08, 2026 at 03:41:54PM +0200, Claudio Jeker wrote:
> > >  
> > > -		from = (u_char *)imsg->data + sizeof(cko);
> > > +		from = ibuf_data(&ibuf);
> > 
> > I think this needs again a second refactor that kills from and just uses
> > the ibuf in the right place. Ok this calls into libssl functions but this
> > all looks not very safe to me.
> 
>  It took me a while to figure out exactly what you wanted. I checked
>  smtpd, and it's also points in the imsg. However, I think this is OK here.
>  I changed like this (Full diff below).
> 
>  		case IMSG_CA_PRIVENC:
>  			cko.cko_tlen = RSA_private_encrypt(cko.cko_flen,
> -			    from, to, rsa, cko.cko_padding);
> +			    ibuf_data(&ibuf), to, rsa, cko.cko_padding);
>  			break;
>  		case IMSG_CA_PRIVDEC:
>  			cko.cko_tlen = RSA_private_decrypt(cko.cko_flen,
> -			    from, to, rsa, cko.cko_padding);
> +			    ibuf_data(&ibuf), to, rsa, cko.cko_padding);
>  			break;

I would prefer if instead of cko.cko_flen in those functions we used
ibuf_size(&ibuf).

It is the same because before we have this check:
		if (ibuf_size(&ibuf) != (size_t)cko.cko_flen)
  			fatalx("%s: invalid key operation", __func__);
but I find
  			cko.cko_tlen = RSA_private_encrypt(ibuf_size(&ibuf),
			    ibuf_data(&ibuf), to, rsa, cko.cko_padding);
clearer to know that both size and data of the ibuf are respected.

Now since both are equivalent you can also go on with your version. 

-- 
:wq Claudio