request_key.c (8bbf4976b59fc9fc2861e79cab7beb3f6d647640) | request_key.c (b6dff3ec5e116e3af6f537d4caedcad6b9e5082a) |
---|---|
1/* Request a key from userspace 2 * 3 * Copyright (C) 2004-2007 Red Hat, Inc. All Rights Reserved. 4 * Written by David Howells (dhowells@redhat.com) 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version --- 90 unchanged lines hidden (view full) --- 99 sprintf(uid_str, "%d", current_fsuid()); 100 sprintf(gid_str, "%d", current_fsgid()); 101 102 /* we say which key is under construction */ 103 sprintf(key_str, "%d", key->serial); 104 105 /* we specify the process's default keyrings */ 106 sprintf(keyring_str[0], "%d", | 1/* Request a key from userspace 2 * 3 * Copyright (C) 2004-2007 Red Hat, Inc. All Rights Reserved. 4 * Written by David Howells (dhowells@redhat.com) 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version --- 90 unchanged lines hidden (view full) --- 99 sprintf(uid_str, "%d", current_fsuid()); 100 sprintf(gid_str, "%d", current_fsgid()); 101 102 /* we say which key is under construction */ 103 sprintf(key_str, "%d", key->serial); 104 105 /* we specify the process's default keyrings */ 106 sprintf(keyring_str[0], "%d", |
107 tsk->thread_keyring ? tsk->thread_keyring->serial : 0); | 107 tsk->cred->thread_keyring ? 108 tsk->cred->thread_keyring->serial : 0); |
108 109 prkey = 0; 110 if (tsk->signal->process_keyring) 111 prkey = tsk->signal->process_keyring->serial; 112 113 sprintf(keyring_str[1], "%d", prkey); 114 115 if (tsk->signal->session_keyring) { 116 rcu_read_lock(); 117 sskey = rcu_dereference(tsk->signal->session_keyring)->serial; 118 rcu_read_unlock(); 119 } else { | 109 110 prkey = 0; 111 if (tsk->signal->process_keyring) 112 prkey = tsk->signal->process_keyring->serial; 113 114 sprintf(keyring_str[1], "%d", prkey); 115 116 if (tsk->signal->session_keyring) { 117 rcu_read_lock(); 118 sskey = rcu_dereference(tsk->signal->session_keyring)->serial; 119 rcu_read_unlock(); 120 } else { |
120 sskey = tsk->user->session_keyring->serial; | 121 sskey = tsk->cred->user->session_keyring->serial; |
121 } 122 123 sprintf(keyring_str[2], "%d", sskey); 124 125 /* set up a minimal environment */ 126 i = 0; 127 envp[i++] = "HOME=/"; 128 envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin"; --- 98 unchanged lines hidden (view full) --- 227 228 /* find the appropriate keyring */ 229 if (dest_keyring) { 230 /* the caller supplied one */ 231 key_get(dest_keyring); 232 } else { 233 /* use a default keyring; falling through the cases until we 234 * find one that we actually have */ | 122 } 123 124 sprintf(keyring_str[2], "%d", sskey); 125 126 /* set up a minimal environment */ 127 i = 0; 128 envp[i++] = "HOME=/"; 129 envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin"; --- 98 unchanged lines hidden (view full) --- 228 229 /* find the appropriate keyring */ 230 if (dest_keyring) { 231 /* the caller supplied one */ 232 key_get(dest_keyring); 233 } else { 234 /* use a default keyring; falling through the cases until we 235 * find one that we actually have */ |
235 switch (tsk->jit_keyring) { | 236 switch (tsk->cred->jit_keyring) { |
236 case KEY_REQKEY_DEFL_DEFAULT: 237 case KEY_REQKEY_DEFL_REQUESTOR_KEYRING: | 237 case KEY_REQKEY_DEFL_DEFAULT: 238 case KEY_REQKEY_DEFL_REQUESTOR_KEYRING: |
238 if (tsk->request_key_auth) { 239 authkey = tsk->request_key_auth; | 239 if (tsk->cred->request_key_auth) { 240 authkey = tsk->cred->request_key_auth; |
240 down_read(&authkey->sem); 241 rka = authkey->payload.data; 242 if (!test_bit(KEY_FLAG_REVOKED, 243 &authkey->flags)) 244 dest_keyring = 245 key_get(rka->dest_keyring); 246 up_read(&authkey->sem); 247 if (dest_keyring) 248 break; 249 } 250 251 case KEY_REQKEY_DEFL_THREAD_KEYRING: | 241 down_read(&authkey->sem); 242 rka = authkey->payload.data; 243 if (!test_bit(KEY_FLAG_REVOKED, 244 &authkey->flags)) 245 dest_keyring = 246 key_get(rka->dest_keyring); 247 up_read(&authkey->sem); 248 if (dest_keyring) 249 break; 250 } 251 252 case KEY_REQKEY_DEFL_THREAD_KEYRING: |
252 dest_keyring = key_get(tsk->thread_keyring); | 253 dest_keyring = key_get(tsk->cred->thread_keyring); |
253 if (dest_keyring) 254 break; 255 256 case KEY_REQKEY_DEFL_PROCESS_KEYRING: 257 dest_keyring = key_get(tsk->signal->process_keyring); 258 if (dest_keyring) 259 break; 260 261 case KEY_REQKEY_DEFL_SESSION_KEYRING: 262 rcu_read_lock(); 263 dest_keyring = key_get( 264 rcu_dereference(tsk->signal->session_keyring)); 265 rcu_read_unlock(); 266 267 if (dest_keyring) 268 break; 269 270 case KEY_REQKEY_DEFL_USER_SESSION_KEYRING: | 254 if (dest_keyring) 255 break; 256 257 case KEY_REQKEY_DEFL_PROCESS_KEYRING: 258 dest_keyring = key_get(tsk->signal->process_keyring); 259 if (dest_keyring) 260 break; 261 262 case KEY_REQKEY_DEFL_SESSION_KEYRING: 263 rcu_read_lock(); 264 dest_keyring = key_get( 265 rcu_dereference(tsk->signal->session_keyring)); 266 rcu_read_unlock(); 267 268 if (dest_keyring) 269 break; 270 271 case KEY_REQKEY_DEFL_USER_SESSION_KEYRING: |
271 dest_keyring = key_get(tsk->user->session_keyring); | 272 dest_keyring = 273 key_get(tsk->cred->user->session_keyring); |
272 break; 273 274 case KEY_REQKEY_DEFL_USER_KEYRING: | 274 break; 275 276 case KEY_REQKEY_DEFL_USER_KEYRING: |
275 dest_keyring = key_get(tsk->user->uid_keyring); | 277 dest_keyring = key_get(tsk->cred->user->uid_keyring); |
276 break; 277 278 case KEY_REQKEY_DEFL_GROUP_KEYRING: 279 default: 280 BUG(); 281 } 282 } 283 --- 267 unchanged lines hidden --- | 278 break; 279 280 case KEY_REQKEY_DEFL_GROUP_KEYRING: 281 default: 282 BUG(); 283 } 284 } 285 --- 267 unchanged lines hidden --- |