]> www.infradead.org Git - nvme.git/commitdiff
smack: deduplicate access to string conversion
authorKonstantin Andreev <andreev@swemel.ru>
Fri, 13 Sep 2024 14:46:59 +0000 (17:46 +0300)
committerCasey Schaufler <casey@schaufler-ca.com>
Fri, 6 Dec 2024 21:21:12 +0000 (13:21 -0800)
Signed-off-by: Konstantin Andreev <andreev@swemel.ru>
Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
security/smack/smack.h
security/smack/smack_access.c
security/smack/smack_lsm.c
security/smack/smackfs.c

index dbf8d7226eb56a3385ec33e4eabf7b00a115ad5a..4608b07607a3da93d47310f2fddff95cb646406d 100644 (file)
@@ -280,6 +280,7 @@ int smk_access(struct smack_known *, struct smack_known *,
 int smk_tskacc(struct task_smack *, struct smack_known *,
               u32, struct smk_audit_info *);
 int smk_curacc(struct smack_known *, u32, struct smk_audit_info *);
+int smack_str_from_perm(char *string, int access);
 struct smack_known *smack_from_secid(const u32);
 char *smk_parse_smack(const char *string, int len);
 int smk_netlbl_mls(int, char *, struct netlbl_lsm_secattr *, int);
index 585e5e35710b247d877fd1bf0fd68da8aff550e2..3727379623e29486a82869ea60fc41b08685ddb3 100644 (file)
@@ -275,7 +275,6 @@ int smk_curacc(struct smack_known *obj_known,
        return smk_tskacc(tsp, obj_known, mode, a);
 }
 
-#ifdef CONFIG_AUDIT
 /**
  * smack_str_from_perm : helper to transalate an int to a
  * readable string
@@ -283,7 +282,7 @@ int smk_curacc(struct smack_known *obj_known,
  * @access : the int
  *
  */
-static inline void smack_str_from_perm(char *string, int access)
+int smack_str_from_perm(char *string, int access)
 {
        int i = 0;
 
@@ -299,8 +298,15 @@ static inline void smack_str_from_perm(char *string, int access)
                string[i++] = 't';
        if (access & MAY_LOCK)
                string[i++] = 'l';
+       if (access & MAY_BRINGUP)
+               string[i++] = 'b';
+       if (i == 0)
+               string[i++] = '-';
        string[i] = '\0';
+       return i;
 }
+
+#ifdef CONFIG_AUDIT
 /**
  * smack_log_callback - SMACK specific information
  * will be called by generic audit code
index 0c476282e2794526f3c7dc70bbffb2ec0ae8361c..c3f8de53aefd6ad02e103d87a32aec3aa87fc596 100644 (file)
@@ -107,23 +107,7 @@ static char *smk_bu_mess[] = {
 
 static void smk_bu_mode(int mode, char *s)
 {
-       int i = 0;
-
-       if (mode & MAY_READ)
-               s[i++] = 'r';
-       if (mode & MAY_WRITE)
-               s[i++] = 'w';
-       if (mode & MAY_EXEC)
-               s[i++] = 'x';
-       if (mode & MAY_APPEND)
-               s[i++] = 'a';
-       if (mode & MAY_TRANSMUTE)
-               s[i++] = 't';
-       if (mode & MAY_LOCK)
-               s[i++] = 'l';
-       if (i == 0)
-               s[i++] = '-';
-       s[i] = '\0';
+       smack_str_from_perm(s, mode);
 }
 #endif
 
index 1401412fd794888cf8c44496991ca1ebf632942f..357188f764ce16bc0e8c52c41f14aa40cbd651cd 100644 (file)
@@ -562,6 +562,7 @@ static void smk_seq_stop(struct seq_file *s, void *v)
 
 static void smk_rule_show(struct seq_file *s, struct smack_rule *srp, int max)
 {
+       char acc[SMK_NUM_ACCESS_TYPE + 1];
        /*
         * Don't show any rules with label names too long for
         * interface file (/smack/load or /smack/load2)
@@ -575,28 +576,11 @@ static void smk_rule_show(struct seq_file *s, struct smack_rule *srp, int max)
        if (srp->smk_access == 0)
                return;
 
-       seq_printf(s, "%s %s",
+       smack_str_from_perm(acc, srp->smk_access);
+       seq_printf(s, "%s %s %s\n",
                   srp->smk_subject->smk_known,
-                  srp->smk_object->smk_known);
-
-       seq_putc(s, ' ');
-
-       if (srp->smk_access & MAY_READ)
-               seq_putc(s, 'r');
-       if (srp->smk_access & MAY_WRITE)
-               seq_putc(s, 'w');
-       if (srp->smk_access & MAY_EXEC)
-               seq_putc(s, 'x');
-       if (srp->smk_access & MAY_APPEND)
-               seq_putc(s, 'a');
-       if (srp->smk_access & MAY_TRANSMUTE)
-               seq_putc(s, 't');
-       if (srp->smk_access & MAY_LOCK)
-               seq_putc(s, 'l');
-       if (srp->smk_access & MAY_BRINGUP)
-               seq_putc(s, 'b');
-
-       seq_putc(s, '\n');
+                  srp->smk_object->smk_known,
+                  acc);
 }
 
 /*