xref: /openbmc/linux/security/landlock/cred.c (revision f22f9aaf)
1385975dcSMickaël Salaün // SPDX-License-Identifier: GPL-2.0-only
2385975dcSMickaël Salaün /*
3385975dcSMickaël Salaün  * Landlock LSM - Credential hooks
4385975dcSMickaël Salaün  *
5385975dcSMickaël Salaün  * Copyright © 2017-2020 Mickaël Salaün <mic@digikod.net>
6385975dcSMickaël Salaün  * Copyright © 2018-2020 ANSSI
7385975dcSMickaël Salaün  */
8385975dcSMickaël Salaün 
9385975dcSMickaël Salaün #include <linux/cred.h>
10385975dcSMickaël Salaün #include <linux/lsm_hooks.h>
11385975dcSMickaël Salaün 
12385975dcSMickaël Salaün #include "common.h"
13385975dcSMickaël Salaün #include "cred.h"
14385975dcSMickaël Salaün #include "ruleset.h"
15385975dcSMickaël Salaün #include "setup.h"
16385975dcSMickaël Salaün 
17385975dcSMickaël Salaün static int hook_cred_prepare(struct cred *const new,
18385975dcSMickaël Salaün 			     const struct cred *const old, const gfp_t gfp)
19385975dcSMickaël Salaün {
20385975dcSMickaël Salaün 	struct landlock_ruleset *const old_dom = landlock_cred(old)->domain;
21385975dcSMickaël Salaün 
22385975dcSMickaël Salaün 	if (old_dom) {
23385975dcSMickaël Salaün 		landlock_get_ruleset(old_dom);
24385975dcSMickaël Salaün 		landlock_cred(new)->domain = old_dom;
25385975dcSMickaël Salaün 	}
26385975dcSMickaël Salaün 	return 0;
27385975dcSMickaël Salaün }
28385975dcSMickaël Salaün 
29385975dcSMickaël Salaün static void hook_cred_free(struct cred *const cred)
30385975dcSMickaël Salaün {
31385975dcSMickaël Salaün 	struct landlock_ruleset *const dom = landlock_cred(cred)->domain;
32385975dcSMickaël Salaün 
33385975dcSMickaël Salaün 	if (dom)
34385975dcSMickaël Salaün 		landlock_put_ruleset_deferred(dom);
35385975dcSMickaël Salaün }
36385975dcSMickaël Salaün 
37*f22f9aafSPaul Moore static struct security_hook_list landlock_hooks[] __ro_after_init = {
38385975dcSMickaël Salaün 	LSM_HOOK_INIT(cred_prepare, hook_cred_prepare),
39385975dcSMickaël Salaün 	LSM_HOOK_INIT(cred_free, hook_cred_free),
40385975dcSMickaël Salaün };
41385975dcSMickaël Salaün 
42385975dcSMickaël Salaün __init void landlock_add_cred_hooks(void)
43385975dcSMickaël Salaün {
44385975dcSMickaël Salaün 	security_add_hooks(landlock_hooks, ARRAY_SIZE(landlock_hooks),
45385975dcSMickaël Salaün 			   LANDLOCK_NAME);
46385975dcSMickaël Salaün }
47