ubsan: Fix objtool UACCESS warns
clang-14 allyesconfig gives: vmlinux.o: warning: objtool: emulator_cmpxchg_emulated+0x705: call to __ubsan_handle_load_invalid_value() with UACCESS enabled vmlinux.o: warning: objtool: paging64_update_accessed_dirty_bits+0x39e: call to __ubsan_handle_load_invalid_value() with UACCESS enabled vmlinux.o: warning: objtool: paging32_update_accessed_dirty_bits+0x390: call to __ubsan_handle_load_invalid_value() with UACCESS enabled vmlinux.o: warning: objtool: ept_update_accessed_dirty_bits+0x43f: call to __ubsan_handle_load_invalid_value() with UACCESS enabled Add the required eflags save/restore and whitelist the thing. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Ingo Molnar <mingo@kernel.org> Tested-by: Tony Lindgren <tony@atomide.com> Tested-by: Ulf Hansson <ulf.hansson@linaro.org> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Frederic Weisbecker <frederic@kernel.org> Link: https://lore.kernel.org/r/20230112195541.906007455@infradead.org
This commit is contained in:
parent
ca502fc6d9
commit
f18b0d7ee8
@ -339,9 +339,10 @@ void __ubsan_handle_load_invalid_value(void *_data, void *val)
|
|||||||
{
|
{
|
||||||
struct invalid_value_data *data = _data;
|
struct invalid_value_data *data = _data;
|
||||||
char val_str[VALUE_LENGTH];
|
char val_str[VALUE_LENGTH];
|
||||||
|
unsigned long ua_flags = user_access_save();
|
||||||
|
|
||||||
if (suppress_report(&data->location))
|
if (suppress_report(&data->location))
|
||||||
return;
|
goto out;
|
||||||
|
|
||||||
ubsan_prologue(&data->location, "invalid-load");
|
ubsan_prologue(&data->location, "invalid-load");
|
||||||
|
|
||||||
@ -351,6 +352,8 @@ void __ubsan_handle_load_invalid_value(void *_data, void *val)
|
|||||||
val_str, data->type->type_name);
|
val_str, data->type->type_name);
|
||||||
|
|
||||||
ubsan_epilogue();
|
ubsan_epilogue();
|
||||||
|
out:
|
||||||
|
user_access_restore(ua_flags);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(__ubsan_handle_load_invalid_value);
|
EXPORT_SYMBOL(__ubsan_handle_load_invalid_value);
|
||||||
|
|
||||||
|
@ -1216,6 +1216,7 @@ static const char *uaccess_safe_builtin[] = {
|
|||||||
"__ubsan_handle_type_mismatch",
|
"__ubsan_handle_type_mismatch",
|
||||||
"__ubsan_handle_type_mismatch_v1",
|
"__ubsan_handle_type_mismatch_v1",
|
||||||
"__ubsan_handle_shift_out_of_bounds",
|
"__ubsan_handle_shift_out_of_bounds",
|
||||||
|
"__ubsan_handle_load_invalid_value",
|
||||||
/* misc */
|
/* misc */
|
||||||
"csum_partial_copy_generic",
|
"csum_partial_copy_generic",
|
||||||
"copy_mc_fragile",
|
"copy_mc_fragile",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user