Al Viro <viro@xxxxxxxxxxxxxxxxxx> writes: > On Wed, Oct 16, 2013 at 03:01:57PM -0700, Jim Lieb wrote: >> File servers must do some operations with the credentials of >> their client. This syscall switches the key credentials similar >> to nfsd_setuser() in fs/nfsd/auth.c with the capability of retaining a >> handle to the credentials by way of an fd for an open anonymous file. >> This makes switching for subsequent operations for that client more efficient. > > Yet Another Untyped Multiplexor. Inna bun. Onna stick. > CMOT Dibbler special... > > Switching creds to those of opener of given file descriptor > is fine, but in any realistic situation you'll get all the real win > from that - you should cache those fds (which you seem to do), and > then setuid/etc. is done once per cache miss. Making the magical > "set them all at once" mess (complete with non-trivial structure, > 32/64bit compat, etc.) pointless. Moreover, you don't need any magic > files at all - just set the creds and open /dev/null and there's your fd. > With proper creds associated with it. While we are at it, just _start_ > with opening /dev/null. With your initial creds. Voila - revert is > simply switch to that fd's creds. > > IOW, you really need only one syscall: That doesn't look bad but it does need capable(CAP_SETUID) && capable(CAP_SETGID) or possibly something a little more refined. I don't think we want file descriptor passing to all of a sudden become a grant of privilege, beyond what the passed fd can do. > SYSCALL_DEFINE1(switch_cred, int, fd) > { > struct fd f = fdget(fd); > if (!f.file) > return -EBADF; > put_cred(override_creds(f.file->f_cred); > fdput(f); > return 0; > } > > and that's all there is to it. Eric -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html