From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: ARC-Seal: i=1; a=rsa-sha256; t=1525800083; cv=none; d=google.com; s=arc-20160816; b=FbCpSTznz9gIDkeAtByYqTdl3lv4PDvTlIwsdf7QIHXCNHuFZiJrX0Jrmzm2tKxc7n 5A/2jiQIPSlbU9LIi8qVfjbaoU+dC9kttSuhQFPXiz4vnoBIyAww10CypZ+dFLGHBizE Cgwbc28cohDAX3fHPVuOj86te2wHOj1+rpw0IHEJfWhLm2aMxUJezhQVwI9bABAp3WRv BM8CcqNaZpNsblJYabBO8LNm8TgcOnF9U2Q7vTm9QKsONw7LMzc9SMwjXb4t4JcLxX42 vyrELu+Uz7nZbhvRCSL+yDcm69xqonhd9+xC3BhtCtUme20imHldxsFoNg2h9zh9PN0h 6wEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=QmNrLV2ouq37rJeTa4aJrb/A4HzlLl64fsXLaFH/79U=; b=Oz634Y7hKfSUebwAlv9nJQX3+5hJA9P72HzXJVnvDzvrVzPAMDN/FbyZCQLb2CqXbl fRAaTlN3dCc48Q/ZtQQHDqCo9ZmE2LWATjliLTJ0igg7wHFEFnYQ7dSLRguwiG54IqqY 1wd9ZnSN8Tn8yReSeEivr8CfsHSI7ePqnAvmAcnvL9mzeNiXcPIGC5QhalqveuN03Zm4 4s23nGqFxXxTZG/qzdAD/cDuj8ez7GqomXQIwWG7f0RjvLpnDK6MYYnj8O6/DiC4zO2Z 7UznmnfP+bF4PPAOvI+EtfZ+KH8GV3Q7Vfny1cdoUYfBtT6DxMZAC1VzS7ll76cZlvKR qCYQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=qcgIx79D; spf=pass (google.com: domain of andreyknvl@google.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=andreyknvl@google.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=qcgIx79D; spf=pass (google.com: domain of andreyknvl@google.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=andreyknvl@google.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com X-Google-Smtp-Source: AB8JxZrE0Zvje53ekCiQ5091B1wopM1Hl9R4HO51zbca6GFvC0pbfWGM3M9JPHV9QhEjxLxu4c/plA== From: Andrey Konovalov To: Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Jonathan Corbet , Catalin Marinas , Will Deacon , Christopher Li , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Andrew Morton , Masahiro Yamada , Michal Marek , Andrey Konovalov , Mark Rutland , Nick Desaulniers , Yury Norov , Marc Zyngier , Kristina Martsenko , Suzuki K Poulose , Punit Agrawal , Dave Martin , Ard Biesheuvel , James Morse , Michael Weiser , Julien Thierry , Tyler Baicar , "Eric W . Biederman" , Thomas Gleixner , Ingo Molnar , Kees Cook , Sandipan Das , David Woodhouse , Paul Lawrence , Herbert Xu , Josh Poimboeuf , Geert Uytterhoeven , Tom Lendacky , Arnd Bergmann , Dan Williams , Michal Hocko , Jan Kara , Ross Zwisler , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Matthew Wilcox , "Kirill A . Shutemov" , Souptick Joarder , Hugh Dickins , Davidlohr Bueso , Greg Kroah-Hartman , Philippe Ombredanne , Kate Stewart , Laura Abbott , Boris Brezillon , Vlastimil Babka , Pintu Agarwal , Doug Berger , Anshuman Khandual , Mike Rapoport , Mel Gorman , Pavel Tatashin , Tetsuo Handa , kasan-dev@googlegroups.com, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sparse@vger.kernel.org, linux-mm@kvack.org, linux-kbuild@vger.kernel.org Cc: Kostya Serebryany , Evgeniy Stepanov , Lee Smith , Ramana Radhakrishnan , Jacob Bramley , Ruben Ayrapetyan , Kees Cook , Jann Horn , Mark Brand , Chintan Pandya Subject: [PATCH v1 06/16] khwasan, arm64: untag virt address in __kimg_to_phys Date: Tue, 8 May 2018 19:20:52 +0200 Message-Id: <82d6efa1879a9ab0f0c35d7251284f403c3ac82a.1525798754.git.andreyknvl@google.com> X-Mailer: git-send-email 2.17.0.441.gb46fe60e1d-goog In-Reply-To: References: In-Reply-To: References: X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1599917347782001628?= X-GMAIL-MSGID: =?utf-8?q?1599917347782001628?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: __kimg_to_phys (which is used by virt_to_phys) assumes that the top byte of the address is 0xff, which isn't always the case with KHWASAN enabled. The solution is to reset the tag in __kimg_to_phys. __lm_to_phys doesn't require any fixups, as it zeroes out the top byte with the current implementation. Signed-off-by: Andrey Konovalov --- arch/arm64/include/asm/memory.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index 6d084431b7f7..f206273469b5 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -92,6 +92,12 @@ #define KASAN_THREAD_SHIFT 0 #endif +#ifdef CONFIG_KASAN_HW +#define KASAN_TAG_SHIFTED(tag) ((unsigned long)(tag) << 56) +#define KASAN_SET_TAG(addr, tag) (((addr) & ~KASAN_TAG_SHIFTED(0xff)) | \ + KASAN_TAG_SHIFTED(tag)) +#endif + #define MIN_THREAD_SHIFT (14 + KASAN_THREAD_SHIFT) /* @@ -225,7 +231,12 @@ static inline unsigned long kaslr_offset(void) #define __is_lm_address(addr) (!!((addr) & BIT(VA_BITS - 1))) #define __lm_to_phys(addr) (((addr) & ~PAGE_OFFSET) + PHYS_OFFSET) + +#ifdef CONFIG_KASAN_HW +#define __kimg_to_phys(addr) (KASAN_SET_TAG((addr), 0xff) - kimage_voffset) +#else #define __kimg_to_phys(addr) ((addr) - kimage_voffset) +#endif #define __virt_to_phys_nodebug(x) ({ \ phys_addr_t __x = (phys_addr_t)(x); \ -- 2.17.0.441.gb46fe60e1d-goog