stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] arm64: kasan: fix page_alloc tagging with DEBUG_VIRTUAL
@ 2021-03-08 16:10 Andrey Konovalov
  2021-03-08 18:42 ` Catalin Marinas
  2021-03-09 15:38 ` Will Deacon
  0 siblings, 2 replies; 3+ messages in thread
From: Andrey Konovalov @ 2021-03-08 16:10 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon
  Cc: Andrew Morton, Vincenzo Frascino, Dmitry Vyukov, Andrey Ryabinin,
	Alexander Potapenko, Marco Elver, Peter Collingbourne,
	Evgenii Stepanov, Branislav Rankov, Kevin Brodsky, kasan-dev,
	linux-arm-kernel, linux-mm, linux-kernel, Andrey Konovalov,
	stable

When CONFIG_DEBUG_VIRTUAL is enabled, the default page_to_virt() macro
implementation from include/linux/mm.h is used. That definition doesn't
account for KASAN tags, which leads to no tags on page_alloc allocations.

Provide an arm64-specific definition for page_to_virt() when
CONFIG_DEBUG_VIRTUAL is enabled that takes care of KASAN tags.

Fixes: 2813b9c02962 ("kasan, mm, arm64: tag non slab memory allocated via pagealloc")
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
---
 arch/arm64/include/asm/memory.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h
index c759faf7a1ff..0aabc3be9a75 100644
--- a/arch/arm64/include/asm/memory.h
+++ b/arch/arm64/include/asm/memory.h
@@ -328,6 +328,11 @@ static inline void *phys_to_virt(phys_addr_t x)
 #define ARCH_PFN_OFFSET		((unsigned long)PHYS_PFN_OFFSET)
 
 #if !defined(CONFIG_SPARSEMEM_VMEMMAP) || defined(CONFIG_DEBUG_VIRTUAL)
+#define page_to_virt(x)	({						\
+	__typeof__(x) __page = x;					\
+	void *__addr = __va(page_to_phys(__page));			\
+	(void *)__tag_set((const void *)__addr, page_kasan_tag(__page));\
+})
 #define virt_to_page(x)		pfn_to_page(virt_to_pfn(x))
 #else
 #define page_to_virt(x)	({						\
-- 
2.30.1.766.gb4fecdf3b7-goog


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] arm64: kasan: fix page_alloc tagging with DEBUG_VIRTUAL
  2021-03-08 16:10 [PATCH] arm64: kasan: fix page_alloc tagging with DEBUG_VIRTUAL Andrey Konovalov
@ 2021-03-08 18:42 ` Catalin Marinas
  2021-03-09 15:38 ` Will Deacon
  1 sibling, 0 replies; 3+ messages in thread
From: Catalin Marinas @ 2021-03-08 18:42 UTC (permalink / raw)
  To: Andrey Konovalov
  Cc: Will Deacon, Andrew Morton, Vincenzo Frascino, Dmitry Vyukov,
	Andrey Ryabinin, Alexander Potapenko, Marco Elver,
	Peter Collingbourne, Evgenii Stepanov, Branislav Rankov,
	Kevin Brodsky, kasan-dev, linux-arm-kernel, linux-mm,
	linux-kernel, stable

On Mon, Mar 08, 2021 at 05:10:23PM +0100, Andrey Konovalov wrote:
> When CONFIG_DEBUG_VIRTUAL is enabled, the default page_to_virt() macro
> implementation from include/linux/mm.h is used. That definition doesn't
> account for KASAN tags, which leads to no tags on page_alloc allocations.
> 
> Provide an arm64-specific definition for page_to_virt() when
> CONFIG_DEBUG_VIRTUAL is enabled that takes care of KASAN tags.
> 
> Fixes: 2813b9c02962 ("kasan, mm, arm64: tag non slab memory allocated via pagealloc")
> Cc: <stable@vger.kernel.org>
> Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
> ---
>  arch/arm64/include/asm/memory.h | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h
> index c759faf7a1ff..0aabc3be9a75 100644
> --- a/arch/arm64/include/asm/memory.h
> +++ b/arch/arm64/include/asm/memory.h
> @@ -328,6 +328,11 @@ static inline void *phys_to_virt(phys_addr_t x)
>  #define ARCH_PFN_OFFSET		((unsigned long)PHYS_PFN_OFFSET)
>  
>  #if !defined(CONFIG_SPARSEMEM_VMEMMAP) || defined(CONFIG_DEBUG_VIRTUAL)
> +#define page_to_virt(x)	({						\
> +	__typeof__(x) __page = x;					\
> +	void *__addr = __va(page_to_phys(__page));			\
> +	(void *)__tag_set((const void *)__addr, page_kasan_tag(__page));\
> +})
>  #define virt_to_page(x)		pfn_to_page(virt_to_pfn(x))

Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] arm64: kasan: fix page_alloc tagging with DEBUG_VIRTUAL
  2021-03-08 16:10 [PATCH] arm64: kasan: fix page_alloc tagging with DEBUG_VIRTUAL Andrey Konovalov
  2021-03-08 18:42 ` Catalin Marinas
@ 2021-03-09 15:38 ` Will Deacon
  1 sibling, 0 replies; 3+ messages in thread
From: Will Deacon @ 2021-03-09 15:38 UTC (permalink / raw)
  To: Catalin Marinas, Andrey Konovalov, Will Deacon
  Cc: kernel-team, Will Deacon, Branislav Rankov, Evgenii Stepanov,
	Andrey Ryabinin, linux-kernel, Marco Elver, Vincenzo Frascino,
	Alexander Potapenko, Kevin Brodsky, Dmitry Vyukov,
	linux-arm-kernel, stable, linux-mm, kasan-dev, Andrew Morton,
	Peter Collingbourne

On Mon, 8 Mar 2021 17:10:23 +0100, Andrey Konovalov wrote:
> When CONFIG_DEBUG_VIRTUAL is enabled, the default page_to_virt() macro
> implementation from include/linux/mm.h is used. That definition doesn't
> account for KASAN tags, which leads to no tags on page_alloc allocations.
> 
> Provide an arm64-specific definition for page_to_virt() when
> CONFIG_DEBUG_VIRTUAL is enabled that takes care of KASAN tags.

Applied to arm64 (for-next/fixes), thanks!

[1/1] arm64: kasan: fix page_alloc tagging with DEBUG_VIRTUAL
      https://git.kernel.org/arm64/c/86c83365ab76

Cheers,
-- 
Will

https://fixes.arm64.dev
https://next.arm64.dev
https://will.arm64.dev

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-03-09 15:39 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-08 16:10 [PATCH] arm64: kasan: fix page_alloc tagging with DEBUG_VIRTUAL Andrey Konovalov
2021-03-08 18:42 ` Catalin Marinas
2021-03-09 15:38 ` Will Deacon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).