forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
kcsan: Rework atomic.h into permissive.h
Rework atomic.h into permissive.h to better reflect its purpose, and introduce kcsan_ignore_address() and kcsan_ignore_data_race(). Introduce CONFIG_KCSAN_PERMISSIVE and update the stub functions in preparation for subsequent changes. As before, developers who choose to use KCSAN in "strict" mode will see all data races and are not affected. Furthermore, by relying on the value-change filter logic for kcsan_ignore_data_race(), even if the permissive rules are enabled, the opt-outs in report.c:skip_report() override them (such as for RCU-related functions by default). The option CONFIG_KCSAN_PERMISSIVE is disabled by default, so that the documented default behaviour of KCSAN does not change. Instead, like CONFIG_KCSAN_IGNORE_ATOMICS, the option needs to be explicitly opted in. Signed-off-by: Marco Elver <[email protected]> Acked-by: Mark Rutland <[email protected]> Signed-off-by: Paul E. McKenney <[email protected]>
- Loading branch information
1 parent
08cac60
commit 49f72d5
Showing
5 changed files
with
89 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
/* | ||
* Special rules for ignoring entire classes of data-racy memory accesses. None | ||
* of the rules here imply that such data races are generally safe! | ||
* | ||
* All rules in this file can be configured via CONFIG_KCSAN_PERMISSIVE. Keep | ||
* them separate from core code to make it easier to audit. | ||
* | ||
* Copyright (C) 2019, Google LLC. | ||
*/ | ||
|
||
#ifndef _KERNEL_KCSAN_PERMISSIVE_H | ||
#define _KERNEL_KCSAN_PERMISSIVE_H | ||
|
||
#include <linux/types.h> | ||
|
||
/* | ||
* Access ignore rules based on address. | ||
*/ | ||
static __always_inline bool kcsan_ignore_address(const volatile void *ptr) | ||
{ | ||
if (!IS_ENABLED(CONFIG_KCSAN_PERMISSIVE)) | ||
return false; | ||
|
||
return false; | ||
} | ||
|
||
/* | ||
* Data race ignore rules based on access type and value change patterns. | ||
*/ | ||
static bool | ||
kcsan_ignore_data_race(size_t size, int type, u64 old, u64 new, u64 diff) | ||
{ | ||
if (!IS_ENABLED(CONFIG_KCSAN_PERMISSIVE)) | ||
return false; | ||
|
||
/* | ||
* Rules here are only for plain read accesses, so that we still report | ||
* data races between plain read-write accesses. | ||
*/ | ||
if (type || size > sizeof(long)) | ||
return false; | ||
|
||
return false; | ||
} | ||
|
||
#endif /* _KERNEL_KCSAN_PERMISSIVE_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters