All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] ima: limit both open-writers and ToMToU violations
@ 2025-02-19 16:21 Mimi Zohar
  2025-02-19 16:21 ` [PATCH 1/2] ima: limit the number of open-writers integrity violations Mimi Zohar
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Mimi Zohar @ 2025-02-19 16:21 UTC (permalink / raw)
  To: linux-integrity; +Cc: Mimi Zohar, roberto.sassu, Stefan Berger, Petr Vorel

Each time a file in policy, that is already opened for write, is opened
for read an open-writers integrity violation audit message is emitted
and a violation record is added to the IMA measurement list, even if an
open-writers violation has already been recorded.

Similalry each time a file in policy, that is already opened for read,
is opened for write a Time-of-Measure-Time-of-Use (ToMToU) integrity
violation audit message is emitted and a violation record is added to
the IMA measurement list, even if a ToMToU violation has already been
recorded.

Minimize the violations in the audit log and the IMA measurement list.


Mimi Zohar (2):
  ima: limit the number of open-writers integrity violations
  ima: limit the number of ToMToU integrity violations

 security/integrity/ima/ima.h      |  1 +
 security/integrity/ima/ima_main.c | 16 ++++++++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)

--
2.48.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 1/2] ima: limit the number of open-writers integrity violations
  2025-02-19 16:21 [PATCH 0/2] ima: limit both open-writers and ToMToU violations Mimi Zohar
@ 2025-02-19 16:21 ` Mimi Zohar
  2025-02-20 15:24   ` Stefan Berger
                     ` (3 more replies)
  2025-02-19 16:21 ` [PATCH 2/2] ima: limit the number of ToMToU " Mimi Zohar
  2025-02-21 16:49 ` [PATCH 0/2] ima: limit both open-writers and ToMToU violations Roberto Sassu
  2 siblings, 4 replies; 14+ messages in thread
From: Mimi Zohar @ 2025-02-19 16:21 UTC (permalink / raw)
  To: linux-integrity; +Cc: Mimi Zohar, roberto.sassu, Stefan Berger, Petr Vorel

Each time a file in policy, that is already opened for write, is opened
for read an open-writers integrity violation audit message is emitted
and a violation record is added to the IMA measurement list, even if an
open-writers violation has already been recorded.

Limit the number of open-writers integrity violations for an existing
file open for write to one.  After the existing file open for write
closes (__fput), subsequent open-writers integrity violations may occur.

Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
---
Change log v1:
- Basesd on Stefan's RFC comments, updated the patch description and code.

 security/integrity/ima/ima.h      |  1 +
 security/integrity/ima/ima_main.c | 11 +++++++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h
index a4f284bd846c..7f21568544dd 100644
--- a/security/integrity/ima/ima.h
+++ b/security/integrity/ima/ima.h
@@ -182,6 +182,7 @@ struct ima_kexec_hdr {
 #define IMA_CHANGE_ATTR		2
 #define IMA_DIGSIG		3
 #define IMA_MUST_MEASURE	4
+#define IMA_LIMIT_VIOLATIONS	5

 /* IMA integrity metadata associated with an inode */
 struct ima_iint_cache {
diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
index 28b8b0db6f9b..cde3ae55d654 100644
--- a/security/integrity/ima/ima_main.c
+++ b/security/integrity/ima/ima_main.c
@@ -137,8 +137,13 @@ static void ima_rdwr_violation_check(struct file *file,
 	} else {
 		if (must_measure)
 			set_bit(IMA_MUST_MEASURE, &iint->atomic_flags);
-		if (inode_is_open_for_write(inode) && must_measure)
-			send_writers = true;
+
+		/* Limit number of open_writers violations */
+		if (inode_is_open_for_write(inode) && must_measure) {
+			if (!test_and_set_bit(IMA_LIMIT_VIOLATIONS,
+					      &iint->atomic_flags))
+				send_writers = true;
+		}
 	}

 	if (!send_tomtou && !send_writers)
@@ -167,6 +172,8 @@ static void ima_check_last_writer(struct ima_iint_cache *iint,
 	if (atomic_read(&inode->i_writecount) == 1) {
 		struct kstat stat;

+		clear_bit(IMA_LIMIT_VIOLATIONS, &iint->atomic_flags);
+
 		update = test_and_clear_bit(IMA_UPDATE_XATTR,
 					    &iint->atomic_flags);
 		if ((iint->flags & IMA_NEW_FILE) ||
--
2.48.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 2/2] ima: limit the number of ToMToU integrity violations
  2025-02-19 16:21 [PATCH 0/2] ima: limit both open-writers and ToMToU violations Mimi Zohar
  2025-02-19 16:21 ` [PATCH 1/2] ima: limit the number of open-writers integrity violations Mimi Zohar
@ 2025-02-19 16:21 ` Mimi Zohar
  2025-02-20 15:24   ` Stefan Berger
                     ` (3 more replies)
  2025-02-21 16:49 ` [PATCH 0/2] ima: limit both open-writers and ToMToU violations Roberto Sassu
  2 siblings, 4 replies; 14+ messages in thread
From: Mimi Zohar @ 2025-02-19 16:21 UTC (permalink / raw)
  To: linux-integrity; +Cc: Mimi Zohar, roberto.sassu, Stefan Berger, Petr Vorel

Each time a file in policy, that is already opened for read, is opened
for write a Time-of-Measure-Time-of-Use (ToMToU) integrity violation
audit message is emitted and a violation record is added to the IMA
measurement list, even if a ToMToU violation has already been recorded.

Limit the number of ToMToU integrity violations for an existing file
open for read.

Note: The IMA_MUST_MEASURE atomic flag must be set from the reader side
based on policy.  This may result in a per open reader additional ToMToU
violation.

Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
---
 security/integrity/ima/ima_main.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
index cde3ae55d654..f1671799a11b 100644
--- a/security/integrity/ima/ima_main.c
+++ b/security/integrity/ima/ima_main.c
@@ -129,9 +129,10 @@ static void ima_rdwr_violation_check(struct file *file,
 		if (atomic_read(&inode->i_readcount) && IS_IMA(inode)) {
 			if (!iint)
 				iint = ima_iint_find(inode);
+
 			/* IMA_MEASURE is set from reader side */
-			if (iint && test_bit(IMA_MUST_MEASURE,
-						&iint->atomic_flags))
+			if (iint && test_and_clear_bit(IMA_MUST_MEASURE,
+						       &iint->atomic_flags))
 				send_tomtou = true;
 		}
 	} else {
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/2] ima: limit the number of open-writers integrity violations
  2025-02-19 16:21 ` [PATCH 1/2] ima: limit the number of open-writers integrity violations Mimi Zohar
@ 2025-02-20 15:24   ` Stefan Berger
  2025-02-20 18:26   ` Petr Vorel
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 14+ messages in thread
From: Stefan Berger @ 2025-02-20 15:24 UTC (permalink / raw)
  To: Mimi Zohar, linux-integrity; +Cc: roberto.sassu, Petr Vorel



On 2/19/25 11:21 AM, Mimi Zohar wrote:
> Each time a file in policy, that is already opened for write, is opened
> for read an open-writers integrity violation audit message is emitted
> and a violation record is added to the IMA measurement list, even if an
> open-writers violation has already been recorded.
> 
> Limit the number of open-writers integrity violations for an existing
> file open for write to one.  After the existing file open for write
> closes (__fput), subsequent open-writers integrity violations may occur.
> 
> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
Tested-by: Stefan Berger <stefanb@linux.ibm.com>


> ---
> Change log v1:
> - Basesd on Stefan's RFC comments, updated the patch description and code.
> 
>   security/integrity/ima/ima.h      |  1 +
>   security/integrity/ima/ima_main.c | 11 +++++++++--
>   2 files changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h
> index a4f284bd846c..7f21568544dd 100644
> --- a/security/integrity/ima/ima.h
> +++ b/security/integrity/ima/ima.h
> @@ -182,6 +182,7 @@ struct ima_kexec_hdr {
>   #define IMA_CHANGE_ATTR		2
>   #define IMA_DIGSIG		3
>   #define IMA_MUST_MEASURE	4
> +#define IMA_LIMIT_VIOLATIONS	5
> 
>   /* IMA integrity metadata associated with an inode */
>   struct ima_iint_cache {
> diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
> index 28b8b0db6f9b..cde3ae55d654 100644
> --- a/security/integrity/ima/ima_main.c
> +++ b/security/integrity/ima/ima_main.c
> @@ -137,8 +137,13 @@ static void ima_rdwr_violation_check(struct file *file,
>   	} else {
>   		if (must_measure)
>   			set_bit(IMA_MUST_MEASURE, &iint->atomic_flags);
> -		if (inode_is_open_for_write(inode) && must_measure)
> -			send_writers = true;
> +
> +		/* Limit number of open_writers violations */
> +		if (inode_is_open_for_write(inode) && must_measure) {
> +			if (!test_and_set_bit(IMA_LIMIT_VIOLATIONS,
> +					      &iint->atomic_flags))
> +				send_writers = true;
> +		}
>   	}
> 
>   	if (!send_tomtou && !send_writers)
> @@ -167,6 +172,8 @@ static void ima_check_last_writer(struct ima_iint_cache *iint,
>   	if (atomic_read(&inode->i_writecount) == 1) {
>   		struct kstat stat;
> 
> +		clear_bit(IMA_LIMIT_VIOLATIONS, &iint->atomic_flags);
> +
>   		update = test_and_clear_bit(IMA_UPDATE_XATTR,
>   					    &iint->atomic_flags);
>   		if ((iint->flags & IMA_NEW_FILE) ||
> --
> 2.48.1
> 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/2] ima: limit the number of ToMToU integrity violations
  2025-02-19 16:21 ` [PATCH 2/2] ima: limit the number of ToMToU " Mimi Zohar
@ 2025-02-20 15:24   ` Stefan Berger
  2025-02-20 18:27   ` Petr Vorel
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 14+ messages in thread
From: Stefan Berger @ 2025-02-20 15:24 UTC (permalink / raw)
  To: Mimi Zohar, linux-integrity; +Cc: roberto.sassu, Petr Vorel



On 2/19/25 11:21 AM, Mimi Zohar wrote:
> Each time a file in policy, that is already opened for read, is opened
> for write a Time-of-Measure-Time-of-Use (ToMToU) integrity violation
> audit message is emitted and a violation record is added to the IMA
> measurement list, even if a ToMToU violation has already been recorded.
> 
> Limit the number of ToMToU integrity violations for an existing file
> open for read.
> 
> Note: The IMA_MUST_MEASURE atomic flag must be set from the reader side
> based on policy.  This may result in a per open reader additional ToMToU
> violation.
> 
> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
Tested-by: Stefan Berger <stefanb@linux.ibm.com>
> ---
>   security/integrity/ima/ima_main.c | 5 +++--
>   1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
> index cde3ae55d654..f1671799a11b 100644
> --- a/security/integrity/ima/ima_main.c
> +++ b/security/integrity/ima/ima_main.c
> @@ -129,9 +129,10 @@ static void ima_rdwr_violation_check(struct file *file,
>   		if (atomic_read(&inode->i_readcount) && IS_IMA(inode)) {
>   			if (!iint)
>   				iint = ima_iint_find(inode);
> +
>   			/* IMA_MEASURE is set from reader side */
> -			if (iint && test_bit(IMA_MUST_MEASURE,
> -						&iint->atomic_flags))
> +			if (iint && test_and_clear_bit(IMA_MUST_MEASURE,
> +						       &iint->atomic_flags))
>   				send_tomtou = true;
>   		}
>   	} else {


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/2] ima: limit the number of open-writers integrity violations
  2025-02-19 16:21 ` [PATCH 1/2] ima: limit the number of open-writers integrity violations Mimi Zohar
  2025-02-20 15:24   ` Stefan Berger
@ 2025-02-20 18:26   ` Petr Vorel
  2025-02-21  8:18   ` Petr Vorel
  2025-02-21 16:56   ` Roberto Sassu
  3 siblings, 0 replies; 14+ messages in thread
From: Petr Vorel @ 2025-02-20 18:26 UTC (permalink / raw)
  To: Mimi Zohar; +Cc: linux-integrity, roberto.sassu, Stefan Berger

Hi Mimi,

> Each time a file in policy, that is already opened for write, is opened
> for read an open-writers integrity violation audit message is emitted
> and a violation record is added to the IMA measurement list, even if an
> open-writers violation has already been recorded.

> Limit the number of open-writers integrity violations for an existing
> file open for write to one.  After the existing file open for write
> closes (__fput), subsequent open-writers integrity violations may occur.

LGTM.

Reviewed-by: Petr Vorel <pvorel@suse.cz>

I also did a regression testing on LTP IMA tests on x86_64, aarch64, ppc64le.
(not testing the feature itself, just really a very basic regression testing,
therefore I do not dare to add my TBT).

Kind regards,
Petr

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/2] ima: limit the number of ToMToU integrity violations
  2025-02-19 16:21 ` [PATCH 2/2] ima: limit the number of ToMToU " Mimi Zohar
  2025-02-20 15:24   ` Stefan Berger
@ 2025-02-20 18:27   ` Petr Vorel
  2025-02-21  8:18   ` Petr Vorel
  2025-02-21 17:36   ` Roberto Sassu
  3 siblings, 0 replies; 14+ messages in thread
From: Petr Vorel @ 2025-02-20 18:27 UTC (permalink / raw)
  To: Mimi Zohar; +Cc: linux-integrity, roberto.sassu, Stefan Berger

Hi Mimi,

LGTM.
Reviewed-by: Petr Vorel <pvorel@suse.cz>

Kind regards,
Petr

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/2] ima: limit the number of open-writers integrity violations
  2025-02-19 16:21 ` [PATCH 1/2] ima: limit the number of open-writers integrity violations Mimi Zohar
  2025-02-20 15:24   ` Stefan Berger
  2025-02-20 18:26   ` Petr Vorel
@ 2025-02-21  8:18   ` Petr Vorel
  2025-02-21 16:56   ` Roberto Sassu
  3 siblings, 0 replies; 14+ messages in thread
From: Petr Vorel @ 2025-02-21  8:18 UTC (permalink / raw)
  To: Mimi Zohar; +Cc: linux-integrity, roberto.sassu, Stefan Berger

Hi Mimi,

Tested-by: Petr Vorel <pvorel@suse.cz>

Kind regards,
Petr

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/2] ima: limit the number of ToMToU integrity violations
  2025-02-19 16:21 ` [PATCH 2/2] ima: limit the number of ToMToU " Mimi Zohar
  2025-02-20 15:24   ` Stefan Berger
  2025-02-20 18:27   ` Petr Vorel
@ 2025-02-21  8:18   ` Petr Vorel
  2025-02-21 17:36   ` Roberto Sassu
  3 siblings, 0 replies; 14+ messages in thread
From: Petr Vorel @ 2025-02-21  8:18 UTC (permalink / raw)
  To: Mimi Zohar; +Cc: linux-integrity, roberto.sassu, Stefan Berger

Hi Mimi,

Tested-by: Petr Vorel <pvorel@suse.cz>

Kind regards,
Petr

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 0/2] ima: limit both open-writers and ToMToU violations
  2025-02-19 16:21 [PATCH 0/2] ima: limit both open-writers and ToMToU violations Mimi Zohar
  2025-02-19 16:21 ` [PATCH 1/2] ima: limit the number of open-writers integrity violations Mimi Zohar
  2025-02-19 16:21 ` [PATCH 2/2] ima: limit the number of ToMToU " Mimi Zohar
@ 2025-02-21 16:49 ` Roberto Sassu
  2 siblings, 0 replies; 14+ messages in thread
From: Roberto Sassu @ 2025-02-21 16:49 UTC (permalink / raw)
  To: Mimi Zohar, linux-integrity; +Cc: roberto.sassu, Stefan Berger, Petr Vorel

On Wed, 2025-02-19 at 11:21 -0500, Mimi Zohar wrote:

Hi Mimi

> Each time a file in policy, that is already opened for write, is opened
> for read an open-writers integrity violation audit message is emitted

I would put a comma after 'for read' and remove the previous ones.

> and a violation record is added to the IMA measurement list, even if an

I would stop the sentence before 'even' and start a new sentence.

IMA does not track previous violations, and emits a new one of the same
kind, even if there was one before, resulting in redundant information
being produced.

The information might not be redundant though, if process-based
credentials are added to the measurement list. In that case, more
information about the process causing the violation would be shown.

> open-writers violation has already been recorded.
> 
> Similalry each time a file in policy, that is already opened for read,

Typo.

> is opened for write a Time-of-Measure-Time-of-Use (ToMToU) integrity
> violation audit message is emitted and a violation record is added to
> the IMA measurement list, even if a ToMToU violation has already been
> recorded.
> 
> Minimize the violations in the audit log and the IMA measurement list.

I would describe more precisely how you are trying to minimize them.

Thanks

Roberto

> Mimi Zohar (2):
>   ima: limit the number of open-writers integrity violations
>   ima: limit the number of ToMToU integrity violations
> 
>  security/integrity/ima/ima.h      |  1 +
>  security/integrity/ima/ima_main.c | 16 ++++++++++++----
>  2 files changed, 13 insertions(+), 4 deletions(-)
> 
> --
> 2.48.1
> 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/2] ima: limit the number of open-writers integrity violations
  2025-02-19 16:21 ` [PATCH 1/2] ima: limit the number of open-writers integrity violations Mimi Zohar
                     ` (2 preceding siblings ...)
  2025-02-21  8:18   ` Petr Vorel
@ 2025-02-21 16:56   ` Roberto Sassu
  3 siblings, 0 replies; 14+ messages in thread
From: Roberto Sassu @ 2025-02-21 16:56 UTC (permalink / raw)
  To: Mimi Zohar, linux-integrity; +Cc: roberto.sassu, Stefan Berger, Petr Vorel

On Wed, 2025-02-19 at 11:21 -0500, Mimi Zohar wrote:
> Each time a file in policy, that is already opened for write, is opened
> for read an open-writers integrity violation audit message is emitted
> and a violation record is added to the IMA measurement list, even if an
> open-writers violation has already been recorded.
> 
> Limit the number of open-writers integrity violations for an existing
> file open for write to one.  After the existing file open for write
> closes (__fput), subsequent open-writers integrity violations may occur.

More precisely, may be emitted again.

> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
> ---
> Change log v1:
> - Basesd on Stefan's RFC comments, updated the patch description and code.

Based.

Could be also useful to have here what is changed.

>  security/integrity/ima/ima.h      |  1 +
>  security/integrity/ima/ima_main.c | 11 +++++++++--
>  2 files changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h
> index a4f284bd846c..7f21568544dd 100644
> --- a/security/integrity/ima/ima.h
> +++ b/security/integrity/ima/ima.h
> @@ -182,6 +182,7 @@ struct ima_kexec_hdr {
>  #define IMA_CHANGE_ATTR		2
>  #define IMA_DIGSIG		3
>  #define IMA_MUST_MEASURE	4
> +#define IMA_LIMIT_VIOLATIONS	5

I like to name variables in a way that it is clear what the intent is.
Thinking about it, maybe:

IMA_OPEN_WRITERS_EMITTED

Thanks

Roberto

>  /* IMA integrity metadata associated with an inode */
>  struct ima_iint_cache {
> diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
> index 28b8b0db6f9b..cde3ae55d654 100644
> --- a/security/integrity/ima/ima_main.c
> +++ b/security/integrity/ima/ima_main.c
> @@ -137,8 +137,13 @@ static void ima_rdwr_violation_check(struct file *file,
>  	} else {
>  		if (must_measure)
>  			set_bit(IMA_MUST_MEASURE, &iint->atomic_flags);
> -		if (inode_is_open_for_write(inode) && must_measure)
> -			send_writers = true;
> +
> +		/* Limit number of open_writers violations */
> +		if (inode_is_open_for_write(inode) && must_measure) {
> +			if (!test_and_set_bit(IMA_LIMIT_VIOLATIONS,
> +					      &iint->atomic_flags))
> +				send_writers = true;
> +		}
>  	}
> 
>  	if (!send_tomtou && !send_writers)
> @@ -167,6 +172,8 @@ static void ima_check_last_writer(struct ima_iint_cache *iint,
>  	if (atomic_read(&inode->i_writecount) == 1) {
>  		struct kstat stat;
> 
> +		clear_bit(IMA_LIMIT_VIOLATIONS, &iint->atomic_flags);
> +
>  		update = test_and_clear_bit(IMA_UPDATE_XATTR,
>  					    &iint->atomic_flags);
>  		if ((iint->flags & IMA_NEW_FILE) ||
> --
> 2.48.1
> 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/2] ima: limit the number of ToMToU integrity violations
  2025-02-19 16:21 ` [PATCH 2/2] ima: limit the number of ToMToU " Mimi Zohar
                     ` (2 preceding siblings ...)
  2025-02-21  8:18   ` Petr Vorel
@ 2025-02-21 17:36   ` Roberto Sassu
  2025-02-26 19:19     ` Mimi Zohar
  3 siblings, 1 reply; 14+ messages in thread
From: Roberto Sassu @ 2025-02-21 17:36 UTC (permalink / raw)
  To: Mimi Zohar, linux-integrity; +Cc: roberto.sassu, Stefan Berger, Petr Vorel

On Wed, 2025-02-19 at 11:21 -0500, Mimi Zohar wrote:
> Each time a file in policy, that is already opened for read, is opened
> for write a Time-of-Measure-Time-of-Use (ToMToU) integrity violation
> audit message is emitted and a violation record is added to the IMA
> measurement list, even if a ToMToU violation has already been recorded.
> 
> Limit the number of ToMToU integrity violations for an existing file
> open for read.
> 
> Note: The IMA_MUST_MEASURE atomic flag must be set from the reader side
> based on policy.  This may result in a per open reader additional ToMToU
> violation.

Probably the goal can be summarized as to limit emitting consecutive
ToMToU violations.

In the previous patch, we are not emitting a new open_writers violation
until all writers close the file. Here, it is a bit different, we are
not emitting an additional ToMToU violation until there is another
reader matching the policy. Maybe we should highlight this difference.

> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
> ---
>  security/integrity/ima/ima_main.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
> index cde3ae55d654..f1671799a11b 100644
> --- a/security/integrity/ima/ima_main.c
> +++ b/security/integrity/ima/ima_main.c
> @@ -129,9 +129,10 @@ static void ima_rdwr_violation_check(struct file *file,
>  		if (atomic_read(&inode->i_readcount) && IS_IMA(inode)) {
>  			if (!iint)
>  				iint = ima_iint_find(inode);
> +
>  			/* IMA_MEASURE is set from reader side */
> -			if (iint && test_bit(IMA_MUST_MEASURE,
> -						&iint->atomic_flags))
> +			if (iint && test_and_clear_bit(IMA_MUST_MEASURE,

Since IMA_MUST_MEASURE is only used for violations, what if we rename
it to:

IMA_TOMTOU_MAY_EMIT

Thanks

Roberto

> +						       &iint->atomic_flags))
>  				send_tomtou = true;
>  		}
>  	} else {


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/2] ima: limit the number of ToMToU integrity violations
  2025-02-21 17:36   ` Roberto Sassu
@ 2025-02-26 19:19     ` Mimi Zohar
  2025-02-27  8:34       ` Roberto Sassu
  0 siblings, 1 reply; 14+ messages in thread
From: Mimi Zohar @ 2025-02-26 19:19 UTC (permalink / raw)
  To: Roberto Sassu, linux-integrity; +Cc: roberto.sassu, Stefan Berger, Petr Vorel

Hi Roberto,

On Fri, 2025-02-21 at 18:36 +0100, Roberto Sassu wrote:
> On Wed, 2025-02-19 at 11:21 -0500, Mimi Zohar wrote:
> > Each time a file in policy, that is already opened for read, is opened
> > for write a Time-of-Measure-Time-of-Use (ToMToU) integrity violation
> > audit message is emitted and a violation record is added to the IMA
> > measurement list, even if a ToMToU violation has already been recorded.
> > 
> > Limit the number of ToMToU integrity violations for an existing file
> > open for read.
> > 
> > Note: The IMA_MUST_MEASURE atomic flag must be set from the reader side
> > based on policy.  This may result in a per open reader additional ToMToU
> > violation.
> 
> Probably the goal can be summarized as to limit emitting consecutive
> ToMToU violations.

Other audit messages and measurements could have been emitted, so they may not
be consecutive.

> 
> In the previous patch, we are not emitting a new open_writers violation
> until all writers close the file. Here, it is a bit different, we are
> not emitting an additional ToMToU violation until there is another
> reader matching the policy. Maybe we should highlight this difference.
> 
> > Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
> > ---
> >  security/integrity/ima/ima_main.c | 5 +++--
> >  1 file changed, 3 insertions(+), 2 deletions(-)
> > 
> > diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
> > index cde3ae55d654..f1671799a11b 100644
> > --- a/security/integrity/ima/ima_main.c
> > +++ b/security/integrity/ima/ima_main.c
> > @@ -129,9 +129,10 @@ static void ima_rdwr_violation_check(struct file *file,
> >  		if (atomic_read(&inode->i_readcount) && IS_IMA(inode)) {
> >  			if (!iint)
> >  				iint = ima_iint_find(inode);
> > +
> >  			/* IMA_MEASURE is set from reader side */
> > -			if (iint && test_bit(IMA_MUST_MEASURE,
> > -						&iint->atomic_flags))
> > +			if (iint && test_and_clear_bit(IMA_MUST_MEASURE,
> 
> Since IMA_MUST_MEASURE is only used for violations, what if we rename
> it to:
> 
> IMA_TOMTOU_MAY_EMIT

How about naming the atomic flags as IMA_MAY_EMIT_TOMTOU and
IMA_EMIT_OPENWRITERS?

Mimi

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 2/2] ima: limit the number of ToMToU integrity violations
  2025-02-26 19:19     ` Mimi Zohar
@ 2025-02-27  8:34       ` Roberto Sassu
  0 siblings, 0 replies; 14+ messages in thread
From: Roberto Sassu @ 2025-02-27  8:34 UTC (permalink / raw)
  To: Mimi Zohar, linux-integrity; +Cc: roberto.sassu, Stefan Berger, Petr Vorel

On Wed, 2025-02-26 at 14:19 -0500, Mimi Zohar wrote:
> Hi Roberto,
> 
> On Fri, 2025-02-21 at 18:36 +0100, Roberto Sassu wrote:
> > On Wed, 2025-02-19 at 11:21 -0500, Mimi Zohar wrote:
> > > Each time a file in policy, that is already opened for read, is opened
> > > for write a Time-of-Measure-Time-of-Use (ToMToU) integrity violation
> > > audit message is emitted and a violation record is added to the IMA
> > > measurement list, even if a ToMToU violation has already been recorded.
> > > 
> > > Limit the number of ToMToU integrity violations for an existing file
> > > open for read.
> > > 
> > > Note: The IMA_MUST_MEASURE atomic flag must be set from the reader side
> > > based on policy.  This may result in a per open reader additional ToMToU
> > > violation.
> > 
> > Probably the goal can be summarized as to limit emitting consecutive
> > ToMToU violations.
> 
> Other audit messages and measurements could have been emitted, so they may not
> be consecutive.

Ah, sorry, not well expressed. I meant if there is a second ToMToU
violation after the first (read -> write -> write). Not consecutive
means when there is a new measurement (more correct would be when there
is a new policy match) on the same file to be invalidated.

> > 
> > In the previous patch, we are not emitting a new open_writers violation
> > until all writers close the file. Here, it is a bit different, we are
> > not emitting an additional ToMToU violation until there is another
> > reader matching the policy. Maybe we should highlight this difference.
> > 
> > > Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
> > > ---
> > >  security/integrity/ima/ima_main.c | 5 +++--
> > >  1 file changed, 3 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
> > > index cde3ae55d654..f1671799a11b 100644
> > > --- a/security/integrity/ima/ima_main.c
> > > +++ b/security/integrity/ima/ima_main.c
> > > @@ -129,9 +129,10 @@ static void ima_rdwr_violation_check(struct file *file,
> > >  		if (atomic_read(&inode->i_readcount) && IS_IMA(inode)) {
> > >  			if (!iint)
> > >  				iint = ima_iint_find(inode);
> > > +
> > >  			/* IMA_MEASURE is set from reader side */
> > > -			if (iint && test_bit(IMA_MUST_MEASURE,
> > > -						&iint->atomic_flags))
> > > +			if (iint && test_and_clear_bit(IMA_MUST_MEASURE,
> > 
> > Since IMA_MUST_MEASURE is only used for violations, what if we rename
> > it to:
> > 
> > IMA_TOMTOU_MAY_EMIT
> 
> How about naming the atomic flags as IMA_MAY_EMIT_TOMTOU and
> IMA_EMIT_OPENWRITERS?

Yes, I like them.

Thanks

Roberto


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2025-02-27  8:36 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-19 16:21 [PATCH 0/2] ima: limit both open-writers and ToMToU violations Mimi Zohar
2025-02-19 16:21 ` [PATCH 1/2] ima: limit the number of open-writers integrity violations Mimi Zohar
2025-02-20 15:24   ` Stefan Berger
2025-02-20 18:26   ` Petr Vorel
2025-02-21  8:18   ` Petr Vorel
2025-02-21 16:56   ` Roberto Sassu
2025-02-19 16:21 ` [PATCH 2/2] ima: limit the number of ToMToU " Mimi Zohar
2025-02-20 15:24   ` Stefan Berger
2025-02-20 18:27   ` Petr Vorel
2025-02-21  8:18   ` Petr Vorel
2025-02-21 17:36   ` Roberto Sassu
2025-02-26 19:19     ` Mimi Zohar
2025-02-27  8:34       ` Roberto Sassu
2025-02-21 16:49 ` [PATCH 0/2] ima: limit both open-writers and ToMToU violations Roberto Sassu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.