anolis: kfence: fit is_kfence_address() to KASAN at any path
ANBZ: #28
The function is_kfence_address() convert kaddr to page without checking
kaddr because it is valid in most common cases. But when KASAN enabled,
there may be invalid kaddr, called by kasan_record_aux_stack(),
kasan_poison_shadow(), kasan_unpoison_shadow(), etc.
Fixes: 2265a18d22
("anolis: kfence: add PG_kfence to recognize kfence address in fast path")
Signed-off-by: Tianchen Ding <dtcccc@linux.alibaba.com>
Reviewed-by: Xunlei Pang <xlpang@linux.alibaba.com>
This commit is contained in:
parent
998efaf77b
commit
fc58440f83
|
@ -76,7 +76,18 @@ static __always_inline bool is_kfence_address_area(const void *addr,
|
|||
*/
|
||||
static __always_inline bool is_kfence_address(const void *addr)
|
||||
{
|
||||
#ifdef CONFIG_KASAN
|
||||
/*
|
||||
* KASAN functions such as kasan_record_aux_stack(),
|
||||
* kasan_poison_shadow(), or kasan_unpoison_shadow()
|
||||
* may give an invalid kaddr (direct mapping kernel address).
|
||||
* We must add a check here.
|
||||
*/
|
||||
return static_branch_unlikely(&kfence_once_inited) &&
|
||||
virt_addr_valid(addr) && PageKfence(virt_to_page(addr));
|
||||
#else
|
||||
return static_branch_unlikely(&kfence_once_inited) && PageKfence(virt_to_page(addr));
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue