diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2021-02-22 03:52:06 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2021-02-22 03:52:06 +0300 |
commit | e210761fb3ba172ecb44b717711af1d1b5d27cbf (patch) | |
tree | 3222817e7b42358746ecf8ee215383787e016f48 /security/tomoyo/network.c | |
parent | d99676af540c2dc829999928fb81c58c80a1dce4 (diff) | |
parent | 9c83465f3245c2faa82ffeb7016f40f02bfaa0ad (diff) | |
download | linux-e210761fb3ba172ecb44b717711af1d1b5d27cbf.tar.xz |
Merge tag 'tomoyo-pr-20210215' of git://git.osdn.net/gitroot/tomoyo/tomoyo-test1
Pull tomoyo updates from Tetsuo Handa:
"Detect kernel thread correctly, and ignore harmless data race"
* tag 'tomoyo-pr-20210215' of git://git.osdn.net/gitroot/tomoyo/tomoyo-test1:
tomoyo: recognize kernel threads correctly
tomoyo: ignore data race while checking quota
Diffstat (limited to 'security/tomoyo/network.c')
-rw-r--r-- | security/tomoyo/network.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/security/tomoyo/network.c b/security/tomoyo/network.c index f9ff121d7e1e..478f757ff843 100644 --- a/security/tomoyo/network.c +++ b/security/tomoyo/network.c @@ -233,14 +233,14 @@ static bool tomoyo_merge_inet_acl(struct tomoyo_acl_info *a, { u8 * const a_perm = &container_of(a, struct tomoyo_inet_acl, head)->perm; - u8 perm = *a_perm; + u8 perm = READ_ONCE(*a_perm); const u8 b_perm = container_of(b, struct tomoyo_inet_acl, head)->perm; if (is_delete) perm &= ~b_perm; else perm |= b_perm; - *a_perm = perm; + WRITE_ONCE(*a_perm, perm); return !perm; } @@ -259,14 +259,14 @@ static bool tomoyo_merge_unix_acl(struct tomoyo_acl_info *a, { u8 * const a_perm = &container_of(a, struct tomoyo_unix_acl, head)->perm; - u8 perm = *a_perm; + u8 perm = READ_ONCE(*a_perm); const u8 b_perm = container_of(b, struct tomoyo_unix_acl, head)->perm; if (is_delete) perm &= ~b_perm; else perm |= b_perm; - *a_perm = perm; + WRITE_ONCE(*a_perm, perm); return !perm; } @@ -613,7 +613,7 @@ static int tomoyo_check_unix_address(struct sockaddr *addr, static bool tomoyo_kernel_service(void) { /* Nothing to do if I am a kernel service. */ - return uaccess_kernel(); + return (current->flags & (PF_KTHREAD | PF_IO_WORKER)) == PF_KTHREAD; } /** |