From: Lucas De Marchi Date: Tue, 30 Apr 2013 22:28:05 +0000 (-0700) Subject: KEYS: split call to call_usermodehelper_fns() X-Git-Tag: accepted/tizen/common/20141203.182822~2388^2~47 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=93997f6ddb9d574cd58694f13c5b15212927bfa1;p=platform%2Fkernel%2Flinux-arm64.git 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 Cc: Oleg Nesterov Acked-by: David Howells Acked-by: James Morris Cc: Al Viro Cc: Tejun Heo Cc: "Rafael J. Wysocki" Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/security/keys/request_key.c b/security/keys/request_key.c index 4bd6bdb..c411f9b 100644 --- a/security/keys/request_key.c +++ b/security/keys/request_key.c @@ -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, - umh_keys_init, umh_keys_cleanup, - key_get(session_keyring)); + struct subprocess_info *info; + + info = call_usermodehelper_setup(path, argv, envp, GFP_KERNEL, + umh_keys_init, umh_keys_cleanup, + session_keyring); + if (!info) + return -ENOMEM; + + key_get(session_keyring); + return call_usermodehelper_exec(info, wait); } /*