Prev: [PATCHv6.1 10/11] USB: gadget: composite: added disconnect callback
Next: [RESEND][REGRESSION] um: CONFIG_STATIC_LINK=y broken
From: David Howells on 18 Jun 2010 11:50 Tetsuo Handa <penguin-kernel(a)i-love.sakura.ne.jp> wrote: > reparent_to_kthreadd() is calling commit_creds() with tasklist_lock held. > But commit_creds() calls > key_fsuid_changed()/key_fsgid_changed()/proc_id_connector() which may sleep. > Release tasklist_lock before calling commit_creds(). Hmmm... Does this change leave a hole in which the thread can be accessed as it's not locked away, but still has the old credentials? I wonder if we should have an internal CLONE_KTHREAD flag to achieve this in do_fork() rather than daemonize()'ing the thread later. Also, key_fsuid_changed() and key_fsgid_changed() should be skipped in commit_creds() if the thread-keyring pointer in the new creds is not the same as that in the old creds (as will be the case if we're shifting to init_cred), so they shouldn't really be a problem. However, I can't see an easy way around proc_id_connector() sleeping - unless we just don't call it if new == &init_cred in commit_creds(). I suppose it also leaves a hole if we call commit_creds() first, before getting the write_lock()... :-/ David -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |