Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp875492pxf; Thu, 1 Apr 2021 16:34:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwlqc7UcgE1r/7YRWstfdn7vEAqf8hALkAC3RFs0Ak1zU3WKnT9CbBfCiwjRH24dFYZChZC X-Received: by 2002:a92:4452:: with SMTP id a18mr8212170ilm.46.1617320087079; Thu, 01 Apr 2021 16:34:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617320087; cv=none; d=google.com; s=arc-20160816; b=d3st8FU6s3AIUtP8emEJX6XW9QZ1A8tyCKEfgMIOejwCdOmQEDP9trqudDIhHjDZQ0 K0Ldb31kdQmXyyerPbC+IWi+1ycGqlSQRnL4j78yE5Pglr3WPisA6OL+vOvd0s3P/+Wn EUd2NfBx6W86hObl6qceVWOKxBUQWZXNoD+PFM96cGYFiHm2rJXg0in62kZWz3lvUllL xOHtDacHPh1/DmWFE6YVxV9VG6urPsajenJxeHMrwvQFHuo+EKEa5FvYzeIVf9NHMwsV xMNNUJpJCuvErLm/MGJEKH/E65DJwoH8sK1oz/seAR//X+7Jc6AVHoLjgCvn6q3MzBr1 hh9g== 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=h2cUBfrxKiLvUm4K3FiEqQsW7/CwbTTOloFCTdH2CHs=; b=UrxzC0a8YERpy+Xu/sTmsxzuEfbF7uDP21B5rR2DFQPCL4NvLRSx/K52CKx+vueVJv MubsoCjoBGymjA15M4Mt2yUEe1iRolliojPvGb6eGJogH7a5Ejvi0u64Z1YayCIJN0rK MpOFk98V8zKxzflTjskH8Ne3GY+WG9lI9pPUGioeohlPz3bZLap3N7/nt1P1I5vC3U53 551jmRdE0YAIgE7aj7FkJvNg6Y60ruO2mVEa/jvh4N9IB266r4LtDwYWZ964pqKLdvql iIt7eJwUTyKuYelq3evg1bjPHZJhmQxQT24eV2krrYqvrqo+sACBMqjqb08zuJSszhYA RgTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=WwXYJEUt; 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 h30si1398196ila.131.2021.04.01.16.34.33; Thu, 01 Apr 2021 16:34:47 -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=WwXYJEUt; 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 S236459AbhDAXdi (ORCPT + 99 others); Thu, 1 Apr 2021 19:33:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50152 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236295AbhDAXdK (ORCPT ); Thu, 1 Apr 2021 19:33:10 -0400 Received: from mail-qt1-x849.google.com (mail-qt1-x849.google.com [IPv6:2607:f8b0:4864:20::849]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 80B45C06178C for ; Thu, 1 Apr 2021 16:32:42 -0700 (PDT) Received: by mail-qt1-x849.google.com with SMTP id f26so4036826qtq.17 for ; Thu, 01 Apr 2021 16:32:42 -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=h2cUBfrxKiLvUm4K3FiEqQsW7/CwbTTOloFCTdH2CHs=; b=WwXYJEUtzPp5OgieXNSDH1jlEl5JZ0W/R7AL0K533fvUhOWdAZ9AGUs2eGGOPAXoOV 9ozbSMsvBM3fx5D5LtP6Wwj5vTRMKtVGliPsMJFstImK8hWqbNvneO11EFMHlgjN9j8E Gxgb+CYWv9/NMpO603YX/M1xglU8wTRB2je50aC09bt/Q+N13fSJMOHOutVU+FJW8VRH buFVQ6JhTKnPP9sHJSvuwhCmHBM3KlHMmvtXp8wtpQYRTn/+3gN0dNfz6qElxu5IW19P 6wyJ5fhugbFhtzg1oHjkOAL/OAUuMNDm5YMcIesJpyOU9dDyMEApglZuAgeX/R91ZsV9 QlzQ== 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=h2cUBfrxKiLvUm4K3FiEqQsW7/CwbTTOloFCTdH2CHs=; b=bGpjCZAjJf6GEooRTQnFyFET9xNRJ1N2HMvshH0Ccuc3Omf5XdeK0E7d7FFIYB1w+C HCEDitao7reOCbhNd8Yw4HT/KgmGHnH9Fs619Ek4st5u8RLe/n76UrzWU8pnc5jwJk8/ 9Yo02cze9mdRARCKrDdKx1X0PP1QxmdHgR0QwZ9WKmbnXRBF0PAtst1Ftjz5isJ6E/xn 7tubyh1LwIbZxOy0P9wiDoIl4F0BhDG99tR/7DtF20BHQQOy7Fzy/ayYXpgdzAxoyh7E IWgsYmIgdSHYrhTMz/+lcJJkc5FrlDnf9Z7sPaN7AkF14B45jNxsqxW4+P91fRirnwwM 2ibQ== X-Gm-Message-State: AOAM531c1V1OXkNIIuBkBkgJEp2R24Ro1ELZs6yQ+gjAVG1g5+yyh0jv ET2NkHy2hCkfGKCcH87utbRVXzl54p7FSfA4jEo= X-Received: from samitolvanen1.mtv.corp.google.com ([2620:15c:201:2:4cd1:da86:e91b:70b4]) (user=samitolvanen job=sendgmr) by 2002:a0c:eb87:: with SMTP id x7mr10859482qvo.14.1617319961673; Thu, 01 Apr 2021 16:32:41 -0700 (PDT) Date: Thu, 1 Apr 2021 16:32:09 -0700 In-Reply-To: <20210401233216.2540591-1-samitolvanen@google.com> Message-Id: <20210401233216.2540591-12-samitolvanen@google.com> Mime-Version: 1.0 References: <20210401233216.2540591-1-samitolvanen@google.com> X-Mailer: git-send-email 2.31.0.208.g409f899ff0-goog Subject: [PATCH v5 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 --- 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.0.208.g409f899ff0-goog