Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp901334ybp; Fri, 4 Oct 2019 06:47:10 -0700 (PDT) X-Google-Smtp-Source: APXvYqzCSLccNFln9WXGF3LjUTRyJPiAX2j8MG2i6AH8tqC46opgNv19nIY70TKevnzDsgnHoCAC X-Received: by 2002:aa7:cf86:: with SMTP id z6mr14910663edx.230.1570196830614; Fri, 04 Oct 2019 06:47:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570196830; cv=none; d=google.com; s=arc-20160816; b=a5P8Hha+bBbPmdanoqVhaaYBhRQjEgbE3NvJdkEQ9rKVocSAUZ8F4yYeRxiXQSOyfr Z7LXO7Ik6fZjx90B83UKusWbwgqZTC4rhrL2EGo8BprSB7g1Py25/scC909tpXiPiqWA Febv9rj8ZpSb9qXTkBE2ai7gmU43jVc9QPywv6aG+svp3KOt4R+g/oy4ru8V29a4IZtE ehhZiwpfCHQt4wUmj/4Ou7QmHE3yc8BZclmPVvrSIKXwC0FXpZp3SX72mFVzSDBruD6o JH+/Jqpuo+7S3lCNKrTd7JL7GIkDgnJPWozzV1F3FY1VxsDmOcZjV2QpKPiGGX2poQr6 20AA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=7b63lo7rprJBUkBEL3uR74RiIh2PXqTM31J1Ekw+88A=; b=061OyBTqcIrRcMjI0BtvAvNeH6ziWDMoJ/6b25JIhf60CB6cCaafuqltIM9Pyvh7Gp McorS7l2Ekxbhcy7WOfW4M/IJWzBbp9bmavEnZfrzJFLX9dcwddg7ELhEj8oHgoPJRdP czW8YRaMVtf1K1D7b3PkWIq9Yk9avJdMU0KirFklvLXPUYrbjebFDELOj9PCdrLtnsSH 2BSTvGzcJl2d+WLB05WBngeBETQMy4QY0yRsv3ATM4i8PdGtii8QdVpY0z7crJbHuVag egOuDx3cgSQq7Fyi+wcMonj9JvoQC07SOBDyGByDCzXixZyotqlTyO5Gt01UGCQs/24/ ixZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=QQl3gRnS; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r24si2967999ejs.166.2019.10.04.06.46.46; Fri, 04 Oct 2019 06:47:10 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=QQl3gRnS; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388689AbfJDNpv (ORCPT + 99 others); Fri, 4 Oct 2019 09:45:51 -0400 Received: from mail-wr1-f66.google.com ([209.85.221.66]:39771 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388333AbfJDNpu (ORCPT ); Fri, 4 Oct 2019 09:45:50 -0400 Received: by mail-wr1-f66.google.com with SMTP id r3so7304317wrj.6 for ; Fri, 04 Oct 2019 06:45:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=7b63lo7rprJBUkBEL3uR74RiIh2PXqTM31J1Ekw+88A=; b=QQl3gRnS5Y2PmQjDOkVC8P48bAmTs34sQHqLKCsHpepEjnrG80AXz057RggF1X5S1X iND2mq1+255/Z5jI8mTANxp8vSudP22ck7d9VlyeNFCghL/JRFTNlfHCISq8TZLDRPlw KC6oUNVorpN8wq8YY3JTedMe5ir93vheQ5GglHnfmRKsxkT68Q7+j3eGSKa21ZFHDVwe aHvcIEqpzjHpgjcqLEKxIJP9qnNcWEed5+xsv4P8KhAbT7e5RO9IbLrRS6ZeOFONXQQX 7PrdD3p0Ib3eXKn+WVU2LYiZiaTq5sKNsBKB35D0dqTHpRGbo22Cly2+zfBSjz7HLQn3 Auag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=7b63lo7rprJBUkBEL3uR74RiIh2PXqTM31J1Ekw+88A=; b=tZ2skolh6txwLdqHPXrlixqS0wXDd+i9ZCVijZfXwGpoMTc3PpihByzU0yOAB4TT+i LWZEE0jSvMivB3gr+5gKGcIjn8rjToBbxNeEnJ06A7qjJkAu0kYYPacTzxA6EJJOeVB5 GN2+VsenSfisL2Co9eZ8tUVii+1BCDlK3zzmMf4GI/cm0/6IqY9t2ymHfROzGGiWRgU6 nDo1XYHWdwKpOUArEdlHDvZjZDa1XuVEw4r87sxuqlV9U0abgMqPEGeHWErn+mVRa6oQ CwTzixNo0+AQztW+Z4Ff6aLWtozWm9NrG60mZeUUWPShIz56oAP4sSKgmWVNVaSW9yVv yuGA== X-Gm-Message-State: APjAAAVhvNqZwXSVTGMXRm4JdAkRNm/wrBARgNiBqQp+CjDbntYrsNKV 0/DhwsL/74LvZ+Ipou4wllY= X-Received: by 2002:adf:e341:: with SMTP id n1mr7308483wrj.133.1570196748545; Fri, 04 Oct 2019 06:45:48 -0700 (PDT) Received: from localhost.localdomain ([104.238.174.53]) by smtp.gmail.com with ESMTPSA id a18sm11812563wrs.27.2019.10.04.06.45.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Oct 2019 06:45:47 -0700 (PDT) From: Changbin Du To: Dave Hansen , Andy Lutomirski Cc: x86@kernel.org, linux-kernel@vger.kernel.org, Changbin Du Subject: [PATCH] x86/mm: determine whether the fault address is canonical Date: Fri, 4 Oct 2019 21:45:01 +0800 Message-Id: <20191004134501.30651-1-changbin.du@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We know the answer, so don't ask the user. Signed-off-by: Changbin Du --- arch/x86/mm/extable.c | 5 ++++- arch/x86/mm/mm_internal.h | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/arch/x86/mm/extable.c b/arch/x86/mm/extable.c index 4d75bc656f97..5196e586756f 100644 --- a/arch/x86/mm/extable.c +++ b/arch/x86/mm/extable.c @@ -8,6 +8,8 @@ #include #include +#include "mm_internal.h" + typedef bool (*ex_handler_t)(const struct exception_table_entry *, struct pt_regs *, int, unsigned long, unsigned long); @@ -123,7 +125,8 @@ __visible bool ex_handler_uaccess(const struct exception_table_entry *fixup, unsigned long error_code, unsigned long fault_addr) { - WARN_ONCE(trapnr == X86_TRAP_GP, "General protection fault in user access. Non-canonical address?"); + WARN_ONCE(trapnr == X86_TRAP_GP, "General protection fault at %s address in user access.", + is_canonical_addr(fault_addr) ? "canonical" : "non-canonical"); regs->ip = ex_fixup_addr(fixup); return true; } diff --git a/arch/x86/mm/mm_internal.h b/arch/x86/mm/mm_internal.h index eeae142062ed..4c8a0fdd1c64 100644 --- a/arch/x86/mm/mm_internal.h +++ b/arch/x86/mm/mm_internal.h @@ -2,6 +2,17 @@ #ifndef __X86_MM_INTERNAL_H #define __X86_MM_INTERNAL_H +static inline bool is_canonical_addr(u64 addr) +{ +#ifdef CONFIG_X86_64 + int shift = 64 - boot_cpu_data.x86_phys_bits; + + return ((int64_t)addr << shift >> shift) == addr; +#else + return true; +#endif +} + void *alloc_low_pages(unsigned int num); static inline void *alloc_low_page(void) { -- 2.20.1