Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp4558120pxf; Tue, 23 Mar 2021 13:41:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx2jbYbDQssPKpBW9/H8A3XQNWxYC9wahCziq3LpQmXW1TIw/Cb/fB/PALYdZuVWwQ3ie1T X-Received: by 2002:aa7:dd98:: with SMTP id g24mr6368048edv.75.1616532088885; Tue, 23 Mar 2021 13:41:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616532088; cv=none; d=google.com; s=arc-20160816; b=obY2TniJEh1CUd65U0gshc+wsatak+nSqb3vSf92AqiUmNZ7AeBTIHM/Pp/AFRSxfr 79aEyirJTUJBsVmjMR5C9OMZr/O4BDMPieohRJ0u4w0HtUk8DmAycy8U+D6Ms/gtA6lu 5PgYsijbHJO7+IVjXiwo/3Q741OWdpuUNfVWtZiITRF9Kr3WaUOCj0O0v+s1zhEzFEsZ 93gquZI7R3wh/ZQO4WwvOF35QvYFeQJKeueXe/FLA198lEHZpmpnwJ6Xdy8OjGm9yHkF d0DC1hdP3dCxGsa+K5T5o17vFoG0oWHCQbCYuwiFw59bvaVEX04kEPpAmpHhyFtmaOQA TxJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=PeAEi4QdQeJS0R2WYWNNntX7QF/OnwnEUYEO8FB/zZI=; b=eePveT8nAjh+51a9xV1wvSVkAFD5Tua49cg26sghFY80c0n0Ya1ttiL256hETdj/4Z bOphEdx1hxVCLM2PM9dft6A6vMIOYDCjQ4zdRi3awP6oK/cV7vt4Tqp1U1PWgxbseuGG i/KB1JSqBeSMkDAVFrWJ/lx45nzi47L5Rf5RZv78g/FuLoEajJXuP1TIrbsdZ8zAoXtk FyKEPbKXYEqZizDUQnHUirTbzmltAYGyt/4z+ktp/hp5u4+Kyw8vYLe1Qkh+8ponE2Y3 dhn3c4N6R1vkyCKlKDkHGvFNnC4B/9xTCzsvF67AjH/ZnBRkx94DfSmHVAGewS33u5cL BwNw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=ME4u5UjK; 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=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id mc14si68051ejb.639.2021.03.23.13.41.05; Tue, 23 Mar 2021 13:41:28 -0700 (PDT) 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; dkim=pass header.i=@google.com header.s=20161025 header.b=ME4u5UjK; 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=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233540AbhCWUkO (ORCPT + 99 others); Tue, 23 Mar 2021 16:40:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233463AbhCWUjz (ORCPT ); Tue, 23 Mar 2021 16:39:55 -0400 Received: from mail-qk1-x74a.google.com (mail-qk1-x74a.google.com [IPv6:2607:f8b0:4864:20::74a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 39710C0613D8 for ; Tue, 23 Mar 2021 13:39:55 -0700 (PDT) Received: by mail-qk1-x74a.google.com with SMTP id h21so124864qkl.12 for ; Tue, 23 Mar 2021 13:39:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=PeAEi4QdQeJS0R2WYWNNntX7QF/OnwnEUYEO8FB/zZI=; b=ME4u5UjKX6YIE3uv5oyrvvXZZ3jDHKxvg0e+6aqMZKUztdYp7UH3vHRfgdQzxCN4zy AMR5XMoxvqeXVqyIlJn+hPFAxZL4TQMv8yXuE2A03sfzLj0rDMM9qpT6OZbwGvww9Mv8 grV2XE0qf126qqR9VAHX70l9XILxGlcga68lUIyRIcjYojuoLcnDWDSs1xGhji/tepMG PBfp9Zvp0mqwZ8XFmTGrrGrlAaTnxT7M5AW6ANe2fAcqA7CEXDKc4DyDrxO6kIuRFYR5 fLVqRiEV3Wwjl4e92Jo79o5RUw9447jw9S1TrpuirFvX+vPBTTSo2yyfDiUXeMVwmetm m2dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=PeAEi4QdQeJS0R2WYWNNntX7QF/OnwnEUYEO8FB/zZI=; b=nJH2CNwHR2yasQB6pBgI+8KWaLP2sOiD2FY02zBzmR2PdZ0mmwHfufB9SGpF+sCSEi D3P/26JV45/SSOTjhFd4KK8lOPpMMIHTZKMAYrbG8OZEBQvQ1pHprw5st90O4xaiUf1O 7s37IDrszsWWAwAqhC6lIqY6aKNJ6C0ICJ1MzIbnZAVsXyF55rFksXbxxb8JUq/B6iNr V68sGHaC49bxfUDlhaLIMpI9yFdKw7+zCqAovwzSItbXP+PkpfD5lc8SAfLi8RnydvUP RqYdDnr7NG3GUEWU0a4AhNjzK2gaDKhyUZ/J+JlpkzQNiB6VFetqQe9sm3rXDALdw3Zl VGLQ== X-Gm-Message-State: AOAM533g1VTtaNg6ir7rkIXYguHdbdpHEV2q8Sh6XbiW43qcEZBJUTwk xim8SmYayXyp1AnmRP9dJAoZg7TupyBj9vykBU4= X-Received: from samitolvanen1.mtv.corp.google.com ([2620:15c:201:2:e9a3:260d:763b:67dc]) (user=samitolvanen job=sendgmr) by 2002:a05:6214:f27:: with SMTP id iw7mr6736714qvb.50.1616531994399; Tue, 23 Mar 2021 13:39:54 -0700 (PDT) Date: Tue, 23 Mar 2021 13:39:32 -0700 In-Reply-To: <20210323203946.2159693-1-samitolvanen@google.com> Message-Id: <20210323203946.2159693-4-samitolvanen@google.com> Mime-Version: 1.0 References: <20210323203946.2159693-1-samitolvanen@google.com> X-Mailer: git-send-email 2.31.0.291.g576ba9dcdaf-goog Subject: [PATCH v3 03/17] mm: add generic __va_function and __pa_function macros From: Sami Tolvanen To: Kees Cook Cc: Nathan Chancellor , Nick Desaulniers , Masahiro Yamada , Will Deacon , Jessica Yu , Arnd Bergmann , Tejun Heo , "Paul E. McKenney" , Christoph Hellwig , Peter Zijlstra , bpf@vger.kernel.org, linux-hardening@vger.kernel.org, linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kbuild@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Sami Tolvanen Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With CONFIG_CFI_CLANG, the compiler replaces function addresses in instrumented C code with jump table addresses. This means that __pa_symbol(function) returns the physical address of the jump table entry instead of the actual function, which may not work as the jump table code will immediately jump to a virtual address that may not be mapped. To avoid this address space confusion, this change adds generic definitions for __va_function and __pa_function, which architectures that support CFI can override. The typical implementation of the __va_function macro would use inline assembly to take the function address, which avoids compiler instrumentation. Signed-off-by: Sami Tolvanen Reviewed-by: Kees Cook --- include/linux/mm.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/include/linux/mm.h b/include/linux/mm.h index 64a71bf20536..a0d285cd59ce 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -116,6 +116,14 @@ extern int mmap_rnd_compat_bits __read_mostly; #define __pa_symbol(x) __pa(RELOC_HIDE((unsigned long)(x), 0)) #endif +#ifndef __va_function +#define __va_function(x) (x) +#endif + +#ifndef __pa_function +#define __pa_function(x) __pa_symbol(__va_function(x)) +#endif + #ifndef page_to_virt #define page_to_virt(x) __va(PFN_PHYS(page_to_pfn(x))) #endif -- 2.31.0.291.g576ba9dcdaf-goog