objtool: Documentation: document UACCESS warnings
Compiling with Clang and CONFIG_KASAN=y was exposing a few warnings: call to memset() with UACCESS enabled Document how to fix these for future travelers. Link: https://github.com/ClangBuiltLinux/linux/issues/876 Suggested-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com> Suggested-by: Matt Helsley <mhelsley@vmware.com> Suggested-by: Peter Zijlstra <peterz@infradead.org> Suggested-by: Randy Dunlap <rdunlap@infradead.org> Signed-off-by: Nick Desaulniers <ndesaulniers@google.com> Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
committed by
Ingo Molnar
parent
6f8ca67683
commit
e378fa17d3
@@ -289,6 +289,32 @@ they mean, and suggestions for how to fix them.
|
|||||||
might be corrupt due to a gcc bug. For more details, see:
|
might be corrupt due to a gcc bug. For more details, see:
|
||||||
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70646
|
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70646
|
||||||
|
|
||||||
|
9. file.o: warning: objtool: funcA() call to funcB() with UACCESS enabled
|
||||||
|
|
||||||
|
This means that an unexpected call to a non-whitelisted function exists
|
||||||
|
outside of arch-specific guards.
|
||||||
|
X86: SMAP (stac/clac): __uaccess_begin()/__uaccess_end()
|
||||||
|
ARM: PAN: uaccess_enable()/uaccess_disable()
|
||||||
|
|
||||||
|
These functions should be called to denote a minimal critical section around
|
||||||
|
access to __user variables. See also: https://lwn.net/Articles/517475/
|
||||||
|
|
||||||
|
The intention of the warning is to prevent calls to funcB() from eventually
|
||||||
|
calling schedule(), potentially leaking the AC flags state, and not
|
||||||
|
restoring them correctly.
|
||||||
|
|
||||||
|
It also helps verify that there are no unexpected calls to funcB() which may
|
||||||
|
access user space pages with protections against doing so disabled.
|
||||||
|
|
||||||
|
To fix, either:
|
||||||
|
1) remove explicit calls to funcB() from funcA().
|
||||||
|
2) add the correct guards before and after calls to low level functions like
|
||||||
|
__get_user_size()/__put_user_size().
|
||||||
|
3) add funcB to uaccess_safe_builtin whitelist in tools/objtool/check.c, if
|
||||||
|
funcB obviously does not call schedule(), and is marked notrace (since
|
||||||
|
function tracing inserts additional calls, which is not obvious from the
|
||||||
|
sources).
|
||||||
|
|
||||||
|
|
||||||
If the error doesn't seem to make sense, it could be a bug in objtool.
|
If the error doesn't seem to make sense, it could be a bug in objtool.
|
||||||
Feel free to ask the objtool maintainer for help.
|
Feel free to ask the objtool maintainer for help.
|
||||||
|
Reference in New Issue
Block a user