Re: [Kyle Ackerman] Re: imsg_get_data Question

"Theo de Raadt" <[email protected]>
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
Kyle Ackerman <[email protected]> wrote:

> ------- Forwarded Message
> 
> From: Kyle Ackerman <[email protected]>
> To: Florian Obser <[email protected]>
> Subject: Re: imsg_get_data Question
> Date: Sun, 16 Aug 2026 12:52:15 -0600
> 
> Florian Obser <[email protected]> writes:
> 
> > imsg is usually used over a privilege boundary. The sender is supposed
> > to send exactly len bytes of data. If it fails to do that the receiver
> > has to assume the sender is compromised and terminate itself.
> > E.g. (dhcpleased/engine.c):
> >
> > case IMSG_CTL_LOG_VERBOSE:
> > 	if (imsg_get_data(&imsg, &verbose,
> > 	    sizeof(verbose)) == -1)
> > 		fatalx("%s: invalid %s", __func__, i2s(type));
> For more context, there is a current use case in Got where we send over
> a struct and a string in the same imsg.  I imagined a case where you can
> do multiple imsg_get_data(3) calls, over predefined lengths, to utilize
> the rpos and wpos fields to incrementally extract seprate data.

imsg fails so hard at being an "xdr"... (in sunrpc, this is the
difference beween the rpc layer, and the xdr layer.  in imsg there is no
xdr layer, but extraction is done with code, and hopefully agreeable
code in the sender and receiver, and hopefully sufficient edge case
handling in the receiver).

imsg encourages the creation of messages, and extraction of messages (with
required failure checks), to be done WITH CODE at the point of use in
functions which are going to act upon the data.  Meaning it tends to be
in the exact same function that is going to do something with it.

I continue to conclude that imsg is a huge failure of abstraction, and
it needs to be completely replaced.  It was fine in original bgpd where
the message types were extremely well defined, but this pattern should
never have been been copied elsewhere AND EXTENDED, and it just keeps
becoming more and more painful.  bgpd did not need a struct + a string.
imsg could not do it.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.