Subject: Re: Proposal: socketfrom()
To: Darren Reed <darrenr@netbsd.org>
From: Darren Reed <darrenr@netbsd.org>
List: tech-net
Date: 07/05/2007 22:17:04
Daniel Carosone wrote:
> On Thu, Jul 05, 2007 at 08:51:06PM -0700, Darren Reed wrote:
> > The idea with most merit that I've seen is to be able to save and
> > restore socket option state. Save it into a binary blob using a call
> > to getsockopt() and apply it to another with setsockopt().
>
> I don't really like this idea, for a couple of reasons:
>
> - the "opaque blob" may be manipulated by a malicious program, we
> need to be defensive about not trusting the content in the kernel
> once it's handed back to us.
>
It is the job of the implemtation of whatever takes in the blob
to verify it. How is this blob any different to, say, a struct
sockaddr, or a BPF program or...?
> - to try and avoid this, if the blob is to be a reference to some
> other storage in the kernel where the real data is, we now have
> another namespace, maybe more interface to manipulate the options
> stored in the blobs, we have storage management to deal with, etc.
>
You're judging the implementation before it has been prototyped.
> Frankly, if you're going to pass something to represent a set of
> options to copy, why not just pass the fd of the socket that has
> those options set? That seems like the place to store them without
> any of the above issues (or at least, well defined semantics and
> tested implementations of those issues :-).
>
Maybe you want to do privilege splitting in the application and don't trust
the "other part" that deals with the "clone" fd's to access the original?
Who knows.
> The question then becomes where to put the operation that does this
> copying:
>
> - in a new syscall, as Thor proposes, though I prefer socketlike() as
> a name, and with the single argument.
>
I've yet to see any generality to this system call that makes it
anything other than a hack to solve Thor's problem. Those
kinds of things belong in ThorBSD.
Darren