From nobody Thu Sep 24 20:51:35 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1787052814; cv=pass; d=zohomail.com; s=zohoarc; b=lDV3c9HQ2zppKw1bZcZ4mV5MYBxQeGH7BM22yGqXZWBAMIVsf12GH5ZJZ4ICK6pYo1KUIAQsHfmgaOV0mHzu4I9cJWtpTbiu1BzmOeyAyZ3g2BpJqQCEtDqT75h3Hw3RJQft1+2z0Zo6XITmrHDwlW57X6DkGR4sRiB3Ju3e7rY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787052814; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=N70P7aW11jK3CbWzYj+uAhsxTa1DoTppUHe0Uo144Mg=; b=VLoXXcAvOkoIFGgU0p1+HKKrQA89GWzNui7FNCgFVYvY8EXxaubU6H/IvcIUHWPXYxSrl0U9lbVhSsotgrOx9nytttVjEpHFZ/x38IV+eAOs5y7mzeqG/ByGYq3R/xmN8RyRlkUu1jkdTxZ7iHp31eTz93djmYlk4KoJQv6csyE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 178705281415496.81652237985304; Tue, 18 Aug 2026 04:33:34 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1394000.1632813 (Exim 4.92) (envelope-from ) id 1wwI4G-0006iN-IS; Tue, 18 Aug 2026 11:33:20 +0000 Received: by outflank-mailman (output) from mailman id 1394000.1632813; Tue, 18 Aug 2026 11:33:20 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wwI4G-0006iG-FX; Tue, 18 Aug 2026 11:33:20 +0000 Received: by outflank-mailman (input) for mailman id 1394000; Tue, 18 Aug 2026 11:33:19 +0000 Received: from mx.expurgate.net ([195.190.135.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wwI4F-0006VX-18 for xen-devel@lists.xenproject.org; Tue, 18 Aug 2026 11:33:19 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wwI4E-00BTlp-Dq for xen-devel@lists.xenproject.org; Tue, 18 Aug 2026 13:33:18 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a8442f4-2eae-0a2a0a5409dd-0a2a4503e17c-30 for ; Tue, 18 Aug 2026 13:33:18 +0200 Received: from [40.107.130.130] (helo=MRWPR03CU001.outbound.protection.outlook.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6a8442fd-fae8-0a2a45030019-286b8282bd98-4 for ; Tue, 18 Aug 2026 13:33:18 +0200 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) by PAVPR03MB9598.eurprd03.prod.outlook.com (2603:10a6:102:301::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.17; Tue, 18 Aug 2026 11:33:14 +0000 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7]) by AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7%6]) with mapi id 15.21.0315.012; Tue, 18 Aug 2026 11:33:14 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=epam.com header.i="@epam.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kflSWwRqRsPQ9DCXjWQOsFEkpzMeLfkHZsTQyRPjeeLqgGHL44GtnyF9Y/lw17SPy1ImNadgvtVcvsirPYIbLbBVY/83AVVImFQvu845CvRZkuYB0kAAMHe2KVnz3s79Igy8Kve0oHqvjVKK5fjWaFHm5sXLILVThvnf1Kb9ax+5UgDcNIlpOMFAMx/HswMlA/VrdNSwI/SEGVZyH6sAeqvpqui42gUmEuiS2oKqqKHDyZosd0ABBP0dn+sTmJD3AUu02i6JhCQCf7Rg9M1jf5656zR9kdIL1qk818BLY9O7gLe01CW5Avr3p0M10uS0SzX0MCtldQq08IyaFcCOOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=N70P7aW11jK3CbWzYj+uAhsxTa1DoTppUHe0Uo144Mg=; b=ZmtUw2E8OsSMeg9ZHV1T6S8JigpY9JM1DSmck7H/cFvq0FHFKIXt5+e+1po8qhtMv+pTdkMLlfpLKucJ80pDYB4xREAfVfH0ntU36y4hfEP5N3E9FykGTAx1EflnYbei8h4sszqmF1GdXxR1SqQj+CAsc4y4W2f6EsNpnQdXI5GPLb06pnnxmcwR81Mo8AkAQDLvdir2yZZPeEyB+t6CNrnfzdM3PT3tLKG/J0zDcYYwFm/hHY4PSFhLKiRFquNl1R8Jhelbz1TSGnMzvMkqB6GCzz7tNyJkEfgc+7TKJUD+vNBULz0HTh7bKJ2sYC42b8DjfTKZxwFYNBNzMo8gZw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=N70P7aW11jK3CbWzYj+uAhsxTa1DoTppUHe0Uo144Mg=; b=hYdZ9HNyuo9ff6eQowz46v8JS+sTyyOsHOhnrW5fLA69suZ21sDJqibb28k3cBol2flnP7kSpHXY8kJm6PygCN1MM3DgEhgb9d9PaBhCONh0NUcdRYM0T4AHXbr2Qu7Md+OjH8SNfqTJV6sIVQo5O/atlxjnC/4JFcrgyqq3ZgPZCd6X/4sFe3SQ+Mjv87ME/fMtxAi8dSRUJx9sZzqIAzM+G2a7hOAhX4OvXH8BTwDK8S1dWUedzBZBn+Zm3hRfndvI9M2Z5QztS+gFvEakv7+QhMwDJgP8/kSkt+mS5CHQPD9v9QxxrnSaWwK8iMooRzaKRnnV+MZqh0uVT2/MeA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [PATCH v3 1/4] xen/arm: make is_espi() a pure range predicate Date: Tue, 18 Aug 2026 14:32:59 +0300 Message-ID: <8e42437f8abca2722f1a2e2568bbb5b938c23e85.1787050437.git.mykola_kvach@epam.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: WA1PEPF00005B92.POLP291.PROD.OUTLOOK.COM (2603:10a6:1d8::63a) To AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR03MB9746:EE_|PAVPR03MB9598:EE_ X-MS-Office365-Filtering-Correlation-Id: 8910cc88-e67a-4d0f-cf64-08defd1c7db9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|1800799024|376014|10067099003|56012099006|6133799003|11063799006|5023799004|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: PZ8PAuzk9Q5Vf5FiseYvsusMLdT1VAUlJIjRjFenPOc/GgPLqrGzTeI2GCFUT5J1PVeQDH06HPCglXRS5iUvkac3i2wl7EdHoO1RuKd43XEjXWkvKPwNeFbWQIBgDyq8kWzRD6uvYsUUeoUVPw90wiXSipNBsNzwWly52Z9K3AdXGiZGtb91rdhxXMzmgq7v6uB1jEY9J3J9v46SpcOel+Hnl10zEWQT/1iC6XGTvvSnedaIafXt0NzhCpNF8DYSMBF4JE9BacNSuRbXatuTBvFbVC1MDkjRH4G/99g0jEkOFb39B1wGQQZ1ywUEdFM7UBEqXRGCha7iCSKLev0RXDN94nNkeZUMWzDEXsV2gE3LvlKpcrob5bCQBh2y/tiC4wCnI6yuoqnpFp0YB53G/WcwOANrSnlkN5OBT+M7j7KkczbYyYVh2GrGPiulvZRuG8PryPtYlcwWvFcVMI8LgeMXA/AEkcBC4YnuOAUoEloXHF4xCADY6zC1ejreosJL/F9/VDXc+ERRXg6DAoh4Ow1oXq4mPJBC/eGeCF8DcIctJgPWwZLiadNMMLVl9/WAu+pIFT2LdAakDhXu3uKiG6c3tp9tVaxW39Os7db8HYOsqx/qCJ/e7llLXMxcQMdJMrZiI8dEb95D93qapbqOURqTRGZEdhVoY+Wk6B3HRMg= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR03MB9746.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(1800799024)(376014)(10067099003)(56012099006)(6133799003)(11063799006)(5023799004)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?esAz5BYUxkkMJC+r+p3700VyeF7WFIqOeda8FUq3m8qqJHX8LqPLKbCH55cx?= =?us-ascii?Q?BPV0jN8yP8osaiPUaWfsMvA+mTqT6okuqB4mNWFoBZqIZkxKrNwv4ehiZzsG?= =?us-ascii?Q?xntjlDCkVT6cGrJEDJXJVOh9eTjn7wQQy7gA+3cZOXU0xjo2o0Afi4zvEsZu?= =?us-ascii?Q?haJyGhGRQETs1SmiQ7DTnOVD/T9MjOQLUwuyn2mte1OEKPIPjXmxOlGaCzI3?= =?us-ascii?Q?eWppbcSWw81DkI9iqBIQE/tDCtrhWcqxBZy4xmyPNvWS98uLx/BVTHi4EKSq?= =?us-ascii?Q?oDNQOFbamVyR0MKG00YA6vghSGdfMVaNZ91ci2NxuyWg01Z2iX/mSDL8lgzr?= =?us-ascii?Q?ZGLHJY0DLBULrs5pyt2cGcF4EJ8Xk5fMrarED9D7SBZNdEXim4LlAuVjkO7S?= =?us-ascii?Q?d1zJqWWDJ3QjN/eFNGq5jsUh27MlACX96h1yHGbsZ0fJFbOInkJFf0DEebqM?= =?us-ascii?Q?GzlUyrnEUsgoO1AB4gT9590zKQPvQRAHtuFCqdx2+Ws73+Cwk1XqaIGXgpeR?= =?us-ascii?Q?YVRCfa6VP6yr2hOAnn9NgQBKsoUWeUBN4iTHGAemjhzU7Cmv/mZcvqH/kHSy?= =?us-ascii?Q?s0C9FJFy0ku5WQpuHJp+I9mzUN3kVJEBEcUSf+hOpfMtNujTlslBS0OA+OHQ?= =?us-ascii?Q?GP4LHvQ5/OcwfwIADb3Cw9pTV+z5YQvR/kKXgcWu7DQPxbHm7veAUHfV+5H7?= =?us-ascii?Q?uve7ByStOuOjTPbS+bewl+s8QvSRIgywB+MdYxIwdwaWCZiwoG3rnx3mXT5U?= =?us-ascii?Q?56Gq2loC9hQpg4GQHoCjkvFOjEyVZyn6eY6O+iAgJ1KGNtWnkappuNH2fIq2?= =?us-ascii?Q?lqPUrmUAFhEZLvrmZlQ3y2OsOpkcYUIa+IEemuLjH8M/AuDmt6VEsMhcBNo0?= =?us-ascii?Q?6ZQTGOEAYD9K+KG1/W37Q3Xw7JqKEHNfeQwpXEf+4lIRyCvNjdpdCLP85Gr5?= =?us-ascii?Q?gMFPN7ZDaLbjfgYPv0Kxswb7XSEaFhMvSSD4yYeTq1JLjeBR2Q2O3onu8olE?= =?us-ascii?Q?KqSpOq/FXFNKJ9hgHQTgewEtgkRI2mj8RmPkbJn1kMPyi0t5ATTp1y8pPVJD?= =?us-ascii?Q?xweWeQ+CqR37TAws0GGcHlIlSA3yKi6WbSgnKarFzTykkt8A5WJiFeHjlHgR?= =?us-ascii?Q?cH939nWcnlH2qiYH/qJdqKoXvXUiqh7OdU8Ue720eglCYgHgAdAv9nKHwLFt?= =?us-ascii?Q?BHqzDtEQICtW5ynsiNGMFI2AYcF2aC8HFRXdzL8nJJ5BBkrxADNUCR93yvqo?= =?us-ascii?Q?uSqGK7WF4ubd+ocnqpP/fF8N4WRWc8u2mfxPh0ylwE4Qz1GqSwI009RC8cnr?= =?us-ascii?Q?hyd3dWfGFqb58SihBbTSnr26rQRB7veYxujG6JwvDbKyK17Q3hrLsIeh9TSP?= =?us-ascii?Q?1u2tsFUr6ngb0oGDKRiacEuGaU6qTSs4X19GOS265YEawvbz+rNfU+yvp55d?= =?us-ascii?Q?FPFb5Fo9jwvqNVd78nrrNfFJQgOocFVESuQvrsZVhWV6G83XxXfv+aM+32oi?= =?us-ascii?Q?Okhlk/UJAkAkbzxKyinCQxs/n2xJyDFldm7rjFsq5CSDWcNyRMGkWzkn7JiZ?= =?us-ascii?Q?+7VAUSZJ6V6Y4RLS4AlJ+lzQ1kNldSUvBPfvk27FHR16mFG75e2od2O7PqtP?= =?us-ascii?Q?LmIZ/997XB/CPzg1y1xUzsz6kDYCMYHGYRd17rBJzDoPWHSufC7lRut9mpPE?= =?us-ascii?Q?RFW4PxeXhW37sUZrILcvMHwS9y8La+BGYgzGeU/8jv4A3VTiZSOPU2mN1mXg?= =?us-ascii?Q?EvuS7EJkOw=3D=3D?= X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8910cc88-e67a-4d0f-cf64-08defd1c7db9 X-MS-Exchange-CrossTenant-AuthSource: AS8PR03MB9746.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2026 11:33:14.4821 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Y3KILa40u7z8D8qOLSTWfnIsQZomPPyjXGrom6Pq5V7uFcc/EwHLrBJ45wAndM0CEs1KSceiyBqttqTt8GgR8A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR03MB9598 X-purgate-ID: tlsNG-33051d/1787052798-768FA4E9-1643847A/0/0 X-purgate-type: clean X-purgate-size: 3024 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1787052816420158500 Content-Type: text/plain; charset="utf-8" is_espi() currently changes its result according to CONFIG_GICV3_ESPI and asserts when an eSPI INTID is passed to a build without eSPI support. This makes a range predicate carry configuration policy and causes callers to depend on its hidden side effects. Make is_espi() report only whether an INTID is in the architectural eSPI range. Gate eSPI handling explicitly at call sites and preserve the debug checks on paths where an eSPI is invalid without compiled-in support. Signed-off-by: Mykola Kvach --- Changes in v3: - New preparatory cleanup requested during review. --- xen/arch/arm/gic.c | 5 ++++- xen/arch/arm/include/asm/irq.h | 11 ----------- xen/arch/arm/vgic.c | 4 ++-- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c index 078049e741..075e1d2c50 100644 --- a/xen/arch/arm/gic.c +++ b/xen/arch/arm/gic.c @@ -348,7 +348,10 @@ void gic_interrupt(struct cpu_user_regs *regs, int is_= fiq) /* Reading IRQ will ACK it */ irq =3D gic_hw_ops->read_irq(); =20 - if ( likely(irq >=3D GIC_SGI_STATIC_MAX && irq < 1020) || is_espi(= irq) ) + ASSERT(IS_ENABLED(CONFIG_GICV3_ESPI) || !is_espi(irq)); + + if ( likely(irq >=3D GIC_SGI_STATIC_MAX && irq < 1020) || + (IS_ENABLED(CONFIG_GICV3_ESPI) && is_espi(irq)) ) { isb(); do_IRQ(regs, irq, is_fiq); diff --git a/xen/arch/arm/include/asm/irq.h b/xen/arch/arm/include/asm/irq.h index 09788dbfeb..c29f3d04a3 100644 --- a/xen/arch/arm/include/asm/irq.h +++ b/xen/arch/arm/include/asm/irq.h @@ -66,18 +66,7 @@ static inline bool is_lpi(unsigned int irq) =20 static inline bool is_espi(unsigned int irq) { -#ifdef CONFIG_GICV3_ESPI return irq >=3D ESPI_BASE_INTID && irq <=3D ESPI_MAX_INTID; -#else - /* - * The function should not be called for eSPIs when CONFIG_GICV3_ESPI = is - * disabled. Returning false allows the compiler to optimize the code - * when the config is disabled, while the assert ensures that out-of-r= ange - * array resources are not accessed. - */ - ASSERT(!(irq >=3D ESPI_BASE_INTID && irq <=3D ESPI_MAX_INTID)); - return false; -#endif } =20 static inline unsigned int espi_intid_to_idx(unsigned int intid) diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c index e5aca17dcb..e14123a30a 100644 --- a/xen/arch/arm/vgic.c +++ b/xen/arch/arm/vgic.c @@ -718,8 +718,9 @@ struct pending_irq *spi_to_pending(struct domain *d, un= signed int irq) unsigned int idx; =20 ASSERT(irq >=3D NR_LOCAL_IRQS); + ASSERT(IS_ENABLED(CONFIG_GICV3_ESPI) || !is_espi(irq)); =20 - if ( is_espi(irq) ) + if ( IS_ENABLED(CONFIG_GICV3_ESPI) && is_espi(irq) ) { unsigned int nr_spis =3D d->arch.vgic.nr_spis; =20 @@ -949,4 +950,3 @@ void vgic_check_inflight_irqs_pending(struct vcpu *v, u= nsigned int rank, uint32_ * indent-tabs-mode: nil * End: */ - --=20 2.43.0 From nobody Thu Sep 24 20:51:35 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1787052825; cv=pass; d=zohomail.com; s=zohoarc; b=h48dOYYdIWfBkv8fIw5FnK1P57Vtdv/Tb+ADus0rdX8DPnj1c7G2zg3GNBZGTMhBK1B+MjDVmdP4IK6rwRL8wS4yqfDxMad78lQmbTJ4AcKo0blp6bPyQpFhJ/XlhSh00nE2+7HrTLBYy3ypwJ3YNnHndAQ10ZZtenjpO+2rSCY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787052825; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=F3h0aDabB4S3N+q+n0dwzdXfsKs/jsW96yHUTuqm6Mk=; b=l1AP4CF+LK4R1U40hcbrIWBuucWZ0YKSLrHX14t8AU1Hkw45Zk1SjI/UZfPeDQC25De0IE/0cANea0MEVQN1cagMUbufRHN7SXINBPHiS8qUjVUVfHVDcOiOPm2Ij/y6s2pGOlyIZuTP+win3gKTZlefa1/2EaU4/GJY7xIOXN8= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 178705282505147.09321705832326; Tue, 18 Aug 2026 04:33:45 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1394001.1632819 (Exim 4.92) (envelope-from ) id 1wwI4G-0006l4-SE; Tue, 18 Aug 2026 11:33:20 +0000 Received: by outflank-mailman (output) from mailman id 1394001.1632819; Tue, 18 Aug 2026 11:33:20 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wwI4G-0006kw-Ld; Tue, 18 Aug 2026 11:33:20 +0000 Received: by outflank-mailman (input) for mailman id 1394001; Tue, 18 Aug 2026 11:33:19 +0000 Received: from mx.expurgate.net ([195.190.135.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wwI4F-0006Vd-B4 for xen-devel@lists.xenproject.org; Tue, 18 Aug 2026 11:33:19 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wwI4E-00BTlp-Np for xen-devel@lists.xenproject.org; Tue, 18 Aug 2026 13:33:18 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a8442f4-2eae-0a2a0a5409dd-0a2a4503e17c-32 for ; Tue, 18 Aug 2026 13:33:18 +0200 Received: from [40.107.130.130] (helo=MRWPR03CU001.outbound.protection.outlook.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6a8442fd-fae8-0a2a45030019-286b8282bd98-5 for ; Tue, 18 Aug 2026 13:33:18 +0200 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) by PAVPR03MB9598.eurprd03.prod.outlook.com (2603:10a6:102:301::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.17; Tue, 18 Aug 2026 11:33:16 +0000 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7]) by AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7%6]) with mapi id 15.21.0315.012; Tue, 18 Aug 2026 11:33:16 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=epam.com header.i="@epam.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PmuUxKl4mAHx2fh1kbIG7whTmNtoBJgzrNLFSRevSfu6mA3s2GhXHkB6xH4axyquLq06R69hzyV8cdQas+HKFoOFzL++Hnb0wskQnwL9oJ5kD2rJ8yCLdCTsXZckFpH1Cx1sgBimYqeNmcNR5AGnV54N+opXRKTyyJKUXMhpvojiLGKNxf4sSVnFlgnTDuI8CmMCiPn/f0M3AVDK4gui2t5X7S/WHqAfd7DS6er3ybZZ8eAVnEP8hCUZXKxU43s0mcuIRNo5JJx6it/BImVmPoGFiXjvpgPgJepwopCvpV0P+t50fJaBXPHd4/4Rf/a1WWpT0acmRTSB8X+/mbyL+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=F3h0aDabB4S3N+q+n0dwzdXfsKs/jsW96yHUTuqm6Mk=; b=e7SxnYfW/bsU5HvTqX98o8MeNhq7dMwAitR48kpZ2s9cuJHaSqsZgC1XpRC3qvttU1IE+H7KuSe9Nl1o+AK0NSIfnb5BvZxBR2ZYDRsbwbJij8Dz1tn5DT+ngpDT5n8ps3mbHOgAB8Ydvypm4A1Z2VYviaKWgbIicC9DzHkr4VdZnkocivPEriQEidEXRboCRj6FGyUSGY3YuhSajUSU4G+428wXRD3gRISDBNQO73TMVtcEhsGAi6FxASngd/ATVI+20xoEXL5AqHimxscJsacEKKCAYa4LEJRjdHbJRJvG2qsjH99dh6Gvf+V4E7g+C6f5v6TdhdS8bcaiGo8Ejw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=F3h0aDabB4S3N+q+n0dwzdXfsKs/jsW96yHUTuqm6Mk=; b=vHpOKMJA8g2t81NJnmVrnt6jNZNFGX0hOQjTSTWVKqit8ERE7bhp5rrX0TN3LgXGFzKLpR+CGjpS6DYQQ+tAPfnazESOS4lJwNH4IMNAXSPJljjAfUBetnzuDffdYDzCm2T++d/EDsZvG+8XmsGUltbHyL2VX4wSAunssMVn5+Qgk7smSkGbfYu3K+/p4iUJOrzdLWqWuyYFaVn4KKRTNLDBjcHeWeRUALXU7zrTDowCBnKK7awzDflj+6M3FuN65Wrv6pcU35oPfnf/lQHjgkOnywYFJpQ702vK0pRDldFe86rHSL0WKLMYxaeh0OZuhGB+DiIiQiq3nb+/H3kdbQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [PATCH v3 2/4] xen/arm: validate IRQs before descriptor lookup Date: Tue, 18 Aug 2026 14:33:00 +0300 Message-ID: <355ff5a0aab671894a527ccb7b5999db6b168de3.1787050437.git.mykola_kvach@epam.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: WA1PEPF00005B92.POLP291.PROD.OUTLOOK.COM (2603:10a6:1d8::63a) To AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR03MB9746:EE_|PAVPR03MB9598:EE_ X-MS-Office365-Filtering-Correlation-Id: 0485857c-6228-4148-890d-08defd1c7ead X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|1800799024|376014|10067099003|56012099006|11063799006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: Ux1Aeh6oeDy3SUHp1wziUsVtVbyFjXlAZ61JOX4V69qECUiPyaMBaZuv0EDhW90dZsFFyF9HarI30Z2bn79zma48/z+AbEfqrit7mO5mGNYEvEKicAUlpfJg3ws+gnKNJ9pCfRKBOPLrvfVoo0rI1ET+zNQPw2zIJsoCOYuS3BrNSVrBwOqqBYPQQQjzTHbIQ4Q6IXaYWXTGCD6UD6RaWw/+2K8ZuL3Kh9oL28QC/4vjbtMA1RXvIDgPlpd53yn8ArS6Vps0JhuGfZz2pWnkSZYDU8zA78ub5XW0eVi6cQXviEgsXO8M/lY7NxgSJpIqtOa7rh0FuB4nuU20DJ3qGyEDBbYw+dVCLuAH+YJnuCwGsHYLaZfUSxkSMRFUVnVi3p7WV3014jbyDQ415Kb+B5WzQzNPR9paH5xN+kyLAN+YPRSLnUADzZuv6QO9nxSIzgZYhkhixCH228Xo6zn7wM01j/U/BJMD4AK/XfPgaDQN1Ck/xi1N95ZgvUm/+9tEgYzbQ3+NKCaYoozpY/vxCcY6m2IU/xFX+gvjZ84o5+qwCPJfyJl9/6sEleZQbDiBMvjW5Ctf8xe/jWFQ0J5O79OJQVC69Fz8lWW62w+S3oitRMX3c4GJPKA7ndtwhHK+UW+RZxlsE69wyNPQvGdiecxVfXIVwEFAhZTeKvAuqKo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR03MB9746.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(1800799024)(376014)(10067099003)(56012099006)(11063799006)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pnr95fPRlfcRG7xmT5WHoMYgtsDkwnk0MzoKRWibp+oYrJ8qI4qQEB3mj+ka?= =?us-ascii?Q?EWS4KZFf4aivM1WiL8YwOIMZVj7Xe43ic7xb8vmEnmhv+VeQ5ctjacR7m2Jl?= =?us-ascii?Q?icEqv+UjHi5c0p89Rg9G8n/6l9vCMNRicOBWopSBVZxlpDBPVYeTm/BPmaXZ?= =?us-ascii?Q?6NbOIiv7k6f+s3qWPFUIvOegAhHJvvwpA7fCtlVp8nCAhOywHR65uv+DbwC3?= =?us-ascii?Q?x/XKF0OUJvI4JM9J/tu0lWcM6DsdlasiMDcebldxzpKsiTdGn5dwrB+9eKSw?= =?us-ascii?Q?ZLTC7NkWifWKSGuqN9T6ZWRsL5eljIIlxIgIhJJRUw7aO3lfov2ILIfxN6bi?= =?us-ascii?Q?uvljWEfcCT5rYx46W1+gcJL+z1gHCJ3ZeM0kKSmY9DJO8Z1LN6KeVSi2ueqa?= =?us-ascii?Q?wHhckIRpTEAw6A+vMUCZPr/iTUWnQZ05wF271hDWH74G3JginHRH9mVz63VD?= =?us-ascii?Q?Su/o1C/LhrCIX0YOyYYkkfDp8srUYG4pX+228sqRWpM5JqadenlTWUaRygoU?= =?us-ascii?Q?IQzqkmEyMSyMgsNED2otLQr4ZzFhpgvNrDpyrPA7uJgc3JRRYOV1bj4CVISg?= =?us-ascii?Q?txab/ZUJPm8QwYKEty8gJ2BNkoF9/cruJvE/AgwclXzf+dq5hjqUGt9J/UcO?= =?us-ascii?Q?8/Ld/Ed7WTzwNlAkzYgjq9hHFZPH38hRuC1ujd/qMwArRHNagpXdx0enhvp3?= =?us-ascii?Q?aJOjX+dsMHNb6igDIlMXBGSL3IRe77qsWg4fnmWOHzGS3D/emVqpYVPYToNc?= =?us-ascii?Q?JBF7dmdT7xl0hLz3UPNbkVb/AOGilJQPR7q/z4zq5orssrTDSF8RWub/s9pN?= =?us-ascii?Q?ndoBPfemozUfPSxJgcmhOyZ6Mkntkp+v+TGc2UYt8tKNjCtJhOouQNLdRQJ+?= =?us-ascii?Q?A+b7W9gWf5hD/9ePl2qAyzRJbfXDoz45QFVO9GSRnFXHd/qHUWFMJfiN+PAi?= =?us-ascii?Q?sEHLzgupFXKp9WeZtLvJnsfRNe5Ych04ZC//hO6FG0iCaTcj+w/D1ONeaDO3?= =?us-ascii?Q?6m525WaGO6BrPZViEMxzzFP+gum/sjOCDJXRJvu4+mh7c0d8cyVZR3M/6mxU?= =?us-ascii?Q?Gm8eaXbFE3i6E78MXfScq7MDpXI6CzPK17WD7Ie9jGEiuFbBPyFHT/uVaNEG?= =?us-ascii?Q?w4jOhmRGeO+PDVDU7ajmQeytBqocTg16U5SbJvJvUXH9tDdzKFHEbQ7HqjrJ?= =?us-ascii?Q?kjKGO00XHpQ3RoSVojgFlK9NqCALwBbxFr7Dn5D8Ocii/78uezT7mrvdpoZY?= =?us-ascii?Q?F9N4EGKINvXxQctvTNg5+NLxKfJzHhZ0f4lvOA7h2G+A+z5GDx9JsuKZJrrD?= =?us-ascii?Q?DlWSibgSYh42pBdjbj8r2b5y3QdiMubXjIogytYZ3IeS+EFYDyClUAWSxEcV?= =?us-ascii?Q?MOqYJ2eBFuvd3zpaJlaLMmKyQb3F0t9SfIdEysRZLbVfSpLmnI2B2FkDkc4y?= =?us-ascii?Q?GbHun/dTqAABEUsQuU+K9ww6xEgU0p5/aYeqmqMIE2g003cuUMSDF0kWbE9+?= =?us-ascii?Q?GRkEIVoJXv6Be73dwP9shY22b0QT3NRzJ/AARzmUxjgui2mrc8Jl8mcbKlPj?= =?us-ascii?Q?zs+4BwhGCpGpxFCYfK8nmZ+YYvtyRvupO7YBsxabBjexIVov2nm2tbvb5Vrl?= =?us-ascii?Q?ITWmt2RxipsI0cGyRvReq1dwfIWqOqQkxccOQDi2tKLva6Hybb6/rqbh9iK9?= =?us-ascii?Q?Z+XRK5ie9TA5yRrfhYS+F/eFILyXscZR0rP4aEUIl7pPLlikOGAupUPiGqVk?= =?us-ascii?Q?6cXvzvohIQ=3D=3D?= X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0485857c-6228-4148-890d-08defd1c7ead X-MS-Exchange-CrossTenant-AuthSource: AS8PR03MB9746.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2026 11:33:16.1089 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: evTp44mnkgcd3k46kp8Fd7634sLwB7jq3AgWIHcMUycuq2keEurFnKkQM1WXxVVcS+JhwWtTj7Clqfhsro+6FA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR03MB9598 X-purgate-ID: tlsNG-33051d/1787052798-772F54E9-C83F8BB5/0/0 X-purgate-type: clean X-purgate-size: 3551 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1787052826513158500 Content-Type: text/plain; charset="utf-8" GICv3 eSPI support makes nr_irqs span the architectural INTID namespace through ESPI_MAX_INTID, but descriptor storage is sparse. local_irq_desc[] and irq_desc[] cover INTIDs below NR_IRQS, while espi_desc[] covers eSPIs. INTIDs 1024 through 4095 have no backing descriptors. Validation based only on nr_irqs accepts an INTID in this gap. __irq_to_desc() then indexes beyond irq_desc[], and callers may lock or update unrelated Xen memory. Reject INTIDs that the GIC reports as unimplemented in setup_irq() before looking up a descriptor. irq_set_spi_type() can run before the implemented GIC line counts are available, so validate descriptor-backed ranges there before looking up a descriptor. Assert the regular descriptor bound in __irq_to_desc() so direct callers cannot silently index the sparse gap in debug builds. Fixes: 98f7060b9ed5 ("xen/arm/irq: add handling for IRQs in the eSPI range") Signed-off-by: Mykola Kvach --- Changes in v3: - Add the requested bound assertion and retain the SPI-only comment. Changes in v2: - Validate descriptor-backed ranges in irq_set_spi_type(). - Validate implemented GIC lines in setup_irq(). - Preserve is_espi() validation with CONFIG_GICV3_ESPI disabled. --- xen/arch/arm/irq.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/xen/arch/arm/irq.c b/xen/arch/arm/irq.c index 73e58a5108..bf14180f97 100644 --- a/xen/arch/arm/irq.c +++ b/xen/arch/arm/irq.c @@ -23,6 +23,12 @@ const unsigned int nr_irqs =3D IS_ENABLED(CONFIG_GICV3_E= SPI) ? (ESPI_MAX_INTID + 1) : NR_IRQS; =20 +static bool irq_has_desc(unsigned int irq) +{ + return irq < NR_IRQS || + (IS_ENABLED(CONFIG_GICV3_ESPI) && is_espi(irq)); +} + static unsigned int local_irqs_type[NR_LOCAL_IRQS]; static DEFINE_SPINLOCK(local_irqs_type_lock); =20 @@ -76,7 +82,6 @@ static int __init init_espi_data(void) return 0; } #else - static int __init init_espi_data(void) { return 0; @@ -95,6 +100,8 @@ struct irq_desc *__irq_to_desc(unsigned int irq) return espi_to_desc(irq); #endif =20 + ASSERT(irq < NR_IRQS); + return &irq_desc[irq-NR_LOCAL_IRQS]; } =20 @@ -416,6 +423,9 @@ int setup_irq(unsigned int irq, unsigned int irqflags, = struct irqaction *new) struct irq_desc *desc; bool disabled; =20 + if ( !gic_is_valid_line(irq) ) + return -EINVAL; + desc =3D irq_to_desc(irq); =20 spin_lock_irqsave(&desc->lock, flags); @@ -647,13 +657,21 @@ static bool irq_validate_new_type(unsigned int curr, = unsigned int new) int irq_set_spi_type(unsigned int spi, unsigned int type) { unsigned long flags; - struct irq_desc *desc =3D irq_to_desc(spi); + struct irq_desc *desc; int ret =3D -EBUSY; =20 - /* This function should not be used for other than SPIs */ - if ( spi < NR_LOCAL_IRQS ) + /* + * This function should not be used for other than SPIs. + * + * The implemented GIC line counts are not available when early + * callers configure IRQ types. Check descriptor storage here; setup_i= rq() + * validates the implemented line before the interrupt is used. + */ + if ( spi < NR_LOCAL_IRQS || !irq_has_desc(spi) ) return -EINVAL; =20 + desc =3D irq_to_desc(spi); + spin_lock_irqsave(&desc->lock, flags); =20 if ( !irq_validate_new_type(desc->arch.type, type) ) --=20 2.43.0 From nobody Thu Sep 24 20:51:35 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1787052823; cv=pass; d=zohomail.com; s=zohoarc; b=BExNe/EQEx6B60cq0MqX6WF8G5rhNVA9gmTGD0YooPgwCwMG2oLsyeLFjhc64N/XIXrpbR5lkXxxiJFsuP5HlLCX9biX8fcdWaLIZYyeGWWNP3duKNSfBNl/FvKq6W9Lq7p27xoxMe1CBIEwPQtHaWCnR0WZRBmQKk4DMOq+o10= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787052823; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2xUZUPUEChfEb02JjA/GupRaagI2/1BMV5nqyehtpb4=; b=ae8nkCMba1/Pw5pRlL2lTX50WHWQYYtTg+gQI74gQiHvrd9Q1mOKbqy8WrGdE19N2ptF/oklVdUIwvQZwovS0xzBGXzEiB0mQaejtiMbwENnx2OAlUF4qZwcskOpwAuPDmJPrbA5Jh24FGp7LwGXl3vKAXMUhwBg4HnuWj06eq4= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1787052823901202.60772853696267; Tue, 18 Aug 2026 04:33:43 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1394002.1632831 (Exim 4.92) (envelope-from ) id 1wwI4J-0007A5-77; Tue, 18 Aug 2026 11:33:23 +0000 Received: by outflank-mailman (output) from mailman id 1394002.1632831; Tue, 18 Aug 2026 11:33:23 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wwI4J-00079s-4L; Tue, 18 Aug 2026 11:33:23 +0000 Received: by outflank-mailman (input) for mailman id 1394002; Tue, 18 Aug 2026 11:33:21 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wwI4H-0006me-1C for xen-devel@lists.xenproject.org; Tue, 18 Aug 2026 11:33:21 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wwI4G-0061ee-C5 for xen-devel@lists.xenproject.org; Tue, 18 Aug 2026 13:33:20 +0200 Received: from [10.42.69.5] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a8442f4-bab6-0a2a0a5309dd-0a2a4505b038-40 for ; Tue, 18 Aug 2026 13:33:20 +0200 Received: from [52.101.72.140] (helo=AM0PR02CU008.outbound.protection.outlook.com) by tlsNG-c201ff.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6a8442ff-4cb1-0a2a45050019-3465488c380a-3 for ; Tue, 18 Aug 2026 13:33:19 +0200 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) by PAVPR03MB9598.eurprd03.prod.outlook.com (2603:10a6:102:301::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.17; Tue, 18 Aug 2026 11:33:17 +0000 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7]) by AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7%6]) with mapi id 15.21.0315.012; Tue, 18 Aug 2026 11:33:17 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=epam.com header.i="@epam.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tbclOfyK5EuhcYz/OaT4WR/LYKGNuslTGb8fQ4fYFBIlmd3Nt24odPZabanRmnigCYJI79rQdH8fBRZ1XXLZCWHx/n9wMrDdMTnw2TGODKyV4r5CR8dkTpnrkirWdwNnHIsiqds4GdI/RJX+KJvqQJFMlTtwQqcjWBmezZ+wTlgLCo8QYsHFGT7OLK0sRbnnLcvHaqAOtBbEJCTWYtuYd6gmj6LULvs4gCtJvfqwF3avRXvs8y0XCRXq0I2zLdHdWCOpHl/tzMGe7Hk3KSCFEcQjo4dkTWfdXQR0JKrAQYf1Fbhqz8Yul9Vf5kXS+8QTi+SosfIdgbElc9dsMhNitA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2xUZUPUEChfEb02JjA/GupRaagI2/1BMV5nqyehtpb4=; b=SgP16vqrgoHEGYIEZlkT1usXOJxK1rU5sIpuZFG5IxZdD5TS7193eO5rafc1eghnQ9Xg1ON0dOcGb/khp8AVyJzybi+xUxFFERxvZFrg5DAUpKjGrOYM9TUfFF++UHm15M/KIqmcpwTeRJg5G8788rfoce82eVze/HDS2lzGyiy5u+/j2sv4qkgnB6jZPO5nVBmAkofbIATx5XKPCp2SWKfIr/xGcd/UwZDkCeF3P2pDPn/Rp2IivYScHJd5PmnAa/MWj22eW+rVoPRTY/X4LpcMD1DTG24ubEPX+lgQfhpQZjCP9Z0DccZ1LH+9FyFKjPJTmZXtk9eYLr/o1MT0Ww== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2xUZUPUEChfEb02JjA/GupRaagI2/1BMV5nqyehtpb4=; b=CVQ2jr6T1RGvXXBwY9yl8sy4R7Zyi6TWIOFg4MbsKOXVeJXb7ZovKhxuXmWs28RSFd4gPTlteBLfOFXvGqkO2l3sgeTfkUKMRRtHMeV1t0XA0UuDTvn6836VBhwRMFZvfQK/u01E35wiUt4klTF2ATJdUw//rEPp9aH37DWd8qpGGZidH/R7y86Nexqo9NFWWnPrurdEMNuw9oVLoLR1FVIRoWlLoaOQ+X8KIB520nX+G5hhzPc3aA0El6FCPn5TAGS8fB0Eea/zirKV6xMMt9XtKIvUT70eQaLVtopqhQvmxXySSr92zML2++HGmCG4tFepPyBrbe1QxQjsS4XEhg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk Subject: [PATCH v3 3/4] xen/arm: vgic: free eSPIs using the bitmap index Date: Tue, 18 Aug 2026 14:33:01 +0300 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: WA1PEPF00005B92.POLP291.PROD.OUTLOOK.COM (2603:10a6:1d8::63a) To AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR03MB9746:EE_|PAVPR03MB9598:EE_ X-MS-Office365-Filtering-Correlation-Id: 24d8c10c-5afa-45c9-9ef3-08defd1c7f95 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|1800799024|376014|10067099003|56012099006|6133799003|11063799006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: 1guIF8JLqgK5bnhLQaCJ+bpmn/R9UB9Eqj6ZvhMWevg2ARY2BCWk7UPIWQb33HcFMfJsgQT1vVDuzbeFjF8FhuqwUHkA8+uFCElE/WOFL42ftFaXiHzYaRGIdBetdtE8c057hd6lAHdJGRdN7d+KJTDc/SiNl3fXDuRdInvopjxX/TdI+7ZSlCWjqWTCDvrrMG+kefRDDzVfjxmMlevRS2dyKe8ZWnyzCmENVi13AgW7j3mdp4eMN38JizktSKv88FeCM/XyS5oC1XBmIYgBAfl8JW1hLMnAYQjR8XCZ4al4oMCBncF7EqScfeKNrLrjhfG6kdzWy03iTf6WEwR4uVAaidZ/JeW1/BjBdpR42Rw3Ek1FIyg6x3mtMWJo1MKU/vVBb1VRlb/fU+2zuD8AVh+pEHbv7rDXrPkAgYvqCswqJ8YLFQHBfE9OqkUC9pr9r0pj4iDhUVdtakwYfIjEtHpto/pJJ7JwdgzzeHt9xUybnObGgunFQNU1zfuH2Dk35UVCeFKOX4h8sl3EVmlMRcUiHGgAE6xYVg1yrPx8gJJmnM4FBB87xLgV25FTQrxty+MrXfH/Or2NVa28qlWmc4vFq3KljFEGuTG8NfCr0DIbjr9kU1rGy0XWLxIJjOgOP2Q0grk2iIPbRuqH28SbSRP0tD8HE0pka/o6O1QQjO4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR03MB9746.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(1800799024)(376014)(10067099003)(56012099006)(6133799003)(11063799006)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+QUkgr5pSuwR/HNuZMqg5zSnc7P3bRmoR6LE1VJMPKz07KkdIsZyIFytEYjM?= =?us-ascii?Q?luDWQj3JH/5qEjmPGu4602K5JzpEnqS2349tdfqEgmL7g1JMnIGtyc25cesA?= =?us-ascii?Q?Tw4hVJsp+Au01uP7h/Fm68b3xZNBtocHbqeZSSgC6MOzd1xGmNEnwvKDUcOL?= =?us-ascii?Q?7Nb+nE/5itOCQf+cxYyRcz9LHbgcD1/e9CBBsHFNmiYW9OjEW9olQ8hLDSSF?= =?us-ascii?Q?yWXPXhOPOsT5pOYbt6mM7MvcL527CR3ZRiPlDHGxcuhFz/vqdvO0J+A644X4?= =?us-ascii?Q?HQ83hQIyvODB5D/RI0l1Rbs1uXBZIQh7UvFhFnJSP9UkOz2znayqsW20JMz9?= =?us-ascii?Q?1nf4TgwhIFBvsJYJUQqsooGq4hcQ0kc21ek3Bx/U85JLEpQD3zhydW4L1Hyh?= =?us-ascii?Q?tj69PmPqH048tzS5BZ29MMzSX361A/q/G3JAKyjEXVLK5QxTNM/2iW3x73hn?= =?us-ascii?Q?daOm+wlGIZ1OyrtQlQPK2G1ED3L0b79RkE7nxeZvuJ+0Ln5zCd82ZZGcAHJC?= =?us-ascii?Q?xUGpKDKBenNdFK7tVbx/tUYI1LoC/4dBDH0Fc4Cqk+gXIJ50Io17iNPSKky2?= =?us-ascii?Q?4pSgnQlsTImxX6zUtkPFSDKZC9COv0q0Ra67N7Wu9le0HpaVuSiyYfaKJjOY?= =?us-ascii?Q?pqU2SOZd+9WKaoDzSi6ATrSX1AXEUUHp159BD1WYPNYxomqBgIkKXvKQtzYM?= =?us-ascii?Q?aX63oaQ9AH3UicJQmgFyuchWN+I7mWcH/ZOmaMdoBvNODcoazRP6i68T9kZQ?= =?us-ascii?Q?O3q8fBTR5L/6BtDJ/dmttKI/QRWUaxmwsfD/17fTgjMxotwmH9pL0UyWUKCb?= =?us-ascii?Q?LjAX0Z75l3goS0bIJPRg1L6KXXsgMaD0wijL+gP74ay5kPyqEznorhwg6fm7?= =?us-ascii?Q?SD+q9grR6w2NCozn5K/rrEN+lx8PO/mHgR6jzBeneoXcnRihursuYcmVKrjT?= =?us-ascii?Q?kc2XSyDHgXS4iYwlnmTUYkfB4Sb+HZrd226JuZ6NK/CmV+FwoIKDCAb+SGNh?= =?us-ascii?Q?W3cgEhLgg5HfeOvP2XouPmsYP/ZNVSQpfmFsKDcxEaLdhle/Y3xuCOl0NYsu?= =?us-ascii?Q?5lEzRLFVMF1QrxjEu4OArWo8dF4ihYzbLK3jqe2p0IVF2bDmTf2l+KaGa2nK?= =?us-ascii?Q?NEPYDfXJB6KyusOfkpxPlsh/rsTqQCDber6KpiwRvGmGI5Z4LROLBn9l84B9?= =?us-ascii?Q?ss9ykXb+CwqUYVpEJF35dL/luetTp5eWGUjFCr/1xrY3lGDex9i+bKuoHtTT?= =?us-ascii?Q?ZTijhdUbaiDJIVtEMeLw0R+eCUpmo1pvNdYXtdnkoGovQopIg/QVbIHpFx/K?= =?us-ascii?Q?3zw1vDMjt7B/bxJE6OYNab48MJee+Lx0KNPboXsSEZOEg8daa7JmGabk8oJv?= =?us-ascii?Q?fc4+olTeqjP5emcLCGL1NUTG1/2yP6xNAvjmVr44kG9JVDRYmx+pBQH8/+et?= =?us-ascii?Q?Z2fj2xsIf7htUuSu1B45NGypq1Qu315mA7tXlhxfr9iKCWTTFyOMBoLignHY?= =?us-ascii?Q?zM1Jjjn4cVwjhaJpMUNTZQoRbkPehJ14X/NZt+ZEK6g/JIPi6vpdwbVzgHYl?= =?us-ascii?Q?p5WXZzOu3y2Ci1QqLAytYxMmJP7deU+6KLnFLLpBTs44rhwHkjZyu7kRN4vh?= =?us-ascii?Q?Cf6cif8fHlPrX5OWEBW5o+B4Dsn8QanmKMQEkFX/OXoXqwFHWPEuuif/a5C4?= =?us-ascii?Q?VfKxAf808Ft/X9gCQqPfirpd0o0QzQFltHONUvfFCei5CygUwY2oHDYneWXq?= =?us-ascii?Q?jkqZV3ycpg=3D=3D?= X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-Network-Message-Id: 24d8c10c-5afa-45c9-9ef3-08defd1c7f95 X-MS-Exchange-CrossTenant-AuthSource: AS8PR03MB9746.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2026 11:33:17.6083 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zrXAvHs5QcHtM28hbHunu+h+Zjz1Ea6kkbIiDIOfJ/fqkAReipDzgS0WWykn+b538Ho2Rb6d0SDDcteMEB/xeA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR03MB9598 X-purgate-ID: tlsNG-c201ff/1787052799-F76BD2A1-539AE163/0/0 X-purgate-type: clean X-purgate-size: 2800 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1787052824611158500 Content-Type: text/plain; charset="utf-8" The allocated_irqs bitmap in the existing vGIC implementation stores eSPI allocation bits immediately after the regular vIRQ bits. vgic_reserve_virq() converts an eSPI INTID to this compressed bitmap index, but vgic_free_virq() used the raw INTID. Freeing INTID 4096 therefore clears bit 4096 instead of the first eSPI bit. This writes beyond allocated_irqs and leaves the intended eSPI bit set. Valid eSPIs reach this path during DOMCTL bind failure cleanup and unbind, and during vPL011 teardown. Add virq_to_idx(), the inverse of idx_to_virq(), and use it when reserving and freeing vIRQs. Validate a vIRQ before clearing its allocation bit. Fixes: bdde400c6e1b ("xen/arm: vgic: add resource management for extended S= PIs") Signed-off-by: Mykola Kvach Reviewed-by: Michal Orzel --- Changes in v3: - Adapt virq_to_idx() to the configuration-neutral is_espi() helper. Changes in v2: - Call is_espi() without a configuration guard. --- xen/arch/arm/vgic.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c index e14123a30a..e541348a5c 100644 --- a/xen/arch/arm/vgic.c +++ b/xen/arch/arm/vgic.c @@ -33,6 +33,16 @@ static inline unsigned int idx_to_virq(struct domain *d,= unsigned int idx) return idx; } =20 +static inline unsigned int virq_to_idx(struct domain *d, unsigned int virq) +{ + ASSERT(IS_ENABLED(CONFIG_GICV3_ESPI) || !is_espi(virq)); + + if ( IS_ENABLED(CONFIG_GICV3_ESPI) && is_espi(virq) ) + return espi_intid_to_idx(virq) + vgic_num_irqs(d); + + return virq; +} + bool vgic_is_valid_line(struct domain *d, unsigned int virq) { #ifdef CONFIG_GICV3_ESPI @@ -849,19 +859,11 @@ bool vgic_emulate(struct cpu_user_regs *regs, union h= sr hsr) =20 bool vgic_reserve_virq(struct domain *d, unsigned int virq) { - unsigned int idx =3D virq; - if ( !vgic_is_valid_line(d, virq) ) return false; =20 - if ( is_espi(virq) ) - { - unsigned int num_regular_irqs =3D vgic_num_irqs(d); - - idx =3D espi_intid_to_idx(virq) + num_regular_irqs; - } - - return !test_and_set_bit(idx, d->arch.vgic.allocated_irqs); + return !test_and_set_bit(virq_to_idx(d, virq), + d->arch.vgic.allocated_irqs); } =20 int vgic_allocate_virq(struct domain *d, bool spi) @@ -898,7 +900,10 @@ int vgic_allocate_virq(struct domain *d, bool spi) =20 void vgic_free_virq(struct domain *d, unsigned int virq) { - clear_bit(virq, d->arch.vgic.allocated_irqs); + if ( !vgic_is_valid_line(d, virq) ) + return; + + clear_bit(virq_to_idx(d, virq), d->arch.vgic.allocated_irqs); } =20 unsigned int vgic_max_vcpus(unsigned int domctl_vgic_version) --=20 2.43.0 From nobody Thu Sep 24 20:51:35 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass(p=quarantine dis=none) header.from=epam.com ARC-Seal: i=2; a=rsa-sha256; t=1787052829; cv=pass; d=zohomail.com; s=zohoarc; b=nB4XY2AT6yAw2SiRKTGJ6m4ASBuH8cO/PLe/GsZ+1RyhF1NXKwS6uJymbkWrcTzKIYZxJPZwXH4/gjpDRDtAWYKC5y+Sm9b42hT4zf6XrX3mAH/Ra4tGRNNxf6LiFQLQtWREAFHG34fC3Nh2jAYiJqsMAEFV6nQyQ/Dgd+q6ZQk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787052829; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7HDe1xkWtdxGmtk4I8gFdOwYDocPhKfwfAK1ssSxjYs=; b=XbMJVtl1r1w8OuP7xRqBvvkvJvBhFMjmrtHrWOYTBGpEReo3abiDb0uDFFQ3MzBmdsc7mgRXiF669gcnFiNoeOYuCgqyiilg5SwB2KY7NYhxwooN5swk9aeEnL+/m063t4KN+NTzRI29ccUMMdAF97FCwwmexteMECG4XZREWBo= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=epam.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1787052829326695.6077328871589; Tue, 18 Aug 2026 04:33:49 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1394003.1632840 (Exim 4.92) (envelope-from ) id 1wwI4K-0007OM-EP; Tue, 18 Aug 2026 11:33:24 +0000 Received: by outflank-mailman (output) from mailman id 1394003.1632840; Tue, 18 Aug 2026 11:33:24 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wwI4K-0007OB-BW; Tue, 18 Aug 2026 11:33:24 +0000 Received: by outflank-mailman (input) for mailman id 1394003; Tue, 18 Aug 2026 11:33:22 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wwI4I-00078R-8x for xen-devel@lists.xenproject.org; Tue, 18 Aug 2026 11:33:22 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wwI4H-006e0V-Lc for xen-devel@lists.xenproject.org; Tue, 18 Aug 2026 13:33:21 +0200 Received: from [10.42.69.4] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a8442e3-e002-0a2a0a5209dd-0a2a45048bae-48 for ; Tue, 18 Aug 2026 13:33:21 +0200 Received: from [52.101.72.117] (helo=AM0PR02CU008.outbound.protection.outlook.com) by tlsNG-ebf023.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6a844301-b57f-0a2a45040019-34654875529a-3 for ; Tue, 18 Aug 2026 13:33:21 +0200 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) by PAVPR03MB9598.eurprd03.prod.outlook.com (2603:10a6:102:301::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.17; Tue, 18 Aug 2026 11:33:19 +0000 Received: from AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7]) by AS8PR03MB9746.eurprd03.prod.outlook.com ([fe80::cf11:309:1384:58f7%6]) with mapi id 15.21.0315.012; Tue, 18 Aug 2026 11:33:19 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=epam.com header.i="@epam.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gIxIyrQaZPkg/pZz+bOTtsJxhhik1Wfs6H8R2Yr52JVjobIsWFQz3jhRuv/aeJM7N8XIdJjmIWEhS2o1QUQYoqxlF7WZyzFmYtk6GQcsgl7w6C//K3F3EEMSWzFPeq0/ZY/2SFsQDs2B7rdL2bxCcVtFiW884VAGnyo02V7c0Vu05XxxMXck2+oxkxMuXmCFA2UGujrK/MdAcF3NsIhti1pPAwBTtNwSexfKASBcakLISTK+7RtS9XeWYT2SXeJzKsXIK+FO+CY/eEfABcJbN1NAFTitQB/gr1hYv4/zqXnzpR8cP2HZE+9G/YQ/Mx3AOI9YnyQkJNamUIJqmSCNKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=7HDe1xkWtdxGmtk4I8gFdOwYDocPhKfwfAK1ssSxjYs=; b=l0mG1Izx9VSvs7qkukMGnyAerQeTkW7JUrr1enJuGcI+CpUDESaCX1Qns0G/P+MlcwHtkCmhSBfGRb0dN9ViP/EVbei/ND7PS1cCnCSYHZP7LbI1xjRvgphiHhBWPz4Q3UjUDDwKCLAYANgZ8v1AMAs/JNtWVRPVpZYA2xaHw0Z2MAcm+FlzuqnWtUmzmvJrrDVoqfb6MWazNhVzOFFYYQkjPpW3jXkccn9pNW13b2AqQjpUrJLpot1fWQBdSXjyU7ewS/UYWy5E+z3enYuUKnsYS/3tMIWtnQvqLpT8H2Cr3tZI2zFZZy87DCVUJugeOOUEHQnZTUnynZm6MnInmA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7HDe1xkWtdxGmtk4I8gFdOwYDocPhKfwfAK1ssSxjYs=; b=rffEqluXHrkD8BkWH/gn6XQw3mwFk2cI1V8Nouu83YL+tbeqJL9Hdx8ouiatv0hpelD/Y9FhCQPTCvGT3QV6ub7Sc2iw1S3dnmYnCEPhQtkBP+Sm8MKglyOtZYSJTZAtV1UQccT2YlDU/eojcxnO/poZFllkwsgPYjSLzkdUCNcATJfNH9cWmTlzOwloB7wtlqJY6nugZopGsS95xZLmsMhdII1GlLP3pRtls7YUTQ/pEbcfStUPSc+uRDLNQoYBNGyahHTG1zVK1VRc79JP3WzF6CVF1PHq2FhwDSnnBpG0dcFNhyS4HV5be+wDCNtzRt6oUSIPzml6RYSHswJMeg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com; From: Mykola Kvach To: xen-devel@lists.xenproject.org Cc: Stefano Stabellini , Julien Grall , Bertrand Marquis , Michal Orzel , Volodymyr Babchuk , Andrew Cooper , Anthony PERARD , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Jens Wiklander Subject: [PATCH v3 4/4] xen/arm: handle irq_set_type() failures Date: Tue, 18 Aug 2026 14:33:02 +0300 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: WA1PEPF00005B92.POLP291.PROD.OUTLOOK.COM (2603:10a6:1d8::63a) To AS8PR03MB9746.eurprd03.prod.outlook.com (2603:10a6:20b:61d::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR03MB9746:EE_|PAVPR03MB9598:EE_ X-MS-Office365-Filtering-Correlation-Id: 04e34735-1d56-47f5-1049-08defd1c80a3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|1800799024|7416014|376014|10067099003|56012099006|6133799003|11063799006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: 1ly0t2Wp8MzggSIWNxSQGDA0WLshz1OdxXdSgSVrON0Ma0SNeK0cybjLwEkYOQ3As+NimmrtS4SV7dGMLwjn0guWum2N5pOIjJxnTDnflmLJoSrkhWxKF1kykCf3kfBSja3Nn9+xSH39ubQIbvlN5bP6fJfgwKIGAYVjjLINW32oEjD5O9j7+/b3B43Uc2WpWadRrw1Clo7iEL9b+aR6St4Acn2n6vt8nZanDJ9FoSToUvZHcYGrihzdS2G0GwLF+7BZAUI7BA7kNoRObMCQNvBlyn5xlwirnQ+4geMdzItgieDFe4KrYVe6/r5aOdBS26HOU5qVy6oVC03HHcM5w/2Ba/ojL+h4cfu2h3ucVQjEV9ZmzJju/wzNsviVUzZ3qqA1UDSJdHJNQriIKEeHjZOqbBbZuUgbv4CjvqYPJjiJSfu0TijwYygQpULE+WmVmHgpdW8kUueNj5tOtVOpig+F6rIF/9Fhfm67Zm1uMTShQSTJfRV9GM4yDfdUTxSNoIS1zuKE1ehI8x+32HMx57lqCWzhQV+hpDr7tKeOTHjgnAyfIxBIurULDc0PMTCGwxCUNbahqCSftEQ9Mupq/xP6zdApdnVyTu0Qoa6hQi6HCV+uU30mTkT5iceZqtzE01CLgWtXeY8bkNzbsClgvnNWxDsltZESrY1S20saclI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR03MB9746.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(1800799024)(7416014)(376014)(10067099003)(56012099006)(6133799003)(11063799006)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Ni5Kc5HWi0tZN2w3+KA0w8ocghgF0iegYt5hszSvRsPoj7N6N+4bsOCqsEiZ?= =?us-ascii?Q?J4AusptUgCRg30ucuA4hjz4ObPeAbAMHIAOq5nfbkvommZRN41+PQ+F5baTs?= =?us-ascii?Q?HAMynBvAeQF7+SgQpT+Cq4xpRbhTBbxUkGZi9n1+Dq2hF8clMm6GBqu1Nd3B?= =?us-ascii?Q?XQQMHgv9/1m7kTFyhyBQIitwkoOwx4UjjBCx9oNFMDFxrN0Ld6EdwqKCZ1UF?= =?us-ascii?Q?Tduzec5NYpRY/Q0yZzYgVq9G3W0RmtgMa1QB+FHVVtw34AsXhGxc1hj9zEsx?= =?us-ascii?Q?Apt9sygDtkAvCOnpACZTjnS1jmEG+sWpXw/h+GxyfNIUlt359fHAnMMzWt9G?= =?us-ascii?Q?MQwvjTl3yNplLfeaSnC8fSFd4h4VV0PFwy2Od9CtgFuUqwOm8jsMKvZsTnOK?= =?us-ascii?Q?ublVLXzSL3moNSdWf2cH0RFr+R23WgkTbjvgePdbJzTkVxrg489+CkRfmOvv?= =?us-ascii?Q?AXKmwOm1kETSkM+9wj6+Y0+vBd/bApSVaFrWAem30G1tOHle2uHsBi18+a34?= =?us-ascii?Q?Ewba8y6rNdU9v1gVIFNgggQkFNXR8UgNYla3axwDOSmFdftavVib9tF1iq0C?= =?us-ascii?Q?4j5MODf/MgT+/UEmOWpJJI5gWZKRhryX9IT6X3beSPC65c9JaIQfzEi2Np42?= =?us-ascii?Q?s3rICSFVvOIlnVQ5L0PORcM4dYyZA8887xnV0/Foqse6ZGx4OF1NF8PGqd8C?= =?us-ascii?Q?zdWPdvcIQ1SuEB537ezTiD+1wSXhP6ix7ZzjWgzxeKp3cdnHxf1Dsm52bXuJ?= =?us-ascii?Q?QsUumsvW7OZcpgqGD6OVDAN3sg7VMnVo0p4QxM7z0UYUVj7qfPn+f4pY8Tdr?= =?us-ascii?Q?FpPOER+jPeF7GTnxD2K6Fa0tSPfZrMSbe8PE6HGEu19Kt6xL61gUpRWuNpna?= =?us-ascii?Q?xuJ4eJ/DbDSxoMqEUXEWlnXgzr5KdboN4TaJnnV8vVKNyoJJ8b/vtI/rQHrr?= =?us-ascii?Q?2xIEAy9Y5RA0MsOrZpaLIPl1XeKv+jIWoWAeJc773nNxDWYSNbhdJYqmCAmI?= =?us-ascii?Q?XoDEe3yTxRBGXC1/pL57kxQClEwQ1q2nfeaPZOLeMnxLBDrG+cqEeRFXmxp/?= =?us-ascii?Q?+H/Sh7XaOyEy9XJfuRpmGEnrEXCBOWAti0KymKXO3cIucBquU5ilJt0PEY4L?= =?us-ascii?Q?4E+677OqbecvmD2tjOTWDxmk4VzwgNhVyzeUj/0GyKpZrztMazrest52lL/X?= =?us-ascii?Q?TMnzoivf6qQ4Fl8k3VP/GYkq1wOSjDIRzMHGCiPs20+TIGjDxinxlTlhIue7?= =?us-ascii?Q?o+vmyPTAgaIKmBXFjm/xv2UsyRKZQApmtKt64EviRzhLaZbcx9Gw5h84hR/M?= =?us-ascii?Q?VAM2ges1fTbXzDOzFZJcUi55k/Sd0uEBHYYKRdY1FSL5t2DOGftHgiRNNHPn?= =?us-ascii?Q?uR7G/c4N36Vf/8hLy2aPARCPhLQrWx41dK5E5OCZj2g1gJZva53AU4ipS1ml?= =?us-ascii?Q?EihaTZObYUglSS0UQrj61GXfsTCWaQWbdDS6CtRkrBjtVVxjp/KcXbZd7/ue?= =?us-ascii?Q?pP7gtBJUHRDcy0kNcL4rCns/0PROwdaxOT1ck4oYZPv5NbyUcuUbf+Iondwc?= =?us-ascii?Q?0lxC3/FmpK+CsO2XCj8/I858W2c4tUgUyf4EsVhGH2uQ8Kg7mClSbBhIdIQE?= =?us-ascii?Q?4y674+RRkHV8ZzQY7rTezuEtq6NwNWsPoc05tyb2ySixw1KheaePWF5qbeP8?= =?us-ascii?Q?uWhBiUPXj7NtNo+aQp/pPSw32IXBje5J955eAPUac+G8Zf+ZCDlYWIgrsHs7?= =?us-ascii?Q?kpiNf2NArA=3D=3D?= X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-Network-Message-Id: 04e34735-1d56-47f5-1049-08defd1c80a3 X-MS-Exchange-CrossTenant-AuthSource: AS8PR03MB9746.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Aug 2026 11:33:19.3671 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 05I/PAgTfSHYaUFLsSs2nZEH0SOvgMUSx6T2pJsTiKpvRbrwlEXDIp6AX+jI6jmB5ZO+Nt7fBeV7/KQFMrEntw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR03MB9598 X-purgate-ID: tlsNG-ebf023/1787052801-532CCB50-344BEABA/0/0 X-purgate-type: clean X-purgate-size: 8017 X-ZohoMail-DKIM: pass (identity @epam.com) X-ZM-MESSAGEID: 1787052830634158500 Content-Type: text/plain; charset="utf-8" Several Arm firmware initialization paths discard irq_set_type()'s return value, violating MISRA C Rule 17.7. If trigger configuration fails, initialization continues with an IRQ that was not configured as requested. GTDT and MADT retain rejected timer and maintenance INTIDs. check_timer_irq_cfg() and release_irq() later perform unconditional descriptor lookups on those values. Xen has no backing descriptors for INTIDs 1024 through 4095, so retaining one can cause an out-of-bounds access. Check the return value in the GTDT, MADT, SPCR, and FF-A paths. Store timer INTIDs only after successful trigger configuration, make GTDT parsing failure fatal, and stop UART or notification setup when trigger configuration fails. Signed-off-by: Mykola Kvach Reviewed-by: Michal Orzel Reviewed-by: Volodymyr Babchuk --- Changes in v3: - Avoid partial state updates and simplify maintenance IRQ setup. Changes in v2: - New patch. --- xen/arch/arm/gic-v2.c | 15 +++++++++------ xen/arch/arm/gic-v3.c | 15 +++++++++------ xen/arch/arm/tee/ffa_notif.c | 11 ++++++++++- xen/arch/arm/time.c | 18 ++++++++++++++---- xen/drivers/char/ns16550.c | 8 ++++++-- xen/drivers/char/pl011.c | 4 +++- 6 files changed, 51 insertions(+), 20 deletions(-) diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c index 43a379fdda..a24d387e7d 100644 --- a/xen/arch/arm/gic-v2.c +++ b/xen/arch/arm/gic-v2.c @@ -1166,17 +1166,20 @@ gic_acpi_parse_madt_cpu(struct acpi_subtable_header= *header, /* Read from APIC table and fill up the GIC variables */ if ( cpu_base_assigned =3D=3D 0 ) { + int rc; + + rc =3D irq_set_type(processor->vgic_interrupt, + processor->flags & ACPI_MADT_VGIC_IRQ_MODE ? + IRQ_TYPE_EDGE_BOTH : IRQ_TYPE_LEVEL_MASK); + + if ( rc ) + return rc; + cbase =3D processor->base_address; csize =3D SZ_8K; hbase =3D processor->gich_base_address; vbase =3D processor->gicv_base_address; gicv2_info.maintenance_irq =3D processor->vgic_interrupt; - - if ( processor->flags & ACPI_MADT_VGIC_IRQ_MODE ) - irq_set_type(gicv2_info.maintenance_irq, IRQ_TYPE_EDGE_BOTH); - else - irq_set_type(gicv2_info.maintenance_irq, IRQ_TYPE_LEVEL_MASK); - cpu_base_assigned =3D 1; } else diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c index acdac22953..b32a9b5009 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -1743,15 +1743,18 @@ gic_acpi_parse_madt_cpu(struct acpi_subtable_header= *header, /* Read from APIC table and fill up the GIC variables */ if ( !cpu_base_assigned ) { + int rc; + + rc =3D irq_set_type(processor->vgic_interrupt, + processor->flags & ACPI_MADT_VGIC_IRQ_MODE ? + IRQ_TYPE_EDGE_BOTH : IRQ_TYPE_LEVEL_MASK); + + if ( rc ) + return rc; + cbase =3D processor->base_address; vbase =3D processor->gicv_base_address; gicv3_info.maintenance_irq =3D processor->vgic_interrupt; - - if ( processor->flags & ACPI_MADT_VGIC_IRQ_MODE ) - irq_set_type(gicv3_info.maintenance_irq, IRQ_TYPE_EDGE_BOTH); - else - irq_set_type(gicv3_info.maintenance_irq, IRQ_TYPE_LEVEL_MASK); - cpu_base_assigned =3D 1; } else diff --git a/xen/arch/arm/tee/ffa_notif.c b/xen/arch/arm/tee/ffa_notif.c index 186e726412..d08d0a3366 100644 --- a/xen/arch/arm/tee/ffa_notif.c +++ b/xen/arch/arm/tee/ffa_notif.c @@ -407,7 +407,16 @@ void ffa_notif_init(void) irq =3D resp.a2; notif_sri_irq =3D irq; if ( irq >=3D NR_GIC_SGI ) - irq_set_type(irq, IRQ_TYPE_EDGE_RISING); + { + ret =3D irq_set_type(irq, IRQ_TYPE_EDGE_RISING); + if ( ret ) + { + printk(XENLOG_ERR + "ffa: irq_set_type irq %u failed: error %d\n", + irq, ret); + return; + } + } ret =3D request_irq(irq, 0, notif_irq_handler, "FF-A notif", NULL); if ( ret ) { diff --git a/xen/arch/arm/time.c b/xen/arch/arm/time.c index 6955b2788f..39b5eabe7c 100644 --- a/xen/arch/arm/time.c +++ b/xen/arch/arm/time.c @@ -60,20 +60,27 @@ static int __init arch_timer_acpi_init(struct acpi_tabl= e_header *header) { u32 irq_type; struct acpi_table_gtdt *gtdt; + int rc; =20 gtdt =3D container_of(header, struct acpi_table_gtdt, header); =20 /* Initialize all the generic timer IRQ variable from GTDT table */ irq_type =3D acpi_get_timer_irq_type(gtdt->non_secure_el1_flags); - irq_set_type(gtdt->non_secure_el1_interrupt, irq_type); + rc =3D irq_set_type(gtdt->non_secure_el1_interrupt, irq_type); + if ( rc ) + return rc; timer_irq[TIMER_PHYS_NONSECURE_PPI] =3D gtdt->non_secure_el1_interrupt; =20 irq_type =3D acpi_get_timer_irq_type(gtdt->virtual_timer_flags); - irq_set_type(gtdt->virtual_timer_interrupt, irq_type); + rc =3D irq_set_type(gtdt->virtual_timer_interrupt, irq_type); + if ( rc ) + return rc; timer_irq[TIMER_VIRT_PPI] =3D gtdt->virtual_timer_interrupt; =20 irq_type =3D acpi_get_timer_irq_type(gtdt->non_secure_el2_flags); - irq_set_type(gtdt->non_secure_el2_interrupt, irq_type); + rc =3D irq_set_type(gtdt->non_secure_el2_interrupt, irq_type); + if ( rc ) + return rc; timer_irq[TIMER_HYP_PPI] =3D gtdt->non_secure_el2_interrupt; =20 return 0; @@ -81,7 +88,10 @@ static int __init arch_timer_acpi_init(struct acpi_table= _header *header) =20 static void __init preinit_acpi_xen_time(void) { - acpi_table_parse(ACPI_SIG_GTDT, arch_timer_acpi_init); + int rc =3D acpi_table_parse(ACPI_SIG_GTDT, arch_timer_acpi_init); + + if ( rc ) + panic("Timer: Failed to configure interrupts from GTDT: %d\n", rc); } #else static void __init preinit_acpi_xen_time(void) { } diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c index 120ac09d23..eb608ab8b4 100644 --- a/xen/drivers/char/ns16550.c +++ b/xen/drivers/char/ns16550.c @@ -1928,6 +1928,7 @@ static int __init ns16550_acpi_uart_init(const void *= data) struct acpi_table_header *table; struct acpi_table_spcr *spcr; acpi_status status; + int rc; /* * Same as the DT part. * Only support one UART on ARM which happen to be ns16550_com[0]. @@ -1959,6 +1960,11 @@ static int __init ns16550_acpi_uart_init(const void = *data) return -EINVAL; } =20 + /* The trigger/polarity information is not available in spcr. */ + rc =3D irq_set_type(spcr->interrupt, IRQ_TYPE_LEVEL_HIGH); + if ( rc ) + return rc; + ns16550_init_common(uart); =20 /* @@ -1975,8 +1981,6 @@ static int __init ns16550_acpi_uart_init(const void *= data) uart->reg_shift =3D spcr->serial_port.bit_offset; uart->reg_width =3D spcr->serial_port.access_width; =20 - /* The trigger/polarity information is not available in spcr. */ - irq_set_type(spcr->interrupt, IRQ_TYPE_LEVEL_HIGH); uart->irq =3D spcr->interrupt; =20 uart->vuart.base_addr =3D uart->io_base; diff --git a/xen/drivers/char/pl011.c b/xen/drivers/char/pl011.c index a336241033..97c53c11e0 100644 --- a/xen/drivers/char/pl011.c +++ b/xen/drivers/char/pl011.c @@ -363,7 +363,9 @@ static int __init pl011_acpi_uart_init(const void *data) spcr->interface_type =3D=3D ACPI_DBG2_SBSA_32); =20 /* trigger/polarity information is not available in spcr */ - irq_set_type(spcr->interrupt, IRQ_TYPE_LEVEL_HIGH); + res =3D irq_set_type(spcr->interrupt, IRQ_TYPE_LEVEL_HIGH); + if ( res ) + return res; =20 /* TODO - mmio32 proper handling (for now set to true) */ res =3D pl011_uart_init(spcr->interrupt, spcr->serial_port.address, --=20 2.43.0