From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555244; cv=none; d=zohomail.com; s=zohoarc; b=XASRifDFFFFPzcYI8HUgs9unmlq3h03mz7s/7c5kOl43k/+x2yhlg8t+6YW29XqlvToTgdxUft7MwDxtbNB8jy2drCOJ7A/lgTpQqod2FcKSCvEftPKXevdqiPHMlR7Qi082O63f2RlEBMWPDKq6/Zqx7sLJVOCsTTJ1U0GTaac= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555244; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=U4x4Xf7uo9thTZpnmpApx0k1GI2zyRmOy4R/QNdhw5c=; b=gAH7xjIfenRwb0nIYeGGZpfjZK0lzRfoqr2JHxY8J8wnfRDH4jjRUxOCYJWUlviSvdXoGG9rkUJTSAHIVES+QGgl1mKqgqkI1lwWuXOy8aq9nX0HDy0tdmQTiuER2GkDMyXfoGxvIfAHGIKgb3slzi1TxzGqfEIubMA6IYudbfI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786555244049966.4805513034098; Wed, 12 Aug 2026 10:20:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCaz-0000kV-RF; Wed, 12 Aug 2026 13:18:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZs-0000B7-D7; Wed, 12 Aug 2026 13:17:22 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZo-0000ot-LC; Wed, 12 Aug 2026 13:17:18 -0400 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1TCw4087968; Wed, 12 Aug 2026 17:17:13 GMT Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvm9us2g-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:13 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBQwA028259; Wed, 12 Aug 2026 17:17:12 GMT Received: from smtprelay05.wdc07v.mail.ibm.com ([172.16.1.72]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxfsjy4s2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:12 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay05.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHHA1n34013782 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:17:11 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CC95D58051; Wed, 12 Aug 2026 17:17:10 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 073AC5805A; Wed, 12 Aug 2026 17:17:10 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:09 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=U4x4Xf7uo9thTZpnm pApx0k1GI2zyRmOy4R/QNdhw5c=; b=gnVw3fRtRJkNPW2vbbhdtlxgvBqONZF9T k7pUtsSaZkxH+AEhkmgTjYn2kZo991TBeV7Vva9WJhDCT46Lm5ijtKj0MQgYgiAn JhVrpMvYQJ6eYkcvzuNvmqmXXOniS78Dve3REIeAgPkbXpCFAOu3SqeEf5cof8pD N49PhCpn6jr9SnSlqo30U4gqME+SC6BOUj2VZ5HmN5zdWxNNRX8uzkCLMJu5nGXi fWflh1utDHGu8+UtuL3BhXlCI145HgVXWbuNNFQT3b/RVR+pLeE/GOeYewGr8NY3 fDWWY/V5Sb+n3J4bzXfdAqubkwaSUG9f3DF2bFZFNz7Pi5P/cCMiw== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Ilya Leoshkevich , Christian Borntraeger , qemu-stable@nongnu.org, Richard Henderson , Harald Freudenberger , Eric Farman Subject: [PULL 01/15] target/s390x: Make PRNO TRNG interruptible Date: Wed, 12 Aug 2026 13:16:53 -0400 Message-ID: <20260812171707.1605637-2-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX9LA8IqcJHUAA svZgyOV/T7jIpudUM80Jcm/GHD+tLcUzvH6w4rRdtX9P67lpRf78Rb3Ke8EK0idBiajV4v45TaH eNuM/jfkz0HBuHaMpyxR5t6TYUKyFrLwsIUTspkCskPa3CjQSwXFTpJJ94hfIvPXCS7bjYBx6yt iXXayM+DsfJwPKBms7cpmFWaYSYILg4vQ5XuIw18aoNsoX9Vu5Gm13Lc6Nm99swYyCPJLpQhcgr 3hZPKmBxZfeMlF+Vyg/h8ReXw6dd4Lo0iXz+3FkjGZy33D8RY6sVWml2rAN+fqn+zjZytzNqKfW sU9+XRfPxjeKzYOj9RvtLYp/+3cMU57cSSoD1gbVL4S1JItcq3kz1BIKT5Z5rLy4SEifikPzjhj L6mFFPyltimdfeQu8sTRLcg3GXrEH31BC6Ysb8SSekSQglCF+jrIrEYL3Mhno63NRBAoS4JWduG f1Rza/8QhFL2EqiUCVg== X-Proofpoint-ORIG-GUID: Mzh5SfhuX0bOatIcLSfvestU7K5qAV6X X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX1TksnxZy3IYG hW3ldD8Ec7e6AWgBL0af9tR1PqeqZRcIL17iFmf2S+pRENv5kqVJ+WHkbC1vhBqmJ7kW9VRAfm1 B++nAVHrOwV4QnVc0N5N3pS/ipCgFCM= X-Authority-Analysis: v=2.4 cv=IfK3n2qa c=1 sm=1 tr=0 ts=6a7caa99 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=69wJf7TsAAAA:8 a=KKAkSRfTAAAA:8 a=x4Cszyr3wkYQ39rAaogA:9 a=Fg1AiH1G6rFz08G2ETeA:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: Mzh5SfhuX0bOatIcLSfvestU7K5qAV6X X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=farman@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555244456158500 Content-Type: text/plain; charset="utf-8" From: Ilya Leoshkevich fill_buf_random() writes the entire guest-requested amount of random bytes in one go. Since the length is a full 64-bit value, a guest can request several gigabytes and keep the vCPU spinning inside the helper, without a chance to react to interrupts. Do the same thing as HELPER(mvcl): check cpu_loop_exit_requested() at the bottom of the loop, and when a return to the main loop is pending, stop and report partial completion with condition code 3. Reported-by: Christian Borntraeger Fixes: 3dbc5fdacb5a ("target/s390x: support PRNO_TRNG instruction") Cc: qemu-stable@nongnu.org Reviewed-by: Richard Henderson Signed-off-by: Ilya Leoshkevich Reviewed-by: Harald Freudenberger Link: https://lore.kernel.org/qemu-devel/20260714191948.342204-2-iii@linux.= ibm.com Signed-off-by: Eric Farman --- target/s390x/tcg/crypto_helper.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/target/s390x/tcg/crypto_helper.c b/target/s390x/tcg/crypto_hel= per.c index 8fe0a22219..6a5dbe1caf 100644 --- a/target/s390x/tcg/crypto_helper.c +++ b/target/s390x/tcg/crypto_helper.c @@ -16,6 +16,7 @@ #include "qemu/guest-random.h" #include "s390x-internal.h" #include "tcg_s390x.h" +#include "exec/cpu-common.h" #include "exec/helper-proto.h" #include "accel/tcg/cpu-ldst-common.h" #include "accel/tcg/cpu-mmu-index.h" @@ -242,8 +243,8 @@ static int cpacf_sha512(CPUS390XState *env, const int m= mu_idx, uintptr_t ra, return !len ? 0 : 3; } =20 -static void fill_buf_random(CPUS390XState *env, const int mmu_idx, uintptr= _t ra, - uint64_t *buf_reg, uint64_t *len_reg) +static int fill_buf_random(CPUS390XState *env, const int mmu_idx, uintptr_= t ra, + uint64_t *buf_reg, uint64_t *len_reg) { const MemOpIdx oi =3D make_memop_idx(MO_8, mmu_idx); uint8_t tmp[256]; @@ -265,7 +266,13 @@ static void fill_buf_random(CPUS390XState *env, const = int mmu_idx, uintptr_t ra, --*len_reg; } len -=3D block; + + if (cpu_loop_exit_requested(env_cpu(env))) { + break; + } } + + return len =3D=3D 0 ? 0 : 3; } =20 uint32_t HELPER(msa)(CPUS390XState *env, uint32_t r1, uint32_t r2, uint32_= t r3, @@ -278,6 +285,7 @@ uint32_t HELPER(msa)(CPUS390XState *env, uint32_t r1, u= int32_t r2, uint32_t r3, uint8_t subfunc[16] =3D { 0 }; uint64_t param_addr; MemOpIdx oi; + int cc; =20 switch (type) { case S390_FEAT_TYPE_KMAC: @@ -308,9 +316,13 @@ uint32_t HELPER(msa)(CPUS390XState *env, uint32_t r1, = uint32_t r2, uint32_t r3, return cpacf_sha512(env, mmu_idx, ra, env->regs[1], &env->regs[r2], &env->regs[r2 + 1], type); case 114: /* CPACF_PRNO_TRNG */ - fill_buf_random(env, mmu_idx, ra, &env->regs[r1], &env->regs[r1 + = 1]); - fill_buf_random(env, mmu_idx, ra, &env->regs[r2], &env->regs[r2 + = 1]); - break; + cc =3D fill_buf_random(env, mmu_idx, ra, + &env->regs[r1], &env->regs[r1 + 1]); + if (cc =3D=3D 0) { + cc =3D fill_buf_random(env, mmu_idx, ra, + &env->regs[r2], &env->regs[r2 + 1]); + } + return cc; default: /* we don't implement any other subfunction yet */ g_assert_not_reached(); --=20 2.55.0 From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555101; cv=none; d=zohomail.com; s=zohoarc; b=AunCtDOQva81mHWOvnDjm4aO8LbXVS1WgNoqiIfbdMBrIij56fteGh4wVT1/yLNfcIim0U1f42Rl0oYuJoS8UEIs8sRr6rWktRGf+851nLn8Z7n6yPV+DK9qM+Ln2DXoNDLbQQrihCROFCsDylSZlNHO64NqA21ikF0yLyy9UKE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555101; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=F0jQIfuLBD4YvbYbtB17Ur+g1eyPfBHg0haWS315WfY=; b=GA11BRiatxO5tCY50mQeyTnLxRNoIc7hIxfRDLpKM4iIZ2foslwA7EM/kxzU7Nt5ZsIzg/Q+A1Nrj2S3urcDd9NB5bvm8KArFDgbVDY8ozodV0qZyGjWFh6tEjpQNZJp8wSSJ4rpOZMKGG5h1wEzsTjCy9pHwqphqs1ku3VbrfI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786555101077639.0085730029732; Wed, 12 Aug 2026 10:18:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCaD-0000Ga-CO; Wed, 12 Aug 2026 13:17:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZs-0000B6-D6; Wed, 12 Aug 2026 13:17:22 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZo-0000oq-Mg; Wed, 12 Aug 2026 13:17:19 -0400 Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1b7b4040894; Wed, 12 Aug 2026 17:17:14 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvq9kpj9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:14 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBK8m025502; Wed, 12 Aug 2026 17:17:13 GMT Received: from smtprelay06.wdc07v.mail.ibm.com ([172.16.1.73]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy6x81-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:13 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay06.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHHBje13435478 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:17:11 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9083758051; Wed, 12 Aug 2026 17:17:11 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id EC79D5805A; Wed, 12 Aug 2026 17:17:10 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:10 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=F0jQIfuLBD4YvbYbt B17Ur+g1eyPfBHg0haWS315WfY=; b=Ps62zwBWQBdvVOgLyZTrJjjhjdwvbLf2w esUnWUK1jKGGvXejALZjsHahaDrqPF6kM6IYVtZuSuiBukeGvXVneoALVWuHiJgG NeZ2FhwQG5q4QL0qDhVJ1Mam/dxF+DXa1d5gh4PCh9IpVuQtBUAqt5k01futwpaY k1TLZHlOoB2AEd2ERlXthRTjz32DkdGF/YYPNzUwMLB0NNa17v+WeaqairbWYwIQ rZ4D86xWESzk3LYhNqVJnot2CFD3cWKubc9jOh5PbQHjpd343EjU9GR1FEIYSgg6 0kHk10Nzh1X3k37QmA6XIwQS+/5OijCmnJCG0RvekfLnV9+Ytarqg== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Ilya Leoshkevich , Harald Freudenberger , Eric Farman Subject: [PULL 02/15] tests/tcg/s390x: Test PRNO TRNG interruptibility Date: Wed, 12 Aug 2026 13:16:54 -0400 Message-ID: <20260812171707.1605637-3-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: P0JGy26jVukC8S9aIBWob9GglsNKKX53 X-Authority-Analysis: v=2.4 cv=PbDPQChd c=1 sm=1 tr=0 ts=6a7caa9a cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=rdsRWXD1_pUD-tburKAA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX0pDt8p2psV/6 r5/cSTXSI+U7iYCptYdGWqdpdMW/sFaIQJME3FNGphemN/JBtjHGBwRTGpINELQLbr3JhrMSy1h Q4qLeeDRZKxtIznkpDyYewHW1yzxP44Hx3bw0L3uu50t29Fzx0Ff/DUxuX/tceeI9TQxMspFj48 h+Crr0gWkaBR8MLNd4w9GfM6ae+LYzj5ZeV2tN7fC7gD0+mSF20KPzq56xQPxgxTrCZfyd/XBLN UqhpaWJJu1s+4WhpucSDD9OHLcB1fyC+e14GnZOSNDpwfe+1TK0gZjSikCxpJCRZQRkgUkleKbI 8cYMnHI7hRhcXqCMv/FxXJzxZWIP/V2YsRw0Pi1w8InVbnswC8bZY2Du/sFFAC/XGwuXLnt4Dl8 u7/xHYZdVzfcjBLd1o6yRfvQotQboGymPzYWIIGJs09kHQmYll5lcSWYV54+uMmG8FTc+6ySHYe tDPx+Wdl/ja9E4WHcwQ== X-Proofpoint-ORIG-GUID: P0JGy26jVukC8S9aIBWob9GglsNKKX53 X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX3k60GcZPVxjO eiNNGsVrcHtWl1vgeplmk7oSYTbTeR79T1v3ISh/hsiUPCfO+81PjbhI//9of7a4Dfxe72aSm3F cvf/ZeM2nGVjQ4Dv1E4apPo8O7kkM+Q= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=farman@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555102453158500 Content-Type: text/plain; charset="utf-8" From: Ilya Leoshkevich Add a small test that issues a large PRNO TRNG request while a timer is running, and checks that the timer interrupts it several times. Signed-off-by: Ilya Leoshkevich Reviewed-by: Harald Freudenberger Link: https://lore.kernel.org/qemu-devel/20260714191948.342204-3-iii@linux.= ibm.com Signed-off-by: Eric Farman --- tests/tcg/s390x/Makefile.target | 1 + tests/tcg/s390x/prno-trng.c | 67 +++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 tests/tcg/s390x/prno-trng.c diff --git a/tests/tcg/s390x/Makefile.target b/tests/tcg/s390x/Makefile.tar= get index 0ca030ded0..48cba4cdfa 100644 --- a/tests/tcg/s390x/Makefile.target +++ b/tests/tcg/s390x/Makefile.target @@ -75,6 +75,7 @@ Z13_TESTS+=3Dvcksm Z13_TESTS+=3Dvstl Z13_TESTS+=3Dvrep Z13_TESTS+=3Dprecise-smc-user +Z13_TESTS+=3Dprno-trng $(Z13_TESTS): CFLAGS+=3D-march=3Dz13 -O2 TESTS+=3D$(Z13_TESTS) =20 diff --git a/tests/tcg/s390x/prno-trng.c b/tests/tcg/s390x/prno-trng.c new file mode 100644 index 0000000000..43eea5db1d --- /dev/null +++ b/tests/tcg/s390x/prno-trng.c @@ -0,0 +1,67 @@ +/* + * Test that PERFORM RANDOM NUMBER OPERATION TRNG is interruptible. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include +#include +#include +#include +#include +#include +#include + +static unsigned char buf1[16 * 1024 * 1024]; +static unsigned char buf2[16 * 1024 * 1024]; + +static volatile sig_atomic_t interrupted; + +static void sigprof_handler(int sig, siginfo_t *info, void *ucontext) +{ + struct ucontext *uc =3D ucontext; + unsigned long addr =3D uc->uc_mcontext.regs.psw.addr; + + if (*(unsigned short *)(addr - 4) =3D=3D 0xb93c) { + interrupted++; + } +} + +static void prno_trng(void *b1, unsigned long l1, void *b2, unsigned long = l2) +{ + register unsigned long r0 asm("r0") =3D 114; /* TRNG */ + register unsigned long r2 asm("r2") =3D (unsigned long)b1; + register unsigned long r3 asm("r3") =3D l1; + register unsigned long r4 asm("r4") =3D (unsigned long)b2; + register unsigned long r5 asm("r5") =3D l2; + + asm volatile("0: ppno %[r2],%[r4]\n" /* prno alias for old toolchains= */ + " jo 0b" + : [r2] "+r" (r2), [r3] "+r" (r3) + , [r4] "+r" (r4), [r5] "+r" (r5) + : "r" (r0) + : "cc", "memory"); +} + +int main(void) +{ + struct itimerval it =3D { + .it_interval =3D { .tv_usec =3D 10000 }, /* 0.01s */ + .it_value =3D { .tv_usec =3D 10000 }, + }; + struct sigaction act =3D { + .sa_sigaction =3D sigprof_handler, + .sa_flags =3D SA_SIGINFO, + }; + int err; + + err =3D sigaction(SIGPROF, &act, NULL); + assert(err =3D=3D 0); + err =3D setitimer(ITIMER_PROF, &it, NULL); + assert(err =3D=3D 0); + + prno_trng(buf1, sizeof(buf1), buf2, sizeof(buf2)); + printf("interrupted %d times\n", interrupted); + assert(interrupted >=3D 3); + + return EXIT_SUCCESS; +} --=20 2.55.0 From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555170; cv=none; d=zohomail.com; s=zohoarc; b=iwWLuVRKmYXvasOsADPgnh0S+J6+19FS7qpd9jTmv6xR2rNL4Fw3ywptsxgFiPyrAhh+rKpUTjFRIaUsUyHIYJQluvMsUJOsy5xiG4ZmpgigGYOyK9FS6BFxb/PKQ7w3ZM74SpyjZGK7fqNW658Vme3fVP7pzUTkR67ZUb8a4xs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555170; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=A9zQl+mw+jxPxG/WHO+c2q/QxLiv3vrvoqJeDG3hiS0=; b=CkE0V1nOXpU5XMlgpMnFPFnKiWhdzPFFfIghVNV6qbynHP1FHAfCyjH+BSTsRuoOTIyPSray68haaGAa4K7a3mOvk71QDfssZkcvhYicQoQTcM3q9qCCw57XbOaHY80BQgWuvKoUMcIglkyeXpomjw9KiXLG+a2SPYoTO5gzUF0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786555170914935.91735483281; Wed, 12 Aug 2026 10:19:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCaD-0000FN-3S; Wed, 12 Aug 2026 13:17:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZs-0000B4-CZ; Wed, 12 Aug 2026 13:17:20 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZq-0000pR-EQ; Wed, 12 Aug 2026 13:17:19 -0400 Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1vW74041295; Wed, 12 Aug 2026 17:17:15 GMT Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvq9kpjd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:15 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBGd9026640; Wed, 12 Aug 2026 17:17:14 GMT Received: from smtprelay07.wdc07v.mail.ibm.com ([172.16.1.74]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxh0gf0dd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:14 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay07.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHHCjv19399244 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:17:12 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9182058051; Wed, 12 Aug 2026 17:17:12 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B0E115805A; Wed, 12 Aug 2026 17:17:11 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:11 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=A9zQl+mw+jxPxG/WH O+c2q/QxLiv3vrvoqJeDG3hiS0=; b=RWtQT9vDYfnp4wJ4ZRgnbQgJRBgd8S+Y3 EDld6eHN5xBG2EbAk8jO5tGts8N5dlJnPwUdfvCuGAMBtUu1nIZhUi8qb+Xc78aG IhtyrJSjipygwBxFjjvM+zFxOs1o2QASqBOSXpE5XkecaFzDKh5XmIQ9UQiyv41l xb6DaDetF/XaXavbF/YcJT+UYB9j3aEQdlvY6QSs2uBqr5yRXPF9iOpo6nRi8pYX ly3S+v9bjr8818CFCa6gvJNwZF0ur+iH8BEpIODvfGl0LUWn37ocScQcxZoQUzr5 cUL29W4llp+EVXZ9VP+lUIzwfqhDUcNdWkG283bkhfizPURsKCaXQ== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Ilya Leoshkevich , Christian Borntraeger , qemu-stable@nongnu.org, Richard Henderson , Eric Farman Subject: [PULL 03/15] target/s390x: Fix DR/D INT64_MIN / -1 host crash Date: Wed, 12 Aug 2026 13:16:55 -0400 Message-ID: <20260812171707.1605637-4-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: 5u7cfoqUBc5cgzJEiGrOMwjrvN56W65_ X-Authority-Analysis: v=2.4 cv=PbDPQChd c=1 sm=1 tr=0 ts=6a7caa9b cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=iQ6ETzBq9ecOQQE5vZCe:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=69wJf7TsAAAA:8 a=KKAkSRfTAAAA:8 a=aSik7ZIpPfau7K45Dq0A:9 a=Fg1AiH1G6rFz08G2ETeA:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX4X7WedSKPbWh /tEJ6njsd2jeBsr5IhG2mMaerkH0A2S2YVeqEvdrhQC5SX/0NDEH8LRuz72rJUn/cMT2N0xeSf+ hyQokDld3+vM/csIrEAkmvY4AdcgQoEfq20KbquLmOewK+xNs1PLvp6meoC9hVEtbCXuj1df8ka lM20jj40yYKgyn/gpBleAb1fjV0Xxmj+ng2tAc4O61IBFObZGfkaMayjL8TDYU2ylPk49bgZpHN KT/t3U4Dh9bsugI7v7ojRjBPAnbankUx2ZgoxZffzHJ3UBeah5EZIpNUPp2iUgSOlsWp65OcT5Z OteQ7YbLau2vGAF1SkJPnBf532Wrl9XomM83xwLViRK7EGlV6FJMCfRuKrYeX8TffLrtt+oF4X9 rvx0Q7F+7VjQH7fPRHCgEK6yE9gp4O0POyQESmSj9PlnIMgR3GwIazQqfMuaz+NGo4DyZK3dpSm lvvQyxgZoa4+1jAxbjA== X-Proofpoint-ORIG-GUID: 5u7cfoqUBc5cgzJEiGrOMwjrvN56W65_ X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX3kLPOZ/i0+o5 pO4wkwN1zInUvzsDxp058MZP5zUI1tTdmUasAyuschsGs+rc2hXLpN8QX3i9F9qu5xib92Y1L7N KPH56nf+F9fGj/trzOQWHyVs64AkVRM= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 bulkscore=0 impostorscore=0 malwarescore=0 adultscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 phishscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=farman@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555171981158500 Content-Type: text/plain; charset="utf-8" From: Ilya Leoshkevich helper_divs32() divides the 64-bit dividend by the 32-bit divisor as a 64-b= it host operation, guarding only against a zero divisor. INT64_MIN / -1 theref= ore overflows the host division before the representability check runs; on hosts that trap this, QEMU is killed with SIGFPE instead of raising the fixed-point-divide exception the guest expects: qemu-s390x: QEMU internal SIGFPE {code=3DINTDIV, addr=3D...} helper_divs64() already guards the same case; add the missing check to helper_divs32(). Reported-by: Christian Borntraeger Fixes: b4e2bd3563af ("target-s390: Send signals for divide") Cc: qemu-stable@nongnu.org Signed-off-by: Ilya Leoshkevich Reviewed-by: Richard Henderson Link: https://lore.kernel.org/qemu-devel/20260714190351.337923-2-iii@linux.= ibm.com Signed-off-by: Eric Farman --- target/s390x/tcg/int_helper.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/target/s390x/tcg/int_helper.c b/target/s390x/tcg/int_helper.c index fbda396f5b..5aedd1405b 100644 --- a/target/s390x/tcg/int_helper.c +++ b/target/s390x/tcg/int_helper.c @@ -39,7 +39,8 @@ uint64_t HELPER(divs32)(CPUS390XState *env, int64_t a, in= t64_t b64) int32_t b =3D b64; int64_t q, r; =20 - if (b =3D=3D 0) { + /* Catch divide by zero, and non-representable quotient (MIN / -1). */ + if (b =3D=3D 0 || (b =3D=3D -1 && a =3D=3D (1ll << 63))) { tcg_s390_program_interrupt(env, PGM_FIXPT_DIVIDE, GETPC()); } =20 --=20 2.55.0 From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555195; cv=none; d=zohomail.com; s=zohoarc; b=MzD6M4NGWri3B6jsTqxlHtl9Y3Cr5KH6Nj80mc8PdejHH7odd+D8LrQPlDeBjfW0cczi4nG1sMYkXEMfHVDzC7Fsdn9plTrOYe42Qygln2uoECJfrsTL5pcy0TX7i8gwCRPC/zWU27hV6esr9V07/4oMgbcODhPEWb0EvT1YjoE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555195; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=xsTwaJacnZns4tjWmK+EQ7NMxpfF1EqIVQuGw/npmsE=; b=lLn6m/Pgr9dqVXf0CYJkXBiHyoo1sa+4qXamH4+SiJQLvYFhF2tXpQYxbGQ/WH4V70x4SuyY1ZyhO6F2eN5UFs8ur10ZlY+F5iO3sH5WXUtMJNPV5RxdiLTyGHzQrLBVc4LDzHyU2sqwvylVhtBqCjTFg/jFGYTxJIQns+TYSDI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786555195767899.7238516959259; Wed, 12 Aug 2026 10:19:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCaD-0000GP-9L; Wed, 12 Aug 2026 13:17:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZs-0000B5-Dc; Wed, 12 Aug 2026 13:17:22 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZq-0000pY-H2; Wed, 12 Aug 2026 13:17:20 -0400 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1TTK4087974; Wed, 12 Aug 2026 17:17:16 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvm9us2p-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:15 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBQcG017599; Wed, 12 Aug 2026 17:17:14 GMT Received: from smtprelay01.wdc07v.mail.ibm.com ([172.16.1.68]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxg9h72my-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:14 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay01.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHHDmu4719372 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:17:13 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 569895805C; Wed, 12 Aug 2026 17:17:13 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B20715805A; Wed, 12 Aug 2026 17:17:12 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:12 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=xsTwaJacnZns4tjWm K+EQ7NMxpfF1EqIVQuGw/npmsE=; b=gubgwXFeJqvFlDaIqUObGhIebnUwGhYs9 uRnB00AnExUnizGwb/niGB1ZA5IOozi0tXAXSNDeoBOnOs9btppBtMx7VH4Ui8CP 7NHrsa5XxvE1BTDSw1NPiCuPV7Bfsezsc6bmu+ISan/MjOtStIck5oPJYKzcLd7V 8nFq0DQA0sM8CurMtOuJufo8omYV/eQn/BHdNUgaOJxj6kywj9+o/+7r4/cdMORH e4QegcmNiokALyBYfCZq9LF0JcVjDVG7+q1GlEtYcqr3Ndid0fRm/apFA11ZSsMT 3bsgSFvIeJD3WNHMTFSaX1QnWvR/zXQ9B2AciA4/kDno7EYYJ2+nQ== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Ilya Leoshkevich , Richard Henderson , Eric Farman Subject: [PULL 04/15] tests/tcg/s390x: Test DR overflow (INT64_MIN / -1) Date: Wed, 12 Aug 2026 13:16:56 -0400 Message-ID: <20260812171707.1605637-5-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX3YAXLOHZcVH0 od4nszWg8FkrUx4tSSEqq+aDzF3oLypIQUyjLusArC6P43VRywUTx4ceXm6OY1F2PgpjWPuh/4t 2ioWQ05oBI7sNd2EiKO0URd9yYNyfC10n+28cdmupyne9IrLUWQEgqBJdWeUi9MdUXBChjes1Px diH8OKCHjXrJixzT0TflPrtUz1L9u3lYlnI8Wg2v38mii547/P2KTPqDxYD/0wewpl7w4HGNHDy XKgXl/2m7WT2mred2Uuuh0d74TPfu9WjvovwO8+UVommCmgkJA3I9m8FG+Bx3vElGXLvYb+LcQB RrYdSLlTpHFg7tFDko++ygoXYldPylmckmQMFCypkeDb1VJA3fDMeaVYFyjBjv2y06WdAmyGEKI wChwkPspi7pkgFSZRZCw8GK14fnuV13pTjqkmkTT3Z7/krjW/lfqNKa8o4WGFOR1IeMWmbY6Not zDA/GhrQg7mUKke4yJA== X-Proofpoint-ORIG-GUID: 7myvyHF9deMbSN8syftzTE17h4wH_383 X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfXz9g4kyYOyQgW egTGY87usZF7t998Uln324Z4JRYxF83/oVl9AIky2Xc5M3igiufYlckyN7E+sPH6rldI2spB9Xg +kViUkDtwXW2tAko7/ZGTC+VKHoKoDA= X-Authority-Analysis: v=2.4 cv=IfK3n2qa c=1 sm=1 tr=0 ts=6a7caa9b cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=KKAkSRfTAAAA:8 a=ZZ0oepHopxe46yikozEA:9 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: 7myvyHF9deMbSN8syftzTE17h4wH_383 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=farman@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555196140158500 Content-Type: text/plain; charset="utf-8" From: Ilya Leoshkevich Check that DR with a non-representable quotient raises SIGFPE rather than crashing the emulator. Signed-off-by: Ilya Leoshkevich Reviewed-by: Richard Henderson Link: https://lore.kernel.org/qemu-devel/20260714190351.337923-3-iii@linux.= ibm.com Signed-off-by: Eric Farman --- tests/tcg/s390x/div.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tests/tcg/s390x/div.c b/tests/tcg/s390x/div.c index 6ad9900e08..124c9ecc33 100644 --- a/tests/tcg/s390x/div.c +++ b/tests/tcg/s390x/div.c @@ -1,6 +1,15 @@ #include +#include #include =20 +/* Set asynchronously by the signal handler. */ +static volatile int signum; + +static void signal_handler(int n) +{ + signum =3D n; +} + static void test_dr(void) { register int32_t r0 asm("r0") =3D -1; @@ -65,11 +74,39 @@ static void test_dlgr(void) assert(r =3D=3D 1); } =20 +/* + * The most negative dividend divided by -1 yields a quotient that does not + * fit into 32 bits, so DR must raise a fixed-point-divide exception. + */ +static void test_dr_overflow(void) +{ + struct sigaction act =3D { .sa_handler =3D signal_handler }; + register int32_t r0 asm("r0"); + register int32_t r1 asm("r1"); + int32_t b =3D -1; + int err; + + err =3D sigaction(SIGFPE, &act, NULL); + assert(err =3D=3D 0); + signum =3D -1; + + r0 =3D 0x80000000; + r1 =3D 0; + asm volatile("dr %[r0],%[b]" + : [r0] "+r" (r0), [r1] "+r" (r1) + : [b] "r" (b) + : "cc"); + assert(signum =3D=3D SIGFPE); + + signal(SIGFPE, SIG_DFL); +} + int main(void) { test_dr(); test_dlr(); test_dsgr(); test_dlgr(); + test_dr_overflow(); return 0; } --=20 2.55.0 From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555150; cv=none; d=zohomail.com; s=zohoarc; b=WbUQYckYYs5+clptoGhGrMIqnirhBPjitLm6TDq8SA6fAJ+t9R2rLSRUTCqSzOxVBmnBlvhKRx+GXzuMgvY0WSV3lCqdiQAvu52f3RwDYF4yb87jbd4d1kEG5ysP0R1wnJ0miWxtbBBEYE7dtfXyHTm0ZIWqn1OVx4zdSde9K2A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555150; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=d+bOpsQyZ4Qo+aghcCwFgomuFCOIi+NHh5co1tsalc4=; b=Pd7ARxWtFKOmO7d5Ttf4WsiW4G5uEkyshtxyFlwLzbngIHV6ncP7mTFBM2k8UhEzg4Habdt5lDAAxET1J3+982QtBV2BJ8GlT+VmFE8xhNTn24d9i+k47dnO63C6IuRmYCeYXwA8vCxMp0AfeDCP5YpxQ7kkW214GYgShq0kbx0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786555150620340.6732587869809; Wed, 12 Aug 2026 10:19:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCbO-0001D1-0N; Wed, 12 Aug 2026 13:19:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZu-0000B9-5C; Wed, 12 Aug 2026 13:17:25 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZr-0000pa-17; Wed, 12 Aug 2026 13:17:21 -0400 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1ag74088179; Wed, 12 Aug 2026 17:17:17 GMT Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvm9us2s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:16 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBFdZ017010; Wed, 12 Aug 2026 17:17:16 GMT Received: from smtprelay02.wdc07v.mail.ibm.com ([172.16.1.69]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxesq79yd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:16 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay02.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHHEMb26673810 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:17:14 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1DAAF5805E; Wed, 12 Aug 2026 17:17:14 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 76A015805A; Wed, 12 Aug 2026 17:17:13 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:13 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=d+bOpsQyZ4Qo+aghc CwFgomuFCOIi+NHh5co1tsalc4=; b=QA3UAlSqY5qPegT6Rp9rfOxmktesNi3oH lh8K4dklGbjeQuZomPD9flQ1NbOqQlBxpE5fDshYkGiBfHl5IpvWpBe1ifD/6qfE EVNFVFx8QQEkXfiTqZv5Kn898V8fuhXvydiDCUq8dFlxbyUz+c3J3j1DwbDe8A/m Jq6eOxrZBfSslOfyPSP7knyPuERIU96vGroSUJnZ/1wuCcGLk+fYU4iFC/OExThq Ce+3ZctW25Go8Rn9H7E9IyqNYwC+/uhoX+jMzgSAjYdRPX7e1J7fK5jfE6nl45IR OCmEval40oFczN21/jakkeHZAjhfv9C0um+F3uVazW6+8URQd8yUg== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Christian Borntraeger , qemu-stable@nongnu.org, Eric Farman Subject: [PULL 05/15] hw/char/sclpconsole-lm: avoid guest triggerable assert Date: Wed, 12 Aug 2026 13:16:57 -0400 Message-ID: <20260812171707.1605637-6-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfXwG4TpNsV/X6E NsGPZI4XqKk4cuwUkjKp4JSpnYCtikNfNFqZZnnuhwHmbETa5UVv8+2edR+hxhYOCauprqKtTi5 v8QKUrAjXOTUrkNGMfCPDnozlgNmu4/bJBUX04wZvIgHMdQI/+672veIAjUBrFzsngsgVYN3rts KX+n9X19KSId5e60kWo/vLvyCpdGSKf9RysRwEEG/IbXD/TOrmDB9QCrReiyiLdJDfVWKv4fhLE NJJN6haQ4GHdqflkgKwPtB8DCZ5huE2nmZLZyt1UOVZLnr7Mo7RzDL8A1V4b0ER+2xmKm4hAtRc fQECVvOkTvmn1xmwEXDwHMU9p2mLdjme4RptUV0ORYXImNtFUeOBYTTE4MdG+BnEfwIM6O9pfNq 39L4IB42sU6YPR9Nhu7Z5zDgd2GI8dzLxOPvL/HfxZpf/9OGqlRgpKsh67IPaiRktxUbTgPpCHA p/8SuKflWlltyKGSiEQ== X-Proofpoint-ORIG-GUID: rMc0InwwmXZcvXnzCoUoCe-gfZ9RrWMF X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfXyjDCFUyR6NKP 8dqCqwnY6N84t6aNcDFmjNSURJJhbXWMy+sAnXGrg2KRH9A0jj1oZcd8mLYslyB4fI9Q6nnaQLD exdXTIKnNp1ggVDIYXFxP0yjG6LN7YI= X-Authority-Analysis: v=2.4 cv=IfK3n2qa c=1 sm=1 tr=0 ts=6a7caa9c cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=69wJf7TsAAAA:8 a=rU110a7sRXBWuev9ilUA:9 a=Fg1AiH1G6rFz08G2ETeA:22 X-Proofpoint-GUID: rMc0InwwmXZcvXnzCoUoCe-gfZ9RrWMF X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=farman@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555151865158500 Content-Type: text/plain; charset="utf-8" From: Christian Borntraeger If a guest uses incorrect message length it can trigger an assert in process_mdb which kills the guest instead of reporting an error. Fix this by adding the correct length check. Fixes: 6a444f8507 ("s390/sclplmconsole: Add support for SCLP line-mode cons= ole") Cc: qemu-stable@nongnu.org Signed-off-by: Christian Borntraeger Reviewed-by: Matthew Rosato Reviewed-by: Eric Farman Link: https://lore.kernel.org/qemu-devel/20260727115052.24289-2-borntraeger= @linux.ibm.com [farman@linux.ibm.com: Fixed typo in commit message, added qemu-stable] Signed-off-by: Eric Farman --- hw/char/sclpconsole-lm.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/char/sclpconsole-lm.c b/hw/char/sclpconsole-lm.c index 9a16896d22..f6ed282f1b 100644 --- a/hw/char/sclpconsole-lm.c +++ b/hw/char/sclpconsole-lm.c @@ -243,7 +243,8 @@ static int write_event_data(SCLPEvent *event, EventBuff= erHeader *ebh) SCLPConsoleLM *scon =3D SCLPLM_CONSOLE(event); =20 len =3D be16_to_cpu(data->mdb.header.length); - if (len < sizeof(data->mdb.header)) { + if (len < sizeof(data->mdb.header) || + len > be16_to_cpu(data->header.length) - sizeof(EventBufferHeader)= ) { return SCLP_RC_INCONSISTENT_LENGTHS; } len -=3D sizeof(data->mdb.header); --=20 2.55.0 From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555196; cv=none; d=zohomail.com; s=zohoarc; b=G8cS09aJ7/QcW3xgxXZSorrce+U/8lRPGrpt79HGI6deUA7mKiXJNnMZqIMmCI8JUqjqgWZmP2F6nZqI7wDuxckcHiTCjDhQjzfVUF+vrIsFx0/iHBqqZU1QWW6JEWK3Ln0Iv4hW09IVEF055Ryjcpw95FcxnXBz0u0hdJu4CsU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555196; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fasaxa3s0cFJXhcLUoG/5b2B1eGESqNk+/nZhkxlW7o=; b=oKNkpdIFwH6K1oh3lfSPOhkWXvCrYmzc11bQj+fVoWWlefH4caj6d1YeGfwB85Hxvh/tbCW2h4iCdlcCtgUCUY9NJdMrNpXrkQKu+a3NQQ/0C8p1w6R3szYrTj7TFXVIvEP5UdGNJLn0C0ik/P42NU935NYJPHYLE3QqQCY3Y7g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786555196239735.6330461608591; Wed, 12 Aug 2026 10:19:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCbB-00013K-Tl; Wed, 12 Aug 2026 13:18:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZw-0000BH-3e; Wed, 12 Aug 2026 13:17:25 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZs-0000q1-Or; Wed, 12 Aug 2026 13:17:22 -0400 Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1fwL2985504; Wed, 12 Aug 2026 17:17:18 GMT Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fyb23v81r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:17 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBIXF017315; Wed, 12 Aug 2026 17:17:16 GMT Received: from smtprelay03.wdc07v.mail.ibm.com ([172.16.1.70]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxesq79yf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:16 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay03.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHGajH3211880 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:16:37 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E7A375805A; Wed, 12 Aug 2026 17:17:14 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3E54858060; Wed, 12 Aug 2026 17:17:14 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:14 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=fasaxa3s0cFJXhcLU oG/5b2B1eGESqNk+/nZhkxlW7o=; b=H6rMf7+rXGQDomK9YjBrWlFaiEIuQr42+ Ww4NQM1K4BzZ0pfeKDudybk60dgFn1MgbZXvFO5j+JnzLB+APVkNN6Za55DMIFjh 2KIhpAe2paVHLQ1NQozYvKkKEd2LDUg9EMrTXZ5tBxDt/xLXYXvB+ldRqW0SRqhU Do/L9Pfy01AYWzyhndH/AH9uVkWqZF7cIlr/vrwBq7WaWm33qjYt0QBwS4zac3Go /xKBrZ9pZVp1ZnYPlJ/Y9a508R8gLaYIc4Jq79RvOD55tgBDjuUtwa0V7QYsD3pI vMNCpcR94XsIbpBYH+OFWCNb2g43+8oCtrt1QqIzj2UZvq3/2/Wuw== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Joshua Daley , qemu-stable@nongnu.org, Christian Borntraeger , Eric Farman Subject: [PULL 06/15] s390x/ipl: validate num_comp against iplb length before iterating Date: Wed, 12 Aug 2026 13:16:58 -0400 Message-ID: <20260812171707.1605637-7-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=XqfK/1F9 c=1 sm=1 tr=0 ts=6a7caa9d cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=69wJf7TsAAAA:8 a=bjQa_1rzhB0BTgrvudgA:9 a=Fg1AiH1G6rFz08G2ETeA:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX7jj3XOGcy2eC dFumuqOTBnGeJKxdceF5+wFqGqWSlVwYsdQwzCNKtQ1jFfNv7E2dZJCy0IIPPFrh2011m1U+LPZ fYQy4RiA1lM9gjHxnZz9FiRVbvInIFMFMxglPq1KAGbkLeprH3nHoRIKMNjm8Igvgiom0/kvP07 Alcb5DR7QMdd3veRntOccWQvNo6ZKr/h7UqT3WKMG4WFhQuAfFtzr31Yw3gWmN9VVw9EWeg9CBf E8D0N9mS7VdRJank/iG29yDDJteMgnwSq2n+2gSSFh2CeCvi5n1U+tOf8wVunOS1bobdc6f7XB1 y4v4ktAKeVIQrFsXD+A9Dr+cxDIOwvNkvWYOX00zrtNklKM1Qd/CqSrPdCuVOqMxmiatRr1C7qw XQTGZDwEY8DX3q57jWzbR8RLbbAG6+7JvfujKNDH7IkivRed7Rk3UAsYdGVOE5l7YZt+uUxy/GC /4uUXSJ8F+Xyd5LUJTQ== X-Proofpoint-ORIG-GUID: aBQAfGB5Eu86ePerIhCc0IFMfIN0x6oS X-Proofpoint-GUID: aBQAfGB5Eu86ePerIhCc0IFMfIN0x6oS X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX75UMcnHRmvNh xPCHG21T/o0gv9PqoLmcbytjb0VetePH7N0bPyLkohTzgOLCgdZj5a4+1t+DWFFgGq9qwErrtZo 41ZEqLdfZpj4IRLjn05HvtwFruSRT6I= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 spamscore=0 adultscore=0 malwarescore=0 clxscore=1015 suspectscore=0 priorityscore=1501 impostorscore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=farman@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555198133158500 Content-Type: text/plain; charset="utf-8" From: Joshua Daley In ipl_valid_pv_components(), the upper bound of the for loop, ipib_pv->num_comp, is read from guest memory. Before iterating, verify that its value will not cause a read beyond the end of the IplParameterBlock. Fixes: c3347ed0d2ee42a7 ("s390x: protvirt: Support unpack facility") Cc: qemu-stable@nongnu.org Signed-off-by: Joshua Daley Reviewed-by: Christian Borntraeger Reviewed-by: Matthew Rosato Reviewed-by: Eric Farman Link: https://lore.kernel.org/qemu-devel/20260727115052.24289-3-borntraeger= @linux.ibm.com [farman@linux.ibm.com: Added qemu-stable] Signed-off-by: Eric Farman --- hw/s390x/ipl.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h index fac30763df..ef9c063d90 100644 --- a/hw/s390x/ipl.h +++ b/hw/s390x/ipl.h @@ -124,6 +124,12 @@ static inline bool ipl_valid_pv_components(IplParamete= rBlock *iplb) return false; } =20 + if (offsetof(IplParameterBlock, pv.components) + + ipib_pv->num_comp * sizeof(IPLBlockPVComp) > + be32_to_cpu(iplb->len)) { + return false; + } + for (i =3D 0; i < ipib_pv->num_comp; i++) { /* Addr must be 4k aligned */ if (ipib_pv->components[i].addr & ~TARGET_PAGE_MASK) { --=20 2.55.0 From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555211; cv=none; d=zohomail.com; s=zohoarc; b=YJ9RkL5dmcV9dmCAwuL86DiHrL7hOjfdUL4EeGHSj2zxdqRUafl1GWJddQYvlWvMUp3yfUglPdP21uinp4Bd+C3+sa1UiPpqet3o1YSCEUAGteZS3uvMb0sccsYq92vtgUA6YskM/6udoKUe8iABC+pHif/AZBEWQXfZ7GeZJ7g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555211; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2RbTbGmrU4jKsusYtZsy/euM0jgTxne1kpJ+lAsgieE=; b=nQbru/WFXlEJ0PIZJ6RfsEemfKD6RRxfj1cwKLGYtLPFXFdI1lI9BmnfCyGRpm8Y397YQi0d3A4VHQigtQLlU+yNq9ZsnTHvQP9BwV2nhBc2BeCUmnfkn528RGpwixvv1H8YrUf7HPnY85LkJ0j7EWFnvKspEzmoGJwbftX0+UU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786555211913477.7149426050686; Wed, 12 Aug 2026 10:20:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCbC-00014I-3V; Wed, 12 Aug 2026 13:18:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZw-0000BG-3P; Wed, 12 Aug 2026 13:17:25 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZs-0000q2-PA; Wed, 12 Aug 2026 13:17:22 -0400 Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1fpU4120470; Wed, 12 Aug 2026 17:17:18 GMT Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvnwavhr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:17 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBQDI028255; Wed, 12 Aug 2026 17:17:17 GMT Received: from smtprelay03.wdc07v.mail.ibm.com ([172.16.1.70]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxfsjy4sj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:17 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay03.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHGbnT3801630 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:16:37 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BBF565805A; Wed, 12 Aug 2026 17:17:15 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 14D785805F; Wed, 12 Aug 2026 17:17:15 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:14 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=2RbTbGmrU4jKsusYt Zsy/euM0jgTxne1kpJ+lAsgieE=; b=eunrdSvJR7MDEgrol4dD6uGbrIQELFR72 T8j2/bxZYC7wUg+DNMfQJWV5pM9ouTAg73A35pp9RrqfHmO5pp0YS0nFB0dZ5qI7 vrPcq6NDaMmybkPWOj64ZQNoV9vX9p6bof37XicQ+2yN1Z30aaZOuHIrr/e01/SQ 1Mnti8T4Rck62+kBd/MFtywTobJYGqg9bIHk2uwv0gfKKFbgLxYGfABFkOV1o2CW OVDde4hgfJ1Cpe7xnWdnQrUip/5Q6k8sVFHgLBKE3YOcoEIxmVNGd2oAAbbcWLSL KP9Vd+EsNRJHhgiRQjvf/UR/5JDsJ7wndspJ/Kbz/54Z5FKLBcIog== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Joshua Daley , qemu-stable@nongnu.org, Christian Borntraeger , Eric Farman Subject: [PULL 07/15] pc-bios/s390-ccw: fix out-of-bounds read in iso_get_file_size() Date: Wed, 12 Aug 2026 13:16:59 -0400 Message-ID: <20260812171707.1605637-8-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=RsP16imK c=1 sm=1 tr=0 ts=6a7caa9d cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=69wJf7TsAAAA:8 a=7LMK5Y9_BSpTnHNW6BwA:9 a=Fg1AiH1G6rFz08G2ETeA:22 X-Proofpoint-GUID: ioL8opsAL5sZapMHPsrYxjLbV1WYzX0s X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX01NRvxmJLOCm PFEjNVQjdzPTFTFD31Ra2uLPIitDYVlgnePdtGgLczMY+4Lkw2uJOoc0SaFNv8amZi39WhSRUe4 23ykukfHji26Qd+AqK9nB10kX+hyFSk4aaWdCgN1Q4duP00+pmnCb0PVbjQPflgIM6MwaDqoJPX NWQnjKKeCHNxWbLXcYwiZ7xEV/KMMjh3vOr7SpH7NFcMInLvmC3p7sS0YPGHYgBrXi+cSWg69nb R3sW3vD7kzQQ/ZGTlgA4YovaAaWhjddis422zxT9X6PY14zKOIAvEEG1TaRKc87cu/I2TegpLMl 2xAJxDz3ApIXPOFiO9PR/T2D4JRljHu+Cezcvm3f9YxBJxIjLUED4Jm7z0yYEnHy1pnJyJgzVkJ +Nhtm1I2n5ojo1sTa1SsctCSRxzlPc9XPhqTfHGcY+PI/BRJxR4AMhyIbbjzkXrC92L6eUWQpme hNHXm9FD4nb+EHawFyg== X-Proofpoint-ORIG-GUID: ioL8opsAL5sZapMHPsrYxjLbV1WYzX0s X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX9RvAAl6Hb6SF lB73wDVPaPV9D/8CNvpKfEYSO9It5Ge6jOl9aGzxgQZUUZlBhVKBWzQCkxK8EEC3/6f39ji45+P oIU2Eh4w+wU9JuAKunO4tNYbuXIOh5A= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 impostorscore=0 suspectscore=0 clxscore=1015 malwarescore=0 phishscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=farman@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555212280158500 Content-Type: text/plain; charset="utf-8" From: Joshua Daley In the dir_rem[level] =3D=3D 0 case, level is decremented, then a virtio_read() is issued on sec_loc[level]. If level is -1, then the 4 bytes before the static sec_loc array are read, and the virtio_read() is issued on that garbage block number. Guard the call to virtio_read() against the value of level to prevent this. Fixes: 869648e87eeb ("pc-bios/s390-ccw: El Torito 16-bit boot image size fi= eld workaround") Cc: qemu-stable@nongnu.org Signed-off-by: Joshua Daley Reviewed-by: Christian Borntraeger Reviewed-by: Matthew Rosato Reviewed-by: Eric Farman Link: https://lore.kernel.org/qemu-devel/20260727115052.24289-4-borntraeger= @linux.ibm.com [farman@linux.ibm.com: Fixed typo on Christian's tag, added qemu-stable] Signed-off-by: Eric Farman --- pc-bios/s390-ccw/bootmap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c index 420ee32eff..ed6e8cbbc7 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -902,7 +902,7 @@ static inline long iso_get_file_size(uint32_t load_rba) if (dir_rem[level] =3D=3D 0) { /* Nothing remaining */ level--; - if (virtio_read(sec_loc[level], temp)) { + if (level >=3D 0 && virtio_read(sec_loc[level], temp)) { puts("Failed to read ISO directory"); return -EIO; } --=20 2.55.0 From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555180; cv=none; d=zohomail.com; s=zohoarc; b=j0mNL8YPgsGk8s3jFyNPrnvNX4vTffaiL7Vj+ZWj1lS57lsO010dXjrKlVIJ07wKXGDmm9Vn34VAq7FtiLPfMF6MkxYnxwKjftqugh8CaiyFCIwwWXexUrlPOZo68zNvPy5QyVRPh69Q/vCr5Aqmkozd3nO0axldpZUV1EvDFNE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555180; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=tKEcQzRy7FjgxVEkaNvxNwpQ96rGVzRmn+OAUpHIq+4=; b=M+VPpJWiQD09sZn8rPrWkAq5DueALMnn/7SITtP4mdx9RPW1EFi2FYTPEOody4T0xb6axtS7ARb2/BKYcVWDZLYUOyse6jV24xb0RmKzgPnqS3RiEp1ZnDD9D+EcSKKROgtZD/GlqcJSJemZa9lpXIXWvfHgQAXYNSv7LbCn49U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786555180060415.8085154144038; Wed, 12 Aug 2026 10:19:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCb2-0000md-Mg; Wed, 12 Aug 2026 13:18:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZw-0000BI-6h; Wed, 12 Aug 2026 13:17:25 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZt-0000qn-CL; Wed, 12 Aug 2026 13:17:23 -0400 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1X314088095; Wed, 12 Aug 2026 17:17:19 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvm9us2x-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:19 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBGX7025460; Wed, 12 Aug 2026 17:17:18 GMT Received: from smtprelay04.wdc07v.mail.ibm.com ([172.16.1.71]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy6x8a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:18 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay04.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHHGkt40305396 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:17:16 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7F35A58051; Wed, 12 Aug 2026 17:17:16 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DE9FE5805C; Wed, 12 Aug 2026 17:17:15 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:15 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=tKEcQzRy7FjgxVEka NvxNwpQ96rGVzRmn+OAUpHIq+4=; b=raGrfJdhl4IotgL2viQ+SmeojiZaJc5LY C3YaFrdfmxAiXcZbYw8Te3aPhnpKWsblAVWEi7roZBOeUtEI2z8OTpbz8r4Xx0bo KDCL9NZ/38AyNKAxuruJWMcYrHG+UIDTFihwrA6bDUbQwAQYpmRCyzK2OVfh+LLa /CSbBzr1Vzy5tfhIgx3F3k/KD2tl4zzw54dCc4Xtvv8lgWWn/OVfM78SnU6kHZA6 90+2POlt5ZOiuIAXAkmF8MtNlXVkJT746sA1KUQ4QmwqeC3r338K+50p8kUqoHCr fYLh+RLcu6vbLPr6zVTlRMdFQw7m0SQttPhKE1kGTsQYxZTSSTc4g== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Joshua Daley , qemu-stable@nongnu.org, Eric Farman Subject: [PULL 08/15] pc-bios/s390-ccw: bounds-check zipl menu entry index before array write Date: Wed, 12 Aug 2026 13:17:00 -0400 Message-ID: <20260812171707.1605637-9-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX7UpoPgHhQP8V tDem8sRYVPDSVqInV0N+vYkDdbivqtvYyPRcXcYLsWEp05aIlHJ74EwvVNrpQ1Nlpjv7kQ94K9r o4CQjDLN8+P+rG5pi7j4zCzFYI2PB8IEQ5Y0F0U4PCQdCNc6cz/ufyKMQoBD2NiCObKFY2hvxxI nAKt/HOdKZCppARxQ9DIRhljw31Foa/KoYAJ9vk4OPvGxFEXkTlESG5hsnVdEC0abLeJDycm7Aq Tg5sZ8yESlGxlxGVvUEYHw2QsMgK7r5/70StY9+oVQkWgqF6FzU3xFG0x+m0JfhgXHY5G/JaeWo 0MrY3OQK9XsyxJTHHobPss2lrE2Mhm/EZHa8SW0i/mzJCP2FS2gAeohPtEUSBWvJNwbkdYJ9m29 q6yHl6+ni6jaCQlnOWvN4tzy5qt2GFqipYVcwI+ww5kjHfZ5N5qQXxL1IFL2fFdCyLCCufFjwL3 p3laHTUT1KxNPAuZWyg== X-Proofpoint-ORIG-GUID: rOR-EdBGBWGJaDrD8SXddFel0KglBctt X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfXyHgZDkDUAqEg 69Y6wFbWkxozgEQdlJs91poQq3JKg2R9W6JZM5YKPn0BrSMuQjuhJZFAYyB1iIbjt9Q7zla0Zc/ /A4TfV7uG6+xb5gUgnlFT5k49Bh1uBU= X-Authority-Analysis: v=2.4 cv=IfK3n2qa c=1 sm=1 tr=0 ts=6a7caa9f cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=69wJf7TsAAAA:8 a=K1TfFEnDoUzuEk3QFlUA:9 a=Fg1AiH1G6rFz08G2ETeA:22 X-Proofpoint-GUID: rOR-EdBGBWGJaDrD8SXddFel0KglBctt X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=farman@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555182060158500 Content-Type: text/plain; charset="utf-8" From: Joshua Daley menu_get_zipl_boot_index() iterates NUL-separated strings from the zipl stage-2 boot-menu block, passes each to zipl_print_entry() which converts EBCDIC to ASCII and returns atoi(), then writes true into valid_entries[entry]. valid_entries is a MAX_BOOT_ENTRIES element stack array, but entry was never bounds-checked, so a crafted on-disk value could index arbitrarily beyond the array. Fix this in two places: - zipl_print_entry() now validates that the first significant character (after an optional leading space) is a digit. Entries that fail this check return -1 without printing. - menu_get_zipl_boot_index() skips any entry whose index is outside [0, MAX_BOOT_ENTRIES) before writing to valid_entries[]. Fixes: 7385e947fc65 ("pc-bios/s390-ccw: fix non-sequential boot entries (ec= kd)") Cc: qemu-stable@nongnu.org Signed-off-by: Joshua Daley Reviewed-by: Matthew Rosato Reviewed-by: Eric Farman Link: https://lore.kernel.org/qemu-devel/20260727115052.24289-5-borntraeger= @linux.ibm.com [farman@linux.ibm.com: Added qemu-stable] Signed-off-by: Eric Farman --- pc-bios/s390-ccw/menu.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pc-bios/s390-ccw/menu.c b/pc-bios/s390-ccw/menu.c index eeaff78f87..b6a9a56d46 100644 --- a/pc-bios/s390-ccw/menu.c +++ b/pc-bios/s390-ccw/menu.c @@ -176,18 +176,24 @@ int menu_get_boot_index(bool *valid_entries) return boot_index; } =20 -/* Returns the entry number that was printed */ +/* Returns the entry number that was printed, or -1 on invalid entry */ static int zipl_print_entry(const char *data, size_t len) { char buf[len + 2]; + const char *p; =20 ebcdic_to_ascii(data, buf, len); buf[len] =3D '\n'; buf[len + 1] =3D '\0'; =20 + p =3D (buf[0] =3D=3D ' ') ? buf + 1 : buf; + if (!isdigit((unsigned char)*p)) { + return -1; + } + printf("%s", buf); =20 - return buf[0] =3D=3D ' ' ? atoi(buf + 1) : atoi(buf); + return atoi(p); } =20 int menu_get_zipl_boot_index(const char *menu_data) @@ -216,6 +222,9 @@ int menu_get_zipl_boot_index(const char *menu_data) entry =3D zipl_print_entry(menu_data, len); menu_data +=3D len + 1; =20 + if (entry < 0 || entry >=3D MAX_BOOT_ENTRIES) { + continue; + } valid_entries[entry] =3D true; =20 if (entry =3D=3D 0) { --=20 2.55.0 From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555182; cv=none; d=zohomail.com; s=zohoarc; b=XNdFPNVqIuaPSgAm2GCBZkncFZTy1P4HnaPDmeSJ82JdXczPYh7RPIsL2An++QDKPRQ8cbE9ZQLBW4kBE2fLw38J+oDmiMtpj7bmZZ45p0hbS1SUxxQfLunHHUUOqpBp3o0z1nRS8L/yxbGE/ff9qIlWyc33Xd1PF1uEfvvAKto= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555182; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CJD1s9Rhsrn5cw+mOiPzDVsFYoH6nFn6C8Su43oA/Ro=; b=SrpTHeSf10Cb0WRSJviOGK/cJ16dgIdpDj8c/vIVEy9Av3Xyn01C0d0bHidxQhO+M+fk7ZCimoGhLtaFVrTAiO65dnikc/0aasfIE2oP0CUaq8UgYJN5akG/O+Rfw07Vg2ehIBp41YAVwdXCmE7d/yXjpVKsb62tFa+8lWPeY38= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786555182515994.50933418174; Wed, 12 Aug 2026 10:19:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCbV-0001Ov-Iz; Wed, 12 Aug 2026 13:19:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZx-0000CD-Ut; Wed, 12 Aug 2026 13:17:27 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZs-0000qb-Sk; Wed, 12 Aug 2026 13:17:24 -0400 Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1dXd4120439; Wed, 12 Aug 2026 17:17:19 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvnwavhs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:18 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBGX6025460; Wed, 12 Aug 2026 17:17:18 GMT Received: from smtprelay04.dal12v.mail.ibm.com ([172.16.1.6]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxhfy6x8b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:18 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay04.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHHHTc32768592 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:17:17 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 41CBC58051; Wed, 12 Aug 2026 17:17:17 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A0D045805C; Wed, 12 Aug 2026 17:17:16 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:16 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=CJD1s9Rhsrn5cw+mO iPzDVsFYoH6nFn6C8Su43oA/Ro=; b=RrBEjfBpeiAcK0C9hjogS5lX+GypMzprI dv7JWmWqdGGW9WbLxDzXa13kJrtqMUXJeOT27GarW80giFP2lAiNnDeP2Hy5LyHu SvgDOidPgj5ok3Ve0gjLtkmaLHiotG2CP3ZKvOQaEIduAUWqSW0zk1ZSIg4yKhhU 6tje7YdKPfEeYlLAxOnM989b71sB/xbYfiC0N1pLmIzs2NEQzFA0IbP/G2OqYW8X A2Y8wo0MGnvwoGfVL+mGmIftHp1bx/UwAMQqZjgJelMc4mogERWEyQvue6vJCwkX 0O2333bzbg8LepRMVUkLOTynzi0tybiT7A8Up6dGkhb7b8Li6lgkw== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Joshua Daley , qemu-stable@nongnu.org, Eric Farman Subject: [PULL 09/15] pc-bios/s390-ccw: bound zipl menu strlen and replace VLA in zipl_print_entry Date: Wed, 12 Aug 2026 13:17:01 -0400 Message-ID: <20260812171707.1605637-10-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=RsP16imK c=1 sm=1 tr=0 ts=6a7caa9f cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=69wJf7TsAAAA:8 a=OmDNG2-DsvkCiAtxb_cA:9 a=Fg1AiH1G6rFz08G2ETeA:22 X-Proofpoint-GUID: YSqIi20wIH5KE20VvgIGVq7aDSd0ulFN X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX1RGCi9c0lorV dA3m2S80O2fXUt0QKeuiwyB0dDbqIpGT2Org2rjauIBDSBvIt5tFwj11yBSK4YFK1//bzkY+mVI 3vPu7gwLW6g2zBHQyphD3Y0U8VJz269bCSrw1FCza8yonFdZ+BYtWCtZ5gvfjOouqG6fOcjsU60 1YGCb+Jj/B5JXnfbgOBXux62jbnAp6wq4KnKbtQ+RqR/rx8iJY2o1B2R4kzpOwuNpUbjemj6RH8 ntwGRqeX70HE36yw8VEd43RPK6hlwtR+LJcvyGqCDp27O9aSgZ0QSvEOB8ADODkgP2ftOTa0ZAJ wL2XyzmqTuGW25+W4a8ygs6pB3VK3e4G938olwOxwCLIu9jpQBoyiQbPxSZv1b1WBW0sqfkYViK 5RzmgNXvyr+YFQHH2N6ReZ+oVHXAssUjPH4se2VwjMLkFbtfWXO8+pSpm91lPXWrRiUx2OVOhNH LNSYnKB087/Q1FQaEuQ== X-Proofpoint-ORIG-GUID: YSqIi20wIH5KE20VvgIGVq7aDSd0ulFN X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfXxi4p3kJFB113 I4qGUgxkBxDgszHBH2LmfvxOzqXW9Vi6bSw0YBPI6KRo/mKEA2Vu1dIKtBO8UPe02bidb6kTbVG S+16OkY9tpR2UPaAN2bj5RlA09p7STg= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 impostorscore=0 suspectscore=0 clxscore=1015 malwarescore=0 phishscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=farman@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555184144158500 Content-Type: text/plain; charset="utf-8" From: Joshua Daley menu_get_zipl_boot_index() calls strlen() on a pointer into the middle of _s2 with no upper bound, so a stage-2 image whose blocks contain no NUL bytes causes strlen() to walk beyond _s2. The resulting length is then used to size a stack VLA in zipl_print_entry(), risking a stack overflow. Fix by: - Implementing strnlen(), a bounded version of strlen(). s390-ccw uses libc from SLOF, which includes strlen() but does not have an implementation of strnlen(), so we must implement our own. - Adding a menu_data_end parameter to menu_get_zipl_boot_index() and replacing both strlen() calls with strnlen() bounded by the remaining buffer space. The loop guard also checks that the pointer has not reached menu_data_end. The function returns 0 (boot default) if somehow menu_data reaches menu_data_end before printing any entries. - Replacing the VLA char buf[len + 2] in zipl_print_entry() with a fixed ZIPL_ENTRY_MAX + 2 (82-byte) buffer and truncating len before use. - Passing s2_end (_s2 + sizeof(_s2)) as menu_data_end at the one call site in eckd_get_boot_menu_index(), so the bound is exactly the end of the buffer. Fixes: f7178910845a ("s390-ccw: print zipl boot menu") Cc: qemu-stable@nongnu.org Signed-off-by: Joshua Daley Reviewed-by: Matthew Rosato Link: https://lore.kernel.org/qemu-devel/20260728134704.2924005-2-jdaley@li= nux.ibm.com [farman@linux.ibm.com: Per list, add strnlen rationale to commit message and added cc stable] Signed-off-by: Eric Farman --- pc-bios/s390-ccw/bootmap.c | 4 +++- pc-bios/s390-ccw/helper.h | 10 ++++++++++ pc-bios/s390-ccw/menu.c | 29 +++++++++++++++++++++++------ pc-bios/s390-ccw/s390-ccw.h | 2 +- 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c index ed6e8cbbc7..81512265ce 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -61,6 +61,7 @@ static uint8_t _s2[MAX_SECTOR_SIZE * 3] __attribute__((__= aligned__(PAGE_SIZE))); static void *s2_prev_blk =3D _s2; static void *s2_cur_blk =3D _s2 + MAX_SECTOR_SIZE; static void *s2_next_blk =3D _s2 + MAX_SECTOR_SIZE * 2; +static void *s2_end =3D _s2 + sizeof(_s2); =20 static inline int verify_boot_info(BootInfo *bip) { @@ -308,7 +309,8 @@ static int eckd_get_boot_menu_index(block_number_t s1b_= block_nr) } } =20 - return menu_get_zipl_boot_index(s2_cur_blk + banner_offset); + return menu_get_zipl_boot_index(s2_cur_blk + banner_offset, + s2_end); } =20 prev_block_nr =3D cur_block_nr; diff --git a/pc-bios/s390-ccw/helper.h b/pc-bios/s390-ccw/helper.h index 8e3dfcb6d6..d9b7da444a 100644 --- a/pc-bios/s390-ccw/helper.h +++ b/pc-bios/s390-ccw/helper.h @@ -45,4 +45,14 @@ static inline void sleep(unsigned int seconds) } } =20 +static inline size_t strnlen(const char *s, size_t maxlen) +{ + size_t len =3D 0; + + while (len < maxlen && s[len]) { + len++; + } + return len; +} + #endif diff --git a/pc-bios/s390-ccw/menu.c b/pc-bios/s390-ccw/menu.c index b6a9a56d46..9b81154b0e 100644 --- a/pc-bios/s390-ccw/menu.c +++ b/pc-bios/s390-ccw/menu.c @@ -16,6 +16,7 @@ #include "s390-ccw.h" #include "sclp.h" #include "s390-time.h" +#include "helper.h" =20 #define KEYCODE_NO_INP '\0' #define KEYCODE_ESCAPE '\033' @@ -26,6 +27,9 @@ #define ZIPL_TIMEOUT_OFFSET 138 #define ZIPL_FLAG_OFFSET 140 =20 +/* Max printable chars for a zipl boot menu entry */ +#define ZIPL_ENTRY_MAX 80 + #define TOD_CLOCK_MILLISECOND 0x3e8000 =20 #define LOW_CORE_EXTERNAL_INT_ADDR 0x86 @@ -179,9 +183,13 @@ int menu_get_boot_index(bool *valid_entries) /* Returns the entry number that was printed, or -1 on invalid entry */ static int zipl_print_entry(const char *data, size_t len) { - char buf[len + 2]; + char buf[ZIPL_ENTRY_MAX + 2]; const char *p; =20 + if (len > ZIPL_ENTRY_MAX) { + len =3D ZIPL_ENTRY_MAX; + } + ebcdic_to_ascii(data, buf, len); buf[len] =3D '\n'; buf[len + 1] =3D '\0'; @@ -196,7 +204,7 @@ static int zipl_print_entry(const char *data, size_t le= n) return atoi(p); } =20 -int menu_get_zipl_boot_index(const char *menu_data) +int menu_get_zipl_boot_index(const char *menu_data, const char *menu_data_= end) { size_t len; int entry; @@ -212,13 +220,22 @@ int menu_get_zipl_boot_index(const char *menu_data) timeout =3D zipl_timeout * 1000; } =20 - /* Print banner */ + if (menu_data >=3D menu_data_end) { + return 0; /* Boot default */ + } + + /* Skip banner */ + len =3D strnlen(menu_data, menu_data_end - menu_data); + menu_data +=3D len + 1; + if (menu_data >=3D menu_data_end || !(*menu_data)) { + return 0; /* No entries, boot default */ + } + puts("s390-ccw zIPL Boot Menu\n"); - menu_data +=3D strlen(menu_data) + 1; =20 /* Print entries */ - while (*menu_data) { - len =3D strlen(menu_data); + while (menu_data < menu_data_end && *menu_data) { + len =3D strnlen(menu_data, menu_data_end - menu_data); entry =3D zipl_print_entry(menu_data, len); menu_data +=3D len + 1; =20 diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index 1e1f71775e..f6030a6071 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -76,7 +76,7 @@ void jump_to_low_kernel(void); =20 /* menu.c */ void menu_set_parms(uint8_t boot_menu_flag, uint32_t boot_menu_timeout); -int menu_get_zipl_boot_index(const char *menu_data); +int menu_get_zipl_boot_index(const char *menu_data, const char *menu_data_= end); bool menu_is_enabled_zipl(void); int menu_get_enum_boot_index(bool *valid_entries); bool menu_is_enabled_enum(void); --=20 2.55.0 From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555240; cv=none; d=zohomail.com; s=zohoarc; b=YtiCjePUNxKuRviedXs6WZL1T9gQB0dpvLU9eMFaN7S8A2V9PBGsVDJedKwvbt3QXvohj8yIr29B2oC0oNGbwfte44gmuK7ZCCuNfYZoVKKjNK6hSIa6H6PceARZ7zWt4cveFm5YSCoTuyMa6++sQBHl4bmaLsYY/SvwwCHgycY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555240; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=bIqvEqumVE6zjmRJH3V7MmfwDS0t6/wmZ5092Yrczhg=; b=irftTT6ZSl0Nomzpz0hPvFOTqtKnUbgXqZm0iOu3yOL0s1l3VKWZHs7REk/05ZgFFaloOu9zUkB1yHYCrZPCFdsU0mfyBZXHYCEbXCILM75lBTzskPQykUqwzC1ONPf+OL0xsWpxwfWufEG6h6H9el2kdC8Q6JFZcAyRIxcg/Mw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786555240961988.8737840295146; Wed, 12 Aug 2026 10:20:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCbc-0001tJ-Cv; Wed, 12 Aug 2026 13:19:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZx-0000CB-Ui; Wed, 12 Aug 2026 13:17:27 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZu-0000re-JF; Wed, 12 Aug 2026 13:17:25 -0400 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1eGE4088460; Wed, 12 Aug 2026 17:17:20 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvm9us32-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:20 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBLA2017558; Wed, 12 Aug 2026 17:17:19 GMT Received: from smtprelay05.dal12v.mail.ibm.com ([172.16.1.7]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxg9h72n1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:19 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay05.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHHILL53543422 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:17:18 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 035F258051; Wed, 12 Aug 2026 17:17:18 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 623C25805C; Wed, 12 Aug 2026 17:17:17 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:17 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=bIqvEqumVE6zjmRJH 3V7MmfwDS0t6/wmZ5092Yrczhg=; b=MvCKsRHWXu60DiDQ4tu5mnOlNH0YnYi5Q Y2mPP3i0+4koziYBfcrkoT4LkKpxwGIuHzBRQFQwHR/kmpa5CTThWQelgP5b3Rnf CXdoVDD2dLsn8daftsazmpoi1sttvKBooxSLgxY6ro5Hof75Ac4Vy/9ejzHz3yua hEQ4LlQQ5tZflrl1tUEvRAxoyRuwQVlxO9snPiA1IQXL3tgV4tIdljdsNWmvSBV+ yaY0xm7BGonOEJdnqQe5JXtnwn5dOGLPxs16OHUQqbMuX2yhGpTFbQ7yMj87fKcg VDA4WcerV16PJMR71Ykm0MWaUGgQ0764/LsSnFZ6UuQxAtaaFhfvQ== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Jared Rossi , qemu-stable@nongnu.org, Eric Farman Subject: [PULL 10/15] pc-bios/s390-ccw: Fix off-by-one errors with loadparm and boot entries Date: Wed, 12 Aug 2026 13:17:02 -0400 Message-ID: <20260812171707.1605637-11-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX41aLjnV7UFU9 Na/QDAzf/Q2uRx58O6UAymq7oBC9WmARR+SELkra6wpqHfnu9vA51oYRDkuJPBvFVtV0HrjjR38 nIjb3GZNci/iMiVl8qIESXiR6dfOOirx6I9OgJo2G29w3RXoFpVj4nrlVQ64a6//Q8bg0Wtanjw QySmyrTuTwmri6CcGtQ9CGlZf+OJbylf57Cq98IX/spp7wVTHibbJL56ykttM4obixue3G6Hwd3 SP1u2lE1JeY6ECpyvuqnUcPUcgm+zmzctA0oYSw8IWeP6OUm1VypIRrWzuktELoIm7xbTwuq9Eb pACswDV+RE8Tal/91KzxQPrJn1yHukodlxr2W9prOUt/Np9yTqHyuZbfvjSOeCnVs9VQkbECwZq 4T9aFwb+5rfbrPa9gA0GCki2f+ZMrnFwiY+49IkYQFAEqSFSoQztLEVMFFlyzzxbnUJj1Lzl7Ej SS2pcg5JQ6aO77TRnJA== X-Proofpoint-ORIG-GUID: 8kqfQGbeq8bj5lNReq6NtCek_9wqWNsr X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX0LWhU2FHIJcf NfKwT3SbnyGO0KAtOVVrV7oqn/8aLGANSr4kEOqWodKAkCYIYZsOiPBfYag+TAuXcF7iFtO4BPj 1NpdjeB+VEKFxGObjVpwG4BWYZX/Uls= X-Authority-Analysis: v=2.4 cv=IfK3n2qa c=1 sm=1 tr=0 ts=6a7caaa0 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=69wJf7TsAAAA:8 a=VFx-KdROuyEcXuZeOuwA:9 a=Fg1AiH1G6rFz08G2ETeA:22 X-Proofpoint-GUID: 8kqfQGbeq8bj5lNReq6NtCek_9wqWNsr X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=farman@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555242699158500 Content-Type: text/plain; charset="utf-8" From: Jared Rossi The loadparm may optionally be used to select a boot entry, with the intended range being 0 through 31 inclusive, for a total of 32 entries. Previously, MAX_BOOT_ENTRIES was defined as 31, indicating that it was intended to correspond to the index of the boot entry rather than the count; however, some guards also used MAX_BOOT_ENTRIES as a count of the maximum allowed entries, which resulted in a mismatch between the intended and actual range such that index 31 could never be used in practice. Move the definition of MAX_BOOT_ENTRIES to qipl.h so it is shared and change the value to 32, representing a count of the maximum number of allowed boot entries and allowing the loadparm to accept values 0 through 31 as intended. Update some instances in the netboot code where MAX_BOOT_ENTRIES was used as the max index so that all guards treat MAX_BOOT_ENTRIES as a count across all boot methods. Cc: qemu-stable@nongnu.org Fixes: 806315279d5c ("pc-bios/s390-ccw: Remove panics from ECKD IPL path") Signed-off-by: Jared Rossi Reviewed-by: Matthew Rosato Link: https://lore.kernel.org/qemu-devel/20260728223013.4047042-1-jrossi@li= nux.ibm.com Signed-off-by: Eric Farman --- include/hw/s390x/ipl/qipl.h | 2 ++ pc-bios/s390-ccw/netmain.c | 11 +++++++---- pc-bios/s390-ccw/s390-ccw.h | 2 -- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/include/hw/s390x/ipl/qipl.h b/include/hw/s390x/ipl/qipl.h index 8d3c83a80b..b390f2f112 100644 --- a/include/hw/s390x/ipl/qipl.h +++ b/include/hw/s390x/ipl/qipl.h @@ -20,6 +20,8 @@ #define LOADPARM_LEN 8 #define NO_LOADPARM "\0\0\0\0\0\0\0\0" =20 +#define MAX_BOOT_ENTRIES 32 + enum S390IplType { S390_IPL_TYPE_FCP =3D 0x00, S390_IPL_TYPE_CCW =3D 0x02, diff --git a/pc-bios/s390-ccw/netmain.c b/pc-bios/s390-ccw/netmain.c index 651cedf6ef..791854fce0 100644 --- a/pc-bios/s390-ccw/netmain.c +++ b/pc-bios/s390-ccw/netmain.c @@ -40,6 +40,9 @@ #define DEFAULT_BOOT_RETRIES 10 #define DEFAULT_TFTP_RETRIES 20 =20 +/* Index 0 is reserved for default alias, start PXE cfg indices at 1 */ +#define PXECFG_MAX (MAX_BOOT_ENTRIES - 1) + extern char _start[]; =20 #define KERNEL_ADDR ((void *)0L) @@ -381,13 +384,13 @@ static int net_select_and_load_kernel(filename_ip_t *= fn_ip, =20 static int net_try_pxelinux_cfg(filename_ip_t *fn_ip) { - struct pl_cfg_entry entries[MAX_BOOT_ENTRIES]; + struct pl_cfg_entry entries[PXECFG_MAX]; int num_ent, def_ent =3D 0; =20 num_ent =3D pxelinux_load_parse_cfg(fn_ip, mac, get_uuid(), DEFAULT_TFTP_RETRIES, cfgbuf, sizeof(cfgbuf), - entries, MAX_BOOT_ENTRIES, &def_ent); + entries, PXECFG_MAX, &def_ent); =20 return net_select_and_load_kernel(fn_ip, num_ent, def_ent, entries); } @@ -470,11 +473,11 @@ static int net_try_direct_tftp_load(filename_ip_t *fn= _ip) * a magic comment string. */ if (!strncasecmp("# pxelinux", cfgbuf, 10)) { - struct pl_cfg_entry entries[MAX_BOOT_ENTRIES]; + struct pl_cfg_entry entries[PXECFG_MAX]; int num_ent, def_ent =3D 0; =20 num_ent =3D pxelinux_parse_cfg(cfgbuf, sizeof(cfgbuf), entries, - MAX_BOOT_ENTRIES, &def_ent); + PXECFG_MAX, &def_ent); return net_select_and_load_kernel(fn_ip, num_ent, def_ent, entries); } diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index f6030a6071..25aac91d45 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -82,8 +82,6 @@ int menu_get_enum_boot_index(bool *valid_entries); bool menu_is_enabled_enum(void); int menu_get_boot_index(bool *valid_entries); =20 -#define MAX_BOOT_ENTRIES 31 - __attribute__ ((__noreturn__)) static inline void panic(const char *string) { --=20 2.55.0 From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555211; cv=none; d=zohomail.com; s=zohoarc; b=RpehFv58r8A9FuBTL0zT1WQIWw2i4MQP5V4+X4O3Ag77IcCIuznjf0AwsLBwY8Mczady2ogQs2xTB1iQgSTgmNTAPCs4nqDryf5y+v5xG/ZoQ6IVDrNV0p2KThaRIDpFO37C0S5VTqCbo/S0DLlELZvh4MHG/TCi8lcIG/NTLMM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555211; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=iF6+DE2D89tXUFrXy8RPVc2//VeLdgIExeDcvlgSGIQ=; b=NP5xmy/I4cvV8tKpzaJ0rMq2NU/XThZqgxxZzr3Wmik2MjSmer315d9ot5UvCgj6HuHNdc6LFO/Txirkd3IDA6oRp2IxoEULgvDX51DBK4YymM5upfAgtIGddytfnq9RN7OdB81SI3ytYuShjSwoacDR/AE8+xW2hGbQ6dlbLHI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786555211371117.99139734959306; Wed, 12 Aug 2026 10:20:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCaz-0000fU-4k; Wed, 12 Aug 2026 13:18:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZz-0000CG-QB; Wed, 12 Aug 2026 13:17:29 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZw-0000sM-F2; Wed, 12 Aug 2026 13:17:27 -0400 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1aFo4088182; Wed, 12 Aug 2026 17:17:22 GMT Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvm9us38-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:22 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBGXD026637; Wed, 12 Aug 2026 17:17:21 GMT Received: from smtprelay05.dal12v.mail.ibm.com ([172.16.1.7]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxh0gf0dv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:21 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay05.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHHIHM30474864 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:17:18 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C822E58051; Wed, 12 Aug 2026 17:17:18 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 22CB05805C; Wed, 12 Aug 2026 17:17:18 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:18 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=iF6+DE2D89tXUFrXy 8RPVc2//VeLdgIExeDcvlgSGIQ=; b=fx6s8veCnmackN4trZ/NA+hosotFjzF0a g7UCizkJtl4INcAv+eNrcSp3rxLLu7H4D1j3QgDa8SGII8WO3cowMKPrtUa2OHMd 8CbAFBNKzxwqG9y1Hx9Xwjg2xWaF5x3aIF01dOVfL0f9PWV1XWP9gMWOiqL6dOVu HnZ4LEh0UiFB9bFCF/nGu9awSYk+ePODdSap5fzXgfor31Lh5cmoxA3+Docjs1KB 4mrDZPLcQSJys/c8tMRSvvwK/3xXtXSBJ4KH1idQJDYehaI1SNPjGTiVhVdVpEyf Flfx7wI6kSrmR9VFgEUYcY9Fgbp7Kj3Dp8SzkIMCZNk/fGRW1CRMA== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Ilya Leoshkevich , Ido Plat , qemu-stable@nongnu.org, Eric Farman Subject: [PULL 11/15] target/s390x/tcg: Set STCK/STCKF condition code after the store Date: Wed, 12 Aug 2026 13:17:03 -0400 Message-ID: <20260812171707.1605637-12-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX5usiNBpm/m/X 9Z5e2wMjmtmgWJCFB8HBMjS6GXXatbYmKIULX3PGlx1onFHFHSoX6OS8x9b+Dr5ummF4W99nFhV pj9IZNfeWYk/dnpcCsv10nfVtYf4cgG0AZ7LNiiv7RJb2iKM2vzECg0k7LAlRwDF0CiY1clTfjE 8uc19n4qBBYddGzExi8wXDFOGdxexwiCtGVZmyn0sYjk1WseVYtEmhUlZG9Q1sV2PPG24dNiIj3 Cms3O3UICARqAP/doC9eIqoxY1SHiQ89FnncXrce+XueoIC3Nhyryk2vVs9l5h5AxuC4rXEELz1 2/aGUQOi5mtb6cfdMFnwWR0iEDIZH3p51cojvZcqThvMXFYmiHWNkwohs1XymlP4EyE3ks8LOCn gfQ8wTHgrXR3zHUMChFMLK6BCK/OBUCqo69xxFbzZ3w7DRw0SaZYJVrQkEJkYfqZnxTIy/1UNCP ozctass78UFNu4tjrfQ== X-Proofpoint-ORIG-GUID: DY1HtQOU9w6MYbG84BiRE2T1TVnNFkdr X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfXzI2fEU+qMBm0 76/9J3PKC8Ckh4RNPX3F2fTQt+U0bTfFEn7JToxN9VYcmqDOpHIPYuk6nuMgJQoOvTXJSNfpiA8 aVNjDPMvrkPLkaDnKfMNaKhE3OB1+eU= X-Authority-Analysis: v=2.4 cv=IfK3n2qa c=1 sm=1 tr=0 ts=6a7caaa2 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=U7nrCbtTmkRpXpFmAIza:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=69wJf7TsAAAA:8 a=xh9t286rN22ytdcU0UYA:9 a=Fg1AiH1G6rFz08G2ETeA:22 X-Proofpoint-GUID: DY1HtQOU9w6MYbG84BiRE2T1TVnNFkdr X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 adultscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=farman@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555212295158500 Content-Type: text/plain; charset="utf-8" From: Ilya Leoshkevich STORE CLOCK [FAST] to an inaccessible address aborts QEMU: $ qemu-s390x ./stckf ERROR:cc_helper.c:128:cc_calc_addu: assertion failed: (carry_out <=3D 1) op_stck() sets the condition code with gen_op_movi_cc() before the output operand store, which is deferred to wout_m1_64(). Assigning a constant condition code discards the lazy CC values, so the optimizer drops the writes that produced them. When the store then raises an exception, the instruction is suppressed and s390x_restore_state_to_opc() reinstates the cc_op recorded at the start of STCK[F], but cc_src/cc_dst now hold stale values, so the next condition code evaluation reads garbage. Fix by performing the store manually. The alternative of not discarding in gen_op_movi_cc() keeps the inputs live, but results in less optimal code. Reported-by: Ido Plat Fixes: 434c91a5f4ed ("target-s390: Convert STCK") Cc: qemu-stable@nongnu.org Signed-off-by: Ilya Leoshkevich Reviewed-by: Eric Farman Link: https://lore.kernel.org/qemu-devel/20260714203206.363028-2-iii@linux.= ibm.com Signed-off-by: Eric Farman --- target/s390x/tcg/insn-data.h.inc | 4 ++-- target/s390x/tcg/translate.c | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/target/s390x/tcg/insn-data.h.inc b/target/s390x/tcg/insn-data.= h.inc index 0d5392eac5..1ea72248a6 100644 --- a/target/s390x/tcg/insn-data.h.inc +++ b/target/s390x/tcg/insn-data.h.inc @@ -887,8 +887,8 @@ C(0xe32f, STRVG, RXY_a, Z, la2, r1_o, new, m1_64, rev64, 0) =20 /* STORE CLOCK */ - F(0xb205, STCK, S, Z, la2, 0, new, m1_64, stck, 0, IF_IO) - F(0xb27c, STCKF, S, SCF, la2, 0, new, m1_64, stck, 0, IF_IO) + F(0xb205, STCK, S, Z, la2, 0, new, 0, stck, 0, IF_IO) + F(0xb27c, STCKF, S, SCF, la2, 0, new, 0, stck, 0, IF_IO) /* STORE CLOCK EXTENDED */ F(0xb278, STCKE, S, Z, 0, a2, 0, 0, stcke, 0, IF_IO) =20 diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c index 82165ac1ec..1b6023168b 100644 --- a/target/s390x/tcg/translate.c +++ b/target/s390x/tcg/translate.c @@ -4108,7 +4108,9 @@ static DisasJumpType op_stap(DisasContext *s, DisasOp= s *o) static DisasJumpType op_stck(DisasContext *s, DisasOps *o) { gen_helper_stck(o->out, tcg_env); + tcg_gen_qemu_st_i64(o->out, o->addr1, get_mem_index(s), MO_BEUQ); /* ??? We don't implement clock states. */ + /* Set the CC after the store; a suppressed store must preserve it. */ gen_op_movi_cc(s, 0); return DISAS_NEXT; } --=20 2.55.0 From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555205; cv=none; d=zohomail.com; s=zohoarc; b=VInjqu9R99YuAt110jdIEs/OlSW7mtOGKgo46FPdwom2jPTk+UzYW3MKK4GpM20HBVyU9BrOowH3+xQrO9WrRdtiVnSzKJGvgKs8p3A7pogsZmOOiuWwVydmyXgjKBe9SNOwFff9yNnShMnNnp7XDzfmJMYcEQbAjvtfcI4+t7k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555205; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=V8ptzNmyKPu+vshmq8One2xrd6HnqQ3TnrA9WxtukJE=; b=MzZDvGXyjuhQEJ3kYxr/sghNc8sh825EWZdzdSjPx+36BZ7gKQE2XGT5J4NMZ+kVlLKP6TMy7YswBBV/v/IsI/GRIDzZwVUUT8OGmofTV6JY7KbXx6Q3wu98ymFevGiVGl6ukGfhYkMVe+kK2mcH24JxEd6J7glStAXqxqUCDUU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178655520597580.91646334053428; Wed, 12 Aug 2026 10:20:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCbY-0001Yx-FG; Wed, 12 Aug 2026 13:19:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZz-0000CF-Po; Wed, 12 Aug 2026 13:17:29 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZw-0000rw-52; Wed, 12 Aug 2026 13:17:27 -0400 Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1RCT2217797; Wed, 12 Aug 2026 17:17:21 GMT Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvk03qc2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:21 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBGZV026634; Wed, 12 Aug 2026 17:17:20 GMT Received: from smtprelay06.dal12v.mail.ibm.com ([172.16.1.8]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxh0gf0dr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:20 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay06.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHHJ7p33358400 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:17:19 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7AE2D58051; Wed, 12 Aug 2026 17:17:19 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E7FA45805C; Wed, 12 Aug 2026 17:17:18 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:18 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=V8ptzNmyKPu+vshmq 8One2xrd6HnqQ3TnrA9WxtukJE=; b=pSRaPObeDpVW1AFtS2yWLCZ7ktSAp2XLN x62NAzMNUhl9Sp2lCGTRm8fg0AyinoydoSWRBI1igsGHJ9DF4T+KM3Rd/svEZHUO XQf1l5PcNGpLrjc90aj8+21xKGreuU1DhFVMvTrkSGJKB2WtKhC+ToNV8WjZTRO7 f7KGSg6FOBRVM1rmYdvjgMafOC+14+flk8UqWkmlQ+dWbBfGTG/rz8k5PuAZ9otj tST/B3K1OZc0LBA4D0kzXcyedj6uQjHxNDjZRsWhRJqZjRqaIv2gB/47h5AyHVMh b1sF+j3vM1M0s5q0cwDwOg3RiQhNpuR4lO3krMkBXGKxx/s58w0KA== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Ilya Leoshkevich , Eric Farman Subject: [PULL 12/15] tests/tcg/s390x: Test STCKF condition code on a faulting store Date: Wed, 12 Aug 2026 13:17:04 -0400 Message-ID: <20260812171707.1605637-13-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX+gUCSQ5ayV8j KDKSmVyNEnF7e8wJVrx6GDWb273DM0iHetlddATANXk8WuyIu6bHlbwIdJaP/g866Fe+/VAzAAu wRkk2uZlvHmlZ82LcpZilaWd8F63wyAm5TGM6OjsOWKWGTCW31Zmo0YF6sZeOl53kvuc+FgkOMe WxnKNUiDGZFaRfDTFtzBL3bhdX/bcFWavIu46HvX6Nvk6pXkZjONY36uIiEUJXezicK2Adsre2c KK579FsM8aBv1mB8sz2CqS4ak66/s0Y3NQ++ie1Znyk1yFDl719smpH1wsHkNQHtebJQpXEvQqn pPo+xHE9sDf/oSNyjueuGVJM7OZFyiUlWgd+rYZfx/bZE0AtM2zY1pB/bK2LAeAMJ9GLEJwprWk 4BaOxR/w1Kf/jaK026VGLB+WyVfSN5tB29aUs4VolYt0zoWy+fqM7xPfU00rjtWxtfLYFTdKei8 9bW2TbXG770kFK3zlPA== X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfXxW9Wfs9whloe b8UTLxjUKORXmCTWPO+PqCw8oQiOi5BUPMymgPs54rMcKzSqyTNlU0eLpAqLAinV603ncs6sUaS MyRKsNkBud1aakcMkupwsDhrPBfVRXQ= X-Authority-Analysis: v=2.4 cv=RqD16imK c=1 sm=1 tr=0 ts=6a7caaa1 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=WP8Cd5ww1JR6ZgQUb_gA:9 X-Proofpoint-GUID: JZBn4a5r-82JgeQe2O_SOe_2oV1rkkMB X-Proofpoint-ORIG-GUID: JZBn4a5r-82JgeQe2O_SOe_2oV1rkkMB X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 suspectscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 bulkscore=0 malwarescore=0 impostorscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=farman@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555208277158500 Content-Type: text/plain; charset="utf-8" From: Ilya Leoshkevich Add a small test to prevent regressions. Signed-off-by: Ilya Leoshkevich Reviewed-by: Eric Farman Link: https://lore.kernel.org/qemu-devel/20260714203206.363028-3-iii@linux.= ibm.com Signed-off-by: Eric Farman --- tests/tcg/s390x/Makefile.target | 1 + tests/tcg/s390x/stckf.c | 44 +++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 tests/tcg/s390x/stckf.c diff --git a/tests/tcg/s390x/Makefile.target b/tests/tcg/s390x/Makefile.tar= get index 48cba4cdfa..97c0f02190 100644 --- a/tests/tcg/s390x/Makefile.target +++ b/tests/tcg/s390x/Makefile.target @@ -50,6 +50,7 @@ TESTS+=3Dcvb TESTS+=3Dts TESTS+=3Dex-smc TESTS+=3Ddivide-to-integer +TESTS+=3Dstckf =20 cdsg: CFLAGS+=3D-pthread cdsg: LDFLAGS+=3D-pthread diff --git a/tests/tcg/s390x/stckf.c b/tests/tcg/s390x/stckf.c new file mode 100644 index 0000000000..51c8c9df9f --- /dev/null +++ b/tests/tcg/s390x/stckf.c @@ -0,0 +1,44 @@ +/* + * Test that a faulting STORE CLOCK FAST does not clobber the condition co= de. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include +#include +#include +#include + +static void handle_sigsegv(int sig, siginfo_t *info, void *ucontext) +{ + mcontext_t *mcontext =3D &((ucontext_t *)ucontext)->uc_mcontext; + + /* The condition code must be the one set by SLGR, not garbage. */ + _exit(((mcontext->psw.mask >> 44) & 3) =3D=3D 3 ? EXIT_SUCCESS : EXIT_= FAILURE); +} + +int main(void) +{ + struct sigaction act =3D { + .sa_sigaction =3D handle_sigsegv, + .sa_flags =3D SA_SIGINFO, + }; + int err; + + err =3D sigaction(SIGSEGV, &act, NULL); + assert(err =3D=3D 0); + + asm volatile( + "lghi %%r1,100\n" + "lghi %%r2,0\n" + "clgr %%r1,%%r2\n" /* CC_OP_LTUGTU_64 */ + /* cc_src=3D100 is not valid for CC_OP_SUBU */ + "ipm %%r0\n" /* force cc_src to env */ + "lghi %%r3,5\n" + "lghi %%r4,3\n" + "slgr %%r3,%%r4\n" /* CC_OP_SUBU, cc=3D3 */ + "lghi %%r5,0\n" + "stckf 0(%%r5)\n" /* faults; cc must stay 3 */ + : : : "r0", "r1", "r2", "r3", "r4", "r5", "cc", "memory"); + + return EXIT_FAILURE; +} --=20 2.55.0 From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555151; cv=none; d=zohomail.com; s=zohoarc; b=MSHrLLR3+7ZgFcyNHaBqN+hzKa5GkGE302QqkmHOUMYW3RD4N+zQ6bggQ3BuisoX7ADF2BsrcEMAicIuO9KTtR/3lDF83h8KJw7HswCUyl1l4pgp+SIR4Vn0AjMQlkRZaEtuQyejrEk9cnY63uGzpmpR/jNkCFiuQ20G53wynLY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555151; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ADIKM5DZN6RQjOVun8HuFP5MmkgrDtqqGtx9FiosaVg=; b=dM6yILCp9iL5eywUZHdtZ/P9Xg/HFTBn4ziYT26/qNnz4e1gBEJrik7q0uIkakxFKERBShcYtudcbLWGwLx/hxKFDruxERdUTghPXee8OJCcxXWfteuNZ7x+wn3TWORllbIq53C2wLCXmvt1++3rX271CEGbg9e5/5wtdoeO7uY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786555151887434.2756204542136; Wed, 12 Aug 2026 10:19:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCb2-0000n7-Ni; Wed, 12 Aug 2026 13:18:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCa1-0000D4-Nc; Wed, 12 Aug 2026 13:17:35 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZw-0000sE-4Y; Wed, 12 Aug 2026 13:17:28 -0400 Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1edT3994427; Wed, 12 Aug 2026 17:17:22 GMT Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvp32vpv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:21 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBG5j017015; Wed, 12 Aug 2026 17:17:21 GMT Received: from smtprelay07.dal12v.mail.ibm.com ([172.16.1.9]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxesq79yv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:21 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay07.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHHKAP19202696 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:17:20 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3A8D958051; Wed, 12 Aug 2026 17:17:20 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9B1A85805A; Wed, 12 Aug 2026 17:17:19 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:19 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=ADIKM5DZN6RQjOVun 8HuFP5MmkgrDtqqGtx9FiosaVg=; b=gQF2c3kSiaSs4+hPIOla4ERqHoJlOzxFX cH5wN/rbU9qVIHtsOTBde7Dx77dE7ba7usKy5eU4vyLnWnhiJ8hqfxSpS2glJhfd LVwqvi+4UJHV+vDAoGclvLos4exV37O2slZhMrgkYh5LrQ4zvs1iyDsoByVX7K7H EFocFLMAgkPGBs1VVYSNz9743QL+63sQ/f7dfRAjsmSxk8twl/UicPpJiuzIa5L+ Labnaz0LukyHVN0V/UpbD3GfPXzDSKVNFx/JXJ0lRiP/o7qktacq99Qct8BcNDMi 7HM21NwyB38ycGdgSSO5M6lOdTrC+aq+gIX2KKdRZXTn6cn5f5xPA== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Claudio Imbrenda , Eric Farman , Hendrik Brueckner Subject: [PULL 13/15] target/s390x: Allow 2G hugepages guest backing Date: Wed, 12 Aug 2026 13:17:05 -0400 Message-ID: <20260812171707.1605637-14-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=AMtp2X5w c=1 sm=1 tr=0 ts=6a7caaa2 cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VwQbUJbxAAAA:8 a=VnNF1IyMAAAA:8 a=PXhQOlaz77BmCqgndx4A:9 X-Proofpoint-GUID: RaoSlZj-0Npc9_Ows0VQjTUY58d_Vhmq X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX1DcXcKV75aBa xi3VXWRyOnjrUW/HbW/WSY2T3VYq0VmmvXCO5aJ2Gd7UaXHCCO/ltW/VLOc1wnZfC6nEGtyTzLB 7/Ha9K3Bcb4E84womGL/RLOgmjZCTBEbcVp0A1kDHFj9TVaUV0vEnjuUhPDy9q3HWz6Hl4yEHn9 GXlnA5VP/U1X2YYESku5rvsgaoZjV5r8A5nFyLRudVjUcg8/KwPVcywIDQZrow+KMf29Rmnq2Hi jMhSZKUyIY+iYl2RgGqQTJ4vJGwSGYseolcyy+EwTu3OYoap8yXi5jxWSICAz6YENrZ86qY3Jx1 rWpW6IWZOgOQG7OECUrTM0Ig+REVJeAFiA9zGrRaH7cvS/mYuaplP7WcSviL6yDeLBG1TEAbsa5 R+khvIAQXAqL/B4xRxQLFLYo4g0CR64Lr1WQTk+mUiZxp8Iu2EH8FLja5KUA2vgOtN2UyWNwSY+ Ms4viugmcGoJGnH+kdg== X-Proofpoint-ORIG-GUID: RaoSlZj-0Npc9_Ows0VQjTUY58d_Vhmq X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX0imanhOGYfKd Z/ujzRAHcPxQWl5MxCV5B18+Cg4mtLgw96emZx2qJVUSqPTnjdFCO3sQzPKcusD4V90WWnpiVKq nIZx2V3TKXRm+iniqzRI0cGg8SUN4FY= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 phishscore=0 spamscore=0 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=farman@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555154008158500 Content-Type: text/plain; charset="utf-8" From: Claudio Imbrenda Allow mapping guest with 2G hugepages on hosts that support it. Rename kvm_s390_get_hpage_1m() to kvm_s390_get_hpage() to reflect that it is not anymore limited only to 1m hpages. Signed-off-by: Claudio Imbrenda Reviewed-by: Eric Farman Reviewed-by: Hendrik Brueckner Reviewed-by: Matthew Rosato Link: https://lore.kernel.org/qemu-devel/20260805103728.97602-2-imbrenda@li= nux.ibm.com Signed-off-by: Eric Farman --- target/s390x/diag.c | 2 +- target/s390x/kvm/kvm.c | 36 +++++++++++++++++------------------- target/s390x/kvm/kvm_s390x.h | 2 +- target/s390x/kvm/stubs.c | 2 +- 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/target/s390x/diag.c b/target/s390x/diag.c index 80f0958478..46d191b87d 100644 --- a/target/s390x/diag.c +++ b/target/s390x/diag.c @@ -185,7 +185,7 @@ out: return false; } =20 - if (kvm_enabled() && kvm_s390_get_hpage_1m()) { + if (kvm_enabled() && kvm_s390_get_hpage()) { error_report("Protected VMs can currently not be backed with " "huge pages"); env->regs[r1 + 1] =3D DIAG_308_RC_INVAL_FOR_PV; diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c index 72031a5714..803b878b4f 100644 --- a/target/s390x/kvm/kvm.c +++ b/target/s390x/kvm/kvm.c @@ -145,7 +145,7 @@ static int cap_mem_op; static int cap_mem_op_extension; static int cap_s390_irq; static int cap_ri; -static int cap_hpage_1m; +static int cap_hpage; static int cap_vcpu_resets; static int cap_protected; static int cap_zpci_op; @@ -231,7 +231,7 @@ static void kvm_s390_enable_cmma(void) .attr =3D KVM_S390_VM_MEM_ENABLE_CMMA, }; =20 - if (cap_hpage_1m) { + if (cap_hpage) { warn_report("CMM will not be enabled because it is not " "compatible with huge memory backings."); return; @@ -292,30 +292,28 @@ void kvm_s390_crypto_reset(void) } } =20 -void kvm_s390_set_max_pagesize(uint64_t pagesize, Error **errp) +static bool kvm_s390_pgsize_cap(uint32_t capa, const char *s, Error **errp) { - if (pagesize =3D=3D 4 * KiB) { - return; - } - - if (pagesize !=3D 1 * MiB) { - error_setg(errp, "Memory backing with 2G pages was specified, " - "but KVM does not support this memory backing"); - return; + if (kvm_vm_enable_cap(kvm_state, capa, 0)) { + error_setg(errp, "Memory backing with %s pages was specified, " + "but KVM does not support this memory backing", s); + return false; } + return true; +} =20 - if (kvm_vm_enable_cap(kvm_state, KVM_CAP_S390_HPAGE_1M, 0)) { - error_setg(errp, "Memory backing with 1M pages was specified, " - "but KVM does not support this memory backing"); - return; +void kvm_s390_set_max_pagesize(uint64_t pagesize, Error **errp) +{ + if (pagesize =3D=3D MiB) { + cap_hpage =3D kvm_s390_pgsize_cap(KVM_CAP_S390_HPAGE_1M, "1M", err= p); + } else if (pagesize !=3D 4 * KiB) { + cap_hpage =3D 2 * kvm_s390_pgsize_cap(KVM_CAP_S390_HPAGE_2G, "2G",= errp); } - - cap_hpage_1m =3D 1; } =20 -int kvm_s390_get_hpage_1m(void) +int kvm_s390_get_hpage(void) { - return cap_hpage_1m; + return cap_hpage; } =20 static void ccw_machine_class_foreach(ObjectClass *oc, void *opaque) diff --git a/target/s390x/kvm/kvm_s390x.h b/target/s390x/kvm/kvm_s390x.h index 7b1cce3e60..3c4fa0489c 100644 --- a/target/s390x/kvm/kvm_s390x.h +++ b/target/s390x/kvm/kvm_s390x.h @@ -25,7 +25,7 @@ void kvm_s390_program_interrupt(S390CPU *cpu, uint16_t co= de); int kvm_s390_set_cpu_state(S390CPU *cpu, uint8_t cpu_state); void kvm_s390_vcpu_interrupt_pre_save(S390CPU *cpu); int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu); -int kvm_s390_get_hpage_1m(void); +int kvm_s390_get_hpage(void); int kvm_s390_get_protected_dump(void); int kvm_s390_get_ri(void); int kvm_s390_get_zpci_op(void); diff --git a/target/s390x/kvm/stubs.c b/target/s390x/kvm/stubs.c index 196127baa5..ebf3c83994 100644 --- a/target/s390x/kvm/stubs.c +++ b/target/s390x/kvm/stubs.c @@ -143,7 +143,7 @@ int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu) g_assert_not_reached(); } =20 -int kvm_s390_get_hpage_1m(void) +int kvm_s390_get_hpage(void) { g_assert_not_reached(); } --=20 2.55.0 From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555165; cv=none; d=zohomail.com; s=zohoarc; b=Y8rERXT8esWzRLtmv2N1kOTDTdsWwMJ5PPWHJDYgEfpNCOQ8qV0sT/tZbCpkJXHhN1Vla9Yj5E0b8cV6sN0NseLqP85o2jWpsHZloABWLozaLIcrCZfz2o/06u65S/WE7O6JOj2nMjL1jR/FnxFzGeCV4aOfDgHUTo5J7zZCJM0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555165; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=77oxwcW3642R5fK9qLD3J5GKO6rp/5jW+H4nF6ogR04=; b=WM9E02D/bLAwQeSVv2zSEOTj9ZnjCPkWV9v5RHsiUDAEJPcij3dsIU87t82FfsbGftkH/TVPikeYdTuPknAvbWrACt3Clp6SZBZ5SLkNw9AdN68+1TOGWDGAqG8ILHH+RMpayC8ItOVCT9nc04AH1pFpAS1WbUHskKiiO1ndlr0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786555165486101.71431047521253; Wed, 12 Aug 2026 10:19:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCbY-0001TM-0g; Wed, 12 Aug 2026 13:19:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCa5-0000E9-HE; Wed, 12 Aug 2026 13:17:35 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCa1-0000uQ-OE; Wed, 12 Aug 2026 13:17:32 -0400 Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1fc43994436; Wed, 12 Aug 2026 17:17:23 GMT Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvp32vpy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:22 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBRI2017606; Wed, 12 Aug 2026 17:17:22 GMT Received: from smtprelay07.dal12v.mail.ibm.com ([172.16.1.9]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4fxg9h72na-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:22 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay07.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHHK8Z30933628 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:17:21 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E066F5805A; Wed, 12 Aug 2026 17:17:20 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 593645805E; Wed, 12 Aug 2026 17:17:20 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:20 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=77oxwcW3642R5fK9q LD3J5GKO6rp/5jW+H4nF6ogR04=; b=W+IugUqkhUMZD1kaWTnu1TogbWippMPZw Y5c/+aFRkZTE3tu+iQRes635QNF6xyShN4X6LmnsCqt22Y/T/v1uE2m3LZKS1+42 HNgCQrg1GvLqlyolpeMq9fw1dyJ6PQH1Non53Pw0plqBo3WxP7cPxEuemifClOJM cSnl8yC+j8S8ewsSMHVAgwRlHkrujb+bSkyp9d7nQQiqfEsM6aDHJJ6A1F39JjCp iyloNGaEa6kPuJnxCpZ6kDL1q0Dt84zRKZ7rSZyfxND/WVkv+uYiyhhEsiaS1eVA 8D2PUhRpr5r3bQyTn4ivDyF2Nh4DzWJy5lhC6nTmTbyTkecYpKXig== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Eric Farman , Bibo Mao Subject: [PULL 14/15] hw: add compat machines for 11.2 Date: Wed, 12 Aug 2026 13:17:06 -0400 Message-ID: <20260812171707.1605637-15-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=AMtp2X5w c=1 sm=1 tr=0 ts=6a7caaa2 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=Y2IxJ9c9Rs8Kov3niI8_:22 a=VwQbUJbxAAAA:8 a=20KFwNOVAAAA:8 a=VnNF1IyMAAAA:8 a=0e9nVU_5ajEX5vtfCxIA:9 X-Proofpoint-GUID: A3CiYVsRaakz2o86MpA-1itfmz6H53Js X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX2JZ/OBSd31oi JVc3B4HyeSf8ugSWquLUHOKe3AT33jdno776EgqepLAWSxklvIjuwjWG9sJZZUIa2lKD5U6NL5h bqocrizorLXbGDDgEriHMz9zw0NLfZ0meZBW+NRD+S6P6Php/1iLHcF3ta/ane5+/08Z0Ktk7Vo i8rT7+e4GR5qjJLMHxA6RsDk0rCg58YBx5/Lw5CsXyuB5iJNb8+zzpT26l1KmdDqMlxL7pEsUpW +Ky/RKgkG3no1Twas0GtV8ISuvqs90D0AGIUi5KnTump7XHA1G1x+F9giDvSXSJfRrL2WINVCtr 5S0j2iKRRFVSPp6BTEYTNUmyWPoVsyv4QNuW3+YWIFOXCA1UAYt7mVX9JtVvT9DjZt82WNyNkea ZRoNEf/tZAegnuzqDe8fLwOTWSWta7tU4EKpgx5cTxZdB7gki2DzLAtTu986PCMphUKJDePs+qX tgzsz7STZ/xKjZW21sg== X-Proofpoint-ORIG-GUID: A3CiYVsRaakz2o86MpA-1itfmz6H53Js X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfXw5oAmN++dCyw JVqJqtsW2DqnaX9LN5FDYaFNlCh14iI+gx4YihxL44G6XU3OQ09oPGdcsLQCfXAXtX9vyXrrdes 0rABW0OcZk7LhiRanDFzOzFlAg2JvS0= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 phishscore=0 spamscore=0 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.158.5; envelope-from=farman@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555166267158500 Content-Type: text/plain; charset="utf-8" From: Cornelia Huck Add 11.2 machine types for arm/i440fx/loongarch/m68k/q35/s390x/spapr. Signed-off-by: Cornelia Huck Reviewed-by: Eric Farman Reviewed-by: Bibo Mao Link: https://lore.kernel.org/qemu-devel/20260723163806.368127-1-cohuck@red= hat.com [farman@linux.ibm.com: fixup hw/core/machine.c hunk] Signed-off-by: Eric Farman --- hw/arm/virt.c | 9 ++++++++- hw/core/machine.c | 3 +++ hw/i386/pc.c | 3 +++ hw/i386/pc_piix.c | 13 +++++++++++-- hw/i386/pc_q35.c | 13 +++++++++++-- hw/loongarch/virt.c | 11 +++++++++-- hw/m68k/virt.c | 9 ++++++++- hw/ppc/spapr.c | 15 +++++++++++++-- hw/s390x/s390-virtio-ccw.c | 14 +++++++++++++- include/hw/core/boards.h | 3 +++ include/hw/i386/pc.h | 3 +++ 11 files changed, 85 insertions(+), 11 deletions(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 219597cabd..e7a56e37f7 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -4441,10 +4441,17 @@ static void machvirt_machine_init(void) } type_init(machvirt_machine_init); =20 +static void virt_machine_11_2_options(MachineClass *mc) +{ +} +DEFINE_VIRT_MACHINE_AS_LATEST(11, 2) + static void virt_machine_11_1_options(MachineClass *mc) { + virt_machine_11_2_options(mc); + compat_props_add(mc->compat_props, hw_compat_11_1, hw_compat_11_1_len); } -DEFINE_VIRT_MACHINE_AS_LATEST(11, 1) +DEFINE_VIRT_MACHINE(11, 1) =20 static void virt_machine_11_0_options(MachineClass *mc) { diff --git a/hw/core/machine.c b/hw/core/machine.c index 73b4d82b4a..3b15645304 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -40,6 +40,9 @@ #include "qemu/audio.h" #include "hw/arm/smmuv3.h" =20 +GlobalProperty hw_compat_11_1[] =3D {}; +const size_t hw_compat_11_1_len =3D G_N_ELEMENTS(hw_compat_11_1); + GlobalProperty hw_compat_11_0[] =3D { { "virtio-mmio", VIRTIO_QUEUE_SIZE_OVERRIDE, "1024" }, { "chardev-vc", "encoding", "cp437" }, diff --git a/hw/i386/pc.c b/hw/i386/pc.c index f064aa2b3e..e9e4fc262b 100644 --- a/hw/i386/pc.c +++ b/hw/i386/pc.c @@ -74,6 +74,9 @@ #include "hw/xen/xen-bus.h" #endif =20 +GlobalProperty pc_compat_11_1[] =3D {}; +const size_t pc_compat_11_1_len =3D G_N_ELEMENTS(pc_compat_11_1); + GlobalProperty pc_compat_11_0[] =3D {}; const size_t pc_compat_11_0_len =3D G_N_ELEMENTS(pc_compat_11_0); =20 diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 82457bdb16..223a19cc4b 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -428,12 +428,21 @@ static void pc_i440fx_machine_options(MachineClass *m) pc_piix_compat_defaults, pc_piix_compat_defaults_len); } =20 -static void pc_i440fx_machine_11_1_options(MachineClass *m) +static void pc_i440fx_machine_11_2_options(MachineClass *m) { pc_i440fx_machine_options(m); } =20 -DEFINE_I440FX_MACHINE_AS_LATEST(11, 1); +DEFINE_I440FX_MACHINE_AS_LATEST(11, 2); + +static void pc_i440fx_machine_11_1_options(MachineClass *m) +{ + pc_i440fx_machine_11_2_options(m); + compat_props_add(m->compat_props, hw_compat_11_1, hw_compat_11_1_len); + compat_props_add(m->compat_props, pc_compat_11_1, pc_compat_11_1_len); +} + +DEFINE_I440FX_MACHINE(11, 1); =20 static void pc_i440fx_machine_11_0_options(MachineClass *m) { diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 6c1e4eff5f..94cd71124b 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -383,12 +383,21 @@ static void pc_q35_machine_options(MachineClass *m) pc_q35_compat_defaults, pc_q35_compat_defaults_len); } =20 -static void pc_q35_machine_11_1_options(MachineClass *m) +static void pc_q35_machine_11_2_options(MachineClass *m) { pc_q35_machine_options(m); } =20 -DEFINE_Q35_MACHINE_AS_LATEST(11, 1); +DEFINE_Q35_MACHINE_AS_LATEST(11, 2); + +static void pc_q35_machine_11_1_options(MachineClass *m) +{ + pc_q35_machine_11_2_options(m); + compat_props_add(m->compat_props, hw_compat_11_1, hw_compat_11_1_len); + compat_props_add(m->compat_props, pc_compat_11_1, pc_compat_11_1_len); +} + +DEFINE_Q35_MACHINE(11, 1); =20 static void pc_q35_machine_11_0_options(MachineClass *m) { diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c index 6693dea647..9cc79929a8 100644 --- a/hw/loongarch/virt.c +++ b/hw/loongarch/virt.c @@ -1465,7 +1465,6 @@ static void virt_class_init(ObjectClass *oc, const vo= id *data) mc->default_ram_id =3D "loongarch.ram"; mc->desc =3D "QEMU LoongArch Virtual Machine"; mc->max_cpus =3D LOONGARCH_MAX_CPUS; - mc->is_default =3D 1; mc->default_kernel_irqchip_split =3D false; mc->block_default_type =3D IF_VIRTIO; mc->default_boot_order =3D "c"; @@ -1546,6 +1545,7 @@ static void virt_class_init(ObjectClass *oc, const vo= id *data) MACHINE_VER_DEPRECATION(__VA_ARGS__); \ if (latest) { \ mc->alias =3D "virt"; \ + mc->is_default =3D true; \ } \ } \ static const TypeInfo MACHINE_VER_SYM(info, virt, __VA_ARGS__) =3D \ @@ -1600,7 +1600,14 @@ static void machvirt_machine_init(void) =20 type_init(machvirt_machine_init); =20 +static void virt_machine_11_2_options(MachineClass *mc) +{ +} +DEFINE_VIRT_MACHINE_AS_LATEST(11, 2) + static void virt_machine_11_1_options(MachineClass *mc) { + virt_machine_11_2_options(mc); + compat_props_add(mc->compat_props, hw_compat_11_1, hw_compat_11_1_len); } -DEFINE_VIRT_MACHINE_AS_LATEST(11, 1) +DEFINE_VIRT_MACHINE(11, 1) diff --git a/hw/m68k/virt.c b/hw/m68k/virt.c index 51158ce1c0..274970978f 100644 --- a/hw/m68k/virt.c +++ b/hw/m68k/virt.c @@ -367,10 +367,17 @@ type_init(virt_machine_register_types) #define DEFINE_VIRT_MACHINE(major, minor) \ DEFINE_VIRT_MACHINE_IMPL(false, major, minor) =20 +static void virt_machine_11_2_options(MachineClass *mc) +{ +} +DEFINE_VIRT_MACHINE_AS_LATEST(11, 2) + static void virt_machine_11_1_options(MachineClass *mc) { + virt_machine_11_2_options(mc); + compat_props_add(mc->compat_props, hw_compat_11_1, hw_compat_11_1_len); } -DEFINE_VIRT_MACHINE_AS_LATEST(11, 1) +DEFINE_VIRT_MACHINE(11, 1) =20 static void virt_machine_11_0_options(MachineClass *mc) { diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index b79828b4e9..7e284edd7d 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -4763,15 +4763,26 @@ static void spapr_machine_latest_class_options(Mach= ineClass *mc) #define DEFINE_SPAPR_MACHINE(major, minor) \ DEFINE_SPAPR_MACHINE_IMPL(false, major, minor) =20 +/* + * pseries-11.2 + */ +static void spapr_machine_11_2_class_options(MachineClass *mc) +{ + /* Defaults for the latest behaviour inherited from the base class */ +} + +DEFINE_SPAPR_MACHINE_AS_LATEST(11, 2); + /* * pseries-11.1 */ static void spapr_machine_11_1_class_options(MachineClass *mc) { - /* Defaults for the latest behaviour inherited from the base class */ + spapr_machine_11_2_class_options(mc); + compat_props_add(mc->compat_props, hw_compat_11_1, hw_compat_11_1_len); } =20 -DEFINE_SPAPR_MACHINE_AS_LATEST(11, 1); +DEFINE_SPAPR_MACHINE(11, 1); =20 /* * pseries-11.0 diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index 25a9fa4955..55131c1a44 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -925,14 +925,26 @@ static const TypeInfo ccw_machine_info =3D { DEFINE_CCW_MACHINE_IMPL(false, major, minor) =20 =20 +static void ccw_machine_11_2_instance_options(MachineState *machine) +{ +} + +static void ccw_machine_11_2_class_options(MachineClass *mc) +{ +} +DEFINE_CCW_MACHINE_AS_LATEST(11, 2); + static void ccw_machine_11_1_instance_options(MachineState *machine) { + ccw_machine_11_2_instance_options(machine); } =20 static void ccw_machine_11_1_class_options(MachineClass *mc) { + ccw_machine_11_2_class_options(mc); + compat_props_add(mc->compat_props, hw_compat_11_1, hw_compat_11_1_len); } -DEFINE_CCW_MACHINE_AS_LATEST(11, 1); +DEFINE_CCW_MACHINE(11, 1); =20 static void ccw_machine_11_0_instance_options(MachineState *machine) { diff --git a/include/hw/core/boards.h b/include/hw/core/boards.h index 29c68931d8..a436d48c8e 100644 --- a/include/hw/core/boards.h +++ b/include/hw/core/boards.h @@ -815,6 +815,9 @@ compat_props_add(GPtrArray *arr, } } =20 +extern GlobalProperty hw_compat_11_1[]; +extern const size_t hw_compat_11_1_len; + extern GlobalProperty hw_compat_11_0[]; extern const size_t hw_compat_11_0_len; =20 diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index d4b6d3ed57..ac03da97b6 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -209,6 +209,9 @@ void pc_system_parse_ovmf_flash(uint8_t *flash_ptr, siz= e_t flash_size); /* sgx.c */ void pc_machine_init_sgx_epc(PCMachineState *pcms); =20 +extern GlobalProperty pc_compat_11_1[]; +extern const size_t pc_compat_11_1_len; + extern GlobalProperty pc_compat_11_0[]; extern const size_t pc_compat_11_0_len; =20 --=20 2.55.0 From nobody Wed Aug 26 07:24:41 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1786555206; cv=none; d=zohomail.com; s=zohoarc; b=KhZ45iabeTv+PMZeUlqtXnoHG0Nye7AuRrVxAnGhcuZyTm4zBCTCK52sDOY2ibbzsgOr0glHyBJbJYeX+n108URwjl8hVjnUMFyo0FMGRbLqqcYre8QY3i239pidjiH1m6sZic6TolJf70rGl5BGejsIr0Npdu+VOc124Us5BWg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786555206; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CZxRBR8i9AesDcPEnIA3QZ75fbpdaICUETvHlcfoQBM=; b=aa3nQ4fIGiQl0tdi9SokvT0VVjxWxR4KVuavycwQei4jYFpAutywjUPC0knJ+p2UVdxtN63kKtIt+QwirRHP1Yq4uIXXd/xhGHFbkYGKenH5RRBjUOEyyAeZmg+auYhKyfp0xDrzhTeDJk3oBn4x/I+RbOY9vc+bShKjiY2w3Cs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786555206818164.40204552013654; Wed, 12 Aug 2026 10:20:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wuCbB-0000x3-0s; Wed, 12 Aug 2026 13:18:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCa5-0000E8-HR; Wed, 12 Aug 2026 13:17:35 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wuCZy-0000t9-0x; Wed, 12 Aug 2026 13:17:32 -0400 Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67CH1Uom2217829; Wed, 12 Aug 2026 17:17:24 GMT Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4fwvk03qcc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:23 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 67CHBJeE026655; Wed, 12 Aug 2026 17:17:22 GMT Received: from smtprelay02.dal12v.mail.ibm.com ([172.16.1.4]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4fxh0gf0ea-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 12 Aug 2026 17:17:22 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay02.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 67CHHLNF12255942 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 12 Aug 2026 17:17:22 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AF1635805F; Wed, 12 Aug 2026 17:17:21 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0EF9D5805C; Wed, 12 Aug 2026 17:17:21 +0000 (GMT) Received: from li-479af74c-31f9-11b2-a85c-e4ddee11713b.ibm.com.com (unknown [9.61.61.74]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 12 Aug 2026 17:17:20 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=CZxRBR8i9AesDcPEn IA3QZ75fbpdaICUETvHlcfoQBM=; b=pv10Cl6Aby48UvPt14g/TsSLINyMJ8T8k e1IVE2nStaOhSRhw4JtctmV1PNXyIvccSvVUYseeNTnmEPcC9qpr/YvUSXRXaaz1 n3udVk+8AvhD1nnnmUq09FPG8+TqsjrzQggfq4g6FMMBaZ+aq9ujvzJE9neie1Ml PW42Mm6MX6zgFx+sPJHG3NhkFz/kT30IfHIjTfQ8G6vOk+Arqk7VIKDo0zLfsbqQ sEUXW/eRZlNLIOmtC2Xqvtq10F7zcuU0VlZyeuHy00nhA6UrJ6qSZsiy/NOJoOUB yNqYv5BR+QDpt3Ayg80F0VfyS5xg9cKYLJnQ+AqNHEAnBSDnE8PVw== From: Eric Farman To: qemu-devel@nongnu.org Cc: qemu-s390x@nongnu.org, Matthew Rosato , Cornelia Huck , Eric Farman Subject: [PULL 15/15] pc-bios/s390-ccw.img: update s390x bios Date: Wed, 12 Aug 2026 13:17:07 -0400 Message-ID: <20260812171707.1605637-16-farman@linux.ibm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812171707.1605637-1-farman@linux.ibm.com> References: <20260812171707.1605637-1-farman@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX0ptQWxq6JHtG 0O7+ZE9lFak1CdDnUmBsu6Dd1Zms8H/Jj0Hjc/fizk0yEhSpdSka6sk1XuEYjzyQhvZXXuIVSJ1 iJxwXyxQMIfdP3VZb6LMhDfbgrT6VR3Z1vtQUt9vLnApk3CwzoifFVC+Ix6AoqrS8jG5npR6HHN xQsGx2sF/YvJjVgjWOLCRbvNoCTV4u9F0d7ALBzy0CkZYSrwDBhL3mfkSDySG2Ws/0jyTnHP4dh rSag5mKYoLZdjhoz0SDHmo/fHmpWGW1H09QeAWQJqViqqy7s8ZlCfaHrGJ+gEa8DdCujxQ89/F4 vpEGOaY9ADFhRemwkJmCo5g6jP1t5/CtnPlqOM2QebDQ8ZlGoKkJUZJgSozrGkpuzH9KvQ6n+g1 UC8f3yxvQVGb2Hk0s2prx88iEV6NGS2T6ibx/CzBbuG1aOi71LsgvHTTysOEfaAGJF/iWZSTTE4 FA0i9hKxpcWejs+f+Tw== X-Proofpoint-Spam-Info: AW1haW4tMjYwODEyMDEzOCBTYWx0ZWRfX4rsflYLdJVFa 04kz5CHjLA/2rKzsRQsXOjQOCXMinSdMXg1QGyn+9bgnPS1N3qsyhaMGV+vdg/Z7QDV1xxUGLHU ROhChbWALn+aSsmMDfmpdL442UtFdHc= X-Authority-Analysis: v=2.4 cv=RqD16imK c=1 sm=1 tr=0 ts=6a7caaa4 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=Sv0fKeRqtYgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=VnNF1IyMAAAA:8 a=aiJaZ2QYruqhTRVUbWYA:9 a=Ffwj0A-kgt3BW0yD:21 X-Proofpoint-GUID: mDpxtyXXx_RMMTGnSPFWsIndxSLuSper X-Proofpoint-ORIG-GUID: mDpxtyXXx_RMMTGnSPFWsIndxSLuSper X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-08-12_05,2026-08-12_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 suspectscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 bulkscore=0 malwarescore=0 impostorscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608120138 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=148.163.156.1; envelope-from=farman@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, LOTS_OF_MONEY=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @ibm.com) X-ZM-MESSAGEID: 1786555208326158500 Content-Type: text/plain; charset="utf-8" Update the s390 bios with recent fixes for out-of-bounds accesses. Signed-off-by: Eric Farman --- pc-bios/s390-ccw.img | Bin 104136 -> 104216 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img index e24a93e14a880aa3a5d498fc84c7bdd1a0964d7c..291cd77eaff40679d0cc2d5697d= 0c7b73c493e94 100644 GIT binary patch literal 104216 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 Nl;;EGKz3ew`aje{jXnSX literal 104136 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 --=20 2.55.0