Plug leaks in selinux context handling in fsm
authorPanu Matilainen <pmatilai@redhat.com>
Thu, 3 Jul 2008 14:14:45 +0000 (17:14 +0300)
committerPanu Matilainen <pmatilai@redhat.com>
Thu, 3 Jul 2008 14:14:45 +0000 (17:14 +0300)
lib/fsm.c
lib/fsm.h

index 8f531cf..f604a73 100644 (file)
--- a/lib/fsm.c
+++ b/lib/fsm.c
@@ -1217,11 +1217,13 @@ static int fsmMkdirs(FSM_t fsm)
                        rpmlog(RPMLOG_DEBUG,
                            "%s directory created with perms %04o, no context.\n",
                            fsm->path, (unsigned)(st->st_mode & 07777));
-                   else
+                   else {
                        rpmlog(RPMLOG_DEBUG,
                            "%s directory created with perms %04o, context %s.\n",
                            fsm->path, (unsigned)(st->st_mode & 07777),
                            fsm->fcontext);
+                       freecon(fsm->fcontext);
+                   }
                    fsm->fcontext = NULL;
                }
                *te = '/';
@@ -1845,8 +1847,10 @@ if (!(fsm->mapFlags & CPIO_ALL_HARDLINKS)) break;
             */
            if (!rc && !getuid()) {
                rc = fsmMapFContext(fsm);
-               if (!rc)
+               if (!rc) {
                    rc = fsmNext(fsm, FSM_LSETFCON);
+                   freecon(fsm->fcontext);     
+               }
                fsm->fcontext = NULL;
            }
            if (S_ISLNK(st->st_mode)) {
index 42936f6..eb8cf14 100644 (file)
--- a/lib/fsm.h
+++ b/lib/fsm.h
@@ -153,7 +153,7 @@ struct fsm_s {
     const char * dirName;      /*!< File directory name. */
     const char * baseName;     /*!< File base name. */
     const char * digest;       /*!< Binary checksum (NULL disables). */
-    const char * fcontext;     /*!< File security context (NULL disables). */
+    security_context_t fcontext;/*!< File security context (NULL disables). */
     pgpHashAlgo digestalgo;    /*!< File checksum algorithm */
     
     unsigned fflags;           /*!< File flags. */