On Tue, Aug 23, 2016 at 2:12 AM, Richard Braun <[email protected]> wrote:
>
> > It's got a lot of problems. No authentication handoff; everything the
> > client requests happens with the permissions of the server. exec'ing a
> > file doesn't work; the last RPC before the hang is memory_object_init.
> > emacs doesn't work; the last RPC before the hang is io_reauthenticate.
>
> That's a very interesting problem indeed, not sure how to fix it.
I've looked into it a bit more.
The auth server is going to be more trouble than I anticipated because it
depends on using Mach ports for rendezvous. A send right, after transfer
across a TCP/IP connection, will appear to be a completely different port.
I'll think about it more.
The exec problem, on the other hand, is more of a puzzle.
memory_object_init gets sent, but we never see memory_object_ready in
reply. Of course, we're getting memory_object_init from a user process and
not the kernel. So I wrote a little test program to try sending
memory_object_init from a user process and, sure enough, no
memory_object_ready.
Any ideas why this basic sequence wouldn't work?
node = file_name_lookup("/lib/ld.so", O_RDONLY, 0)
io_map(node, &rdobj, &wrobj)
/* create control and objname with send/receive rights on both */
memory_object_init(rdobj, control, objname)
...and now I expect to see memory_object_ready on control, but it never
happens.
agape
brent