[ubuntu-hardened] [PATCH] Initial policy load from load_policy
Chad Sellers
csellers at tresys.com
Wed Nov 7 22:10:27 GMT 2007
On 11/7/07 4:26 PM, "Stephen Smalley" <sds at tycho.nsa.gov> wrote:
> On Wed, 2007-11-07 at 16:17 -0500, Chad Sellers wrote:
>> The below patch adds a -i option to load_policy to perform the initial
>> policy load. The inital policy load is currently done in systems using
>> sysvinit by init itself, which then re-exec's itself. Ubuntu uses
>> upstart instead of sysvinit. In talks with the Ubuntu folks, they'd
>> prefer to load policy from initramfs before upstart starts rather than
>> patching upstart.
>>
>> Signed-off-by: Chad Sellers <csellers at tresys.com>
>> ---
>>
>> load_policy.8 | 19 ++++++++++++++++++-
>> load_policy.c | 29 +++++++++++++++++++++++++----
>> 2 files changed, 43 insertions(+), 5 deletions(-)
>>
>> Index: policycoreutils/load_policy/load_policy.c
>> ===================================================================
>> --- policycoreutils/load_policy/load_policy.c (revision 2679)
>> +++ policycoreutils/load_policy/load_policy.c (working copy)
>> @@ -19,13 +19,13 @@
>>
>> void usage(char *progname)
>> {
>> - fprintf(stderr, _("usage: %s [-q]\n"), progname);
>> + fprintf(stderr, _("usage: %s [-qi]\n"), progname);
>> exit(1);
>> }
>>
>> int main(int argc, char **argv)
>> {
>> - int ret, opt, quiet = 0, nargs;
>> + int ret, opt, quiet = 0, nargs, init=0, enforce=0;
>>
>> #ifdef USE_NLS
>> setlocale(LC_ALL, "");
>> @@ -33,7 +33,7 @@
>> textdomain(PACKAGE);
>> #endif
>>
>> - while ((opt = getopt(argc, argv, "bq")) > 0) {
>> + while ((opt = getopt(argc, argv, "bqi")) > 0) {
>> switch (opt) {
>> case 'b':
>> fprintf(stderr, "%s: Warning! The -b option is no longer
>> supported, booleans are always preserved across reloads. Continuing...\n",
>> @@ -43,6 +43,9 @@
>> quiet = 1;
>> sepol_debug(0);
>> break;
>> + case 'i':
>> + init = 1;
>> + break;
>> default:
>> usage(argv[0]);
>> }
>> @@ -62,7 +65,25 @@
>> argv[0], argv[optind++]);
>> }
>>
>> - ret = selinux_mkload_policy(1);
>> + if (init) {
>> + if (is_selinux_enabled() == 1) {
>> + /* SELinux is already enabled, we should not do an initial
>> load again */
>> + fprintf(stderr,
>> + _("%s: Policy is already loaded and initial load
>> requested\n"),
>> + argv[0]);
>> + exit(2);
>> + }
>> + ret = selinux_init_load_policy(&enforce);
>> + if (ret != 0 ) {
>> + if (enforce > 0) {
>> + /* SELinux in enforcing mode but load_policy failed */
>
> An error message here would be helpful, assuming that such error
> messages are displayed at all on the console.
>
I was planning to just display the error in the caller, as the caller will
be the one to halt the system (not load_policy).
> How do you plan to handle an error in the caller? System should be
> halted in this case.
>
I plan to check the return value in the caller and halt in this case. That's
why I added a new return value (3). Basically, something like this:
set +e
chroot /root load_policy -i
RET=$?
if [ $RET -eq 3 ]; then echo "SELinux policy load failed and enforcing mode
requested, halting now"; halt;
elif [ $RET -ne 0 ]; then echo "SELinux policy load failed, continuing";
fi
>> + exit(3);
>> + }
>> + }
>> + }
>> + else {
>> + ret = selinux_mkload_policy(1);
>> + }
>> if (ret < 0) {
>> fprintf(stderr, _("%s: Can't load policy: %s\n"),
>> argv[0], strerror(errno));
>> Index: policycoreutils/load_policy/load_policy.8
>> ===================================================================
>> --- policycoreutils/load_policy/load_policy.8 (revision 2679)
>> +++ policycoreutils/load_policy/load_policy.8 (working copy)
>> @@ -4,7 +4,7 @@
>>
>> .SH SYNOPSIS
>> .B load_policy
>> -[-q]
>> +[-qi]
>> .br
>> .SH DESCRIPTION
>> .PP
>> @@ -17,7 +17,24 @@
>> .TP
>> .B \-q
>> suppress warning messages.
>> +.TP
>> +.B \-i
>> +inital policy load. Only use this if this is the first time policy is
>> being loaded since boot (usually called from initramfs).
>>
>> +.SH "EXIT STATUS"
>> +.TP
>> +.B 0
>> +Success
>> +.TP
>> +.B 1
>> +Invalid option
>> +.TP
>> +.B 2
>> +Policy load failed
>> +.TP
>> +.B 3
>> +Initial policy load failed and enforcing mode requested
>> +
>> .SH SEE ALSO
>> .B booleans
>> (8),
>>
>>
>> --
>> This message was distributed to subscribers of the selinux mailing list.
>> If you no longer wish to subscribe, send mail to majordomo at tycho.nsa.gov with
>> the words "unsubscribe selinux" without quotes as the message.
More information about the ubuntu-hardened
mailing list