#include <linux/export.h>
#include <linux/sched/coredump.h>
#include <linux/keyctl.h>
#include <linux/init_task.h>
#include <linux/security.h>
#include <linux/binfmts.h>
#include <linux/cn_proc.h>
#include <linux/uidgid.h>
#define kdebug(FMT, ...) \
printk("[%-5.5s%5u] " FMT "\n", \
current->comm, current->pid, ##__VA_ARGS__)
#define kdebug(FMT, ...) \
no_printk("[%-5.5s%5u] " FMT "\n", \
current->comm, current->pid, ##__VA_ARGS__); \
static struct kmem_cache *cred_jar;
struct group_info init_groups = { .usage = ATOMIC_INIT(2) };
struct cred init_cred = {
#ifdef CONFIG_DEBUG_CREDENTIALS
.subscribers = ATOMIC_INIT(2),
.fsuid = GLOBAL_ROOT_UID,
.fsgid = GLOBAL_ROOT_GID,
.securebits = SECUREBITS_DEFAULT,
.cap_inheritable = CAP_EMPTY_SET,
.cap_permitted = CAP_FULL_SET,
.cap_effective = CAP_FULL_SET,
.cap_bset = CAP_FULL_SET,
.user_ns = &init_user_ns,
.group_info = &init_groups,
static inline void set_cred_subscribers(struct cred *cred, int n)
#ifdef CONFIG_DEBUG_CREDENTIALS
atomic_set(&cred->subscribers, n);
static inline int read_cred_subscribers(const struct cred *cred)
#ifdef CONFIG_DEBUG_CREDENTIALS
return atomic_read(&cred->subscribers);
static inline void alter_cred_subscribers(const struct cred *_cred, int n)
#ifdef CONFIG_DEBUG_CREDENTIALS
struct cred *cred = (struct cred *) _cred;
atomic_add(n, &cred->subscribers);