1 // SPDX-License-Identifier: GPL-2.0-only
3 * Landlock LSM - Credential hooks
5 * Copyright © 2017-2020 Mickaël Salaün <mic@digikod.net>
6 * Copyright © 2018-2020 ANSSI
9 #include <linux/cred.h>
10 #include <linux/lsm_hooks.h>
17 static void hook_cred_transfer(struct cred
*const new,
18 const struct cred
*const old
)
20 struct landlock_ruleset
*const old_dom
= landlock_cred(old
)->domain
;
23 landlock_get_ruleset(old_dom
);
24 landlock_cred(new)->domain
= old_dom
;
28 static int hook_cred_prepare(struct cred
*const new,
29 const struct cred
*const old
, const gfp_t gfp
)
31 hook_cred_transfer(new, old
);
35 static void hook_cred_free(struct cred
*const cred
)
37 struct landlock_ruleset
*const dom
= landlock_cred(cred
)->domain
;
40 landlock_put_ruleset_deferred(dom
);
43 static struct security_hook_list landlock_hooks
[] __ro_after_init
= {
44 LSM_HOOK_INIT(cred_prepare
, hook_cred_prepare
),
45 LSM_HOOK_INIT(cred_transfer
, hook_cred_transfer
),
46 LSM_HOOK_INIT(cred_free
, hook_cred_free
),
49 __init
void landlock_add_cred_hooks(void)
51 security_add_hooks(landlock_hooks
, ARRAY_SIZE(landlock_hooks
),