On Thu, Aug 25, 2016 at 12:20 AM, Richard Braun <rbr...@sceen.net> wrote:

> On Wed, Aug 24, 2016 at 07:24:16PM -1000, Brent W. Baccala wrote:
> > So, I'll modify libpager to handle multiple clients.  Not trivial, but it
> > seems necessary and correct.
>
> Don't start that immediately, wait for more discussions. I'm not so
> sure it would make sense to support more than one client.
>

>From the Mach 3 Kernel Interfaces document, page 149:

If a client thread calls *vm_map* to map a memory object while the kernel
is calling *memory_object_terminate* for the same memory object, the
*memory_object_init* call may appear before the *memory_object_terminate*
call. This sequence is indistinguishable from the case where another kernel
is issuing a *memory_object_init* call. In other words, the control and
name ports included in the initialization will be different from those
included in the termination. A memory manager must be aware that this
sequence can occur even when all mappings of a memory object take place on
the same host.

It sounds like the Mach designers anticipated multiple clients for a memory
object server.


> One question is whether the exec server really needs to do a vm_map to
> > examine an ELF header.  A simple read would suffice.  Which should be
> > preferred?
>
> I agree that read should be preferred. In a completely separate
> non-existent issue, it would be the only way to support nommu systems.
>
>
OK, then I'll take a look at changing that.  Easier than a pager handling
multiple clients.


> > A more serious question is why the exec server is running on the server
> > side at all.  Shouldn't it be running on the client?  Then the only
> network
> > operation it would need is to map the one file that it's trying to
> execute.
> >
> > Examining diskfs_S_file_exec reveals some interesting behavior.  The file
> > server caches a port to its exec server, so the same exec server gets
> used
> > by all of its clients!  Furthermore, it gets the exec server in the first
> > place by looking up _SERVERS_EXEC in its own name space, not the
> client's!
> >
> > Shouldn't the exec server be looked for in the client's name space?
>
> You're getting into the same kind of "light virtualization" issues we
> have with e.g. chroot. Many operations are done by servers, from their
> execution context, and this breaks that kind of behaviour.
>
> I started thinking about these only a couple of weeks ago, and so far
> the only solutions my limited brain can come up with is to either use
> the client context (by perhaps passing its root) but that could cause
> security issues, or have a third-party like auth (or proc or whatever)
> store enough of this context that the server can use it.
>

Actually, the exec server is already being passed the client's root, so it
could easily use that handle to lookup _SERVERS_EXEC.  The question is:
should it?

    agape
    brent

Reply via email to