• P
    selinux: put the mmap() DAC controls before the MAC controls · 98883bfd
    Paul Moore 提交于
    It turns out that doing the SELinux MAC checks for mmap() before the
    DAC checks was causing users and the SELinux policy folks headaches
    as users were seeing a lot of SELinux AVC denials for the
    memprotect:mmap_zero permission that would have also been denied by
    the normal DAC capability checks (CAP_SYS_RAWIO).
    
    Example:
    
     # cat mmap_test.c
      #include <stdlib.h>
      #include <stdio.h>
      #include <errno.h>
      #include <sys/mman.h>
    
      int main(int argc, char *argv[])
      {
            int rc;
            void *mem;
    
            mem = mmap(0x0, 4096,
                       PROT_READ | PROT_WRITE,
                       MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0);
            if (mem == MAP_FAILED)
                    return errno;
            printf("mem = %p\n", mem);
            munmap(mem, 4096);
    
            return 0;
      }
     # gcc -g -O0 -o mmap_test mmap_test.c
     # ./mmap_test
     mem = (nil)
     # ausearch -m AVC | grep mmap_zero
     type=AVC msg=audit(...): avc:  denied  { mmap_zero }
       for pid=1025 comm="mmap_test"
       scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
       tcontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
       tclass=memprotect
    
    This patch corrects things so that when the above example is run by a
    user without CAP_SYS_RAWIO the SELinux AVC is no longer generated as
    the DAC capability check fails before the SELinux permission check.
    Signed-off-by: NPaul Moore <pmoore@redhat.com>
    Acked-by: NStephen Smalley <sds@tycho.nsa.gov>
    98883bfd
hooks.c 149.7 KB