From: Claudio Jeker Subject: Re: [5/7] relayd: use imsg_get_ibuf() for variable-length CA key operations To: Rafael Sadowski Cc: tech@openbsd.org Date: Wed, 10 Jun 2026 10:29:36 +0200 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