Message ID | tencent_E910110547D287B13FEDB6E161D8874E6E06@qq.com |
---|---|
State | New |
Headers | show |
Series | x86/efi: mark racy access on efi_rts_work.efi_rts_id | expand |
On Sat, 27 Apr 2024 at 07:28, linke li <lilinke99@qq.com> wrote: > > In efi_crash_gracefully_on_page_fault(), efi_rts_work.efi_rts_id can by > changed by other thread from the comment. Mark possible data race on > efi_rts_work.efi_rts_id as benign using READ_ONCE. > > This patch is aimed at reducing the number of benign races reported by > KCSAN in order to focus future debugging effort on harmful races. > > Signed-off-by: linke li <lilinke99@qq.com> > --- > arch/x86/platform/efi/quirks.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/x86/platform/efi/quirks.c b/arch/x86/platform/efi/quirks.c > index f0cc00032751..4acb81700caf 100644 > --- a/arch/x86/platform/efi/quirks.c > +++ b/arch/x86/platform/efi/quirks.c > @@ -751,7 +751,7 @@ void efi_crash_gracefully_on_page_fault(unsigned long phys_addr) > * because this case occurs *very* rarely and hence could be improved > * on a need by basis. > */ > - if (efi_rts_work.efi_rts_id == EFI_RESET_SYSTEM) { > + if (READ_ONCE(efi_rts_work.efi_rts_id) == EFI_RESET_SYSTEM) { > pr_info("efi_reset_system() buggy! Reboot through BIOS\n"); > machine_real_restart(MRR_BIOS); > return; Why is this the only reference that needs an annotation?
> Why is this the only reference that needs an annotation?
In the function efi_runtime_services_init(), the if check on
efi_rts_work.efi_rts_id in line 728 uses READ_ONCE(), and the comment
explains that this is to reduce reports from KTSAN.
I propose that the check in line 754 undergoes a similar treatment for
consistency and to potentially reduce sanitizer reports.
Thank you.
diff --git a/arch/x86/platform/efi/quirks.c b/arch/x86/platform/efi/quirks.c index f0cc00032751..4acb81700caf 100644 --- a/arch/x86/platform/efi/quirks.c +++ b/arch/x86/platform/efi/quirks.c @@ -751,7 +751,7 @@ void efi_crash_gracefully_on_page_fault(unsigned long phys_addr) * because this case occurs *very* rarely and hence could be improved * on a need by basis. */ - if (efi_rts_work.efi_rts_id == EFI_RESET_SYSTEM) { + if (READ_ONCE(efi_rts_work.efi_rts_id) == EFI_RESET_SYSTEM) { pr_info("efi_reset_system() buggy! Reboot through BIOS\n"); machine_real_restart(MRR_BIOS); return;
In efi_crash_gracefully_on_page_fault(), efi_rts_work.efi_rts_id can by changed by other thread from the comment. Mark possible data race on efi_rts_work.efi_rts_id as benign using READ_ONCE. This patch is aimed at reducing the number of benign races reported by KCSAN in order to focus future debugging effort on harmful races. Signed-off-by: linke li <lilinke99@qq.com> --- arch/x86/platform/efi/quirks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)