diff options
Diffstat (limited to 'security')
-rw-r--r-- | security/keys/compat.c | 2 | ||||
-rw-r--r-- | security/keys/keyctl.c | 4 | ||||
-rw-r--r-- | security/keys/request_key.c | 13 |
3 files changed, 6 insertions, 13 deletions
diff --git a/security/keys/compat.c b/security/keys/compat.c index fab4f8dda6c6..c92d42b021aa 100644 --- a/security/keys/compat.c +++ b/security/keys/compat.c | |||
@@ -38,7 +38,7 @@ long compat_keyctl_instantiate_key_iov( | |||
38 | 38 | ||
39 | ret = compat_rw_copy_check_uvector(WRITE, _payload_iov, ioc, | 39 | ret = compat_rw_copy_check_uvector(WRITE, _payload_iov, ioc, |
40 | ARRAY_SIZE(iovstack), | 40 | ARRAY_SIZE(iovstack), |
41 | iovstack, &iov, 1); | 41 | iovstack, &iov); |
42 | if (ret < 0) | 42 | if (ret < 0) |
43 | return ret; | 43 | return ret; |
44 | if (ret == 0) | 44 | if (ret == 0) |
diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c index 2f28126215a2..0f5b3f027299 100644 --- a/security/keys/keyctl.c +++ b/security/keys/keyctl.c | |||
@@ -84,7 +84,7 @@ SYSCALL_DEFINE5(add_key, const char __user *, _type, | |||
84 | vm = false; | 84 | vm = false; |
85 | if (_payload) { | 85 | if (_payload) { |
86 | ret = -ENOMEM; | 86 | ret = -ENOMEM; |
87 | payload = kmalloc(plen, GFP_KERNEL); | 87 | payload = kmalloc(plen, GFP_KERNEL | __GFP_NOWARN); |
88 | if (!payload) { | 88 | if (!payload) { |
89 | if (plen <= PAGE_SIZE) | 89 | if (plen <= PAGE_SIZE) |
90 | goto error2; | 90 | goto error2; |
@@ -1110,7 +1110,7 @@ long keyctl_instantiate_key_iov(key_serial_t id, | |||
1110 | goto no_payload; | 1110 | goto no_payload; |
1111 | 1111 | ||
1112 | ret = rw_copy_check_uvector(WRITE, _payload_iov, ioc, | 1112 | ret = rw_copy_check_uvector(WRITE, _payload_iov, ioc, |
1113 | ARRAY_SIZE(iovstack), iovstack, &iov, 1); | 1113 | ARRAY_SIZE(iovstack), iovstack, &iov); |
1114 | if (ret < 0) | 1114 | if (ret < 0) |
1115 | return ret; | 1115 | return ret; |
1116 | if (ret == 0) | 1116 | if (ret == 0) |
diff --git a/security/keys/request_key.c b/security/keys/request_key.c index cc3790315d2f..000e75017520 100644 --- a/security/keys/request_key.c +++ b/security/keys/request_key.c | |||
@@ -93,16 +93,9 @@ static void umh_keys_cleanup(struct subprocess_info *info) | |||
93 | static int call_usermodehelper_keys(char *path, char **argv, char **envp, | 93 | static int call_usermodehelper_keys(char *path, char **argv, char **envp, |
94 | struct key *session_keyring, int wait) | 94 | struct key *session_keyring, int wait) |
95 | { | 95 | { |
96 | gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? GFP_ATOMIC : GFP_KERNEL; | 96 | return call_usermodehelper_fns(path, argv, envp, wait, |
97 | struct subprocess_info *info = | 97 | umh_keys_init, umh_keys_cleanup, |
98 | call_usermodehelper_setup(path, argv, envp, gfp_mask); | 98 | key_get(session_keyring)); |
99 | |||
100 | if (!info) | ||
101 | return -ENOMEM; | ||
102 | |||
103 | call_usermodehelper_setfns(info, umh_keys_init, umh_keys_cleanup, | ||
104 | key_get(session_keyring)); | ||
105 | return call_usermodehelper_exec(info, wait); | ||
106 | } | 99 | } |
107 | 100 | ||
108 | /* | 101 | /* |