Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1207433pxb; Fri, 22 Jan 2021 09:33:28 -0800 (PST) X-Google-Smtp-Source: ABdhPJwxLeOopzqYTXIFhR4LSzaaMjezUh3w/YQjwIY64y5gypnK5b5EuaBjHyLKRhAj+T6vkiEO X-Received: by 2002:aa7:d5d5:: with SMTP id d21mr481365eds.252.1611336807951; Fri, 22 Jan 2021 09:33:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611336807; cv=none; d=google.com; s=arc-20160816; b=DJDb6mDGkZktwTQc7dx/96lbEruXQBDqgzXduV5C6Z888NDLgWxJCXxubaqDw+SVRI HTfNK39cdb7rmpwbSYFSUrIA/BNLVCAaXzETRxBO1o4PXmS5caHVGD0HNuZEoGhsuKDI poUi92z8DUOzrylfKHEEMTBF9bHM4sQgGr7Q/zpg3LfNbmbt8GXAyEQCV0GaqkeaFdZB dgd+Hm62A/swsc5gOTBUjfLl3QAzaPtVfWhkGy9P5dM9p0dJSb+ABC5v8y292HOTZucb iXeDMyyKF+yBS1+Y/NnKGcriX7XmUGMAiM1bSxMbk6MrIcZTFeYwSL/rYLoxZaGdavRW Si2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=jU4BI0cXFTwXwBOqzna996YRc3D/cTs+LCMf1HUdhxk=; b=p4bGzE8y21Ps6eqJnKL0myL4FamSWcO5XOsPylbVEFQL5uaa2vfTpXvJdUmuXBh0/l BhG86uKftlbNuyhg5z53b0Q4opeUl7f3gmyeW5NYc1Uno2ryuI5VuprT07YmeaMmxB4O f5d/5r5k9dFPmQMhYSQYPEs6nsbGvnFAe/d++TFUA2luXabmCCXyXEqondKIFVpgLrdf tnI9sM74UR+X/mBSizPeBvcFeepVaKR4WqOaOkfBUeBcwxZYH7eIoekfy8GuEECi0stA 8KcMWblgzSYHQNvEwOiyjdmvzOfxHIV8LYheqWDDG4uIZVhPc0uuaBjhq19hQ0pc3W5G LXMA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b20si508858eju.613.2021.01.22.09.33.02; Fri, 22 Jan 2021 09:33:27 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729870AbhAVR35 (ORCPT + 99 others); Fri, 22 Jan 2021 12:29:57 -0500 Received: from foss.arm.com ([217.140.110.172]:54648 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729230AbhAVP5o (ORCPT ); Fri, 22 Jan 2021 10:57:44 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0AF53139F; Fri, 22 Jan 2021 07:56:58 -0800 (PST) Received: from e119884-lin.cambridge.arm.com (e119884-lin.cambridge.arm.com [10.1.196.72]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4147E3F719; Fri, 22 Jan 2021 07:56:56 -0800 (PST) From: Vincenzo Frascino To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com Cc: Vincenzo Frascino , Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Leon Romanovsky , Andrey Konovalov , Catalin Marinas , Will Deacon , Mark Rutland , "Paul E . McKenney" , Naresh Kamboju Subject: [PATCH v4 1/3] arm64: Improve kernel address detection of __is_lm_address() Date: Fri, 22 Jan 2021 15:56:40 +0000 Message-Id: <20210122155642.23187-2-vincenzo.frascino@arm.com> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210122155642.23187-1-vincenzo.frascino@arm.com> References: <20210122155642.23187-1-vincenzo.frascino@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently, the __is_lm_address() check just masks out the top 12 bits of the address, but if they are 0, it still yields a true result. This has as a side effect that virt_addr_valid() returns true even for invalid virtual addresses (e.g. 0x0). Improve the detection checking that it's actually a kernel address starting at PAGE_OFFSET. Cc: Catalin Marinas Cc: Will Deacon Suggested-by: Catalin Marinas Reviewed-by: Catalin Marinas Signed-off-by: Vincenzo Frascino --- arch/arm64/include/asm/memory.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index 18fce223b67b..99d7e1494aaa 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -247,9 +247,11 @@ static inline const void *__tag_set(const void *addr, u8 tag) /* - * The linear kernel range starts at the bottom of the virtual address space. + * Check whether an arbitrary address is within the linear map, which + * lives in the [PAGE_OFFSET, PAGE_END) interval at the bottom of the + * kernel's TTBR1 address range. */ -#define __is_lm_address(addr) (((u64)(addr) & ~PAGE_OFFSET) < (PAGE_END - PAGE_OFFSET)) +#define __is_lm_address(addr) (((u64)(addr) ^ PAGE_OFFSET) < (PAGE_END - PAGE_OFFSET)) #define __lm_to_phys(addr) (((addr) & ~PAGE_OFFSET) + PHYS_OFFSET) #define __kimg_to_phys(addr) ((addr) - kimage_voffset) -- 2.30.0