diff mbox series

smack: remove /smack/logging if audit is not configured

Message ID 20250117214655.3138888-1-andreev@swemel.ru (mailing list archive)
State New
Headers show
Series smack: remove /smack/logging if audit is not configured | expand

Commit Message

Konstantin Andreev Jan. 17, 2025, 9:46 p.m. UTC
If CONFIG_AUDIT is not set then
SMACK does not generate audit messages,
however, keeps audit control file, /smack/logging,
while there is no entity to control.
This change removes audit control file /smack/logging
when audit is not configured in the kernel

Signed-off-by: Konstantin Andreev <andreev@swemel.ru>
---
 security/smack/smack.h        | 12 ++++++------
 security/smack/smack_access.c |  2 ++
 security/smack/smackfs.c      |  6 ++++++
 3 files changed, 14 insertions(+), 6 deletions(-)

Comments

Casey Schaufler Jan. 18, 2025, 5:17 p.m. UTC | #1
On 1/17/2025 1:46 PM, Konstantin Andreev wrote:
> If CONFIG_AUDIT is not set then
> SMACK does not generate audit messages,
> however, keeps audit control file, /smack/logging,
> while there is no entity to control.
> This change removes audit control file /smack/logging
> when audit is not configured in the kernel

Is there a real reason to do this? I can easily see systems
that expect to turn logging off getting upset if the interface
disappears seemingly at random.

>
> Signed-off-by: Konstantin Andreev <andreev@swemel.ru>
> ---
>  security/smack/smack.h        | 12 ++++++------
>  security/smack/smack_access.c |  2 ++
>  security/smack/smackfs.c      |  6 ++++++
>  3 files changed, 14 insertions(+), 6 deletions(-)
>
> diff --git a/security/smack/smack.h b/security/smack/smack.h
> index c4d998972ba5..1fb6957545b5 100644
> --- a/security/smack/smack.h
> +++ b/security/smack/smack.h
> @@ -432,6 +432,12 @@ static inline struct smack_known *smk_of_current(void)
>  	return smk_of_task(smack_cred(current_cred()));
>  }
>  
> +void smack_log(char *subject_label, char *object_label,
> +		int request,
> +		int result, struct smk_audit_info *auditdata);
> +
> +#ifdef CONFIG_AUDIT
> +
>  /*
>   * logging functions
>   */
> @@ -439,12 +445,6 @@ static inline struct smack_known *smk_of_current(void)
>  #define SMACK_AUDIT_ACCEPT 0x2
>  extern int log_policy;
>  
> -void smack_log(char *subject_label, char *object_label,
> -		int request,
> -		int result, struct smk_audit_info *auditdata);
> -
> -#ifdef CONFIG_AUDIT
> -
>  /*
>   * some inline functions to set up audit data
>   * they do nothing if CONFIG_AUDIT is not set
> diff --git a/security/smack/smack_access.c b/security/smack/smack_access.c
> index 3727379623e2..606cb340e819 100644
> --- a/security/smack/smack_access.c
> +++ b/security/smack/smack_access.c
> @@ -45,11 +45,13 @@ LIST_HEAD(smack_known_list);
>   */
>  static u32 smack_next_secid = 10;
>  
> +#ifdef CONFIG_AUDIT
>  /*
>   * what events do we log
>   * can be overwritten at run-time by /smack/logging
>   */
>  int log_policy = SMACK_AUDIT_DENIED;
> +#endif /* CONFIG_AUDIT */
>  
>  /**
>   * smk_access_entry - look up matching access rule
> diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
> index a7886cfc9dc3..c28188bc2bc8 100644
> --- a/security/smack/smackfs.c
> +++ b/security/smack/smackfs.c
> @@ -41,7 +41,9 @@ enum smk_inos {
>  	SMK_AMBIENT	= 7,	/* internet ambient label */
>  	SMK_NET4ADDR	= 8,	/* single label hosts */
>  	SMK_ONLYCAP	= 9,	/* the only "capable" label */
> +#ifdef CONFIG_AUDIT
>  	SMK_LOGGING	= 10,	/* logging */
> +#endif /* CONFIG_AUDIT */
>  	SMK_LOAD_SELF	= 11,	/* task specific rules */
>  	SMK_ACCESSES	= 12,	/* access policy */
>  	SMK_MAPPED	= 13,	/* CIPSO level indicating mapped label */
> @@ -2126,6 +2128,7 @@ static const struct file_operations smk_unconfined_ops = {
>  };
>  #endif /* CONFIG_SECURITY_SMACK_BRINGUP */
>  
> +#ifdef CONFIG_AUDIT
>  /**
>   * smk_read_logging - read() for /smack/logging
>   * @filp: file pointer, not actually used
> @@ -2190,6 +2193,7 @@ static const struct file_operations smk_logging_ops = {
>  	.write		= smk_write_logging,
>  	.llseek		= default_llseek,
>  };
> +#endif /* CONFIG_AUDIT */
>  
>  /*
>   * Seq_file read operations for /smack/load-self
> @@ -2876,8 +2880,10 @@ static int smk_fill_super(struct super_block *sb, struct fs_context *fc)
>  			"netlabel", &smk_net4addr_ops, S_IRUGO|S_IWUSR},
>  		[SMK_ONLYCAP] = {
>  			"onlycap", &smk_onlycap_ops, S_IRUGO|S_IWUSR},
> +#ifdef CONFIG_AUDIT
>  		[SMK_LOGGING] = {
>  			"logging", &smk_logging_ops, S_IRUGO|S_IWUSR},
> +#endif /* CONFIG_AUDIT */
>  		[SMK_LOAD_SELF] = {
>  			"load-self", &smk_load_self_ops, S_IRUGO|S_IWUGO},
>  		[SMK_ACCESSES] = {
Konstantin Andreev Jan. 20, 2025, 11:16 a.m. UTC | #2
Casey Schaufler, 18 Jan 2025:
> On 1/17/2025 1:46 PM, Konstantin Andreev wrote:
>> If CONFIG_AUDIT is not set then
>> SMACK does not generate audit messages,
>> however, keeps audit control file, /smack/logging,
>> while there is no entity to control.
>> This change removes audit control file /smack/logging
>> when audit is not configured in the kernel
> 
> Is there a real reason to do this?

Not more real than there are real reasons for
fixing typos and spelling errors,
removing unused or duplicating code,
keeping one tab indentation, etc.

The matter of style.

Personally, I deprecate fake controls,
they make me (as a user) think that
it's me who is missing something.

> I can easily see systems that expect to turn logging off getting
> upset if the interface disappears seemingly at random.

To me, the system builder who compiles audit out, on purpose,
must be prepared for special treatment of his system.

Certainly, I may not have a full picture.
--
Regards,
Konstantin Andreev
diff mbox series

Patch

diff --git a/security/smack/smack.h b/security/smack/smack.h
index c4d998972ba5..1fb6957545b5 100644
--- a/security/smack/smack.h
+++ b/security/smack/smack.h
@@ -432,6 +432,12 @@  static inline struct smack_known *smk_of_current(void)
 	return smk_of_task(smack_cred(current_cred()));
 }
 
+void smack_log(char *subject_label, char *object_label,
+		int request,
+		int result, struct smk_audit_info *auditdata);
+
+#ifdef CONFIG_AUDIT
+
 /*
  * logging functions
  */
@@ -439,12 +445,6 @@  static inline struct smack_known *smk_of_current(void)
 #define SMACK_AUDIT_ACCEPT 0x2
 extern int log_policy;
 
-void smack_log(char *subject_label, char *object_label,
-		int request,
-		int result, struct smk_audit_info *auditdata);
-
-#ifdef CONFIG_AUDIT
-
 /*
  * some inline functions to set up audit data
  * they do nothing if CONFIG_AUDIT is not set
diff --git a/security/smack/smack_access.c b/security/smack/smack_access.c
index 3727379623e2..606cb340e819 100644
--- a/security/smack/smack_access.c
+++ b/security/smack/smack_access.c
@@ -45,11 +45,13 @@  LIST_HEAD(smack_known_list);
  */
 static u32 smack_next_secid = 10;
 
+#ifdef CONFIG_AUDIT
 /*
  * what events do we log
  * can be overwritten at run-time by /smack/logging
  */
 int log_policy = SMACK_AUDIT_DENIED;
+#endif /* CONFIG_AUDIT */
 
 /**
  * smk_access_entry - look up matching access rule
diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
index a7886cfc9dc3..c28188bc2bc8 100644
--- a/security/smack/smackfs.c
+++ b/security/smack/smackfs.c
@@ -41,7 +41,9 @@  enum smk_inos {
 	SMK_AMBIENT	= 7,	/* internet ambient label */
 	SMK_NET4ADDR	= 8,	/* single label hosts */
 	SMK_ONLYCAP	= 9,	/* the only "capable" label */
+#ifdef CONFIG_AUDIT
 	SMK_LOGGING	= 10,	/* logging */
+#endif /* CONFIG_AUDIT */
 	SMK_LOAD_SELF	= 11,	/* task specific rules */
 	SMK_ACCESSES	= 12,	/* access policy */
 	SMK_MAPPED	= 13,	/* CIPSO level indicating mapped label */
@@ -2126,6 +2128,7 @@  static const struct file_operations smk_unconfined_ops = {
 };
 #endif /* CONFIG_SECURITY_SMACK_BRINGUP */
 
+#ifdef CONFIG_AUDIT
 /**
  * smk_read_logging - read() for /smack/logging
  * @filp: file pointer, not actually used
@@ -2190,6 +2193,7 @@  static const struct file_operations smk_logging_ops = {
 	.write		= smk_write_logging,
 	.llseek		= default_llseek,
 };
+#endif /* CONFIG_AUDIT */
 
 /*
  * Seq_file read operations for /smack/load-self
@@ -2876,8 +2880,10 @@  static int smk_fill_super(struct super_block *sb, struct fs_context *fc)
 			"netlabel", &smk_net4addr_ops, S_IRUGO|S_IWUSR},
 		[SMK_ONLYCAP] = {
 			"onlycap", &smk_onlycap_ops, S_IRUGO|S_IWUSR},
+#ifdef CONFIG_AUDIT
 		[SMK_LOGGING] = {
 			"logging", &smk_logging_ops, S_IRUGO|S_IWUSR},
+#endif /* CONFIG_AUDIT */
 		[SMK_LOAD_SELF] = {
 			"load-self", &smk_load_self_ops, S_IRUGO|S_IWUGO},
 		[SMK_ACCESSES] = {