mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-06 00:39:48 +00:00
kcsan: Refactor passing watchpoint/other_info
The `watchpoint_idx` argument to kcsan_report() isn't meaningful for races which were not detected by a watchpoint, and it would be clearer if callers passed the other_info directly so that a NULL value can be passed in this case. Given that callers manipulate their watchpoints before passing the index into kcsan_report_*(), and given we index the `other_infos` array using this before we sanity-check it, the subsequent sanity check isn't all that useful. Let's remove the `watchpoint_idx` sanity check, and move the job of finding the `other_info` out of kcsan_report(). Other than the removal of the check, there should be no functional change as a result of this patch. Signed-off-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Marco Elver <elver@google.com> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
This commit is contained in:
parent
793c2579be
commit
95f7524d7f
1 changed files with 4 additions and 9 deletions
|
@ -600,7 +600,7 @@ static noinline bool prepare_report(unsigned long *flags,
|
|||
|
||||
static void kcsan_report(const volatile void *ptr, size_t size, int access_type,
|
||||
enum kcsan_value_change value_change,
|
||||
enum kcsan_report_type type, int watchpoint_idx)
|
||||
enum kcsan_report_type type, struct other_info *other_info)
|
||||
{
|
||||
unsigned long flags = 0;
|
||||
const struct access_info ai = {
|
||||
|
@ -610,12 +610,8 @@ static void kcsan_report(const volatile void *ptr, size_t size, int access_type,
|
|||
.task_pid = in_task() ? task_pid_nr(current) : -1,
|
||||
.cpu_id = raw_smp_processor_id()
|
||||
};
|
||||
struct other_info *other_info = type == KCSAN_REPORT_RACE_UNKNOWN_ORIGIN
|
||||
? NULL : &other_infos[watchpoint_idx];
|
||||
|
||||
kcsan_disable_current();
|
||||
if (WARN_ON(watchpoint_idx < 0 || watchpoint_idx >= ARRAY_SIZE(other_infos)))
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Because we may generate reports when we're in scheduler code, the use
|
||||
|
@ -642,7 +638,6 @@ static void kcsan_report(const volatile void *ptr, size_t size, int access_type,
|
|||
}
|
||||
|
||||
lockdep_on();
|
||||
out:
|
||||
kcsan_enable_current();
|
||||
}
|
||||
|
||||
|
@ -650,18 +645,18 @@ void kcsan_report_set_info(const volatile void *ptr, size_t size, int access_typ
|
|||
int watchpoint_idx)
|
||||
{
|
||||
kcsan_report(ptr, size, access_type, KCSAN_VALUE_CHANGE_MAYBE,
|
||||
KCSAN_REPORT_CONSUMED_WATCHPOINT, watchpoint_idx);
|
||||
KCSAN_REPORT_CONSUMED_WATCHPOINT, &other_infos[watchpoint_idx]);
|
||||
}
|
||||
|
||||
void kcsan_report_known_origin(const volatile void *ptr, size_t size, int access_type,
|
||||
enum kcsan_value_change value_change, int watchpoint_idx)
|
||||
{
|
||||
kcsan_report(ptr, size, access_type, value_change,
|
||||
KCSAN_REPORT_RACE_SIGNAL, watchpoint_idx);
|
||||
KCSAN_REPORT_RACE_SIGNAL, &other_infos[watchpoint_idx]);
|
||||
}
|
||||
|
||||
void kcsan_report_unknown_origin(const volatile void *ptr, size_t size, int access_type)
|
||||
{
|
||||
kcsan_report(ptr, size, access_type, KCSAN_VALUE_CHANGE_TRUE,
|
||||
KCSAN_REPORT_RACE_UNKNOWN_ORIGIN, 0);
|
||||
KCSAN_REPORT_RACE_UNKNOWN_ORIGIN, NULL);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue