On Friday, November 01, 2013 22:24:12 Tetsuo Handa wrote: > Jim Lieb wrote: > > Subsequent uses look like: > > use_creds(cached fd); > > > > followed by > > > > open/creat/mknod/write > > > > followed by > > > > use_creds(-1); > > Are you aware that calling commit_creds() is prohibitted between > override_creds() and revert_creds() ? > > If the caller does some operation that calls commit_creds() (like > example below), the kernel triggers BUG(). Yes, I do. I caught this in an early pass. I only use override_creds() and revert_creds(). > > ---------- example module start ---------- > #include <linux/module.h> > #include <linux/cred.h> > #include <linux/fs.h> > #include <linux/file.h> > > static int __init test_init(void) > { > { /* switch_creds() syscall */ > struct fd f = fdget(0); > if (!f.file) > return -EBADF; > put_cred(override_creds(f.file->f_cred)); > fdput(f); > } > { /* something that calls commit_creds() */ > struct cred *cred = prepare_creds(); > if (cred) > commit_creds(cred); > } > return 0; > } > > static void test_exit(void) > { > } > > module_init(test_init); > module_exit(test_exit); > MODULE_LICENSE("GPL"); > ---------- example module end ---------- > > Since nobody can guarantee that the caller of switch_creds() never does > some operation that calls commit_creds(), I don't think switch_creds() > based on override_creds() will work. -- Jim Lieb Linux Systems Engineer Panasas Inc. "If ease of use was the only requirement, we would all be riding tricycles" - Douglas Engelbart 1925–2013 -- 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