Re: [PATCH] kasan: guard release_free_meta() shadow access with kasan_arch_is_ready()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 13 Feb 2024 14:39:58 +1100 Benjamin Gray <bgray@xxxxxxxxxxxxx> wrote:

> release_free_meta() accesses the shadow directly through the path
> 
>   kasan_slab_free
>     __kasan_slab_free
>       kasan_release_object_meta
>         release_free_meta
>           kasan_mem_to_shadow
> 
> There are no kasan_arch_is_ready() guards here, allowing an oops when
> the shadow is not initialized. The oops can be seen on a Power8 KVM
> guest.
> 
> This patch adds the guard to release_free_meta(), as it's the first
> level that specifically requires the shadow.
> 
> It is safe to put the guard at the start of this function, before the
> stack put: only kasan_save_free_info() can initialize the saved stack,
> which itself is guarded with kasan_arch_is_ready() by its caller
> poison_slab_object(). If the arch becomes ready before
> release_free_meta() then we will not observe KASAN_SLAB_FREE_META in the
> object's shadow, so we will not put an uninitialized stack either.
> 
> ...
>
> --- a/mm/kasan/generic.c
> +++ b/mm/kasan/generic.c
> @@ -522,6 +522,9 @@ static void release_alloc_meta(struct kasan_alloc_meta *meta)
>  
>  static void release_free_meta(const void *object, struct kasan_free_meta *meta)
>  {
> +	if (!kasan_arch_is_ready())
> +		return;
> +
>  	/* Check if free meta is valid. */
>  	if (*(u8 *)kasan_mem_to_shadow(object) != KASAN_SLAB_FREE_META)
>  		return;

I'll add
Fixes: 63b85ac56a64 ("kasan: stop leaking stack trace handles")





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux