Re: Patch Review Process - Missing patch for selinux_set_mapping

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Steve,

This patch is missing from your list. I sent on March 30th:

[PATCH 1/1] mapping fix for invalid class/perms after selinux_set_mapping callâ

Please find another libselinux patch. I've tested quite extensively with the compute_av and string functions with and without mapping and seems okay.  

The patch covers:
When selinux_set_mapping(3) is used to set the class and permissions allowed by an object manager, then an invalid class and/or permissions are selected (e.g. using security_class_to_string), then mapping.c in libselinux forces an assert. This patch removes the asserts and allows the functions to return a class/perm of 0 (unknown) with errno set to EINVAL. A minor patch to set EINVAL in security_av_perm_to_string_compat is also included. All the functions to convert perms & classes to strings and back should now return the correct errno with or without mapping enabled.


---
libselinux/src/mapping.c   |   41 ++++++++++++++++++++++++++++-------------
libselinux/src/stringrep.c |    4 +++-
2 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/libselinux/src/mapping.c b/libselinux/src/mapping.c
index f9858ce..5bbb450 100644
--- a/libselinux/src/mapping.c
+++ b/libselinux/src/mapping.c
@@ -6,7 +6,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
-#include <assert.h>
#include <selinux/selinux.h>
#include <selinux/avc.h>
#include "mapping.h"
@@ -103,8 +102,13 @@ unmap_class(security_class_t tclass)
    if (tclass < current_mapping_size)
        return current_mapping[tclass].value;

-    assert(current_mapping_size == 0);
-    return tclass;
+    /* If here no mapping set or the class requested is not valid. */
+    if (current_mapping_size != 0) {
+        errno = EINVAL;
+        return 0;
+    }
+    else
+        return tclass;
}

access_vector_t
@@ -116,16 +120,19 @@ unmap_perm(security_class_t tclass, access_vector_t tperm)

        for (i=0; i<current_mapping[tclass].num_perms; i++)
            if (tperm & (1<<i)) {
-                assert(current_mapping[tclass].perms[i]);
                kperm |= current_mapping[tclass].perms[i];
                tperm &= ~(1<<i);
            }
-        assert(tperm == 0);
        return kperm;
    }

-    assert(current_mapping_size == 0);
-    return tperm;
+    /* If here no mapping set or the perm requested is not valid. */
+    if (current_mapping_size != 0) {
+        errno = EINVAL;
+        return 0;
+    }
+    else
+        return tperm;
}

/*
@@ -141,8 +148,13 @@ map_class(security_class_t kclass)
        if (current_mapping[i].value == kclass)
            return i;

-    assert(current_mapping_size == 0);
-    return kclass;
+/* If here no mapping set or the class requested is not valid. */
+    if (current_mapping_size != 0) {
+        errno = EINVAL;
+        return 0;
+    }
+    else    
+        return kclass;
}

access_vector_t
@@ -157,11 +169,14 @@ map_perm(security_class_t tclass, access_vector_t kperm)
                tperm |= 1<<i;
                kperm &= ~current_mapping[tclass].perms[i];
            }
-        assert(kperm == 0);
-        return tperm;
-    }

-    assert(current_mapping_size == 0);
+        if (tperm == 0) {
+            errno = EINVAL;
+            return 0;
+        }
+        else
+            return tperm;
+    }
    return kperm;
}

