#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/bitops.h>
-#include <linux/key.h>
/*
* UID task count cache, to get fast user lookup in "alloc_uid"
.sigpending = ATOMIC_INIT(0),
.mq_bytes = 0,
.locked_shm = 0,
-#ifdef CONFIG_KEYS
- .uid_keyring = &root_user_keyring,
- .session_keyring = &root_session_keyring,
-#endif
};
/*
{
if (up && atomic_dec_and_lock(&up->__count, &uidhash_lock)) {
uid_hash_remove(up);
- key_put(up->uid_keyring);
- key_put(up->session_keyring);
kmem_cache_free(uid_cachep, up);
spin_unlock(&uidhash_lock);
}
new->mq_bytes = 0;
new->locked_shm = 0;
- if (alloc_uid_keyring(new) < 0) {
- kmem_cache_free(uid_cachep, new);
- return NULL;
- }
-
/*
* Before adding this, check whether we raced
* on adding the same user already..
spin_lock(&uidhash_lock);
up = uid_hash_find(xid, uid, hashent);
if (up) {
- key_put(new->uid_keyring);
- key_put(new->session_keyring);
kmem_cache_free(uid_cachep, new);
} else {
uid_hash_insert(new, hashent);
old_user = current->user;
atomic_inc(&new_user->processes);
atomic_dec(&old_user->processes);
- switch_uid_keyring(new_user);
current->user = new_user;
free_uid(old_user);
- suid_keys(current);
}