Lines 228-234
Link Here
|
228 |
static struct key_type *__key_type_keyring = &key_type_keyring; |
228 |
static struct key_type *__key_type_keyring = &key_type_keyring; |
229 |
|
229 |
|
230 |
static int |
230 |
static int |
231 |
install_session_keyring(struct task_struct *task, struct key *keyring) |
231 |
install_session_keyring(struct key *keyring) |
232 |
{ |
232 |
{ |
233 |
struct key *old; |
233 |
struct key *old; |
234 |
char desc[20]; |
234 |
char desc[20]; |
Lines 242-262
Link Here
|
242 |
|
242 |
|
243 |
/* create an empty session keyring */ |
243 |
/* create an empty session keyring */ |
244 |
not_in_quota = KEY_ALLOC_IN_QUOTA; |
244 |
not_in_quota = KEY_ALLOC_IN_QUOTA; |
245 |
sprintf(desc, "_ses.%u", task->tgid); |
245 |
sprintf(desc, "_ses.%u", current->tgid); |
246 |
|
246 |
|
247 |
#if defined(KEY_ALLOC_NEEDS_STRUCT_TASK) |
247 |
#if defined(KEY_ALLOC_NEEDS_STRUCT_TASK) |
248 |
keyring = key_alloc(__key_type_keyring, desc, |
248 |
keyring = key_alloc(__key_type_keyring, desc, |
249 |
task_uid(task), task_gid(task), task, |
249 |
current_uid(), current_gid(), current, |
250 |
(KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_ALL, |
250 |
(KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_ALL, |
251 |
not_in_quota); |
251 |
not_in_quota); |
252 |
#elif defined(KEY_ALLOC_NEEDS_CRED) |
252 |
#elif defined(KEY_ALLOC_NEEDS_CRED) |
253 |
keyring = key_alloc(__key_type_keyring, desc, |
253 |
keyring = key_alloc(__key_type_keyring, desc, |
254 |
task_uid(task), task_gid(task), current_cred(), |
254 |
current_uid(), current_gid(), current_cred(), |
255 |
(KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_ALL, |
255 |
(KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_ALL, |
256 |
not_in_quota); |
256 |
not_in_quota); |
257 |
#else |
257 |
#else |
258 |
keyring = key_alloc(__key_type_keyring, desc, |
258 |
keyring = key_alloc(__key_type_keyring, desc, |
259 |
task_uid(task), task_gid(task), |
259 |
current_uid(), current_gid(), |
260 |
(KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_ALL, |
260 |
(KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_ALL, |
261 |
not_in_quota); |
261 |
not_in_quota); |
262 |
#endif |
262 |
#endif |
Lines 273-283
Link Here
|
273 |
} |
273 |
} |
274 |
|
274 |
|
275 |
/* install the keyring */ |
275 |
/* install the keyring */ |
276 |
spin_lock_irq(&task->sighand->siglock); |
276 |
spin_lock_irq(¤t->sighand->siglock); |
277 |
old = task_session_keyring(task); |
277 |
old = task_session_keyring(current); |
278 |
smp_wmb(); |
278 |
smp_wmb(); |
279 |
task_session_keyring(task) = keyring; |
279 |
task_session_keyring(current) = keyring; |
280 |
spin_unlock_irq(&task->sighand->siglock); |
280 |
spin_unlock_irq(¤t->sighand->siglock); |
281 |
|
281 |
|
282 |
if (old) |
282 |
if (old) |
283 |
key_put(old); |
283 |
key_put(old); |
Lines 340-346
Link Here
|
340 |
#ifdef LINUX_KEYRING_SUPPORT |
340 |
#ifdef LINUX_KEYRING_SUPPORT |
341 |
if (code == 0) { |
341 |
if (code == 0) { |
342 |
|
342 |
|
343 |
(void) install_session_keyring(current, NULL); |
343 |
(void) install_session_keyring(NULL); |
344 |
|
344 |
|
345 |
if (current_session_keyring()) { |
345 |
if (current_session_keyring()) { |
346 |
struct key *key; |
346 |
struct key *key; |