This is a test repository.
Revisión | a8772fad0172aeae339144598b809fd8d4823331 (tree) |
---|---|
Tiempo | 2020-01-02 12:53:49 |
Autor | Tetsuo Handa <penguin-kernel@I-lo...> |
Commiter | Tetsuo Handa |
tomoyo: Use atomic_t for statistics counter
syzbot is reporting that there is a race at tomoyo_stat_update() [1].
Although it is acceptable to fail to track exact number of times policy
was updated, convert to atomic_t because this is not a hot path.
[1] https://syzkaller.appspot.com/bug?id=a4d7b973972eeed410596e6604580e0133b0fc04
Reported-by: syzbot <syzbot+efea72d4a0a1d03596cd@syzkaller.appspotmail.com>
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
@@ -2322,9 +2322,9 @@ static const char * const tomoyo_memory_headers[TOMOYO_MAX_MEMORY_STAT] = { | ||
2322 | 2322 | [TOMOYO_MEMORY_QUERY] = "query message:", |
2323 | 2323 | }; |
2324 | 2324 | |
2325 | -/* Timestamp counter for last updated. */ | |
2326 | -static unsigned int tomoyo_stat_updated[TOMOYO_MAX_POLICY_STAT]; | |
2327 | 2325 | /* Counter for number of updates. */ |
2326 | +static atomic_t tomoyo_stat_updated[TOMOYO_MAX_POLICY_STAT]; | |
2327 | +/* Timestamp counter for last updated. */ | |
2328 | 2328 | static time64_t tomoyo_stat_modified[TOMOYO_MAX_POLICY_STAT]; |
2329 | 2329 | |
2330 | 2330 | /** |
@@ -2336,10 +2336,7 @@ static time64_t tomoyo_stat_modified[TOMOYO_MAX_POLICY_STAT]; | ||
2336 | 2336 | */ |
2337 | 2337 | void tomoyo_update_stat(const u8 index) |
2338 | 2338 | { |
2339 | - /* | |
2340 | - * I don't use atomic operations because race condition is not fatal. | |
2341 | - */ | |
2342 | - tomoyo_stat_updated[index]++; | |
2339 | + atomic_inc(&tomoyo_stat_updated[index]); | |
2343 | 2340 | tomoyo_stat_modified[index] = ktime_get_real_seconds(); |
2344 | 2341 | } |
2345 | 2342 |
@@ -2360,7 +2357,7 @@ static void tomoyo_read_stat(struct tomoyo_io_buffer *head) | ||
2360 | 2357 | for (i = 0; i < TOMOYO_MAX_POLICY_STAT; i++) { |
2361 | 2358 | tomoyo_io_printf(head, "Policy %-30s %10u", |
2362 | 2359 | tomoyo_policy_headers[i], |
2363 | - tomoyo_stat_updated[i]); | |
2360 | + atomic_read(&tomoyo_stat_updated[i])); | |
2364 | 2361 | if (tomoyo_stat_modified[i]) { |
2365 | 2362 | struct tomoyo_time stamp; |
2366 | 2363 |