[PATCH] xselinux: Remove use of devPrivates init/free callbacks.

Eamon Walsh ewalsh at tycho.nsa.gov
Wed May 12 17:25:30 PDT 2010


Commit eb9210097efea81065c301e5b6b4da7a566deb4a removed the
sidget/sidput calls which were the major reason for using the
callbacks.  The remaining operations can be skipped or worked
around.

Signed-off-by: Eamon Walsh <ewalsh at tycho.nsa.gov>
---
 Xext/xselinux_hooks.c |   47 ++---------------------------------------------
 Xext/xselinuxint.h    |    4 +++-
 2 files changed, 5 insertions(+), 46 deletions(-)

diff --git a/Xext/xselinux_hooks.c b/Xext/xselinux_hooks.c
index 135992a..13e5243 100644
--- a/Xext/xselinux_hooks.c
+++ b/Xext/xselinux_hooks.c
@@ -151,12 +151,7 @@ SELinuxLabelClient(ClientPtr client)
 	if (bytes <= 0)
 	    goto finish;
 
-	subj->command = malloc(bytes);
-	if (!subj->command)
-	    goto finish;
-
-	memcpy(subj->command, path, bytes);
-	subj->command[bytes - 1] = 0;
+	strncpy(subj->command, path, COMMAND_LEN - 1);
     }
 
 finish:
@@ -464,7 +459,7 @@ SELinuxExtension(CallbackListPtr *pcbl, pointer unused, pointer calldata)
 
     /* If this is a new object that needs labeling, do it now */
     /* XXX there should be a separate callback for this */
-    if (obj->sid == unlabeled_sid) {
+    if (obj->sid == NULL) {
 	security_id_t sid;
 
 	serv = dixLookupPrivate(&serverClient->devPrivates, subjectKey);
@@ -809,39 +804,6 @@ SELinuxResourceState(CallbackListPtr *pcbl, pointer unused, pointer calldata)
 }
 
 
-/*
- * DevPrivates Callbacks
- */
-
-static void
-SELinuxSubjectInit(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    PrivateCallbackRec *rec = calldata;
-    SELinuxSubjectRec *subj = *rec->value;
-
-    subj->sid = unlabeled_sid;
-
-    avc_entry_ref_init(&subj->aeref);
-}
-
-static void
-SELinuxSubjectFree(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    PrivateCallbackRec *rec = calldata;
-    SELinuxSubjectRec *subj = *rec->value;
-
-    free(subj->command);
-}
-
-static void
-SELinuxObjectInit(CallbackListPtr *pcbl, pointer unused, pointer calldata)
-{
-    PrivateCallbackRec *rec = calldata;
-    SELinuxObjectRec *obj = *rec->value;
-
-    obj->sid = unlabeled_sid;
-}
-
 static int netlink_fd;
 
 static void
@@ -953,11 +915,6 @@ SELinuxFlaskInit(void)
                                    NULL);
 
     /* Register callbacks */
-    ret &= dixRegisterPrivateInitFunc(subjectKey, SELinuxSubjectInit, NULL);
-    ret &= dixRegisterPrivateDeleteFunc(subjectKey, SELinuxSubjectFree, NULL);
-    ret &= dixRegisterPrivateInitFunc(objectKey, SELinuxObjectInit, NULL);
-    ret &= dixRegisterPrivateInitFunc(dataKey, SELinuxObjectInit, NULL);
-
     ret &= AddCallback(&ClientStateCallback, SELinuxClientState, NULL);
     ret &= AddCallback(&ResourceStateCallback, SELinuxResourceState, NULL);
 
diff --git a/Xext/xselinuxint.h b/Xext/xselinuxint.h
index 854a57d..e5dbe11 100644
--- a/Xext/xselinuxint.h
+++ b/Xext/xselinuxint.h
@@ -36,6 +36,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  * Types
  */
 
+#define COMMAND_LEN 64
+
 /* subject state (clients and devices only) */
 typedef struct {
     security_id_t sid;
@@ -46,7 +48,7 @@ typedef struct {
     security_id_t sel_use_sid;
     security_id_t prp_use_sid;
     struct avc_entry_ref aeref;
-    char *command;
+    char command[COMMAND_LEN];
     int privileged;
 } SELinuxSubjectRec;
 
-- 
1.7.0.1




More information about the xorg-devel mailing list