All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Harald Freudenberger" <freude@linux.ibm.com>
Cc: "Alexander Gordeev" <agordeev@linux.ibm.com>,
	linux-s390@vger.kernel.org, "Heiko Carstens" <hca@linux.ibm.com>,
	"Vasily Gorbik" <gor@linux.ibm.com>
Subject: Re: [PATCH v3 1/2] s390/zcrypt: Fix wrong domain value verification with EP11 CPRBs
Date: Thu, 23 Jul 2026 10:15:03 +0000	[thread overview]
Message-ID: <20260723101503.AF2661F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260723095453.127322-2-freude@linux.ibm.com>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:

New issues:
- [High] Missing `array_index_nospec()` mitigation leading to a Spectre v1 vulnerability.

Pre-existing issues:
- [Critical] Privilege Escalation / Access Control Bypass in administrative CPRBs.
--

--- Patch [1]: [PATCH v3 1/2] s390/zcrypt: Fix wrong domain value verification with EP11 CPRBs ---
commit 9a314209ce4cb4581d3716a2f6e1c11a24aab46e
Author: Harald Freudenberger <freude@linux.ibm.com>
s390/zcrypt: Fix wrong domain value verification with EP11 CPRBs

This commit fixes an upper limit check for the domain value when an EP11
CPRB is processed for sending to a crypto card. It adjusts the check to use
AP_DOMAINS to prevent heap memory access beyond the permissions array.

> diff --git a/drivers/s390/crypto/zcrypt_api.c b/drivers/s390/crypto/zcrypt_api.c
> index f57189c2b839e..81eefdeae2485 100644
> --- a/drivers/s390/crypto/zcrypt_api.c
> +++ b/drivers/s390/crypto/zcrypt_api.c
> @@ -1077,7 +1077,7 @@ static long _zcrypt_send_ep11_cprb(u32 xflags, struct ap_perms *perms,
>  	print_hex_dump_debug("ep11req: ", DUMP_PREFIX_ADDRESS, 16, 1,
>  			     ap_msg.msg, ap_msg.len, false);
>  
> -	if (perms != &ap_perms && domain < AUTOSEL_DOM) {
> +	if (perms != &ap_perms && domain < AP_DOMAINS) {

[Severity: Critical]
This is a pre-existing issue, but does this logic completely bypass the
administrative permission checks if domain is greater than or equal to
AP_DOMAINS?

If a user provides a domain value like AUTOSEL_DOM (0xFFFF), this condition
evaluates to false, skipping the permission check block entirely. This
appears to allow a user with only usage access to bypass the perms->adm
check.

Since the CCA equivalent _zcrypt_send_cprb() has the same logic, and the
domain can be overwritten later with the dynamically selected queue's domain
before submission:

drivers/s390/crypto/zcrypt_msgtype6.c:zcrypt_msgtype6_send_cprb() {
    ...
    /* update domain field within the CPRB struct */
    msg->cprbx.domain = AP_QID_QUEUE(zq->queue->qid);
    ...
}

Can this lead to regressions by allowing arbitrary administrative commands to
be executed on the queue?

>  		if (ap_msg.flags & AP_MSG_FLAG_ADMIN) {

[Severity: High]
Does this code leave the domain variable vulnerable to speculative execution
attacks?

Since domain is extracted from untrusted user-provided data, the bounds
check could be mispredicted. If the CPU speculatively executes the true
path for an out-of-bounds domain, test_bit_inv() performs a bitwise load
from memory offset by domain.

Would it be appropriate to sanitize the domain variable with
array_index_nospec() before it is used as an index into perms->adm to
prevent potential kernel memory leaks via cache side channels?

>  			if (!test_bit_inv(domain, perms->adm)) {
>  				rc = -ENODEV;

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260723095453.127322-1-freude@linux.ibm.com?part=1

  reply	other threads:[~2026-07-23 10:15 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-23  9:54 [PATCH v3 0/2] Fixes related to domain access and verification Harald Freudenberger
2026-07-23  9:54 ` [PATCH v3 1/2] s390/zcrypt: Fix wrong domain value verification with EP11 CPRBs Harald Freudenberger
2026-07-23 10:15   ` sashiko-bot [this message]
2026-07-23  9:54 ` [PATCH v3 2/2] s390/zcrypt: Close speculative mem read possibility Harald Freudenberger
2026-07-23 10:34   ` sashiko-bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260723101503.AF2661F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=agordeev@linux.ibm.com \
    --cc=freude@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=linux-s390@vger.kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.