Revert "Avoid memory allocation while opening smackfs files."
authorJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Mon, 30 Sep 2013 11:32:31 +0000 (14:32 +0300)
committerJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Mon, 30 Sep 2013 11:32:31 +0000 (14:32 +0300)
This reverts commit 0426039bffdb82b0f7974639c1c1e361929b1cd5.

libsmack/init.c
libsmack/libsmack.c
utils/common.c

index c3465d9..1711904 100644 (file)
@@ -44,7 +44,6 @@
 #define OLDSMACKFSMNT "/smack"
 
 char *smack_mnt = NULL;
-int smack_mnt_dirfd = -1;
 
 void set_smackmnt(const char *mnt)
 {
@@ -62,31 +61,24 @@ static int verify_smackmnt(const char *mnt)
 {
        struct statfs sfbuf;
        int rc;
-       int fd;
-
-       fd = open(mnt, O_RDONLY, 0);
-       if (fd < 0)
-               return -1;
 
        do {
-               rc = fstatfs(fd, &sfbuf);
+               rc = statfs(mnt, &sfbuf);
        } while (rc < 0 && errno == EINTR);
 
        if (rc == 0) {
                if ((uint32_t)sfbuf.f_type == (uint32_t)SMACK_MAGIC) {
                        struct statvfs vfsbuf;
-                       rc = fstatvfs(fd, &vfsbuf);
+                       rc = statvfs(mnt, &vfsbuf);
                        if (rc == 0) {
                                if (!(vfsbuf.f_flag & ST_RDONLY)) {
                                        set_smackmnt(mnt);
                                }
-                               smack_mnt_dirfd = fd;
                                return 0;
                        }
                }
        }
 
-       close(fd);
        return -1;
 }
 
index e0487ca..d98f233 100644 (file)
@@ -30,6 +30,7 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
+#include <limits.h>
 #include <sys/xattr.h>
 
 #define ACC_LEN 5
@@ -51,7 +52,6 @@
 #define SELF_LABEL_FILE "/proc/self/attr/current"
 
 extern char *smack_mnt;
-extern int smack_mnt_dirfd;
 
 struct smack_rule {
        char subject[SMACK_LABEL_LEN + 1];
@@ -285,18 +285,21 @@ int smack_have_access(const char *subject, const char *object,
        int ret;
        int fd;
        int access2 = 1;
+       char path[PATH_MAX];
 
-       if (smack_mnt_dirfd < 0) {
+       if (!smack_mnt) {
                errno = EFAULT;
-               return -1;
+               return -1; 
        }
-
-       fd = openat(smack_mnt_dirfd, "access2", O_RDWR);
+       
+       snprintf(path, sizeof path, "%s/access2", smack_mnt);
+       fd = open(path, O_RDWR);
        if (fd < 0) {
                if (errno != ENOENT)
                        return -1;
-
-               fd = openat(smack_mnt_dirfd, "access", O_RDWR);
+               
+               snprintf(path, sizeof path, "%s/access", smack_mnt);
+               fd = open(path, O_RDWR);
                if (fd < 0)
                        return -1;
                access2 = 0;
@@ -363,14 +366,16 @@ int smack_cipso_apply(struct smack_cipso *cipso)
        char buf[CIPSO_MAX_SIZE];
        int fd;
        int i;
+       char path[PATH_MAX];
        int offset=0;
 
-       if (smack_mnt_dirfd < 0) {
+       if (!smack_mnt) {
                errno = EFAULT;
                return -1;
        }
 
-       fd = openat(smack_mnt_dirfd, "cipso2", O_WRONLY);
+       snprintf(path, sizeof path, "%s/cipso2", smack_mnt);
+       fd = open(path, O_WRONLY);
        if (fd < 0)
                return -1;
 
@@ -595,17 +600,14 @@ int smack_revoke_subject(const char *subject)
        int ret;
        int fd;
        int len;
-
-       if (smack_mnt_dirfd < 0) {
-               errno = EFAULT;
-               return -1;
-       }
+       char path[PATH_MAX];
 
        len = strnlen(subject, SMACK_LABEL_LEN + 1);
        if (len > SMACK_LABEL_LEN)
                return -1;
 
-       fd = openat(smack_mnt_dirfd, "revoke-subject", O_WRONLY);
+       snprintf(path, sizeof path, "%s/revoke-subject", smack_mnt);
+       fd = open(path, O_WRONLY);
        if (fd < 0)
                return -1;
 
@@ -624,25 +626,29 @@ static int accesses_apply(struct smack_accesses *handle, int clear)
        int load_fd;
        int change_fd;
        int load2 = 1;
+       char path[PATH_MAX];
 
-       if (smack_mnt_dirfd < 0) {
+       if (!smack_mnt) {
                errno = EFAULT;
-               return -1;
+               return -1; 
        }
-
-       load_fd = openat(smack_mnt_dirfd, "load2", O_WRONLY);
+       
+       snprintf(path, sizeof path, "%s/load2", smack_mnt);
+       load_fd = open(path, O_WRONLY);
        if (load_fd < 0) {
                if (errno != ENOENT)
                        return -1;
                /* fallback */
-               load_fd = openat(smack_mnt_dirfd, "load", O_WRONLY);
+               snprintf(path, sizeof path, "%s/load", smack_mnt);
+               load_fd = open(path, O_WRONLY);
                /* Try to continue if the file doesn't exist, we might not need it. */
                if (load_fd < 0 && errno != ENOENT)
                        return -1;
                load2 = 0;
        }
 
-       change_fd = openat(smack_mnt_dirfd, "change-rule", O_WRONLY);
+       snprintf(path, sizeof path, "%s/change-rule", smack_mnt);
+       change_fd = open(path, O_WRONLY);
        /* Try to continue if the file doesn't exist, we might not need it. */
        if (change_fd < 0 && errno != ENOENT) {
                ret = -1;
index 2ec0f35..0ff1e78 100644 (file)
@@ -30,6 +30,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <limits.h>
 
 #define SMACK_MAGIC 0x43415d53
 
@@ -66,8 +67,10 @@ int clear(void)
        int fd;
        int ret;
        const char * smack_mnt;
+       char path[PATH_MAX];
 
-       if (smack_mnt_dirfd < 0) {
+       smack_mnt = smack_smackfs_path();
+       if (!smack_mnt) {
                errno = EFAULT;
                return -1;
        }
@@ -75,7 +78,8 @@ int clear(void)
        if (is_smackfs_mounted() != 1)
                return -1;
 
-       fd = openat(smack_mnt_dirfd, "load2", O_RDONLY);
+       snprintf(path, sizeof path, "%s/load2", smack_mnt);
+       fd = open(path, O_RDONLY);
        if (fd < 0)
                return -1;