chas williams - CONTRACTOR <[EMAIL PROTECTED]> wrote:
> and yet another version. this time, you dont (or shouldnt) need changes
> to your local kernel tree. we have our own version of join_session_keyring()
> which uses the public bits of the keyring api and a bit of information from
> task 1 to allocate and link a new session keyring.
I like your ingenuity:-)
> what we really need from the linux kernel: the keyring key_type exported,
Whilst I could do that, I'm not sure it'd help you as you'd need to use the
RCU interface to access keyrings directly.
> the keyring primitives exported,
That should be possible for the most part. Which ones were you thinking of?
> or join_session_keyring() exported.
That should be possible.
You could also use something like:
#include <asm/unistd.h>
static inline _syscall2(long, keyctl, int, option, void*, arg2)
long serial = keyctl(KEYCTL_JOIN_SESSION_KEYRING, NULL);
Which isn't very nice, but which ought to work.
> the first time might suffer a bit when it comes to safely inserting the
> session_key into the user task since the rcu primitives are not available to
> openafs, so the third option is preferred.
The first is a definite no-go if you can't use RCU - you could cause other
parts of the kernel to oops.
Another alternative might be to try putting the PAG stuff in the main kernel,
and add a keyctl function to set or get a pag.
The main thing I'm not sure about how to do is to change the PAG to which a
process's parent subscribes. It is possible, but the locking is interesting.
David
_______________________________________________
OpenAFS-devel mailing list
[email protected]
https://lists.openafs.org/mailman/listinfo/openafs-devel