[PATCH v4 10/19] Smack: Abstract use of file security blob

2018-09-21 Thread Casey Schaufler
Don't use the file->f_security pointer directly.
Provide a helper function that provides the security blob pointer.

Signed-off-by: Casey Schaufler 
---
 security/smack/smack.h |  5 +
 security/smack/smack_lsm.c | 12 
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/security/smack/smack.h b/security/smack/smack.h
index 01a922856eba..22ca30379209 100644
--- a/security/smack/smack.h
+++ b/security/smack/smack.h
@@ -361,6 +361,11 @@ static inline struct task_smack *smack_cred(const struct 
cred *cred)
return cred->security;
 }
 
+static inline struct smack_known **smack_file(const struct file *file)
+{
+   return (struct smack_known **)>f_security;
+}
+
 /*
  * Is the directory transmuting?
  */
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
index a06ea8aa89c4..9ec595f0c3f1 100644
--- a/security/smack/smack_lsm.c
+++ b/security/smack/smack_lsm.c
@@ -1571,9 +1571,9 @@ static void smack_inode_getsecid(struct inode *inode, u32 
*secid)
  */
 static int smack_file_alloc_security(struct file *file)
 {
-   struct smack_known *skp = smk_of_current();
+   struct smack_known **blob = smack_file(file);
 
-   file->f_security = skp;
+   *blob = smk_of_current();
return 0;
 }
 
@@ -1813,7 +1813,9 @@ static int smack_mmap_file(struct file *file,
  */
 static void smack_file_set_fowner(struct file *file)
 {
-   file->f_security = smk_of_current();
+   struct smack_known **blob = smack_file(file);
+
+   *blob = smk_of_current();
 }
 
 /**
@@ -1830,6 +1832,7 @@ static void smack_file_set_fowner(struct file *file)
 static int smack_file_send_sigiotask(struct task_struct *tsk,
 struct fown_struct *fown, int signum)
 {
+   struct smack_known **blob;
struct smack_known *skp;
struct smack_known *tkp = smk_of_task(smack_cred(tsk->cred));
struct file *file;
@@ -1842,7 +1845,8 @@ static int smack_file_send_sigiotask(struct task_struct 
*tsk,
file = container_of(fown, struct file, f_owner);
 
/* we don't log here as rc can be overriden */
-   skp = file->f_security;
+   blob = smack_file(file);
+   skp = *blob;
rc = smk_access(skp, tkp, MAY_DELIVER, NULL);
rc = smk_bu_note("sigiotask", skp, tkp, MAY_DELIVER, rc);
if (rc != 0 && has_capability(tsk, CAP_MAC_OVERRIDE))
-- 
2.17.1




[PATCH v4 10/19] Smack: Abstract use of file security blob

2018-09-21 Thread Casey Schaufler
Don't use the file->f_security pointer directly.
Provide a helper function that provides the security blob pointer.

Signed-off-by: Casey Schaufler 
---
 security/smack/smack.h |  5 +
 security/smack/smack_lsm.c | 12 
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/security/smack/smack.h b/security/smack/smack.h
index 01a922856eba..22ca30379209 100644
--- a/security/smack/smack.h
+++ b/security/smack/smack.h
@@ -361,6 +361,11 @@ static inline struct task_smack *smack_cred(const struct 
cred *cred)
return cred->security;
 }
 
+static inline struct smack_known **smack_file(const struct file *file)
+{
+   return (struct smack_known **)>f_security;
+}
+
 /*
  * Is the directory transmuting?
  */
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
index a06ea8aa89c4..9ec595f0c3f1 100644
--- a/security/smack/smack_lsm.c
+++ b/security/smack/smack_lsm.c
@@ -1571,9 +1571,9 @@ static void smack_inode_getsecid(struct inode *inode, u32 
*secid)
  */
 static int smack_file_alloc_security(struct file *file)
 {
-   struct smack_known *skp = smk_of_current();
+   struct smack_known **blob = smack_file(file);
 
-   file->f_security = skp;
+   *blob = smk_of_current();
return 0;
 }
 
@@ -1813,7 +1813,9 @@ static int smack_mmap_file(struct file *file,
  */
 static void smack_file_set_fowner(struct file *file)
 {
-   file->f_security = smk_of_current();
+   struct smack_known **blob = smack_file(file);
+
+   *blob = smk_of_current();
 }
 
 /**
@@ -1830,6 +1832,7 @@ static void smack_file_set_fowner(struct file *file)
 static int smack_file_send_sigiotask(struct task_struct *tsk,
 struct fown_struct *fown, int signum)
 {
+   struct smack_known **blob;
struct smack_known *skp;
struct smack_known *tkp = smk_of_task(smack_cred(tsk->cred));
struct file *file;
@@ -1842,7 +1845,8 @@ static int smack_file_send_sigiotask(struct task_struct 
*tsk,
file = container_of(fown, struct file, f_owner);
 
/* we don't log here as rc can be overriden */
-   skp = file->f_security;
+   blob = smack_file(file);
+   skp = *blob;
rc = smk_access(skp, tkp, MAY_DELIVER, NULL);
rc = smk_bu_note("sigiotask", skp, tkp, MAY_DELIVER, rc);
if (rc != 0 && has_capability(tsk, CAP_MAC_OVERRIDE))
-- 
2.17.1