diff --git a/libselinux/src/stringrep.c b/libselinux/src/stringrep.c
index b19bce7..f0167e7 100644
--- a/libselinux/src/stringrep.c
+++ b/libselinux/src/stringrep.c
@@ -401,8 +401,10 @@ static const char *security_av_perm_to_string_compat(security_class_t tclass,
    access_vector_t common_base = 0;
    unsigned int i;

-    if (!av)
+    if (!av) {
+        errno = EINVAL;
        return NULL;
+    }

    for (i = 0; i < ARRAY_SIZE(av_inherit); i++) {
        if (av_inherit[i].tclass == tclass) {
-- 
1.7.3.2

If you need me to re-submit for latest git let me know.

Richard


--- On Mon, 9/5/11, Steve Lawrence <slawrence@xxxxxxxxxx> wrote:

> From: Steve Lawrence <slawrence@xxxxxxxxxx>
> Subject: Re: Patch Review Process
> To: "Guido Trentalancia" <guido@xxxxxxxxxxxxxxxx>
> Cc: "SELinux" <selinux@xxxxxxxxxxxxx>
> Date: Monday, 9 May, 2011, 20:58
> On 05/09/2011 03:21 PM, Guido
> Trentalancia wrote:
> > Hello Steve !
> > 
> > On Mon, 2011-05-09 at 11:14 -0400, Steve Lawrence
> wrote:
> >> Recently, I've not been merging patches at the
> rate that I would like.
> >> The delay is a problem itself, but it has also
> meant that people aren't
> >> certain of the status of the patches that have
> been submitted.
> >>
> > [cut]
> >>
> >> Finally, if anyone has any suggestions on ways to
> make the patch review
> >> process better, my ears are all open.
> > 
> > Yes, adding at least the name and/or email address of
> the submitter to
> > the "Current Patch Queue" will probably help.
> > 
> > Regards,
> > 
> > Guido
> 
> Sounds reasonable to me. The patch queue with names and
> emails is below:
> 
> Current Patch Queue:
> 
> checkpolicy: fix filename identifier
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=130442985211760&w=2
> 
> selabel_open fix processing of substitution files (update)
> Richard Haines <richard_c_haines@xxxxxxxxxxxxxx>
> http://marc.info/?l=selinux&m=130314146920796&w=2
> 
> selinux_file_context_verify function returns wrong value
> Richard Haines <richard_c_haines@xxxxxxxxxxxxxx>
> http://marc.info/?l=selinux&m=129968866831934&w=2
> 
> Fix boolean handling in semanage
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=125433524126271&w=2
> 
> Add modules support to semanage
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=125433587727297&w=2
> 
> sandbox changes
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=129226611027331&w=2
> 
> libselinux mountpoint changing
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=130444622801373&w=2
> 
> Add note to checkmodule man page about versions
> Jason Axelson <jaxelson@xxxxxxxxxxxxxx>
> http://marc.info/?l=selinux&m=127913558418720&w=2
> 
> Bug in restorecond for the first user logged in
> Chris Adams <cmadams@xxxxxxxxxx>
> http://marc.info/?t=128164314700001&r=1&w=2
> 
> transactions in semanage man page
> Russell Coker <russell@xxxxxxxxxxxx>
> http://marc.info/?l=selinux&m=127959379422398&w=2
> 
> libsemanage python3 support
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=128025784525867&w=2
> 
> libselinux python3 support
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=129226509225674&w=2
> 
> SETools patch: adding exclude type feature in queries
> Roberto Sassu <roberto.sassu@xxxxxxxxx>
> http://marc.info/?l=selinux&m=128448149528834&w=2
> 
> Move newrole to file caps/libcapng
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=129226621227513&w=2
> 
> Improve semodule performance
> Matthew Robertson <Matthew.L.Robertson@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=128043503603540&w=2
> 
> Fix warning messages generated by GCC 4.6
> Justin P. Mattock <justinmattock@xxxxxxxxx>
> http://marc.info/?l=selinux&m=127845525722194&w=2
> 
> sepolgen kernel policy version check
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=128948444127169&w=2
> 
> Remove DEFAULTUSER handling from get_context_list
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=129226509425687&w=2
> 
> sepolgen current patch from Fedora
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=129226551726416&w=2
> 
> Improved error message for load_policy
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=129226567426640&w=2
> 
> Semanage patch
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=129233335310866&w=2
> 
> restorecond: Ignore IN_IGNORED inotify events
> Martin Orr <martin@xxxxxxxxxxxxxx>
> http://marc.info/?l=selinux&m=125380417916233&w=2
> 
> setfiles/restorecond patch
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=129226589026919&w=2
> 
> policycoreutils:Â update audit2allow manpage
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=129304945226866&w=2
> 
> libsemanage: include MCS/MLS level when generating
> files_contexts.homedirs
> Russell Coker <russell@xxxxxxxxxxxx>
> http://marc.info/?l=selinux&m=129421658323663&w=2
> 
> setfiles: provide an option to avoid abortion on a missing
> file
> Guido Trentalancia <guido@xxxxxxxxxxxxxxxx>
> http://marc.info/?l=selinux&m=129819885027010&w=2
> 
> minor improvements and clean-ups for setfiles
> Guido Trentalancia <guido@xxxxxxxxxxxxxxxx>
> http://marc.info/?l=selinux&m=129819262321520&w=2
> 
> policycoreutils scripts updates
> Daniel J Walsh <dwalsh@xxxxxxxxxx>
> http://marc.info/?l=selinux&m=129226648427897&w=2
> 
> Fix options for policycoreutils binaries
> Guido Trentalancia <guido@xxxxxxxxxxxxxxxx>
> http://marc.info/?l=selinux&m=125718355929168&w=2
> 
> --
> This message was distributed to subscribers of the selinux
> mailing list.
> If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx
> with
> the words "unsubscribe selinux" without quotes as the
> message.
> 


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.


[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux