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