diff options
Diffstat (limited to 'security/keys/process_keys.c')
| -rw-r--r-- | security/keys/process_keys.c | 6 | 
1 files changed, 4 insertions, 2 deletions
diff --git a/security/keys/process_keys.c b/security/keys/process_keys.c index 20e4bf57aec8..42defae1e161 100644 --- a/security/keys/process_keys.c +++ b/security/keys/process_keys.c @@ -57,7 +57,7 @@ int install_user_keyrings(void)  	kenter("%p{%u}", user, uid); -	if (user->uid_keyring) { +	if (user->uid_keyring && user->session_keyring) {  		kleave(" = 0 [exist]");  		return 0;  	} @@ -367,6 +367,8 @@ key_ref_t search_my_process_keyrings(struct key_type *type,  		switch (PTR_ERR(key_ref)) {  		case -EAGAIN: /* no key */ +			if (ret) +				break;  		case -ENOKEY: /* negative key */  			ret = key_ref;  			break; @@ -837,7 +839,7 @@ void key_change_session_keyring(struct callback_head *twork)  	new-> sgid	= old-> sgid;  	new->fsgid	= old->fsgid;  	new->user	= get_uid(old->user); -	new->user_ns	= get_user_ns(new->user_ns); +	new->user_ns	= get_user_ns(old->user_ns);  	new->group_info	= get_group_info(old->group_info);  	new->securebits	= old->securebits;  |