* [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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox