// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (C) 2021 Microsoft Corporation * * Author: Lakshmi Ramasubramanian (nramas@linux.microsoft.com) * * Measure critical data structures maintainted by SELinux * using IMA subsystem. */ #include #include #include "security.h" #include "ima.h" /* * selinux_ima_measure_state - Measure hash of the SELinux policy * * @state: selinux state struct * * NOTE: This function must be called with policy_mutex held. */ void selinux_ima_measure_state(struct selinux_state *state) { void *policy = NULL; size_t policy_len; int rc = 0; /* * Measure SELinux policy only after initialization is completed. */ if (!selinux_initialized(state)) return; rc = security_read_state_kernel(state, &policy, &policy_len); if (rc) { pr_err("SELinux: %s: failed to read policy %d.\n", __func__, rc); return; } ima_measure_critical_data("selinux", "selinux-policy-hash", policy, policy_len, true); vfree(policy); }