Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp734109pxf; Thu, 8 Apr 2021 11:32:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyw20R4Qo27V4YwoYlIf3gxm0nWyPInWb5slHc/8ws/3k3uj7LhhHXSDC6AKJLawLriHy5t X-Received: by 2002:a63:d748:: with SMTP id w8mr9069030pgi.266.1617906726839; Thu, 08 Apr 2021 11:32:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617906726; cv=none; d=google.com; s=arc-20160816; b=azvCpBAe5OhDSKkOrgy5gnbrvrlY/T8TeqCgsqYccfGSjUrFI6n0LU6oV/l17Ed0Mh Qn57QgqWZHT2/iPl8KpjV8JmMRWuMUyUH/duhf+RO88TKxvpysy8tOCbXoWUCuzh5TeH TzB4Zkc/BYmCTuMZpBBxxnc7dOLHFxp14JxCRxiUv+P3lD2AcpgEmQJ18VpaLKal7g1U 2pmdenjEHuv4z3kyvq6uT4lp+PBy/Css/MZ6osB06ioxlo30ONgDaYg9sTZZokaSzvkD PVNiSx2bmidjHuouNBWdVyyUvyWJyy+MT+bKTRYU38U8yUHNLAsKDfE5ykvSSQ7QmyA7 qWhw== 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=14TYqH2ENqdx8tNGRNzk0x7BZIkRzbFF1Zb7Ap7y+mI=; b=qCLRMsFQsja3GFJbddcLEgYixFubQXwXZlrlix+HhRZFjX1mt/MEYvJdWxSaDIHuEA Pl06os+PxPnAmSVdWp+CnLytAffKT6r7KK/WbxTuBuC0bSxKpj5SfAQptItxl3oqDHqs 3ZDHnM5WO7r0qIqAnbVhl8JI6RnZcz6JL6snhUoQBeYjef8A6GF0XVgeU1dO9s5jrbPB R8IQ1QjQjJUuevxs/tqC6UhZdXPoLTISZn+TZIqwc6Tb90EtIAZiY9td4j9c3+K7h3t0 hmeGGK9+eRt64uUTjgAZbHXkuOeFfbBYDZtUQH+1h3GT1oVe+OHoaNmy3B/GPVmd08F1 gB8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=HDvQ9PZA; 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 v18si172515pjn.4.2021.04.08.11.31.54; Thu, 08 Apr 2021 11:32:06 -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=HDvQ9PZA; 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 S232993AbhDHSaV (ORCPT + 99 others); Thu, 8 Apr 2021 14:30:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48708 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233008AbhDHS3w (ORCPT ); Thu, 8 Apr 2021 14:29:52 -0400 Received: from mail-qk1-x749.google.com (mail-qk1-x749.google.com [IPv6:2607:f8b0:4864:20::749]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 61D9CC0613B0 for ; Thu, 8 Apr 2021 11:29:07 -0700 (PDT) Received: by mail-qk1-x749.google.com with SMTP id c7so1839247qka.6 for ; Thu, 08 Apr 2021 11:29:07 -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=14TYqH2ENqdx8tNGRNzk0x7BZIkRzbFF1Zb7Ap7y+mI=; b=HDvQ9PZApNfeAjnQLOW7KC9doRTIh6okNpM8589lZY+2eOjicKiTemkQkvkyQMeHdD oqBdomzQim+Gc97Fo+BScRDN/uYqxgD94hjnqyI+Uxo6rwKvcBXyVFo4/USMTXuzbxwk qg2hcRhzTn5P5aEl930+pnBiPB30eV6s3TB09qmkRDcTFIGeB4pMhNIe5+wTPuDDOlcm +CsRwIfaZFuSDD/U/wY75ESfG0GXmriI+0igXnIBdZIT0MPydBKVBLHEllZ6c/kE8ezI 2tbcU79LOWmnoiR/ReElL1+zVMaTX1hVUMai/MSNPX90NgepS5kimMBjIqCGhriW2448 Bj/w== 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=14TYqH2ENqdx8tNGRNzk0x7BZIkRzbFF1Zb7Ap7y+mI=; b=jcvMJ757o7Qn0u/y+aBgs4/pYIeL1hPqB8u1z2O6A9L3WZ0+TMd1EUIbJYFujgPIP8 /fwFN/afZ2uSfrFtNv1p0PlSs1NZgzS5ADA3NZEnpdRpUo0y0v1KCDhjXH1UEbm/4r0h mqv7+60vKvJuemlNa9agzGZNRL03W5aQANbh8igf4RgPDrDAfwnhUGymAfnmpnH8CBcb Vz2dDe+ry6gS4qnJF+v1/P4EyKtWmy1krWKFhQPBnQ+QHu96kr1SF2MrRIwr/Sha4Bsw BQ3vL00IYvLckg0QdYRu5T0ZnPmmqE9hQBHGO0pU/EEzlXh4dN2BMxS9mz+xv0nZ07RB fqPg== X-Gm-Message-State: AOAM531xgpKN/ipZGiR4TxA+pWcdNo/hOVoNrVleY6kCPFZICLVvZ5Ta dqFFrE5icyiejOWdz3L+kwNuWdd9+wq49FpC1DQ= X-Received: from samitolvanen1.mtv.corp.google.com ([2620:15c:201:2:3560:8505:40a2:e021]) (user=samitolvanen job=sendgmr) by 2002:a0c:f605:: with SMTP id r5mr10061255qvm.48.1617906546551; Thu, 08 Apr 2021 11:29:06 -0700 (PDT) Date: Thu, 8 Apr 2021 11:28:36 -0700 In-Reply-To: <20210408182843.1754385-1-samitolvanen@google.com> Message-Id: <20210408182843.1754385-12-samitolvanen@google.com> Mime-Version: 1.0 References: <20210408182843.1754385-1-samitolvanen@google.com> X-Mailer: git-send-email 2.31.1.295.g9ea45b61b8-goog Subject: [PATCH v6 11/18] psci: use function_nocfi for cpu_resume 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 , Sedat Dilek , Mark Rutland , Catalin Marinas , 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, clang-built-linux@googlegroups.com, 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 pointers with jump table addresses, which results in __pa_symbol returning the physical address of the jump table entry. As the jump table contains an immediate jump to an EL1 virtual address, this typically won't work as intended. Use function_nocfi to get the actual address of cpu_resume. Signed-off-by: Sami Tolvanen Reviewed-by: Kees Cook Acked-by: Mark Rutland Tested-by: Nathan Chancellor --- drivers/firmware/psci/psci.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c index f5fc429cae3f..64344e84bd63 100644 --- a/drivers/firmware/psci/psci.c +++ b/drivers/firmware/psci/psci.c @@ -325,8 +325,9 @@ static int __init psci_features(u32 psci_func_id) static int psci_suspend_finisher(unsigned long state) { u32 power_state = state; + phys_addr_t pa_cpu_resume = __pa_symbol(function_nocfi(cpu_resume)); - return psci_ops.cpu_suspend(power_state, __pa_symbol(cpu_resume)); + return psci_ops.cpu_suspend(power_state, pa_cpu_resume); } int psci_cpu_suspend_enter(u32 state) @@ -344,8 +345,10 @@ int psci_cpu_suspend_enter(u32 state) static int psci_system_suspend(unsigned long unused) { + phys_addr_t pa_cpu_resume = __pa_symbol(function_nocfi(cpu_resume)); + return invoke_psci_fn(PSCI_FN_NATIVE(1_0, SYSTEM_SUSPEND), - __pa_symbol(cpu_resume), 0, 0); + pa_cpu_resume, 0, 0); } static int psci_system_suspend_enter(suspend_state_t state) -- 2.31.1.295.g9ea45b61b8-goog