mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-14 22:44:27 +08:00
02a52c5c8c
With the refactoring of the policy load logic in the security server from the previous change, it is now possible to split out the committing of the new policy from security_load_policy() and perform it only after successful updating of selinuxfs. Change security_load_policy() to return the newly populated policy data structures to the caller, export selinux_policy_commit() for external callers, and introduce selinux_policy_cancel() to provide a way to cancel the policy load in the event of an error during updating of the selinuxfs directory tree. Further, rework the interfaces used by selinuxfs to get information from the policy when creating the new directory tree to take and act upon the new policy data structure rather than the current/active policy. Update selinuxfs to use these updated and new interfaces. While we are here, stop re-creating the policy_capabilities directory on each policy load since it does not depend on the policy, and stop trying to create the booleans and classes directories during the initial creation of selinuxfs since no information is available until first policy load. After this change, a failure while updating the booleans and class directories will cause the entire policy load to be canceled, leaving the original policy intact, and policy load notifications to userspace will only happen after a successful completion of updating those directories. This does not (yet) provide full atomicity with respect to the updating of the directory trees themselves. Signed-off-by: Stephen Smalley <stephen.smalley.work@gmail.com> Signed-off-by: Paul Moore <paul@paul-moore.com>
24 lines
593 B
C
24 lines
593 B
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Interface to booleans in the security server. This is exported
|
|
* for the selinuxfs.
|
|
*
|
|
* Author: Karl MacMillan <kmacmillan@tresys.com>
|
|
*
|
|
* Copyright (C) 2003 - 2004 Tresys Technology, LLC
|
|
*/
|
|
|
|
#ifndef _SELINUX_CONDITIONAL_H_
|
|
#define _SELINUX_CONDITIONAL_H_
|
|
|
|
#include "security.h"
|
|
|
|
int security_get_bools(struct selinux_policy *policy,
|
|
u32 *len, char ***names, int **values);
|
|
|
|
int security_set_bools(struct selinux_state *state, u32 len, int *values);
|
|
|
|
int security_get_bool_value(struct selinux_state *state, u32 index);
|
|
|
|
#endif
|