KEYS: split call to call_usermodehelper_fns()
Use call_usermodehelper_setup() + call_usermodehelper_exec() instead of calling call_usermodehelper_fns(). In case there's an OOM in this last function the cleanup function may not be called - in this case we would miss a call to key_put(). Signed-off-by: Lucas De Marchi <lucas.demarchi@profusion.mobi> Cc: Oleg Nesterov <oleg@redhat.com> Acked-by: David Howells <dhowells@redhat.com> Acked-by: James Morris <james.l.morris@oracle.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Tejun Heo <tj@kernel.org> Cc: "Rafael J. Wysocki" <rjw@sisk.pl> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
f634460c90
commit
93997f6ddb
|
@ -93,9 +93,16 @@ static void umh_keys_cleanup(struct subprocess_info *info)
|
|||
static int call_usermodehelper_keys(char *path, char **argv, char **envp,
|
||||
struct key *session_keyring, int wait)
|
||||
{
|
||||
return call_usermodehelper_fns(path, argv, envp, wait,
|
||||
struct subprocess_info *info;
|
||||
|
||||
info = call_usermodehelper_setup(path, argv, envp, GFP_KERNEL,
|
||||
umh_keys_init, umh_keys_cleanup,
|
||||
key_get(session_keyring));
|
||||
session_keyring);
|
||||
if (!info)
|
||||
return -ENOMEM;
|
||||
|
||||
key_get(session_keyring);
|
||||
return call_usermodehelper_exec(info, wait);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue