Commit c9ea870c authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'tomoyo-pr-20211222' of git://git.osdn.net/gitroot/tomoyo/tomoyo-test1

Pull tomoyo fixes from Tetsuo Handa:
 "Two overhead reduction patches for testing/fuzzing environment"

* tag 'tomoyo-pr-20211222' of git://git.osdn.net/gitroot/tomoyo/tomoyo-test1:
  tomoyo: use hweight16() in tomoyo_domain_quota_is_ok()
  tomoyo: Check exceeded quota early in tomoyo_domain_quota_is_ok().
parents e19e2263 f702e110
...@@ -1051,10 +1051,11 @@ bool tomoyo_domain_quota_is_ok(struct tomoyo_request_info *r) ...@@ -1051,10 +1051,11 @@ bool tomoyo_domain_quota_is_ok(struct tomoyo_request_info *r)
return false; return false;
if (!domain) if (!domain)
return true; return true;
if (READ_ONCE(domain->flags[TOMOYO_DIF_QUOTA_WARNED]))
return false;
list_for_each_entry_rcu(ptr, &domain->acl_info_list, list, list_for_each_entry_rcu(ptr, &domain->acl_info_list, list,
srcu_read_lock_held(&tomoyo_ss)) { srcu_read_lock_held(&tomoyo_ss)) {
u16 perm; u16 perm;
u8 i;
if (ptr->is_deleted) if (ptr->is_deleted)
continue; continue;
...@@ -1065,23 +1066,23 @@ bool tomoyo_domain_quota_is_ok(struct tomoyo_request_info *r) ...@@ -1065,23 +1066,23 @@ bool tomoyo_domain_quota_is_ok(struct tomoyo_request_info *r)
*/ */
switch (ptr->type) { switch (ptr->type) {
case TOMOYO_TYPE_PATH_ACL: case TOMOYO_TYPE_PATH_ACL:
data_race(perm = container_of(ptr, struct tomoyo_path_acl, head)->perm); perm = data_race(container_of(ptr, struct tomoyo_path_acl, head)->perm);
break; break;
case TOMOYO_TYPE_PATH2_ACL: case TOMOYO_TYPE_PATH2_ACL:
data_race(perm = container_of(ptr, struct tomoyo_path2_acl, head)->perm); perm = data_race(container_of(ptr, struct tomoyo_path2_acl, head)->perm);
break; break;
case TOMOYO_TYPE_PATH_NUMBER_ACL: case TOMOYO_TYPE_PATH_NUMBER_ACL:
data_race(perm = container_of(ptr, struct tomoyo_path_number_acl, head) perm = data_race(container_of(ptr, struct tomoyo_path_number_acl, head)
->perm); ->perm);
break; break;
case TOMOYO_TYPE_MKDEV_ACL: case TOMOYO_TYPE_MKDEV_ACL:
data_race(perm = container_of(ptr, struct tomoyo_mkdev_acl, head)->perm); perm = data_race(container_of(ptr, struct tomoyo_mkdev_acl, head)->perm);
break; break;
case TOMOYO_TYPE_INET_ACL: case TOMOYO_TYPE_INET_ACL:
data_race(perm = container_of(ptr, struct tomoyo_inet_acl, head)->perm); perm = data_race(container_of(ptr, struct tomoyo_inet_acl, head)->perm);
break; break;
case TOMOYO_TYPE_UNIX_ACL: case TOMOYO_TYPE_UNIX_ACL:
data_race(perm = container_of(ptr, struct tomoyo_unix_acl, head)->perm); perm = data_race(container_of(ptr, struct tomoyo_unix_acl, head)->perm);
break; break;
case TOMOYO_TYPE_MANUAL_TASK_ACL: case TOMOYO_TYPE_MANUAL_TASK_ACL:
perm = 0; perm = 0;
...@@ -1089,21 +1090,17 @@ bool tomoyo_domain_quota_is_ok(struct tomoyo_request_info *r) ...@@ -1089,21 +1090,17 @@ bool tomoyo_domain_quota_is_ok(struct tomoyo_request_info *r)
default: default:
perm = 1; perm = 1;
} }
for (i = 0; i < 16; i++) count += hweight16(perm);
if (perm & (1 << i))
count++;
} }
if (count < tomoyo_profile(domain->ns, domain->profile)-> if (count < tomoyo_profile(domain->ns, domain->profile)->
pref[TOMOYO_PREF_MAX_LEARNING_ENTRY]) pref[TOMOYO_PREF_MAX_LEARNING_ENTRY])
return true; return true;
if (!domain->flags[TOMOYO_DIF_QUOTA_WARNED]) { WRITE_ONCE(domain->flags[TOMOYO_DIF_QUOTA_WARNED], true);
domain->flags[TOMOYO_DIF_QUOTA_WARNED] = true;
/* r->granted = false; */ /* r->granted = false; */
tomoyo_write_log(r, "%s", tomoyo_dif[TOMOYO_DIF_QUOTA_WARNED]); tomoyo_write_log(r, "%s", tomoyo_dif[TOMOYO_DIF_QUOTA_WARNED]);
#ifndef CONFIG_SECURITY_TOMOYO_INSECURE_BUILTIN_SETTING #ifndef CONFIG_SECURITY_TOMOYO_INSECURE_BUILTIN_SETTING
pr_warn("WARNING: Domain '%s' has too many ACLs to hold. Stopped learning mode.\n", pr_warn("WARNING: Domain '%s' has too many ACLs to hold. Stopped learning mode.\n",
domain->domainname->name); domain->domainname->name);
#endif #endif
}
return false; return false;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment