Patch "tomoyo: Check exceeded quota early in tomoyo_domain_quota_is_ok()." has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    tomoyo: Check exceeded quota early in tomoyo_domain_quota_is_ok().

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     tomoyo-check-exceeded-quota-early-in-tomoyo_domain_q.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e7b5f4499f4262e74dfaaf95bd5507cfb6111ff8
Author: Dmitry Vyukov <dvyukov@xxxxxxxxxx>
Date:   Tue Dec 14 10:45:26 2021 +0100

    tomoyo: Check exceeded quota early in tomoyo_domain_quota_is_ok().
    
    [ Upstream commit 04e57a2d952bbd34bc45744e72be3eecdc344294 ]
    
    If tomoyo is used in a testing/fuzzing environment in learning mode,
    for lots of domains the quota will be exceeded and stay exceeded
    for prolonged periods of time. In such cases it's pointless (and slow)
    to walk the whole acl list again and again just to rediscover that
    the quota is exceeded. We already have the TOMOYO_DIF_QUOTA_WARNED flag
    that notes the overflow condition. Check it early to avoid the slowdown.
    
    [penguin-kernel]
    This patch causes a user visible change that the learning mode will not be
    automatically resumed after the quota is increased. To resume the learning
    mode, administrator will need to explicitly clear TOMOYO_DIF_QUOTA_WARNED
    flag after increasing the quota. But I think that this change is generally
    preferable, for administrator likely wants to optimize the acl list for
    that domain before increasing the quota, or that domain likely hits the
    quota again. Therefore, don't try to care to clear TOMOYO_DIF_QUOTA_WARNED
    flag automatically when the quota for that domain changed.
    
    Signed-off-by: Dmitry Vyukov <dvyukov@xxxxxxxxxx>
    Signed-off-by: Tetsuo Handa <penguin-kernel@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/security/tomoyo/util.c b/security/tomoyo/util.c
index eba0b3395851e..861fc6f4ebfb7 100644
--- a/security/tomoyo/util.c
+++ b/security/tomoyo/util.c
@@ -1029,6 +1029,8 @@ bool tomoyo_domain_quota_is_ok(struct tomoyo_request_info *r)
 		return false;
 	if (!domain)
 		return true;
+	if (READ_ONCE(domain->flags[TOMOYO_DIF_QUOTA_WARNED]))
+		return false;
 	list_for_each_entry_rcu(ptr, &domain->acl_info_list, list,
 				srcu_read_lock_held(&tomoyo_ss)) {
 		u16 perm;
@@ -1074,14 +1076,12 @@ bool tomoyo_domain_quota_is_ok(struct tomoyo_request_info *r)
 	if (count < tomoyo_profile(domain->ns, domain->profile)->
 	    pref[TOMOYO_PREF_MAX_LEARNING_ENTRY])
 		return true;
-	if (!domain->flags[TOMOYO_DIF_QUOTA_WARNED]) {
-		domain->flags[TOMOYO_DIF_QUOTA_WARNED] = true;
-		/* r->granted = false; */
-		tomoyo_write_log(r, "%s", tomoyo_dif[TOMOYO_DIF_QUOTA_WARNED]);
+	WRITE_ONCE(domain->flags[TOMOYO_DIF_QUOTA_WARNED], true);
+	/* r->granted = false; */
+	tomoyo_write_log(r, "%s", tomoyo_dif[TOMOYO_DIF_QUOTA_WARNED]);
 #ifndef CONFIG_SECURITY_TOMOYO_INSECURE_BUILTIN_SETTING
-		pr_warn("WARNING: Domain '%s' has too many ACLs to hold. Stopped learning mode.\n",
-			domain->domainname->name);
+	pr_warn("WARNING: Domain '%s' has too many ACLs to hold. Stopped learning mode.\n",
+		domain->domainname->name);
 #endif
-	}
 	return false;
 }



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux