Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp3198879pxb; Mon, 9 Nov 2020 05:24:53 -0800 (PST) X-Google-Smtp-Source: ABdhPJxjDpTfT5r79lqI9pDwvrUf6vEfPkurg5pM65ykqmFk54Vc0hR9sz/HafcWUcPHdJHZ7N+K X-Received: by 2002:a17:906:5841:: with SMTP id h1mr14647782ejs.342.1604928293148; Mon, 09 Nov 2020 05:24:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604928293; cv=none; d=google.com; s=arc-20160816; b=lwpuYI4gbdSwujjVV/ImApkNsB8hOXWyFTfrh1h7QgJQ6J5IrGpvO5jkn7D4OzwWlC ee+w222IEAM6pxYGDWapGmd3jwh48hJpU+jhUv2yeL3x4lTU4Svc2GG0vZDuiswE6i2x o0HPCEeX1Lm33pTNAfAB4X1zf+WeKlTxNYMhIqrgPqaDFzT1DHkrhWOXXcWkGdEh1WUu s+sWZyzO0pqsQxIgIaD9h8JH+1S0EgxhdGj/JLc08TaOzdhNqHhpFfTuZpVMO1tCUhEi I1R90zdp8YdHbieujJ6ECIffauzcz6AwNRB7xuwNQ3ZOKAZH9FxTDOh56i3v0GnDA4Z0 ODVQ== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=E1RlZ6MgHQ/o6zMu2ZnSnUeMf+hYgiY23/T34Xo1gTs=; b=kz+gZUONcyfvCUQbiu0M3NZVtolNkHRjwikz0r4TY1Snibl8cZZlfsS27AhaOLtnQc YCgx9D6ra5o6JX0/mPIQZvNt7N19D2FYT7cBQpIKpVicRlZ4V4AjMRyu09rHhxpPuLNI zPB31qy2DCNR/nNOpnXzCHbG44dfhkrABOJrsb3ygQ/wu4UFEyJkbiqt13OPDEZmkeae jBA0mljP3nG67WbQB9xXP29dzT4LgYQ/5MHkdQF+sNwObS60pS/ogA2zjCw0AoYpZLOW 2LdW4cAmpSpQByKqW7yt484twuP9bOPt/mHw4NZUDNnF/f2tY2F62LzpeBI85jHt2VCS NiZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=r9d9NSrv; 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=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t17si7222130edq.418.2020.11.09.05.24.29; Mon, 09 Nov 2020 05:24:53 -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; dkim=pass header.i=@kernel.org header.s=default header.b=r9d9NSrv; 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=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387995AbgKINU4 (ORCPT + 99 others); Mon, 9 Nov 2020 08:20:56 -0500 Received: from mail.kernel.org ([198.145.29.99]:48592 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387994AbgKINUy (ORCPT ); Mon, 9 Nov 2020 08:20:54 -0500 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 645B72083B; Mon, 9 Nov 2020 13:20:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604928054; bh=NCJPmrcVgmBJQ7f2/WSzdlnHvDV2Ns7gRxvl+bAEeoU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=r9d9NSrvtiNFkASIwshkW2M6yVWMXrndGPHHo7HNYEzg94crqiOnpQIjfLo5OARcD Ij5CM+Q8hRZgd4FqvJmAHwRckgKlu3j8pFLeQ2bFV80EmvhnxlnJsQd2nlHyokDD8O A67CClQVemncyx36QP9sqJ2q7Hu8lME30ttmz+Z0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Alexander Egorenkov , Harald Freudenberger , Heiko Carstens Subject: [PATCH 5.9 112/133] s390/pkey: fix paes selftest failure with paes and pkey static build Date: Mon, 9 Nov 2020 13:56:14 +0100 Message-Id: <20201109125036.072282317@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201109125030.706496283@linuxfoundation.org> References: <20201109125030.706496283@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Harald Freudenberger commit 5b35047eb467c8cdd38a31beb9ac109221777843 upstream. When both the paes and the pkey kernel module are statically build into the kernel, the paes cipher selftests run before the pkey kernel module is initialized. So a static variable set in the pkey init function and used in the pkey_clr2protkey function is not initialized when the paes cipher's selftests request to call pckmo for transforming a clear key value into a protected key. This patch moves the initial setup of the static variable into the function pck_clr2protkey. So it's possible, to use the function for transforming a clear to a protected key even before the pkey init function has been called and the paes selftests may run successful. Reported-by: Alexander Egorenkov Cc: # 4.20 Fixes: f822ad2c2c03 ("s390/pkey: move pckmo subfunction available checks away from module init") Signed-off-by: Harald Freudenberger Signed-off-by: Heiko Carstens Signed-off-by: Greg Kroah-Hartman --- drivers/s390/crypto/pkey_api.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) --- a/drivers/s390/crypto/pkey_api.c +++ b/drivers/s390/crypto/pkey_api.c @@ -34,9 +34,6 @@ MODULE_DESCRIPTION("s390 protected key i #define KEYBLOBBUFSIZE 8192 /* key buffer size used for internal processing */ #define MAXAPQNSINLIST 64 /* max 64 apqns within a apqn list */ -/* mask of available pckmo subfunctions, fetched once at module init */ -static cpacf_mask_t pckmo_functions; - /* * debug feature data and functions */ @@ -90,6 +87,9 @@ static int pkey_clr2protkey(u32 keytype, const struct pkey_clrkey *clrkey, struct pkey_protkey *protkey) { + /* mask of available pckmo subfunctions */ + static cpacf_mask_t pckmo_functions; + long fc; int keysize; u8 paramblock[64]; @@ -113,11 +113,13 @@ static int pkey_clr2protkey(u32 keytype, return -EINVAL; } - /* - * Check if the needed pckmo subfunction is available. - * These subfunctions can be enabled/disabled by customers - * in the LPAR profile or may even change on the fly. - */ + /* Did we already check for PCKMO ? */ + if (!pckmo_functions.bytes[0]) { + /* no, so check now */ + if (!cpacf_query(CPACF_PCKMO, &pckmo_functions)) + return -ENODEV; + } + /* check for the pckmo subfunction we need now */ if (!cpacf_test_func(&pckmo_functions, fc)) { DEBUG_ERR("%s pckmo functions not available\n", __func__); return -ENODEV; @@ -1838,7 +1840,7 @@ static struct miscdevice pkey_dev = { */ static int __init pkey_init(void) { - cpacf_mask_t kmc_functions; + cpacf_mask_t func_mask; /* * The pckmo instruction should be available - even if we don't @@ -1846,15 +1848,15 @@ static int __init pkey_init(void) * is also the minimum level for the kmc instructions which * are able to work with protected keys. */ - if (!cpacf_query(CPACF_PCKMO, &pckmo_functions)) + if (!cpacf_query(CPACF_PCKMO, &func_mask)) return -ENODEV; /* check for kmc instructions available */ - if (!cpacf_query(CPACF_KMC, &kmc_functions)) + if (!cpacf_query(CPACF_KMC, &func_mask)) return -ENODEV; - if (!cpacf_test_func(&kmc_functions, CPACF_KMC_PAES_128) || - !cpacf_test_func(&kmc_functions, CPACF_KMC_PAES_192) || - !cpacf_test_func(&kmc_functions, CPACF_KMC_PAES_256)) + if (!cpacf_test_func(&func_mask, CPACF_KMC_PAES_128) || + !cpacf_test_func(&func_mask, CPACF_KMC_PAES_192) || + !cpacf_test_func(&func_mask, CPACF_KMC_PAES_256)) return -ENODEV; pkey_debug_init();