All of lore.kernel.org
 help / color / mirror / Atom feed
From: Petr Lautrbach <plautrba@redhat.com>
To: Stephen Smalley <stephen.smalley.work@gmail.com>
Cc: SElinux list <selinux@vger.kernel.org>,
	Richard Haines <richard_c_haines@btinternet.com>
Subject: Re: [PATCH] setfiles: Do not abort on labeling error
Date: Wed, 13 Jan 2021 16:41:39 +0100	[thread overview]
Message-ID: <8735z4c098.fsf@redhat.com> (raw)
In-Reply-To: <CAEjxPJ527_NmMn+_gpKMHrq4iDtB2T4UPMEtsBtfzfD6YYF+Vg@mail.gmail.com>

Stephen Smalley <stephen.smalley.work@gmail.com> writes:

> On Wed, Jan 13, 2021 at 7:15 AM Petr Lautrbach <plautrba@redhat.com> wrote:
>>
>> Commit 602347c7422e ("policycoreutils: setfiles - Modify to use
>> selinux_restorecon") changed behavior of setfiles. Original
>> implementation skipped files which it couldn't set context to while the
>> new implementation aborts on them. setfiles should abort only if it
>> can't validate 10 contexts from spec_file.
>>
>> Reproducer:
>>
>>     # mkdir -p r/1 r/2 r/3
>>     # touch r/1/1 r/2/1
>>     # chattr +i r/2/1
>>     # touch r/3/1
>>     # setfiles -r r -v /etc/selinux/targeted/contexts/files/file_contexts r
>>     Relabeled r from unconfined_u:object_r:mnt_t:s0 to unconfined_u:object_r:root_t:s0
>>     Relabeled r/2 from unconfined_u:object_r:mnt_t:s0 to unconfined_u:object_r:default_t:s0
>>     setfiles: Could not set context for r/2/1:  Operation not permitted
>>
>> r/3 and r/1 are not relabeled.
>>
>> Also drop some old unused code in order to prevent future confusion.
>>
>> Signed-off-by: Petr Lautrbach <plautrba@redhat.com>
>> ---
>>  policycoreutils/setfiles/setfiles.c | 49 +----------------------------
>>  1 file changed, 1 insertion(+), 48 deletions(-)
>>
>> diff --git a/policycoreutils/setfiles/setfiles.c b/policycoreutils/setfiles/setfiles.c
>> index 422c3767b845..b96ee814bad2 100644
>> --- a/policycoreutils/setfiles/setfiles.c
>> +++ b/policycoreutils/setfiles/setfiles.c
>> @@ -23,14 +23,6 @@ static int nerr;
>>
>>  #define STAT_BLOCK_SIZE 1
>>
>> -/* setfiles will abort its operation after reaching the
>> - * following number of errors (e.g. invalid contexts),
>> - * unless it is used in "debug" mode (-d option).
>> - */
>> -#ifndef ABORT_ON_ERRORS
>> -#define ABORT_ON_ERRORS        10
>> -#endif
>> -
>>  #define SETFILES "setfiles"
>>  #define RESTORECON "restorecon"
>>  static int iamrestorecon;
>> @@ -56,15 +48,6 @@ static __attribute__((__noreturn__)) void usage(const char *const name)
>>         exit(-1);
>>  }
>>
>> -void inc_err(void)
>> -{
>> -       nerr++;
>> -       if (nerr > ABORT_ON_ERRORS - 1 && !r_opts.debug) {
>> -               fprintf(stderr, "Exiting after %d errors.\n", ABORT_ON_ERRORS);
>> -               exit(-1);
>> -       }
>> -}
>> -
>>  void set_rootpath(const char *arg)
>>  {
>>         if (strlen(arg) == 1 && strncmp(arg, "/", 1) == 0) {
>> @@ -82,27 +65,6 @@ void set_rootpath(const char *arg)
>>         }
>>  }
>>
>> -int canoncon(char **contextp)
>> -{
>> -       char *context = *contextp, *tmpcon;
>> -       int rc = 0;
>> -
>> -       if (policyfile) {
>> -               if (sepol_check_context(context) < 0) {
>> -                       fprintf(stderr, "invalid context %s\n", context);
>> -                       exit(-1);
>> -               }
>> -       } else if (security_canonicalize_context_raw(context, &tmpcon) == 0) {
>> -               free(context);
>> -               *contextp = tmpcon;
>> -       } else if (errno != ENOENT) {
>> -               rc = -1;
>> -               inc_err();
>> -       }
>> -
>> -       return rc;
>> -}
>> -
>>  #ifndef USE_AUDIT
>>  static void maybe_audit_mass_relabel(int mass_relabel __attribute__((unused)),
>>                                 int mass_relabel_errs __attribute__((unused)))
>> @@ -181,6 +143,7 @@ int main(int argc, char **argv)
>>         policyfile = NULL;
>>         nerr = 0;
>>
>> +       r_opts.abort_on_error = 0;
>>         r_opts.progname = strdup(argv[0]);
>>         if (!r_opts.progname) {
>>                 fprintf(stderr, "%s:  Out of memory!\n", argv[0]);
>> @@ -193,7 +156,6 @@ int main(int argc, char **argv)
>>                  * setfiles:
>>                  * Recursive descent,
>>                  * Does not expand paths via realpath,
>> -                * Aborts on errors during the file tree walk,
>>                  * Try to track inode associations for conflict detection,
>>                  * Does not follow mounts (sets SELINUX_RESTORECON_XDEV),
>>                  * Validates all file contexts at init time.
>> @@ -201,7 +163,6 @@ int main(int argc, char **argv)
>>                 iamrestorecon = 0;
>>                 r_opts.recurse = SELINUX_RESTORECON_RECURSE;
>>                 r_opts.userealpath = 0; /* SELINUX_RESTORECON_REALPATH */
>> -               r_opts.abort_on_error = SELINUX_RESTORECON_ABORT_ON_ERROR;
>>                 r_opts.add_assoc = SELINUX_RESTORECON_ADD_ASSOC;
>>                 /* FTS_PHYSICAL and FTS_NOCHDIR are always set by selinux_restorecon(3) */
>>                 r_opts.xdev = SELINUX_RESTORECON_XDEV;
>> @@ -225,7 +186,6 @@ int main(int argc, char **argv)
>>                 iamrestorecon = 1;
>>                 r_opts.recurse = 0;
>>                 r_opts.userealpath = SELINUX_RESTORECON_REALPATH;
>> -               r_opts.abort_on_error = 0;
>>                 r_opts.add_assoc = 0;
>>                 r_opts.xdev = 0;
>>                 r_opts.ignore_mounts = 0;
>> @@ -420,13 +380,6 @@ int main(int argc, char **argv)
>>                                 usage(argv[0]);
>>                 }
>>
>> -               /* Use our own invalid context checking function so that
>> -                * we can support either checking against the active policy or
>> -                * checking against a binary policy file.
>> -                */
>> -               cb.func_validate = canoncon;
>> -               selinux_set_callback(SELINUX_CB_VALIDATE, cb);
>> -
>
> I could be wrong but I think we still need this for setfiles -c.

Looks like you are right. I'll send updated version.


      reply	other threads:[~2021-01-13 15:43 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-13 12:11 [PATCH] setfiles: Do not abort on labeling error Petr Lautrbach
2021-01-13 14:59 ` Stephen Smalley
2021-01-13 15:41   ` Petr Lautrbach [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8735z4c098.fsf@redhat.com \
    --to=plautrba@redhat.com \
    --cc=richard_c_haines@btinternet.com \
    --cc=selinux@vger.kernel.org \
    --cc=stephen.smalley.work@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.