From nobody Thu Jul 23 21:54:15 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=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1782141460; cv=pass; d=zohomail.com; s=zohoarc; b=M7YpECwEjq4Fcwm7i0qQn0dfX9DiucsXNQm0zaDtHk1c4sFajQkXOnoihPj2Ek2tb3uNU2jzKLuBFXraU19QkfJfTa6A3bzViUnlDWWWtKnfUuKiBEnFBEqMjyDgS0Z8nuc+DuqooBmbB7U/lFyJeIaTqaivpvFbLIfbdrhxO70= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782141460; 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=ZhBWTpnyw2XmT+IZFDCCw+YPmi5DDkc8GEqwHJ16MNI=; b=E6hFJnS739J8LVSPDSujuWdJwOa/AMT2RKzotcTm21lpJjKHJqaPxYJ4+p5gDWCUHA6oOuKBEC0g6Xg83laJqKH7bF9DQ8CxKdV1WXkGTtkZtaWElT4LA3OtcMXbVcAkJiBuorLoB/WMvOhY+ceqiSI5QnzwEZTFA+fZySKjjxY= 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=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1782141460042864.9865546268622; Mon, 22 Jun 2026 08:17:40 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1343886.1603103 (Exim 4.92) (envelope-from ) id 1wbgOq-0004k3-OR; Mon, 22 Jun 2026 15:17:24 +0000 Received: by outflank-mailman (output) from mailman id 1343886.1603103; Mon, 22 Jun 2026 15:17: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 1wbgOq-0004jw-LZ; Mon, 22 Jun 2026 15:17:24 +0000 Received: by outflank-mailman (input) for mailman id 1343886; Mon, 22 Jun 2026 15:17:23 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wbgOp-0004jQ-NZ for xen-devel@lists.xenproject.org; Mon, 22 Jun 2026 15:17:23 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wbgOp-006hPz-4Q for xen-devel@lists.xenproject.org; Mon, 22 Jun 2026 17:17:23 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a3951f1-bab6-0a2a0a5309dd-0a2a45028a7e-32 for ; Mon, 22 Jun 2026 17:17:23 +0200 Received: from [52.101.53.7] (helo=BL0PR03CU003.outbound.protection.outlook.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.0) (envelope-from ) id 6a395201-fdf1-0a2a45020019-34653507170f-3 for ; Mon, 22 Jun 2026 17:17:22 +0200 Received: from BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) by PH9PR03MB649383.namprd03.prod.outlook.com (2603:10b6:510:3e7::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Mon, 22 Jun 2026 15:17:20 +0000 Received: from BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07]) by BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07%3]) with mapi id 15.21.0139.018; Mon, 22 Jun 2026 15:17:20 +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=citrix.com header.i="@citrix.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=hPr0TAusxP7cvig3ycixIk8AJyYmILi06vEjoDJwbp8qryY02oVTht8bWrxhy64VbycKPWto9+7oZTSqrLLId0tmKlAJW37UvzzFJT7+61ezaFwKHo48KnSSZTFk/wAjRIg8wU0oK6xzEXHN5iQYEe965W2b7Y/uJWTDGjJBKpLE61pBq2c5asVWBEiGl0Xdr6kib35TI2XWQKmi7fwGfhV4BSczXmr3wr0bWVBRM1xMirOmvjD6cAsSJDtUJXV81bxn+MgSOxG9IlRVjMMPvbesMU8YCUGTT/+Jpc/MDmDVWiki1dQkCM43HHZ13g4iE63mtsLOrV/P+k43U3so/A== 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=ZhBWTpnyw2XmT+IZFDCCw+YPmi5DDkc8GEqwHJ16MNI=; b=dwWYUpDN7blaHrrZRXTBSDIzPup7zOEoFQPWDFwshep5y2WuDAPdv0LbQJEk8YDMjxFZTH7fd1AT6+T5/1RTXeqSWKDEHfNehjcczzbxab7b1S/4UofeA8HcyZtqJpPzrgHBPB7Nu/btdr7BroPaprLXn1efybJ9XZta/KjOkNgw+NIFVQnCSTFyUzrnwAD9jmhMibza3nSbd6aCHLo9Q9+YPNlbstyTOXm8C5UCl8kG5JUBP7xDpX4nbUTHBlvNJMbanrmBsvq4P1oZG3fPdISOsnKEfKwu2c2TALW/TLKq3U1ImYZNVoUpQG2jkjjhGOHwZWAgR9hm5l6lyIdbyw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZhBWTpnyw2XmT+IZFDCCw+YPmi5DDkc8GEqwHJ16MNI=; b=h2pc7K77FXs0nh5vsowEXpC5qiuphjkHHota2AyRk6xpwVUatttwjkxY7ks/GbTv5+nrPssaJu41Qw5EmyzdT7ZvECgBt5U7OzMeO4PUiqKuZ3zwc8VCoHd9aH/sz0pkugpooqUHagU9oqtPhLvYuoXyauoTsk6PJ0NdnpXi50Y= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Kevin Lampis To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger.pau@citrix.com, ross.lagerwall@citrix.com, Kevin Lampis Subject: [PATCH v2 1/7] x86/kexec: add digest checks Date: Mon, 22 Jun 2026 16:18:27 +0100 Message-ID: <20260622151833.3397692-2-kevin.lampis@citrix.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260622151833.3397692-1-kevin.lampis@citrix.com> References: <20260622151833.3397692-1-kevin.lampis@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO6P265CA0021.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2ff::14) To BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PR03MB7996:EE_|PH9PR03MB649383:EE_ X-MS-Office365-Filtering-Correlation-Id: 979f2b24-7510-45a1-ff94-08ded0715a95 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|376014|22082099003|18002099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: oXVPYagOvPqxrNKJQQ82AzW8R0/QeDiXbbqW4sY2bjhbI1BFMWBsq2M7+BrNlPRMBEFgFa0GPHCRffdTaKSBLQplM7AExiUnOkRJ3jk2YAh5cIUjK2JqZb9CmDfapWMIELGp/R3PdckOypWoUA+fBc3AQm+zD1VRDJAuEdfPVvNsQREuPejgbJLP+7uJO6elUT5ETbZbQHo1Da9Bv2Z2H6EYE2taOfYQnUuSQ3VR7egQo3Y88bah/VQiYCcSJZwFh0m3mBa7vbutzOR9rpn1wy0j34bojKxV3OI0BbFGNsUttTZjMe1/GAG8Y7U2JSvuYnwVK1fnYnljV+8CBVDRV7qNbnvMKLxDakJsvWZmOSB9tmJJ4bVPIyN8W+EQp4tEVpmqbHwEuUi7PgkRsYDnjwA4ur2DDVJ+FtfEJw/NBbfBhcxN5QRGVZG8rcU7Eljat3eEHDklPy/Gp5ipWy6JvLCttU2W+gb7xfw4amPPajP37ud0n8ysojotnck/CQTBe/ta996bhyXoNZj23kGVML+pZZjuxiMhq2x++1xbOBQ9D0XuQnSU+twY/3BNSSuAJ0fI64jpBELlM4lNWpWVs/l18T4H5GCykznxemnSfUGfFOsag3JEPF/fYFoDCvR8Z2qxpyo04yKswj8+A46Wyb1H72IPAbKk79yQsVAQpYI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY1PR03MB7996.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(23010399003)(376014)(22082099003)(18002099003)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?vkQZZBPEaErXMptj/ieezHmWS8kASRmq1Jmcey7KLJs4n5XBcok5Q74zR0Ly?= =?us-ascii?Q?PqmhFxOOU8gxiFqjX/9z24wCukEBHXSEMzwt7Iw51NHblpKziq5VET1v+I0J?= =?us-ascii?Q?GzBZR3FrFlVtiFxRGXeig4d2LW6zWDu2hAXfFUagc54njbnOQvTO4Bk3m0d/?= =?us-ascii?Q?2KBahxZ+KxQ5gJza3SCB3KtjAvk9pLXwY/LBEZ6QJiw5sbQ5zS2govaGLMVv?= =?us-ascii?Q?pFKdJn7eb+7xu+FUlgjIioGT/KwLUoxm7uC0L2HwvRfgN2gEu6VKuDUz7ygT?= =?us-ascii?Q?KCHiNdsurQbgvUBxy9plwABzatwXYZmpooyLhjWV+JZ6hQuaflZObdPPoZj0?= =?us-ascii?Q?Dz7x4BBjY9Qb/CKzYqwm1r+KZ8/xogLESIyQBz3yyx9/0/a1gJX2+gLX66Co?= =?us-ascii?Q?Rh/F8gwS+nWcd3oysiqTYNs1AueEEu19CupScQ0M/cf9VmSfbzCENFBkG8O4?= =?us-ascii?Q?guSWBdJfyR4tPYPFEZXZBDEb7cXOBN06OyGs7gyZyav+fRYZXWccWFPgOmzJ?= =?us-ascii?Q?yHVGkXzv43Ozwov81kPQN4psqcGE1SHlqHOivBz//gxCKEMHPiL3Dbaugjvj?= =?us-ascii?Q?dLftcLv17zNsaLC2D3Timoor6DWhUEQ5AqqraXlVvJsiosIlo0AHcRaQSr9l?= =?us-ascii?Q?ulS6byD+ghe0UDZDtGzl5YxRhUNhkHxEtEK2xAYQlzs4xYJWeL2z7rVwWjUD?= =?us-ascii?Q?7ejfaUAWKwxK+R/qQi6EeuvQZkKMMdP+zt1wiOhXDvI2syhpoyjooCaWY6Ik?= =?us-ascii?Q?7BhJfwaK6vqFW3xAGYvs5KXVpwCVLwY9T9OEkDX5Ll3nLUrDBSCKCeZc5YNm?= =?us-ascii?Q?CsmB8rbJUoU4aHH4O8tRZ79AzaAXCbE7eNeP0nGnAL3JMbx7lLW3Dph8c+qF?= =?us-ascii?Q?ldXzvA+FG9UfiIWdMYi61DmSG0c4sKJzXftS1rjG8DyuzT82IsxNGJcbiLBU?= =?us-ascii?Q?1y3h1yZHl/AupN0HSGdbBtsNMoprMTRpmOCNYDNWWtiGaCvxJIdinYFtsjCT?= =?us-ascii?Q?qHWXQLvQ0mkXf6vaz60A79rHt91I9MOhCAnn6XvzJSQqUK4KCpHi5xISHPDK?= =?us-ascii?Q?r3hDOtkN/JpZy4PPaVvYGhHJl3V/19+iPu/Zq+4GuELcRiJfEZgu0ctAcdZH?= =?us-ascii?Q?/+prNYldRnOHxe1zYlJyt3fLFSMVfbXjoAY1KXQeevIuIWz9Usiqdz6i/Hef?= =?us-ascii?Q?791H3/v2VaYZrvI5Ww5EbEr0VHZbg55cLb1YX1Fjgpq9kVqzwSYx2q8fLBcA?= =?us-ascii?Q?f5EAX5mj9TnT0fsIyAuaK0T0JhPHbtSdXgSXLJ9hGBUHE1rXW5S2OdOuCpXB?= =?us-ascii?Q?mMSfOIpf9zW/YZN07x+uBwZXBAG24jLiDVfikskimw0SPWzHF9quPeES1SLi?= =?us-ascii?Q?mjTMfClg4RbdJlrukq2TtJc3TaEmZ3uCJaHoWuIr/H7smmEQrrCS0yTKHsaY?= =?us-ascii?Q?o7bgS7amJW/FpCNQwYhz3wAo9E0IDe88nvIM6xYG/YYTz4HHPmiy7oiUxUQ+?= =?us-ascii?Q?Epl67w2wfFHCiM2PH/DtbTI9uU82HO1v48Z9b5glGK7QBoFwgnjG1Jc2kk9/?= =?us-ascii?Q?ZFiEGfjishYJW08abPsXTm9bDsysO7gW1n9h+QDm/AbB15yR2x7NduPbuQB9?= =?us-ascii?Q?+0L3q7RzCe0Jz8n22Xgwrr0jFnGlf84iQDV0tcUYLtJ8vsq9DDlHoHjmh+mO?= =?us-ascii?Q?vXegKmAAYxXdQuFzJgeWlvbQjmQ1Ttp0WAZe3rZc279d+t2yZKETvg66Kj0v?= =?us-ascii?Q?M4RLFr/Gzw=3D=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 979f2b24-7510-45a1-ff94-08ded0715a95 X-MS-Exchange-CrossTenant-AuthSource: BY1PR03MB7996.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2026 15:17:20.3595 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: CCJ1obZgaPwc3VOb1CdydW8brFiCkqYF7fPG6TrTncflKi3j+Avs3cY8Z8VP4sCfjKogIBhIsBvl/7ik2w2AQQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH9PR03MB649383 X-purgate-ID: tlsNG-720697/1782141443-44C6E3F3-FFAB0E78/0/0 X-purgate-type: clean X-purgate-size: 5529 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1782141460893158500 Content-Type: text/plain; charset="utf-8" From: Ross Lagerwall To support UEFI Secure Boot we must check that the kexec data has not changed between signature verification and actual execution. However, this is also a good check to perform generally. During kexec load, calculate a digest over all the kexec segments. This digest is stored and verified again later prior to entering the image. For now, only kexec crash images are supported. Signed-off-by: Ross Lagerwall Signed-off-by: Kevin Lampis --- Changes in v2: - Reword the commit message - Change the "kexec digest failed" error message - Remove the `!=3D 0` from the call to kimage_verify_digest() - Remove include sha2.h from kimage.h - Remove error checking from kimage_calc_one_digest() because map_domain_page() doesn't fail - Change kimage_calc_digest() to a void return too - Remove references to KIMAGE_SHA256_REGIONS It was a purgatory thing which is not used anymore - Fix style on `for ( s =3D 0; s < image->nr_segments; s++ ) {` - Add newlines and indentation to digest check fail message - Make kimage_verify_digest() a bool return value --- xen/common/kexec.c | 8 +++++ xen/common/kimage.c | 73 ++++++++++++++++++++++++++++++++++++++++ xen/include/xen/kimage.h | 6 ++++ 3 files changed, 87 insertions(+) diff --git a/xen/common/kexec.c b/xen/common/kexec.c index 7535d269e8..f31ab3fa07 100644 --- a/xen/common/kexec.c +++ b/xen/common/kexec.c @@ -389,6 +389,12 @@ void kexec_crash(enum crash_reason reason) if ( !test_bit(KEXEC_IMAGE_CRASH_BASE + pos, &kexec_flags) ) return; =20 + if ( !kimage_verify_digest(kexec_image[KEXEC_IMAGE_CRASH_BASE + pos]) ) + { + printk(XENLOG_ERR "kexec digest failed, aborting kexec crash trans= fer\n"); + return; + } + kexecing =3D true; =20 if ( kexec_common_shutdown() !=3D 0 ) @@ -943,6 +949,8 @@ static int kexec_load(XEN_GUEST_HANDLE_PARAM(void) uarg) if ( ret < 0 ) goto error; =20 + kimage_calc_digest(kimage, kimage->digest); + ret =3D kexec_load_slot(kimage); if ( ret < 0 ) goto error; diff --git a/xen/common/kimage.c b/xen/common/kimage.c index a0e4e67df7..6e009529ae 100644 --- a/xen/common/kimage.c +++ b/xen/common/kimage.c @@ -818,6 +818,79 @@ int kimage_alloc(struct kexec_image **rimage, uint8_t = type, uint16_t arch, return result; } =20 +static void kimage_calc_one_digest(struct sha2_256_state *ctx, + xen_kexec_segment_t *segment) +{ + paddr_t dest; + unsigned long sbytes; + + sbytes =3D segment->buf_size; + dest =3D segment->dest_maddr; + + while ( sbytes ) + { + unsigned long dest_mfn; + void *dest_va; + size_t schunk, dchunk; + + dest_mfn =3D dest >> PAGE_SHIFT; + + dchunk =3D PAGE_SIZE; + schunk =3D min(dchunk, sbytes); + + dest_va =3D map_domain_page(_mfn(dest_mfn)); + sha2_256_update(ctx, dest_va, schunk); + unmap_domain_page(dest_va); + + sbytes -=3D schunk; + dest +=3D dchunk; + } +} + +void kimage_calc_digest(const struct kexec_image *image, + uint8_t digest[SHA2_256_DIGEST_SIZE]) +{ + struct sha2_256_state ctx; + unsigned int s; + + if ( image->type =3D=3D KEXEC_TYPE_DEFAULT ) + { + /* TODO implement digest calculation for normal kexec */ + return; + } + + sha2_256_init(&ctx); + + for ( s =3D 0; s < image->nr_segments; s++ ) + kimage_calc_one_digest(&ctx, &image->segments[s]); + + sha2_256_final(&ctx, digest); +} + +bool kimage_verify_digest(const struct kexec_image *image) +{ + uint8_t digest[SHA2_256_DIGEST_SIZE]; + + if ( image->type =3D=3D KEXEC_TYPE_DEFAULT ) + { + /* TODO implement digest check for normal kexec */ + return true; + } + + kimage_calc_digest(image, digest); + + if ( memcmp(digest, image->digest, sizeof(digest)) !=3D 0 ) + { + printk(XENLOG_WARNING "kexec digest mismatch:\n" + " expected %" STR(SHA2_256_DIGEST_SIZE) "phN\n" + " got %" STR(SHA2_256_DIGEST_SIZE) "phN\n", + image->digest, digest); + return false; + } + + return true; +} + int kimage_load_segments(struct kexec_image *image) { int s; diff --git a/xen/include/xen/kimage.h b/xen/include/xen/kimage.h index fccba1d88d..8ed89d4fa3 100644 --- a/xen/include/xen/kimage.h +++ b/xen/include/xen/kimage.h @@ -11,6 +11,7 @@ =20 #include #include +#include #include =20 #define KEXEC_SEGMENT_MAX 16 @@ -37,6 +38,8 @@ struct kexec_image { =20 /* Address of next control page to allocate for crash kernels. */ paddr_t next_crash_page; + + uint8_t digest[SHA2_256_DIGEST_SIZE]; }; =20 int kimage_alloc(struct kexec_image **rimage, uint8_t type, uint16_t arch, @@ -52,6 +55,9 @@ mfn_t kimage_entry_mfn(kimage_entry_t *entry, bool compat= ); unsigned long kimage_entry_ind(kimage_entry_t *entry, bool compat); int kimage_build_ind(struct kexec_image *image, mfn_t ind_mfn, bool compat); +bool kimage_verify_digest(const struct kexec_image *image); +void kimage_calc_digest(const struct kexec_image *image, + uint8_t digest[SHA2_256_DIGEST_SIZE]); =20 #endif /* __ASSEMBLER__ */ =20 --=20 2.52.0 From nobody Thu Jul 23 21:54:15 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=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1782141472; cv=pass; d=zohomail.com; s=zohoarc; b=F5motDp/mlOQCpX9PIHOoLexY1+DrF3ajyBQ4XgAYV9NUjhWpP4Zjf4p1v/AtB5fb+x9f4aDO5TAFVdWjGbQX6ht1tL/oFsxPJZlNQgTCE3liol44WptjqptO9PpK7YgRrgpdIDzwqyfdO5a22banXv2QkDMuYIsfEuISKWVN7o= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782141472; 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=CUE0diub8b5VOQ/mzGELkOwMACwH9u3WM5ytnZS8ZpM=; b=fOEW8lnlwoMDEsjx3k5Y8Z3Tc3Kc+IYEN/KTWWBb+iJExe1CmYpjzWLH4dPHZ8xpv/Uz+BtK4KpGIe9cRCoY8JubxyqRIPQzxRi3JetIiwdfu3WImld6Wyc8o/N2/4r+P6L61QHy5bI4DuMrlEBINpDq06d5UZ/245nxN0xoEIU= 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=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 178214147241196.73266178073527; Mon, 22 Jun 2026 08:17:52 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1343887.1603112 (Exim 4.92) (envelope-from ) id 1wbgOv-000520-Vq; Mon, 22 Jun 2026 15:17:29 +0000 Received: by outflank-mailman (output) from mailman id 1343887.1603112; Mon, 22 Jun 2026 15:17:29 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wbgOv-00051m-Sj; Mon, 22 Jun 2026 15:17:29 +0000 Received: by outflank-mailman (input) for mailman id 1343887; Mon, 22 Jun 2026 15:17:28 +0000 Received: from mx.expurgate.net ([195.190.135.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wbgOu-000504-1v for xen-devel@lists.xenproject.org; Mon, 22 Jun 2026 15:17:28 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wbgOt-00E73L-EY for xen-devel@lists.xenproject.org; Mon, 22 Jun 2026 17:17:27 +0200 Received: from [10.42.69.3] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a395200-5cb7-0a2a0a5109dd-0a2a45038640-12 for ; Mon, 22 Jun 2026 17:17:27 +0200 Received: from [40.107.208.33] (helo=PH0PR06CU001.outbound.protection.outlook.com) by tlsNG-33051d.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.0) (envelope-from ) id 6a395205-a3da-0a2a45030019-286bd0212c4e-3 for ; Mon, 22 Jun 2026 17:17:27 +0200 Received: from BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) by PH9PR03MB649383.namprd03.prod.outlook.com (2603:10b6:510:3e7::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Mon, 22 Jun 2026 15:17:24 +0000 Received: from BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07]) by BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07%3]) with mapi id 15.21.0139.018; Mon, 22 Jun 2026 15:17:24 +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=citrix.com header.i="@citrix.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=l84MRssP3/eD3cIWgWjBpZcT+pBEDkyFo6hqNImNqq4pxNLBdiKIDmK5zV8T8OksjQGZ1oGdSVJ6kG6JxQ26pD7akwdKB2TEddW21H/VkAJ1JCBjAOBy/j04cSQ6xIEL1YIvK349DFF2fdHykkegdjvgxFq6Z7o8lgPKmcGG1eS9L/ucfMzr76QjX69NR14fEoC3MmI4lSbiTAevTpWj1917VC+paLpMcykkDSOM++trQ3ZtMRKFWwQWsUGfFaJjgiRdMt9VQLy0aHgOTHpytjq9qwriTpntANwaJiX5z8qTkSzf0y1rdu2eI/SJ7zVuklN/5SVBS/bz3IasqAddAQ== 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=CUE0diub8b5VOQ/mzGELkOwMACwH9u3WM5ytnZS8ZpM=; b=TAHcl3JLo+uz/TdGEVimbpc4nLHhOUfSsn0cuEVBFWeG9I2wZLKeM0By1bORsXNPd2MymcRnRqdLNjvTP+FrRL3Q17nWSrTOBwkI/ZARkv8lSY2a6nH0qSoT/tPdMHeYEHXN6A5Pvswx6d6xGnAYYbte9tEf7cmgrG2waGT4gP1l9z1xFLokFW0IBa77az5EyzHs5jmnPVvufB+H1jGZykQqifDnkloACu37kOlaz1mtTwewT3APOz9UQiQmN7JqnqBCQk/wWBnhI18ZdFhDryJpJICkHblosveYGE5WU9VOVtvDE/zR15qAILUq8rI8byyTdlTfElu2xYwz8n1L2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CUE0diub8b5VOQ/mzGELkOwMACwH9u3WM5ytnZS8ZpM=; b=mUKUHpoBVr1pLenZmLj6tJVyQILh2VpSAoKcDwtn0E8qM2Gnp4dKhtxmy9jqu+8aPbQUq04NIdCH/anrHFjO/0us7hIg/Ey/V9XrF+VaC5ZcoLTN+gGk4XcPyy75Uh/bZvCJMddZvzW81nD85UHn4Y3KU6J4WII/SgAffey60mA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Kevin Lampis To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger.pau@citrix.com, ross.lagerwall@citrix.com, Kevin Lampis Subject: [PATCH v2 2/7] x86/kexec: rename setup_header to bzimage_header Date: Mon, 22 Jun 2026 16:18:28 +0100 Message-ID: <20260622151833.3397692-3-kevin.lampis@citrix.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260622151833.3397692-1-kevin.lampis@citrix.com> References: <20260622151833.3397692-1-kevin.lampis@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO6P265CA0027.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2ff::13) To BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PR03MB7996:EE_|PH9PR03MB649383:EE_ X-MS-Office365-Filtering-Correlation-Id: 6b8e6b2e-f3ed-4a61-2ff6-08ded0715d0a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|376014|22082099003|18002099003|56012099006|3023799007|11063799006; X-Microsoft-Antispam-Message-Info: J56mAV2sJvOxcSP4v9bD6gZiF6Tr3a2yEy87MaiyDgF578SxzAAzUBrcAki9mqAKDgnPcRDGM65tJLOeZ+ADGNm6hG2BST4imjcy1J1GHEFFyR5rUbDMSHyYqkiLSvf1ROIX1jq+nxAmlC/SgNXjAFly+QmJBLpYdT0ZFJUpzqK1ugP4nRYBGmDojaAh8b7tcE0W9KenkrqfGMibgae67o87hceNdcmoMwRvLr2hf7OzvqdOvILW7Zeqies8tsTE166YflNFE9wVlj8kqxtNB/CAJ4NA2bxBlEk+wQGG+sc5Ch0riUlD1ZiEelwRqTqhASoMg3dMphdZ0IznKKdREkeC2pTKaXHDWwt1ZNk0CdZVC4PtCQlJCpJtbUDvl3jgkESqjCJTlJrX2zlQ+7pIjgpurojdNQFRzICL74z8OvSYM15ELCpoBL8VvbDChXgUT1iOjfZxgVnfRc9u5M2Fh/onGY7FViQNVsDa7I8JAsFDELXJnL7OMKAnb8ba7UJNDGCiv6HicixFiiE7WcKzRobmS7l3BmAWZS1OJP6vutqnnDS4fq9GrDTjn5+RwnEZduLlrXxGQyBeUPfXOhTwZTfqQ07CTI8WXjkERePR7b65nu10DBYn0ZtgcNFiywv4Ffqwx0TgQ4MZgm8H7IRJrMgmun/FUoFcuiZzyJpGlB8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY1PR03MB7996.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(23010399003)(376014)(22082099003)(18002099003)(56012099006)(3023799007)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?gUCrV4+wmubgEyxdGFmjGlPQad2Z9esdWozoshrU02yV0+ZgOgZEUhSQHzLz?= =?us-ascii?Q?gB5l8z2kfu66CqRMoXNB2qakaKXaj4WtqN2/NllR84088PPOBcmG1yRxniEx?= =?us-ascii?Q?SrYU8CjkU34aYsfIfWIGhaoDxE0I6QNym/5QAlz/moA6hckqeD+4cND28ZYl?= =?us-ascii?Q?qhjnrrxWqWRqyIl6iAIWKwVdhJu3z7vNMuRlDoph06FfLtPtXVmgJdxbo/S9?= =?us-ascii?Q?BnhAog0lZO3sHqPOXVqx4STwfknznvwdqCH4zMrvDcBO5CwgyzkjLTnJUcMT?= =?us-ascii?Q?37ei+R8nkCe1DzJQUipoJ3bXAsArJQ6uQsob8Mqj2Vvjg8uHEpmItcPFrPbO?= =?us-ascii?Q?7zIH6pHEUSIcKa4PEKPGklfX33/8WCzbFGCmqvvYzvOH9RYq1z1JZdrerSPX?= =?us-ascii?Q?Elrt9rRCoTKBqiaaFMOLriwjn++i2hL15rSjrBoSF8rvBeklCzMqy7G0zSV6?= =?us-ascii?Q?aqVr3Zsv5c2p+57i60IvevHupfVh2gNNB3agp3goI/uIV9sHC34Scw5vAJQ1?= =?us-ascii?Q?AwKmldE7Kjet6Ud0I2EXBougvsYzAnB/W7LDjWYGYEgHaxsujEiNprucTldB?= =?us-ascii?Q?e+JXVu+KZPFAWI2TRpLyO3e9dpwT5rLjcK/x7k5GlgzE/h0Lkp2Ce2njVtiE?= =?us-ascii?Q?gbWBeyGPf8pcn94rRehsFf1fjc4o3HdKtihdqpDUJIDReyBj497g6TT3YKCG?= =?us-ascii?Q?v1gB6bbSu+lnJvYwJy5j0Qk4mR9MMyJ4BrawFIJJu+MJ5+a5XNP4p5aYvR4G?= =?us-ascii?Q?EisClPb3oUnJJqM5puaiBjy2bZGOwymv47YssFSvYRJs7y3TCRTYGQBn+WGN?= =?us-ascii?Q?Fcre+vCvLNhpB6ksLOefncfS2M1VdJzC2gyaBfrwnQ1VPuGVaub4+g+ye6oD?= =?us-ascii?Q?MEDPx0wXWXESGw9tuOf6B7QA/7YrHJIZUmFPiXmwm6USHFF1H8djrGiuxfp6?= =?us-ascii?Q?CdbVT8f2EHNv8XblsYIE0xz3MRPLqgG+HcXIi6260nnWdH3Aft2Z9M+zC4AM?= =?us-ascii?Q?ywuB/jqrxbtgYz44OLKkZKkKL1UToQWpwQKge+6Wl3l9vy4DHC60Qw8eosn3?= =?us-ascii?Q?g/m0KvB/+a/Uz8CeYfiv3BpoOzByVR6iKNh/67EBes+Up9G85NhaxRgxGjt3?= =?us-ascii?Q?46bIKZ3d35PjdOzs6Chp4ubKIUrPPIPvdWms2Yyqvd4Kt8y/cDKavGYts4fF?= =?us-ascii?Q?TbnfSD2VhCUYJ0ekXxwKZJXBtqH2I1L2rOSHzOwgIJBmrNhVivRZvZUP1rHi?= =?us-ascii?Q?TNqVNHup4eAXxffplI9Ci4OEPE6FbKmFdKVlH2BIEgu5fqReBGRb0scNbYhb?= =?us-ascii?Q?hza5BwwN7s/ffJUyIZXwELuvfXeI8e5+24131w5u8UQzkP5ZvZU6mFrI7XSz?= =?us-ascii?Q?GR7YNTyXRLHuEdIvp7Gbu+iPoPMxXAbjQDfsqBjdfm1MJoQmYMieKshkbwjc?= =?us-ascii?Q?49wKNXLiaM6gCxufj0eCC+ouCkU1qA14zgrOxbbT8wnmYtH496KO/d1n4iMo?= =?us-ascii?Q?jmwem2feo0LHHjDAEgPNKAr7fdiSNkIzCKlaGDGzRBX+bXVFBfW8LXtQx2xC?= =?us-ascii?Q?YYjCVyPqcnI8pC0KMAtIYrOQ6Ja7miVlIkkjY7zgCPwaIXjhfOr9LsI4hXks?= =?us-ascii?Q?Ah53mhPn+2mHd6YKwpYydhZhFfeQIbWi2xPyKZtU61xSzkLb38+3lSGEWfWG?= =?us-ascii?Q?nfyGvvcevQC9wNgbcgBHAIlrb36bXSdWMB9DwzfgaH/SkItAcivIWtBZLJuw?= =?us-ascii?Q?MHl8u7MpNw=3D=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6b8e6b2e-f3ed-4a61-2ff6-08ded0715d0a X-MS-Exchange-CrossTenant-AuthSource: BY1PR03MB7996.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2026 15:17:24.4910 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: RbqdLGdlGZnyHwdSPcDultciUDuLZvI4yvh8IUDnWlaWr+M8C/eF1V9pK9kfzyfktebe58kVtxClaWpQ2j0FOQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH9PR03MB649383 X-purgate-ID: tlsNG-33051d/1782141447-CD879D84-4F80E762/0/0 X-purgate-type: clean X-purgate-size: 5601 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1782141475738158500 Content-Type: text/plain; charset="utf-8" From: Ross Lagerwall The newly named bzimage_header is moved to a header file because part of it will be needed for Secure Boot kexec. Signed-off-by: Ross Lagerwall Signed-off-by: Kevin Lampis Reviewed-by: Andrew Cooper --- Changes in v2: - Remove unneeded casts - Move setup_header to appropriate header file bzimage.h - Renamed setup_header to less generic name bzimage_header --- xen/arch/x86/bzimage.c | 47 +++--------------------------- xen/arch/x86/include/asm/bzimage.h | 39 +++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/xen/arch/x86/bzimage.c b/xen/arch/x86/bzimage.c index 66f648f311..02433ac46f 100644 --- a/xen/arch/x86/bzimage.c +++ b/xen/arch/x86/bzimage.c @@ -13,48 +13,9 @@ static __init unsigned long output_length(void *image, u= nsigned long image_len) return *(uint32_t *)(image + image_len - 4); } =20 -struct __packed setup_header { - uint8_t _pad0[0x1f1]; /* skip uninteresting stuf= f */ - uint8_t setup_sects; - uint16_t root_flags; - uint32_t syssize; - uint16_t ram_size; - uint16_t vid_mode; - uint16_t root_dev; - uint16_t boot_flag; - uint16_t jump; - uint32_t header; -#define HDR_MAGIC "HdrS" -#define HDR_MAGIC_SZ 4 - uint16_t version; -#define VERSION(h,l) (((h)<<8) | (l)) - uint32_t realmode_swtch; - uint16_t start_sys; - uint16_t kernel_version; - uint8_t type_of_loader; - uint8_t loadflags; - uint16_t setup_move_size; - uint32_t code32_start; - uint32_t ramdisk_image; - uint32_t ramdisk_size; - uint32_t bootsect_kludge; - uint16_t heap_end_ptr; - uint16_t _pad1; - uint32_t cmd_line_ptr; - uint32_t initrd_addr_max; - uint32_t kernel_alignment; - uint8_t relocatable_kernel; - uint8_t _pad2[3]; - uint32_t cmdline_size; - uint32_t hardware_subarch; - uint64_t hardware_subarch_data; - uint32_t payload_offset; - uint32_t payload_length; - }; - -static __init int bzimage_check(struct setup_header *hdr, unsigned long le= n) +static __init int bzimage_check(struct bzimage_header *hdr, unsigned long = len) { - if ( len < sizeof(struct setup_header) ) + if ( len < sizeof(struct bzimage_header) ) return 0; =20 if ( memcmp(&hdr->header, HDR_MAGIC, HDR_MAGIC_SZ) !=3D 0 ) @@ -73,7 +34,7 @@ static unsigned long __initdata orig_image_len; unsigned long __init bzimage_headroom(void *image_start, unsigned long image_length) { - struct setup_header *hdr =3D (struct setup_header *)image_start; + struct bzimage_header *hdr =3D image_start; int err; unsigned long headroom; =20 @@ -106,7 +67,7 @@ unsigned long __init bzimage_headroom(void *image_start, int __init bzimage_parse(void *image_base, void **image_start, unsigned long *image_len) { - struct setup_header *hdr =3D (struct setup_header *)(*image_start); + struct bzimage_header *hdr =3D *image_start; int err =3D bzimage_check(hdr, *image_len); unsigned long output_len; =20 diff --git a/xen/arch/x86/include/asm/bzimage.h b/xen/arch/x86/include/asm/= bzimage.h index 7ed69d3910..8c54b21d06 100644 --- a/xen/arch/x86/include/asm/bzimage.h +++ b/xen/arch/x86/include/asm/bzimage.h @@ -8,4 +8,43 @@ unsigned long bzimage_headroom(void *image_start, unsigned= long image_length); int bzimage_parse(void *image_base, void **image_start, unsigned long *image_len); =20 +struct __packed bzimage_header { + uint8_t _pad0[0x1f1]; /* skip uninteresting stuf= f */ + uint8_t setup_sects; + uint16_t root_flags; + uint32_t syssize; + uint16_t ram_size; + uint16_t vid_mode; + uint16_t root_dev; + uint16_t boot_flag; + uint16_t jump; + uint32_t header; +#define HDR_MAGIC "HdrS" +#define HDR_MAGIC_SZ 4 + uint16_t version; +#define VERSION(h,l) (((h)<<8) | (l)) + uint32_t realmode_swtch; + uint16_t start_sys; + uint16_t kernel_version; + uint8_t type_of_loader; + uint8_t loadflags; + uint16_t setup_move_size; + uint32_t code32_start; + uint32_t ramdisk_image; + uint32_t ramdisk_size; + uint32_t bootsect_kludge; + uint16_t heap_end_ptr; + uint16_t _pad1; + uint32_t cmd_line_ptr; + uint32_t initrd_addr_max; + uint32_t kernel_alignment; + uint8_t relocatable_kernel; + uint8_t _pad2[3]; + uint32_t cmdline_size; + uint32_t hardware_subarch; + uint64_t hardware_subarch_data; + uint32_t payload_offset; + uint32_t payload_length; + }; + #endif /* __X86_BZIMAGE_H__ */ --=20 2.52.0 From nobody Thu Jul 23 21:54:15 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=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1782141470; cv=pass; d=zohomail.com; s=zohoarc; b=CqRuW2JWA9ujHJKDHqI6qGIdfttkiNT0pf5UDxH5UoUhbR3NdMyTay9U8OQxHBuD0WloZF8lzudPf7tTUM6h5Qd5zDWPtMh38kBnfR4J35BKLP5cEmysBHXEpzVA3SpcovEdopBKitqaeUSZS5fdpw9E/Qko2eoDz+RGq8wQdOA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782141470; 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=X8wWS/QFTT3jxmNODw0M8pTnOtiDA5oLNhuUJci4u7U=; b=eNmGwu2atLPn6PgehTW4T9TWKgCVxcBH8ZC11uy9C3RsXa8iv3v1BUd1k1jfcdgsAl2xjlnTog3gKx1SZSfGnY1IMPFLAz434SSJiod3m9Wx5UCNP3wkj2a4BDnL/mCkDgcqYHObY54v9FAFUBE+mpIOY9ZXC7QZUvt6CbRZykI= 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=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1782141470547662.6479886922533; Mon, 22 Jun 2026 08:17:50 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1343889.1603122 (Exim 4.92) (envelope-from ) id 1wbgP1-0005Ns-66; Mon, 22 Jun 2026 15:17:35 +0000 Received: by outflank-mailman (output) from mailman id 1343889.1603122; Mon, 22 Jun 2026 15:17:35 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wbgP1-0005Nl-38; Mon, 22 Jun 2026 15:17:35 +0000 Received: by outflank-mailman (input) for mailman id 1343889; Mon, 22 Jun 2026 15:17:33 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wbgOz-0005Jd-77 for xen-devel@lists.xenproject.org; Mon, 22 Jun 2026 15:17:33 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wbgOy-006hPz-Ja for xen-devel@lists.xenproject.org; Mon, 22 Jun 2026 17:17:32 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a39520c-bab6-0a2a0a5309dd-0a2a4502d4ac-0 for ; Mon, 22 Jun 2026 17:17:32 +0200 Received: from [40.107.208.44] (helo=PH0PR06CU001.outbound.protection.outlook.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.0) (envelope-from ) id 6a39520a-fdf1-0a2a45020019-286bd02c8c05-3 for ; Mon, 22 Jun 2026 17:17:32 +0200 Received: from BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) by PH9PR03MB649383.namprd03.prod.outlook.com (2603:10b6:510:3e7::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Mon, 22 Jun 2026 15:17:28 +0000 Received: from BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07]) by BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07%3]) with mapi id 15.21.0139.018; Mon, 22 Jun 2026 15:17:28 +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=citrix.com header.i="@citrix.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=jZgDUZgRu5yd2xo7lyogtHif1/s5+Nd+wTEVTCC6yv7458SR2mNmpzsYkkumLkW5TjzlDF9XFeF7BAETKknkOlFAJZtWM/IP55pJAimaz/m1AbO7preO2hwnR1G4NbuH5C4qykTT/PMbXAvczwsRKvQJmxwC/AVIWo0/ka5gSeVYPhp5uDC0HjADCU2avJdR/0isqA+HmaCfMwpIbgXdX8CJM9OZBpkPGDEmP7Q82N8Tct3hA1nsDINsRMkyxz71melPkmETH2PuNsbNwHBFC9rCnycF21kXRmLgZbxE8EdUX7zm2ZEU0z9RhPBivtYvV29DgoGY8ZA3gGY6/YAfSg== 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=X8wWS/QFTT3jxmNODw0M8pTnOtiDA5oLNhuUJci4u7U=; b=AF9WNUB5C9WAJI8HOU0EaE6Y8N81ToKIvwmaAEvL+Yq8estFmkn/gNL0Li05Ph80nmLoGsgK53VQ6LluKCX510wPfgcPucV0uE8+OviGYZFh0gBwv/IB9m+6niU20Byi6GWBKQW4b9rXvfbGkI1cbU3FaVfT2lti28rkZ0DiaeRk9jbGntm9pTR71bLfyaF52gDP6VUa8Pni0JHu2kSfPqzmLEWI1xDUiMZsbNTJBUn+57hZBtx3u4U8WxyoXRGlyJ1QC2B0Rk9Iqw/E8RI9kiGlMvo6pjg3vwtIGlqSJKo/2qKvgOFp+flftu4s6yUAjulUy4zH8dqTX2hn7jdgRg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=X8wWS/QFTT3jxmNODw0M8pTnOtiDA5oLNhuUJci4u7U=; b=oahH6H2mKcsu831UvkQGc0Sng4MQubGqB6wYvR2cO/qmdO/mjkr5z360CIc1AoQHlHyEQKKKOnXl9YObpGAjkAL18WmzYjkr1z5ajEvqscxv6BaWPssF1/Hi+YHIynyQVCqICtm1l/EL+EF/8Fd7VePcTZeADtwqRxXKhpPBJ5s= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Kevin Lampis To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger.pau@citrix.com, ross.lagerwall@citrix.com, Kevin Lampis Subject: [PATCH v2 3/7] x86/kexec: add new struct kimage_segment Date: Mon, 22 Jun 2026 16:18:29 +0100 Message-ID: <20260622151833.3397692-4-kevin.lampis@citrix.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260622151833.3397692-1-kevin.lampis@citrix.com> References: <20260622151833.3397692-1-kevin.lampis@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P265CA0233.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:315::19) To BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PR03MB7996:EE_|PH9PR03MB649383:EE_ X-MS-Office365-Filtering-Correlation-Id: 2600fb46-b394-4313-960e-08ded0715fab X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|376014|22082099003|18002099003|56012099006|11063799006|6133799003; X-Microsoft-Antispam-Message-Info: EzoiRf+2XyVx7ElfXFPOIwMC+ZD0AE9koothaq0ya7Tpeyo8yKLB9W/k9Bt7y3s5jFqWwN/jmoyJPorszKL303QMAVIYVPPUmnIkynTkW5yOUBKXCU4W30y6/afT8BGrxkiYCI6rIt4fvQdNM9AhRez2UX124XyGQHLuSvioRUTDVVRmHSQR4eYGZFZuphD463zmbbffMI0YMQYTSYFEQq0SB56nl3aqFAbrclolNV2JQXSh1sFmcD2QRSBvV6Fj8NkRtscAeGWS1C+iSy6euiuTnlqIz4BhpB7K9NF7HEoWAzCIeAOi2f9+IC7GtYvy4ESlIlcinn+sE0MG6dNQh+X+7OV1BbRevKjGPUnMpdEeLlhYk1rfFiFZNpzwrRQDgAndoOgqL8n2v5NMQzXFvdRzaZxQmq2zMbyTM80WTysDzKwVHp3FbZnz4EMfZNaVWnGnZ5mTujEYp7zizYexJxCZK5KctuBYQMQ/PEueXixWFTlo7d3z8no6dE0+TdbKeeM6511koRIj5/V75qFCinc+Yo/lqcE0VWEEHiTNHvmOhcEkLNIuDSNlQGLaOz65LP125u4m+uoF+tt6156l2+Hjbp+tfA7VTx/en3Lv8mzf4QF1NT1YnqKF7LCn888iGxGBGrrj+d22ddCQJYm7Q+YYlnZnWUbI48/Ieypr7yw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY1PR03MB7996.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(23010399003)(376014)(22082099003)(18002099003)(56012099006)(11063799006)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Q5zVZjgLBWSf3tvUIS+srba9E1afCQ31szengy39CgMiwIKeTjwvBjQ8SblQ?= =?us-ascii?Q?7OO6KdGP/+3obIdPjKXJzI9Jq52UOqWOOX45NgUatQL1LOudcbq3HQ0ubGrL?= =?us-ascii?Q?GQr3/CN3nScKo7nIp1zJdEj7PLMVgTUsOjuVHCcHE7rAgdDERzrUYceKKEHb?= =?us-ascii?Q?t0GOdmzM2IihM8Spftvaa0aIHekMfYa9rjNmcJZAcmw9OaU70CB0o4CLAbYI?= =?us-ascii?Q?sum/mEfECoTozbtwsKnCYAeIrRWbAaoe+GADp27oK71wp3n6J0HZV2yzuTvn?= =?us-ascii?Q?OSTs0jrqCHL+SMEN4dro4lwapX06v4B9460Su74uf6VOk6MOOPMABj/7Mf7D?= =?us-ascii?Q?kdW4PpFpzMORBPyMGo0XHWgL2oJNt9d1A5IPlHL3IaxGwMxBDBl9opDNUqGu?= =?us-ascii?Q?pMoBXfXo+iL44XB52/8+fm+iMsX7syMZ04/O82IbCoKGH8gQXGwyKKeHkIRY?= =?us-ascii?Q?OCo/3LOc8lb/RXIchkOBEe1h5KkibKW3CLAQInk+bLiDSb3WQy61TaNrnaD0?= =?us-ascii?Q?EK9umAczOk32xD6hjNu9qF5n3Ko3Ja4kOYbA2rrVoA05sio+f6AOSnAIXzJX?= =?us-ascii?Q?TszOXEIwuHbTRORB6EgFTUJfAEL4ERdf5MKjCuwUzj+8jPVy6cxpnDSTuhzA?= =?us-ascii?Q?lrRKuGEhnO/JvNPQtLpikW8ANhMI7ZQqTg6greFRzT1P0zam1/XmkaSMlWfM?= =?us-ascii?Q?mGrbbHXypAd9cTAgOEtWpX8oxLVJjI5Wgi9wu2L1mgfbaPZvavTa1tlA7l/E?= =?us-ascii?Q?Sll7ngAAgbUxhVLmacCFCpMpXpOrCBqNPhwBrGjbzN1YdWh3YSWFjw5Hp1QF?= =?us-ascii?Q?WtNorzWQa7H4z/WfWfzMaA3BUyTEkrB1/dFlby6je/LAmDZn7WOT9wjIlaM1?= =?us-ascii?Q?OqK0xKr73Xza8S72qcwyT59jFjAojt88UE/EAIHWA8HAL+qvG7i/3LGaG7eM?= =?us-ascii?Q?cOZxlJ4107WKz+IICsRXTESH81vo6ZnocssrneGVGVyooyFADhKZAXaRRkO8?= =?us-ascii?Q?jNnMnkSZVQg7KEXeZmsbEvX5Liij89boUfLW2CHeC0nimO0RREIPv8DQhUL8?= =?us-ascii?Q?2l1JEWQRIlBf2KhSXTLUFONFolE1afickSMz5n8RzSDJWGPm7Y4ipatSPMG1?= =?us-ascii?Q?Uv/R+WX3LCKJlt7FKmwKWolQYhGPxfxXz0doeCtoD+kVS7/WbTwD+6XBMd9z?= =?us-ascii?Q?NDIIn/IPRHJ/+5ibc9Dt2N24k9tzrnSap8DQvuIdZCIqPccoE3LOMoglgD8u?= =?us-ascii?Q?Eba9CGyS6nBbQDKHe2XwY+zLw96KgSbaLB0woUFGzQIMw1yORzSfkOOoOxQn?= =?us-ascii?Q?H3DbW5DZBBqlYOaOuszJKMmuuIM6sPazHPN4KqLsPu9qiI3NjQ7uuonMwl8Y?= =?us-ascii?Q?WY7fxK/gnsT8CKl3acsJt11xXwCS+MnMje/5ySCxu3oBJqFCK4YuxZuPNyOc?= =?us-ascii?Q?PYWyXK7hYVklErNDowNusOpdGonWrN2zgbzeIX3cbbwmja0fNJLbsnrEj4je?= =?us-ascii?Q?0NtPYuoxdjRQsaesMYmTNI6Qhcppm0ME78p8ZMmIxkXk3hFvVpQqSDyrXsXj?= =?us-ascii?Q?bXkurcNoVA3QL3Fr/jdkVS/4qKEZUIvGOC9x1Nm6fbbCco6NpBWOZSiQjD5i?= =?us-ascii?Q?EWUDdeNGtMb/lng7O70xDCeREq+DfHF76xLy4WlivaCYbS1NxN2RL2HFF63a?= =?us-ascii?Q?a8Yny7oFdfxHgi4ukL1OfzZjZngicH2qA6lpy8BlFj6QvRaVi5HNxActOsIC?= =?us-ascii?Q?Kg84sxr84Q=3D=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2600fb46-b394-4313-960e-08ded0715fab X-MS-Exchange-CrossTenant-AuthSource: BY1PR03MB7996.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2026 15:17:28.8839 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: nYySxmIoFh0p1HsSpEIcEt4DK5BF2avFOEUspP8hcV5AS7ZSmXn+lkkdgVrL+Wa/P9BJl+9f/L6f5K//ZVr9ZA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH9PR03MB649383 X-purgate-ID: tlsNG-720697/1782141452-460643F3-658BB274/0/0 X-purgate-type: clean X-purgate-size: 7964 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1782141472960158500 Content-Type: text/plain; charset="utf-8" From: Ross Lagerwall New struct for internal use because Secure Boot code needs to add an extra field in a future patch. Signed-off-by: Ross Lagerwall Signed-off-by: Kevin Lampis --- Changes in v2: - Read into a local xen_kexec_segment_t variable and fill in segments[i] manually instead of casting from a different sized type - Remove union and _pad from new `struct kimage_segment` type - Swap xen_kexec_segment_t to struct kimage_segment in separate patch --- xen/common/kexec.c | 19 ++++++++++++++----- xen/common/kimage.c | 25 +++++++++++++------------ xen/include/xen/kimage.h | 11 +++++++++-- 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/xen/common/kexec.c b/xen/common/kexec.c index f31ab3fa07..5caeb19819 100644 --- a/xen/common/kexec.c +++ b/xen/common/kexec.c @@ -920,9 +920,10 @@ static int kexec_load_slot(struct kexec_image *kimage) static int kexec_load(XEN_GUEST_HANDLE_PARAM(void) uarg) { xen_kexec_load_t load; - xen_kexec_segment_t *segments; + struct kimage_segment *segments; struct kexec_image *kimage =3D NULL; int ret; + unsigned int i; =20 if ( copy_from_guest(&load, uarg, 1) ) return -EFAULT; @@ -930,14 +931,22 @@ static int kexec_load(XEN_GUEST_HANDLE_PARAM(void) ua= rg) if ( load.nr_segments >=3D KEXEC_SEGMENT_MAX ) return -EINVAL; =20 - segments =3D xmalloc_array(xen_kexec_segment_t, load.nr_segments); + segments =3D xmalloc_array(struct kimage_segment, load.nr_segments); if ( segments =3D=3D NULL ) return -ENOMEM; =20 - if ( copy_from_guest(segments, load.segments.h, load.nr_segments) ) + for ( i =3D 0; i < load.nr_segments; i++ ) { - ret =3D -EFAULT; - goto error; + xen_kexec_segment_t tmp_seg =3D {}; + if ( copy_from_guest_offset(&tmp_seg, load.segments.h, i, 1) ) + { + ret =3D -EFAULT; + goto error; + } + segments[i].h =3D tmp_seg.buf.h; + segments[i].buf_size =3D tmp_seg.buf_size; + segments[i].dest_maddr =3D tmp_seg.dest_maddr; + segments[i].dest_size =3D tmp_seg.dest_size; } =20 ret =3D kimage_alloc(&kimage, load.type, load.arch, load.entry_maddr, diff --git a/xen/common/kimage.c b/xen/common/kimage.c index 6e009529ae..dc47306223 100644 --- a/xen/common/kimage.c +++ b/xen/common/kimage.c @@ -81,7 +81,7 @@ static struct page_info *kimage_alloc_zeroed_page(unsigne= d memflags) =20 static int do_kimage_alloc(struct kexec_image **rimage, paddr_t entry, unsigned long nr_segments, - xen_kexec_segment_t *segments, uint8_t type) + struct kimage_segment *segments, uint8_t type) { struct kexec_image *image; unsigned long i; @@ -206,7 +206,7 @@ out: =20 static int kimage_normal_alloc(struct kexec_image **rimage, paddr_t entry, unsigned long nr_segments, - xen_kexec_segment_t *segments) + struct kimage_segment *segments) { return do_kimage_alloc(rimage, entry, nr_segments, segments, KEXEC_TYPE_DEFAULT); @@ -214,7 +214,7 @@ static int kimage_normal_alloc(struct kexec_image **rim= age, paddr_t entry, =20 static int kimage_crash_alloc(struct kexec_image **rimage, paddr_t entry, unsigned long nr_segments, - xen_kexec_segment_t *segments) + struct kimage_segment *segments) { unsigned long i; =20 @@ -236,7 +236,7 @@ static int kimage_crash_alloc(struct kexec_image **rima= ge, paddr_t entry, { paddr_t mstart, mend; =20 - if ( guest_handle_is_null(segments[i].buf.h) ) + if ( guest_handle_is_null(segments[i].h) ) continue; =20 mstart =3D segments[i].dest_maddr; @@ -664,7 +664,7 @@ found: } =20 static int kimage_load_normal_segment(struct kexec_image *image, - xen_kexec_segment_t *segment) + struct kimage_segment *segment) { unsigned long to_copy; unsigned long src_offset; @@ -698,7 +698,7 @@ static int kimage_load_normal_segment(struct kexec_imag= e *image, return ret; =20 dest_va =3D __map_domain_page(page); - ret =3D copy_from_guest_offset(dest_va, segment->buf.h, src_offset= , size); + ret =3D copy_from_guest_offset(dest_va, segment->h, src_offset, si= ze); unmap_domain_page(dest_va); if ( ret ) return -EFAULT; @@ -717,7 +717,7 @@ static int kimage_load_normal_segment(struct kexec_imag= e *image, } =20 static int kimage_load_crash_segment(struct kexec_image *image, - xen_kexec_segment_t *segment) + struct kimage_segment *segment) { /* * For crash dumps kernels we simply copy the data from user space @@ -747,7 +747,7 @@ static int kimage_load_crash_segment(struct kexec_image= *image, if ( !dest_va ) return -EINVAL; =20 - ret =3D copy_from_guest_offset(dest_va, segment->buf.h, src_offset= , schunk); + ret =3D copy_from_guest_offset(dest_va, segment->h, src_offset, sc= hunk); memset(dest_va + schunk, 0, dchunk - schunk); =20 unmap_domain_page(dest_va); @@ -763,12 +763,13 @@ static int kimage_load_crash_segment(struct kexec_ima= ge *image, return 0; } =20 -static int kimage_load_segment(struct kexec_image *image, xen_kexec_segmen= t_t *segment) +static int kimage_load_segment(struct kexec_image *image, + struct kimage_segment *segment) { int result =3D -ENOMEM; paddr_t addr; =20 - if ( !guest_handle_is_null(segment->buf.h) ) + if ( !guest_handle_is_null(segment->h) ) { switch ( image->type ) { @@ -794,7 +795,7 @@ static int kimage_load_segment(struct kexec_image *imag= e, xen_kexec_segment_t *s =20 int kimage_alloc(struct kexec_image **rimage, uint8_t type, uint16_t arch, uint64_t entry_maddr, - uint32_t nr_segments, xen_kexec_segment_t *segment) + uint32_t nr_segments, struct kimage_segment *segment) { int result; =20 @@ -819,7 +820,7 @@ int kimage_alloc(struct kexec_image **rimage, uint8_t t= ype, uint16_t arch, } =20 static void kimage_calc_one_digest(struct sha2_256_state *ctx, - xen_kexec_segment_t *segment) + struct kimage_segment *segment) { paddr_t dest; unsigned long sbytes; diff --git a/xen/include/xen/kimage.h b/xen/include/xen/kimage.h index 8ed89d4fa3..0841b6f321 100644 --- a/xen/include/xen/kimage.h +++ b/xen/include/xen/kimage.h @@ -18,12 +18,19 @@ =20 typedef paddr_t kimage_entry_t; =20 +struct kimage_segment { + XEN_GUEST_HANDLE(const_void) h; + uint64_t buf_size; + uint64_t dest_maddr; + uint64_t dest_size; +}; + struct kexec_image { uint8_t type; uint16_t arch; uint64_t entry_maddr; uint32_t nr_segments; - xen_kexec_segment_t *segments; + struct kimage_segment *segments; =20 kimage_entry_t head; struct page_info *entry_page; @@ -44,7 +51,7 @@ struct kexec_image { =20 int kimage_alloc(struct kexec_image **rimage, uint8_t type, uint16_t arch, uint64_t entry_maddr, - uint32_t nr_segments, xen_kexec_segment_t *segment); + uint32_t nr_segments, struct kimage_segment *segment); void kimage_free(struct kexec_image *image); int kimage_load_segments(struct kexec_image *image); struct page_info *kimage_alloc_control_page(struct kexec_image *image, --=20 2.52.0 From nobody Thu Jul 23 21:54:15 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=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1782141479; cv=pass; d=zohomail.com; s=zohoarc; b=ebT1EByCzHm+7z815zTUF+YRCNNQOFPpjs/XkNfEE10Cq6RLjN8wJVsI6M4ygIh7zLABKm5ynAyzQZ5aCTlXOYWo5AR6zO+wO5cSVEsgllxx4RdGmFk6H5eR/yUCAAbq02KvZ0dJMKJsmUCYFTPyCow20yufnTomHwKpTQ5Gu18= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782141479; 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=TAZqxPDz4iGQDAm8r7PVY0zk34ELEqip4hG1SLppqVU=; b=IQE2S3XAStJdiCzDUiFBHc7ku3aqrRoWFJY2DV2+GyfooG5Sxgd4ERGPospukYzgH6hB2jkOIS2GA+DvEN7KjNmuwVg2sOXNJ1oBcOD9/6BKTaJFdyOfIsBw3uSwgK5bd1y9oC73r4mFLN8V0FkLm2lMwniLhEN1LxBZfg3HL68= 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=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1782141479310122.73706798107958; Mon, 22 Jun 2026 08:17:59 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1343891.1603132 (Exim 4.92) (envelope-from ) id 1wbgP3-0005gH-JM; Mon, 22 Jun 2026 15:17:37 +0000 Received: by outflank-mailman (output) from mailman id 1343891.1603132; Mon, 22 Jun 2026 15:17:37 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wbgP3-0005g5-Dd; Mon, 22 Jun 2026 15:17:37 +0000 Received: by outflank-mailman (input) for mailman id 1343891; Mon, 22 Jun 2026 15:17:36 +0000 Received: from mx.expurgate.net ([195.190.135.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wbgP2-0005cp-Ji for xen-devel@lists.xenproject.org; Mon, 22 Jun 2026 15:17:36 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wbgP2-0052oN-0K for xen-devel@lists.xenproject.org; Mon, 22 Jun 2026 17:17:36 +0200 Received: from [10.42.69.11] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a39520d-2eae-0a2a0a5409dd-0a2a450bcafe-12 for ; Mon, 22 Jun 2026 17:17:35 +0200 Received: from [52.101.53.45] (helo=BL0PR03CU003.outbound.protection.outlook.com) by tlsNG-42698a.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.0) (envelope-from ) id 6a39520e-5e53-0a2a450b0019-3465352ddf2d-3 for ; Mon, 22 Jun 2026 17:17:35 +0200 Received: from BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) by PH9PR03MB649383.namprd03.prod.outlook.com (2603:10b6:510:3e7::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Mon, 22 Jun 2026 15:17:33 +0000 Received: from BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07]) by BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07%3]) with mapi id 15.21.0139.018; Mon, 22 Jun 2026 15:17:33 +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=citrix.com header.i="@citrix.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=TTF6kwwvRVX1Xy2dtL9LJ/R/8w5YhbWUyYtQ81S8TYgaKpGkmExAhjxrTeWba8eTFxUJdchAMXmwypXs0NPwEb8ei3YJXUJtiVOZ46L2xUrFe52YE3YoshO7Px0aCnPSjgNYzif8hYH7fFSPLHXgpC9s0uGG6H6n1Rf1jCVWkEP+BKmNevUJWYk4PggtZf2V67cMk+oK6ZpsSEKQXAU0Aqqa7WuHNDR8Drj/2IuTLjvo+/5SyMcDtNCzDKFcWEn7rQAoGFGpougtodWVSVyWJ4M+LZl73s3DOV80C9+m1p1REaFZl2ZnlZiUbEekIz/Di0ICtdihno0jiGijRaQ3cA== 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=TAZqxPDz4iGQDAm8r7PVY0zk34ELEqip4hG1SLppqVU=; b=LTkZgBXAxpW4jT1PQ1g/pZTJQbIPgQxXL70xnPM87zq/R4QB4/aDwM1XBP0OQ5YRYutiQOhKn1SjxzgA6m/HPP3Ax3sZmXpAQOR9LuBlc+lMlgHWaF8817nLzszFq3190xYQ7aIW4i16FVq5CkVcXA4Gyrdqdj69JXLUwEyih3mrCDsO+lO85tXxR25+T/gxAlJm1hxXrBzAsUsziV65Y+vAJ1anBROAhvdjU6p0L9wrfW8LTKRKZKLQX3sn7G9ANZO8VRPbBqJAw2kohASNZYGsE7r/wY2HpYCsy50Nez6WIwtDgXPLrSVgfWVPdBBZn6tiL5HPCzgSv1sTc2E6dA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TAZqxPDz4iGQDAm8r7PVY0zk34ELEqip4hG1SLppqVU=; b=f/GtDI3sypzSj7z9MZLdpCcgjIvg1EpfOgR08Eh8JwChspNIis1+zBdpuCf71cvXTQ1IstmiB5jXPIimKNnGM8f7gs30AoyXQd5SRR/AvO0yrT3DHoNgyijU85lYAlHKAQmyTTXqWsKdLOu4838ZQGD9UigshSs3vto2TUc3XuI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Kevin Lampis To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger.pau@citrix.com, ross.lagerwall@citrix.com, Kevin Lampis Subject: [PATCH v2 4/7] x86/kexec: Support non-page-aligned kexec segments Date: Mon, 22 Jun 2026 16:18:30 +0100 Message-ID: <20260622151833.3397692-5-kevin.lampis@citrix.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260622151833.3397692-1-kevin.lampis@citrix.com> References: <20260622151833.3397692-1-kevin.lampis@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P265CA0025.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2ae::10) To BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PR03MB7996:EE_|PH9PR03MB649383:EE_ X-MS-Office365-Filtering-Correlation-Id: 0763b7bb-dab6-4a24-efb3-08ded071625d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|376014|22082099003|18002099003|56012099006|11063799006|6133799003; X-Microsoft-Antispam-Message-Info: xF7qmQiiPe7r4JZc2Sq+/nSkW+Fd8GcQeBKvmdOHCwLnjI8O8xZEzoyj8s7xbIAhKnMt5Jx4MaDtdP5ZIxdMMbsPiaud3YuQCOTIsDfvA4CHHL4nNjvFMfY9yyIdO1S1nOtbXbgZAkgRpCeTI7QYfVay6hSPVFFgSa62rT1j03xZu5tTAkf4+ROEbdKJEODN4a6gVNUvXhqilO1vTtsFefGIYj90ZsCxMHMu5drtLOr7Zg9l4tMrH10begAIDDsHy1nbD9ZKdyV0TRe5OC/jEMW+hpkMFjW3YJzHJLZuWYjyv7EwYsFVZhHpVcS2DOIQnTNqPRQ2rP+7Ff6QPQcCsDfKCB6utHVzr62y/4xW2cWLM0QCfV/XO0wQVHLIqmjvfzstZW2Z3wqcjZOPBr1LFiG1ji+zRhJbCuqZuDQuIq/+Wg9BeVY47vdL73L55w8G6gD4He8rF9ZpvLYpLBK1ZL8e8u6SQQhnJBZwCTKYwXAHCh2Zt/YJ7f1rHK/0OoYolufSmDzepU+KhvgxVfVCfVPlUeQ8OHN8NoN34x9iMmvd6F42vrnD071wjyXGMpIlOyn+/+S3VRC03C80poqClKvG+3FK5XZEcTg6tNHGrZHJoMeerL+ufrX84T4wI5mcNkBM2h0AnQIVVIgvbEkOy20971Sjs3J9fhwroslu2ck= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY1PR03MB7996.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(23010399003)(376014)(22082099003)(18002099003)(56012099006)(11063799006)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?OLIaO20Y7VURev+VXZKwWuFencdeZ08fkct9v+HovPPOXxsI5+uhE+ZqUYdo?= =?us-ascii?Q?XPN5P2vmfSfWj9YmoBRDc/3YlG7zkd5C+2Vx2erUKLcTDJihXuVgmt7iL+mL?= =?us-ascii?Q?rLvTJnyKyEdd+GsYx0KEKrLR7o2zC52AKfiR2kIXjUMQTHUKKCGFcujjYVue?= =?us-ascii?Q?VOtoEyerAJfGbqDsMnudLqCHVwuBx+fQj7Whrd0/rjSVXmmSzLsK3/lobcaZ?= =?us-ascii?Q?AeSXl9krUJ+IfvRVggJNdVo7NeOv5H2Cqowg/F+UJooCxTYwEjpnCmce/nCX?= =?us-ascii?Q?KIDJQhmkrGU8eGuh217ExdAOVyoPiKYg5H2LLeqRVPv2fg5FMEr8Vrlx98mA?= =?us-ascii?Q?2fDfBPwpbrpMqxJ/yfNf+gkdg+uSEV7efdqZnfVbUVEL78ECAHoOsWfD7Grg?= =?us-ascii?Q?q3axiwwM98c1u1sR1is/LvDKIoyiM5TO+vg9E7AWz5McyoLNAl2jtB3J58ye?= =?us-ascii?Q?VXk03CR+Iy807cIpJg4pj99jBW+dKIr+IpXsUl3AIq/kHEZ7I17IBQuylp+o?= =?us-ascii?Q?08biu9wtRZZxmhAMILW5AEAeCMpOPRrJiA2QOlmQhC9Chzp+gjtQ3H/2mcCR?= =?us-ascii?Q?DE3wlxRDgp4cwerarN+TAMmMUW3ObPjZQZjntChsRnSRRqTLOTiWC6dqKGl2?= =?us-ascii?Q?1qzmEEBs3lPsuhTCUEB8in9WtrMdrbmysJwZ7q6X3ocyzne/FiR4ERZL0TSg?= =?us-ascii?Q?3tMA6iWG5URsW2m0WpwrOCFUvbGqgEz3zaIDzlgOO/htUcMVO77VhT4gi+8d?= =?us-ascii?Q?ozr8j5FqQc5PiAl3valyFWUNudAtnRaBQcWMa2DQxTaX4VLWQw+5InaHL3fJ?= =?us-ascii?Q?1l/qTPd5I07mbhW6M5K+NZ17632R9ypvWQjcKgx9XEl21erwjDSx/A7iOJrm?= =?us-ascii?Q?jFbt9Xy268MoN9m0LRXr8/UkGir8bY3tGi8WzQUQ+/rq7hfRO/Y7wBwy3e+K?= =?us-ascii?Q?dmliA6Pg3JyI/2Kj+D9FyE12CxNtykwTkcL4rBoUbz1wnWO/3GsDu9cy7zH1?= =?us-ascii?Q?2sX3Qi0y0d2O9i3j2/uuhMJ0emdJOwqc3o7Si54PJgWNVciTanRIcKdR+u7i?= =?us-ascii?Q?JeXVS6fenh39cT3vO/5P/lDPhpO3eM9E1yFPawktsGEQIKXcvVI4k/eXupHi?= =?us-ascii?Q?s9GtHSRQ20I4Je19JkCb4QegONus9oigv+/L25n8i7/jmpxDwPbLSm9oiEyp?= =?us-ascii?Q?4Sq2tUH78jY54evPXZ03bVIdzPPolfWdidhFwyCp+horcH/WLiVUNVBMIiTM?= =?us-ascii?Q?1ERVzRhmDm8SK4ao9HQ4bvEMqIKwCxCwjPanPB2S/ZnyVPZep0Cr07RbCLDE?= =?us-ascii?Q?+ZE7B67ZjO8VYWEBgYg3a9HK9vu5x5GFrQreNzzVJigaqnxLcU1EBBBAS61w?= =?us-ascii?Q?d/L+p1wyHmVyv0vPWd/o9ZRGMGTmLeKI8qiQlNV5M1lQXh4/rtIuEEIarfb2?= =?us-ascii?Q?oCi0PDCT2BRyIekg++vOX/NZ25oKeR/sdb7lPf0ZD+N2/5Q+kC8WLMiQMXc5?= =?us-ascii?Q?sF8FT/KhLSfDduhHJTAoUsGYEvHQGudUOyglgE8fBtPYfZNBUYxFlcLIl43z?= =?us-ascii?Q?qTfOzyBiy1mjILYF05OEXcUzEaJiJKAbmLRm5yga6NS+iD1ZTcyv111XmSBn?= =?us-ascii?Q?iYxEV+m7yLhCoKxnxfo/bjEJOQiKh6XYWwKkLFgA1sNxE2tsNcyN3zg33XF6?= =?us-ascii?Q?w0Kep7ntFB75SPMyGybrR+oz+ITd4vXzLjacQOCta+d2ArJXBP3RiXBRCI2c?= =?us-ascii?Q?5391O/IgCg=3D=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0763b7bb-dab6-4a24-efb3-08ded071625d X-MS-Exchange-CrossTenant-AuthSource: BY1PR03MB7996.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2026 15:17:33.4391 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: L8DkWHhFz41AVaTKWGzxdj1Q3u7cCFx3OYi0wz8/njPdir9Wy0VKkiYJ/M3/RgiCW+nJV+fBzWMBr+ZSZG46cQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH9PR03MB649383 X-purgate-ID: tlsNG-42698a/1782141455-457FD00E-1ECFEA67/0/0 X-purgate-type: clean X-purgate-size: 4633 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1782141480716158500 Content-Type: text/plain; charset="utf-8" From: Ross Lagerwall With Secure Boot, userspace passes in the entire kernel loaded for verification purposes. However, the kernel's startup32 function needs to be aligned (e.g. to 16 MiB) and this results in the start of the segment not being page-aligned (depending on where the startup32 function lands in the kernel binary). Relax this restriction in Xen to support this use case. Signed-off-by: Ross Lagerwall Signed-off-by: Kevin Lampis --- Changes in v2: - Remove error handling around map_domain_page because it doesn't fail --- xen/common/kimage.c | 47 +++++++++++++++++++++++++++++++--------- xen/include/xen/kimage.h | 1 + 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/xen/common/kimage.c b/xen/common/kimage.c index dc47306223..d4a695a2bd 100644 --- a/xen/common/kimage.c +++ b/xen/common/kimage.c @@ -725,12 +725,14 @@ static int kimage_load_crash_segment(struct kexec_ima= ge *image, */ paddr_t dest; unsigned long sbytes, dbytes; + unsigned int dest_offset; int ret =3D 0; unsigned long src_offset =3D 0; =20 sbytes =3D segment->buf_size; dbytes =3D segment->dest_size; dest =3D segment->dest_maddr; + dest_offset =3D segment->dest_offset; =20 while ( dbytes ) { @@ -740,24 +742,26 @@ static int kimage_load_crash_segment(struct kexec_ima= ge *image, =20 dest_mfn =3D dest >> PAGE_SHIFT; =20 - dchunk =3D PAGE_SIZE; + dchunk =3D PAGE_SIZE - dest_offset; schunk =3D min(dchunk, sbytes); =20 dest_va =3D map_domain_page(_mfn(dest_mfn)); - if ( !dest_va ) - return -EINVAL; =20 - ret =3D copy_from_guest_offset(dest_va, segment->h, src_offset, sc= hunk); - memset(dest_va + schunk, 0, dchunk - schunk); + if ( dest_offset ) + memset(dest_va, 0, dest_offset); + ret =3D copy_from_guest_offset(dest_va + dest_offset, segment->h, + src_offset, schunk); + memset(dest_va + dest_offset + schunk, 0, dchunk - schunk); =20 unmap_domain_page(dest_va); if ( ret ) return -EFAULT; =20 - dbytes -=3D dchunk; + dbytes -=3D dchunk + dest_offset; sbytes -=3D schunk; - dest +=3D dchunk; + dest +=3D dchunk + dest_offset; src_offset +=3D schunk; + dest_offset =3D 0; } =20 return 0; @@ -798,6 +802,26 @@ int kimage_alloc(struct kexec_image **rimage, uint8_t = type, uint16_t arch, uint32_t nr_segments, struct kimage_segment *segment) { int result; + unsigned int i; + + for ( i =3D 0; i < nr_segments; i++ ) + { + paddr_t mend; + + /* + * Stash the destination offset-in-page for use when copying the + * buffer later. + */ + segment[i].dest_offset =3D PAGE_OFFSET(segment[i].dest_maddr); + + /* + * Align down the start address to page size and align up the end + * address to page size. + */ + mend =3D segment[i].dest_maddr + segment[i].dest_size; + segment[i].dest_maddr &=3D PAGE_MASK; + segment[i].dest_size =3D ROUNDUP(mend, PAGE_SIZE) - segment[i].des= t_maddr; + } =20 switch( type ) { @@ -824,9 +848,11 @@ static void kimage_calc_one_digest(struct sha2_256_sta= te *ctx, { paddr_t dest; unsigned long sbytes; + unsigned int dest_offset; =20 sbytes =3D segment->buf_size; dest =3D segment->dest_maddr; + dest_offset =3D segment->dest_offset; =20 while ( sbytes ) { @@ -836,15 +862,16 @@ static void kimage_calc_one_digest(struct sha2_256_st= ate *ctx, =20 dest_mfn =3D dest >> PAGE_SHIFT; =20 - dchunk =3D PAGE_SIZE; + dchunk =3D PAGE_SIZE - dest_offset; schunk =3D min(dchunk, sbytes); =20 dest_va =3D map_domain_page(_mfn(dest_mfn)); - sha2_256_update(ctx, dest_va, schunk); + sha2_256_update(ctx, dest_va + dest_offset, schunk); unmap_domain_page(dest_va); =20 sbytes -=3D schunk; - dest +=3D dchunk; + dest +=3D dchunk + dest_offset; + dest_offset =3D 0; } } =20 diff --git a/xen/include/xen/kimage.h b/xen/include/xen/kimage.h index 0841b6f321..86250f2939 100644 --- a/xen/include/xen/kimage.h +++ b/xen/include/xen/kimage.h @@ -23,6 +23,7 @@ struct kimage_segment { uint64_t buf_size; uint64_t dest_maddr; uint64_t dest_size; + unsigned int dest_offset; }; =20 struct kexec_image { --=20 2.52.0 From nobody Thu Jul 23 21:54:15 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=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1782141481; cv=pass; d=zohomail.com; s=zohoarc; b=HgeGlFvLwEESQbC15X0R+uSyC3AzOKnJ7cBHjHyaYnq/OuUJHRSvoSf4jHbsz8k+1A+SkqKe4PNnhO9T6cUhk6kcpXg7MskZJ0pfBIxnk0UDmofR1pkJpSB/jicg8qFMUns1VPXyul+nY9+CgYVZ/BCsFsWUDkwlycng2oU6qyQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782141481; 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=Kq3XUrFRCUR2ttK7TfS4U/324yvP/l6gtcQldulK+jo=; b=TWHyy/1DTM4KgR0LgMWGXHeFAGp2tDLJSY0ZsTj0+UbLRV1Nzd9rVWqPcLBe9vLPU9IHFpkoyN3UaoPfYW9w8IPUmIKhZYWHnjQ/vFmEghOOhJ4AcoSrFDcfxw8ymHBAnmUFtGB2ANSXMyzDiYscm+k3cY9q5G9UjgDEcXItXCU= 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=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1782141481524940.8311057951476; Mon, 22 Jun 2026 08:18:01 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1343893.1603140 (Exim 4.92) (envelope-from ) id 1wbgP8-00068I-QD; Mon, 22 Jun 2026 15:17:42 +0000 Received: by outflank-mailman (output) from mailman id 1343893.1603140; Mon, 22 Jun 2026 15:17:42 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wbgP8-00067w-Lz; Mon, 22 Jun 2026 15:17:42 +0000 Received: by outflank-mailman (input) for mailman id 1343893; Mon, 22 Jun 2026 15:17:42 +0000 Received: from mx.expurgate.net ([195.190.135.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wbgP7-00062H-OF for xen-devel@lists.xenproject.org; Mon, 22 Jun 2026 15:17:41 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wbgP7-0052r4-4s for xen-devel@lists.xenproject.org; Mon, 22 Jun 2026 17:17:41 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a39520c-bab6-0a2a0a5309dd-0a2a4502d4ac-14 for ; Mon, 22 Jun 2026 17:17:41 +0200 Received: from [40.93.194.36] (helo=SN4PR0501CU005.outbound.protection.outlook.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.0) (envelope-from ) id 6a395213-fdf1-0a2a45020019-285dc224af76-3 for ; Mon, 22 Jun 2026 17:17:40 +0200 Received: from BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) by PH9PR03MB649383.namprd03.prod.outlook.com (2603:10b6:510:3e7::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Mon, 22 Jun 2026 15:17:38 +0000 Received: from BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07]) by BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07%3]) with mapi id 15.21.0139.018; Mon, 22 Jun 2026 15:17:38 +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=citrix.com header.i="@citrix.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=rlozvLKr0aBUznnvpMaAtqPB6HYCPXILfHthMrLqT+16HVmivBLvr/kGKuxNKJIiyzcTnep4tpy62gq/ixu1FNB7BvetvSRjvCRSWPLXK/rJv/A1vT/6TlNRjS5nF4bFOroh7yV33qZDwOsWVDZ/3c18Q91+cOPN+GArU7oyef8IIV0obkYU1VIqCZQGp/egiYMXr3YO6s4GSYth91q/X2Z/piy2TGzua8peN5nmxgO68tGxhD17nj5vHhZO3chwwbDDYuNqNI80u1t2whDl9NSvtldMJHi0ENQ6qbr4qg0dI0N+yMA9GY9rkK28c83qUr6wF/9TiosylqnrmeAiMA== 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=Kq3XUrFRCUR2ttK7TfS4U/324yvP/l6gtcQldulK+jo=; b=jIfWlFDUkgDYRU/YN6HNNNkaVeSyEXxtt2h45307mWcEPPEcPWrG0/lUU8HU4FD7dvYRKvdUyMQpGt1DkHaf3h+spRHJEJpYoWLI5nNGEeu/A+nPavE87AMBYXJTSd4cWyKEKRAVYzUgzYPZWdqNwceQsaG+WTPSrm01+VusZueyJBq+8ItF/IB0Jq/SH+bmgVxfs7Hmiihn1WljNx1+uKM6vjgDhsCFog53yZiG4liK7qj46GTt+eMO6Tg74mQWp8T2LUhlgjMSIVvKWNDnCkPgtdZFMu8FT2auuRhjGCKZmhTqaDPRjbL2mLwnEZybUcp+Y3yB5g+4CLSMYzmIqQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Kq3XUrFRCUR2ttK7TfS4U/324yvP/l6gtcQldulK+jo=; b=Gf0mRNnjWvXWii034c/q7oyI3+VRI9u+D90y2dKUSuLamsgaORWYjntJaAUssTN2IH3q/EtUi73LR4rfCryjklljWdZ9S8wfFEFXa3n0uIqHI6OMfG6mSgeFzzAIpyj7Jd3Jkuba+jreUlXF7W1der6Jt5z3e8Rhkgyv0uwuls0= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Kevin Lampis To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger.pau@citrix.com, ross.lagerwall@citrix.com, Kevin Lampis Subject: [PATCH v2 5/7] x86/kexec: Implement new EFI load type Date: Mon, 22 Jun 2026 16:18:31 +0100 Message-ID: <20260622151833.3397692-6-kevin.lampis@citrix.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260622151833.3397692-1-kevin.lampis@citrix.com> References: <20260622151833.3397692-1-kevin.lampis@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P265CA0085.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2bd::14) To BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PR03MB7996:EE_|PH9PR03MB649383:EE_ X-MS-Office365-Filtering-Correlation-Id: a80a05d9-99fd-4871-a8bd-08ded0716502 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|376014|22082099003|18002099003|56012099006|3023799007|11063799006|6133799003; X-Microsoft-Antispam-Message-Info: 24/YgtMKY/o1RN5MPBey37Y0Wa4Kp2MzgcA1/kSVudeyIvHQUx8ApBbt3ao0yd0U982mMeY8n3oGXrTXFXwmscsVYP6M/OmtZGZFSGMRuTVhKyup7AmQ87d7b7FfWIJuYXKLOysJwNaCZZe0w65GHc5bY5k9ganSIYD6bfh8RoFy6gAN7Yz+a5gbitch1/cuLY9J0twrsLuejA2s5GzlhbJD0LsEtDuxOSUlwpOddr/Sgk4jyIU3Ow0J1CXzvkxoa/UxLUtLZWmk9ykyhtF5amNGtoCQQLnmJbzLW0zKlmjQWyMqZHeYdt3QIKmGPauSEUdPhyW+Yy0hDDA1I5MrnzeO2xsbp8E5LxDJOIqobw/YymC2HKl5MINmhXkNy8WqYENczRNG/Y536k7CDLMphr5NpJsnUnWmAgnnJqw+zErWPPHsQOMTcdZObtGMUkSORJIJPLVQAkCj7ESYVYD1eTU36XqsUdhAPONNOfFiSl3cKL/kdLi6hLjXwGiC0UgnwScGPeXia4x6B9xkgtNmMf875ZrruMP6NJZrqBQNmIhy1gq1Z+UiK+B3sOV1qow2k7hKsoFDHa5aJkhqQRRqjGhdR4hCHo+BspxGa2/hQxstK0izY9eADeZVTU+7kiTK0Ox77WUyykFBGMQm6tP6hliyKSkNBICRG7wudgljEfI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY1PR03MB7996.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(23010399003)(376014)(22082099003)(18002099003)(56012099006)(3023799007)(11063799006)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?y6aXfcYAifp/UkQm9/XFDRROi9UcnqN4yD73tQAbkrOANPsn1gZ2qm+Ud0tb?= =?us-ascii?Q?wb000urH12NmOubczQl9DFMmXbDWtmKPreoWtm9htVSS2a++cALWeecs4cL4?= =?us-ascii?Q?rh8YsQeRJbVJBbECdrzknIIArqD87iq3Uh18G/z39fPu/dir1EJGVZ6ryUpD?= =?us-ascii?Q?daTes/48Ty9+VbV+joQeOdR/SNyNnn8bKNWlt0uzKzxThV/fu2BPT2tNFQh0?= =?us-ascii?Q?RQktqTJmceLh9uDJQxr1zPQW62IYI187HOBdyWD5ToImPogyNdt+4NAYIL7a?= =?us-ascii?Q?p2A1VygVnLNWgBVVnDS3dpG3oykPoQYPx6gmXXZIJsfbBmeey4eh4jonG9X3?= =?us-ascii?Q?z69zi3qgJqePQdERB6mjju9wBV0kOSO4g5glcNqZp3iyTBCDAfVaIuk9qCzc?= =?us-ascii?Q?zj+QSg9qAlt84PeOs6zNyxiOlahvNjwXfhY6jxMLZZGrJrLs8xKxxiR4TTtj?= =?us-ascii?Q?68oQzgvvAf8J+hImgLIiZd3/iwFhv+lyB5ceh6g0SQ8FjpBkAjuRfy8xhtN9?= =?us-ascii?Q?E3396MBx/YeH0aEie00WSMGxqs91HpFt8bGolOUwJ4kTJtaf+azl7Zfb3Ayp?= =?us-ascii?Q?bdJU+qsu/9XOzTIi+BQPpUm1NnCOWouIGqmXvsm1D9SyrSMAAq6Rz5tZ/yUV?= =?us-ascii?Q?DPflKhuvkACFbwnoIKV/1WNurMtCRrtaciqUfCB5c8rFA7Cn7/3Bjf7WwgkC?= =?us-ascii?Q?xfq6nlKeUnvkSbdG/nwaAQ2a+EuTvNsoFCBhua1K7o2935RXZoWX8QG6VWBv?= =?us-ascii?Q?qjmAogozFRIql2UqO29/gkRYQM1tYHRmjIvYlUVd1V1FkO690//8aOFfvfrE?= =?us-ascii?Q?NVE1vqhGDqScV8wRw8YCQP79Be+ip/BjqEBYDfs9FNT1BvfOQl2WKywHsNqX?= =?us-ascii?Q?ZOaMccCvsMWA1ovN2aT6GCuAtMf5oxMufKj9NVZ4hCjabz0+cgjIyPBdyT0g?= =?us-ascii?Q?iLzZHTEVQmEFn1q/4jO3vG2XodK9kTK2g0RXVLKFsfZhQvkzGsR9IcwDmBdJ?= =?us-ascii?Q?b7GReZGyeL3Kxe8szOmBC6HBl7Kj0dgWAKpBbzPpiv01vFnzUJd2KppebVNe?= =?us-ascii?Q?IPyDspb/63oQFo8RpZt8rqLMbgxsTG9MG4Vs3Flb42EPMXP1v+ZKTOLSxRSN?= =?us-ascii?Q?QPq1ewQRbiJlnny5AHJJHXMroitRGC8k0I8tNUY48jnTHYXDDbXWTDLOkKwx?= =?us-ascii?Q?i2Nt9Gr5JoyGA3gh+tJAoDmQK3pSFBPcEnGGngGCYt+C3LHlWPQz0NDHqlMa?= =?us-ascii?Q?oY5WuTu0afRsdXYXWzyf2e9lk8fBihIJedg0phyRq5NzAkpd6LXrY3Yp6JPw?= =?us-ascii?Q?7R8grAniprFSjsSZ6IClPMgFKxWYZbPAEv3G7rEdwqVA8LN1cKPPN+FIiqAP?= =?us-ascii?Q?jYWlEeXyQffGP2rQKI52gE7p7TlAJLoSOFjR6+NNjwfNAGOGsQB9FwnNNomz?= =?us-ascii?Q?nZzclV3pHR8Qp5te3TDoWtmxDCA74FKKS5yrZ+Mx5fnzYmXQNsbGmB1BMxr4?= =?us-ascii?Q?DgnG8WgUfiLnQtlCGdF8AmB3FIglSueGEnrjR83+TlqLnC06HiKLJ3GivLt2?= =?us-ascii?Q?3mr58l+r9oKJi4iZPnP3GlCj5YpvcT64SrNh0ES86xdZl2KlLvqMRp6gGbyR?= =?us-ascii?Q?LVI/SKQ3G8F5/2oKRXHvxMUc4yEzDMeuXpTWF5gFr8W/EMrInlkG+kLIf1uZ?= =?us-ascii?Q?pEIYZj7QcrzmjAkzMAfiJdCLit6Gf55dmaDyfmuaMnv8/mYaXxyuuwWIuR5D?= =?us-ascii?Q?rNRW15JyEw=3D=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: a80a05d9-99fd-4871-a8bd-08ded0716502 X-MS-Exchange-CrossTenant-AuthSource: BY1PR03MB7996.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2026 15:17:37.9914 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9XeupzVQn2vKxzBX6KLC20GFUaVs9Tw6HtDvS6LmeoOzUpFQm83VunGvL4SlwLw6kgeuVQCphEadF4lAR3rBmg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH9PR03MB649383 X-purgate-ID: tlsNG-720697/1782141461-4C8103F3-F59E4375/0/0 X-purgate-type: clean X-purgate-size: 13395 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1782141482855158500 Content-Type: text/plain; charset="utf-8" From: Ross Lagerwall Add new EFI load type for kexec. This load type is suitable for use when Secure Boot is enabled. When this load type is used, the caller should not pass purgatory as one of the kexec segments. Instead, Xen will prepare any glue code needed internally. The new load type only works for Linux bzImages using the x86 64-bit boot protocol documented at linux/Documentation/arch/x86/boot.rst. Signed-off-by: Ross Lagerwall Signed-off-by: Gerald Elder-Vass Signed-off-by: Kevin Lampis --- Changes in v2: - Move kimage_find_kernel_entry_maddr to arch specific kexec.c file Didn't add stubs for other archs because CONFIG_HAS_KEXEC is x86 only - When parsing kernel entry check for header magic and boot protocol version - When parsing kernel entry use setup_sects instead of ROUNDUP - Update commit message to explain new kexec type only works for x86 linux - Rename kexec_image->boot_params to entry_arg - Use size_t for return type of kernel_alignment_offset() - Remove error handling around map_domain_page because it doesn't fail --- xen/arch/x86/Makefile | 1 + xen/arch/x86/include/asm/bzimage.h | 5 ++ xen/arch/x86/include/asm/kexec.h | 9 ++++ xen/arch/x86/kexec.c | 58 +++++++++++++++++++++++ xen/common/kexec.c | 9 ++++ xen/common/kimage.c | 75 +++++++++++++++++++----------- xen/include/public/kexec.h | 11 ++++- xen/include/xen/kimage.h | 2 + 8 files changed, 140 insertions(+), 30 deletions(-) create mode 100644 xen/arch/x86/include/asm/kexec.h create mode 100644 xen/arch/x86/kexec.c diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile index 47dd6c50fe..9a84cf9cab 100644 --- a/xen/arch/x86/Makefile +++ b/xen/arch/x86/Makefile @@ -71,6 +71,7 @@ obj-$(CONFIG_TBOOT) +=3D tboot.o obj-y +=3D hpet.o obj-$(CONFIG_VM_EVENT) +=3D vm_event.o obj-y +=3D xstate.o +obj-$(CONFIG_KEXEC) +=3D kexec.o =20 ifneq ($(CONFIG_PV_SHIM_EXCLUSIVE),y) obj-y +=3D domctl.o diff --git a/xen/arch/x86/include/asm/bzimage.h b/xen/arch/x86/include/asm/= bzimage.h index 8c54b21d06..e363cc9a4f 100644 --- a/xen/arch/x86/include/asm/bzimage.h +++ b/xen/arch/x86/include/asm/bzimage.h @@ -47,4 +47,9 @@ struct __packed bzimage_header { uint32_t payload_length; }; =20 +static inline size_t kernel_alignment_offset(void) +{ + return offsetof(struct bzimage_header, kernel_alignment); +} + #endif /* __X86_BZIMAGE_H__ */ diff --git a/xen/arch/x86/include/asm/kexec.h b/xen/arch/x86/include/asm/ke= xec.h new file mode 100644 index 0000000000..04b7eee4c1 --- /dev/null +++ b/xen/arch/x86/include/asm/kexec.h @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef ASM_X86_KEXEC_H +#define ASM_X86_KEXEC_H + +struct kexec_image; +int64_t kimage_find_kernel_entry_maddr(struct kexec_image *image); + +#endif /* ASM_X86_KEXEC_H */ diff --git a/xen/arch/x86/kexec.c b/xen/arch/x86/kexec.c new file mode 100644 index 0000000000..eb31fe2e47 --- /dev/null +++ b/xen/arch/x86/kexec.c @@ -0,0 +1,58 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include + +/* + * Find the entry point to the new kernel, we need to map the crash region= into + * memory in order to read the kernel header. + */ +#define KERNEL_SEGMENT_IDX 0 +int64_t kimage_find_kernel_entry_maddr(struct kexec_image *image) +{ + uint64_t dest_maddr; + uint32_t alignment, magic; + uint16_t version; + void *dest_va; + const struct bzimage_header *hdr; + int setup_sects; + size_t kern16_size; + + dest_maddr =3D image->segments[KERNEL_SEGMENT_IDX].dest_maddr + + image->segments[KERNEL_SEGMENT_IDX].dest_offset; + + dest_va =3D map_domain_page(maddr_to_mfn(dest_maddr)); + + hdr =3D (const struct bzimage_header *)dest_va; + magic =3D hdr->header; + version =3D hdr->version; + alignment =3D hdr->kernel_alignment; + setup_sects =3D hdr->setup_sects =3D=3D 0 ? 4 : hdr->setup_sects; + kern16_size =3D (setup_sects + 1 ) * 512; + + unmap_domain_page(dest_va); + + if ( magic !=3D 0x53726448 || version < 0x0202 ) + return -EINVAL; + + /* + * Ensure the kernel alignment is a valid LOAD_PHYSICAL_ADDR, + * which ranges from 0x200000 (2MiB) to 0x1000000 (16MiB) on 64-bit sy= stems + * as defined in the kernel x86 Kconfig + */ + if ( alignment % 0x200000 !=3D 0 || + alignment < 0x200000 || + alignment > 0x1000000 ) + return -EINVAL; + + if ( (dest_maddr + kern16_size) % alignment ) + { + printk(XENLOG_WARNING "kernel dest addr 0x%lx is not aligend to 0x= %x\n", + dest_maddr + kern16_size, alignment); + return -EINVAL; + } + + return dest_maddr + kern16_size + 0x200; +} diff --git a/xen/common/kexec.c b/xen/common/kexec.c index 5caeb19819..735a4342dd 100644 --- a/xen/common/kexec.c +++ b/xen/common/kexec.c @@ -760,6 +760,7 @@ static int kexec_load_get_bits(int type, int *base, int= *bit) *bit =3D KEXEC_FLAG_DEFAULT_POS; break; case KEXEC_TYPE_CRASH: + case KEXEC_TYPE_CRASH_EFI: *base =3D KEXEC_IMAGE_CRASH_BASE; *bit =3D KEXEC_FLAG_CRASH_POS; break; @@ -859,6 +860,7 @@ static int kexec_exec(XEN_GUEST_HANDLE_PARAM(void) uarg) break; =20 case KEXEC_TYPE_CRASH: + case KEXEC_TYPE_CRASH_EFI: kexec_crash(CRASHREASON_KEXECCMD); /* Does not return */ break; } @@ -960,6 +962,13 @@ static int kexec_load(XEN_GUEST_HANDLE_PARAM(void) uar= g) =20 kimage_calc_digest(kimage, kimage->digest); =20 + if ( load.type =3D=3D KEXEC_TYPE_CRASH_EFI ) + { + ret =3D kimage_efi_setup(kimage, load.parameters); + if ( ret < 0 ) + goto error; + } + ret =3D kexec_load_slot(kimage); if ( ret < 0 ) goto error; diff --git a/xen/common/kimage.c b/xen/common/kimage.c index d4a695a2bd..b31f205176 100644 --- a/xen/common/kimage.c +++ b/xen/common/kimage.c @@ -19,6 +19,7 @@ #include #include =20 +#include #include =20 /* @@ -104,29 +105,6 @@ static int do_kimage_alloc(struct kexec_image **rimage= , paddr_t entry, INIT_PAGE_LIST_HEAD(&image->dest_pages); INIT_PAGE_LIST_HEAD(&image->unusable_pages); =20 - /* - * Verify we have good destination addresses. The caller is - * responsible for making certain we don't attempt to load the new - * image into invalid or reserved areas of RAM. This just - * verifies it is an address we can use. - * - * Since the kernel does everything in page size chunks ensure the - * destination addresses are page aligned. Too many special cases - * crop of when we don't do this. The most insidious is getting - * overlapping destination addresses simply because addresses are - * changed to page size granularity. - */ - result =3D -EADDRNOTAVAIL; - for ( i =3D 0; i < nr_segments; i++ ) - { - paddr_t mstart, mend; - - mstart =3D image->segments[i].dest_maddr; - mend =3D mstart + image->segments[i].dest_size; - if ( (mstart & ~PAGE_MASK) || (mend & ~PAGE_MASK) ) - goto out; - } - /* * Verify our destination addresses do not overlap. If we allowed * overlapping destination addresses through very weird things can @@ -212,9 +190,10 @@ static int kimage_normal_alloc(struct kexec_image **ri= mage, paddr_t entry, KEXEC_TYPE_DEFAULT); } =20 -static int kimage_crash_alloc(struct kexec_image **rimage, paddr_t entry, - unsigned long nr_segments, - struct kimage_segment *segments) +static int do_kimage_crash_alloc(struct kexec_image **rimage, paddr_t entr= y, + unsigned long nr_segments, + struct kimage_segment *segments, + uint8_t type) { unsigned long i; =20 @@ -248,8 +227,28 @@ static int kimage_crash_alloc(struct kexec_image **rim= age, paddr_t entry, } =20 /* Allocate and initialize a controlling structure. */ - return do_kimage_alloc(rimage, entry, nr_segments, segments, - KEXEC_TYPE_CRASH); + return do_kimage_alloc(rimage, entry, nr_segments, segments, type); +} + +static int kimage_crash_alloc(struct kexec_image **rimage, paddr_t entry, + unsigned long nr_segments, + struct kimage_segment *segments) +{ + /* Verify we have a valid entry point */ + if ( (entry < kexec_crash_area.start) + || (entry > kexec_crash_area.start + kexec_crash_area.size)) + return -EADDRNOTAVAIL; + + return do_kimage_crash_alloc(rimage, entry, nr_segments, segments, + KEXEC_TYPE_CRASH); +} + +static int kimage_crash_alloc_efi(struct kexec_image **rimage, paddr_t ent= ry, + unsigned long nr_segments, + struct kimage_segment *segments) +{ + return do_kimage_crash_alloc(rimage, entry, nr_segments, segments, + KEXEC_TYPE_CRASH_EFI); } =20 static int kimage_is_destination_range(struct kexec_image *image, @@ -421,6 +420,7 @@ struct page_info *kimage_alloc_control_page(struct kexe= c_image *image, pages =3D kimage_alloc_normal_control_page(image, memflags); break; case KEXEC_TYPE_CRASH: + case KEXEC_TYPE_CRASH_EFI: pages =3D kimage_alloc_crash_control_page(image); break; } @@ -781,6 +781,7 @@ static int kimage_load_segment(struct kexec_image *imag= e, result =3D kimage_load_normal_segment(image, segment); break; case KEXEC_TYPE_CRASH: + case KEXEC_TYPE_CRASH_EFI: result =3D kimage_load_crash_segment(image, segment); break; } @@ -831,6 +832,10 @@ int kimage_alloc(struct kexec_image **rimage, uint8_t = type, uint16_t arch, case KEXEC_TYPE_CRASH: result =3D kimage_crash_alloc(rimage, entry_maddr, nr_segments, se= gment); break; + case KEXEC_TYPE_CRASH_EFI: + result =3D kimage_crash_alloc_efi(rimage, entry_maddr, + nr_segments, segment); + break; default: result =3D -EINVAL; break; @@ -1039,6 +1044,20 @@ done: return ret; } =20 +int kimage_efi_setup(struct kexec_image *image, uint64_t parameters) +{ + int64_t rip; + + rip =3D kimage_find_kernel_entry_maddr(image); + if ( rip < 0 ) + return -EINVAL; + + image->entry_arg =3D parameters; + image->entry_maddr =3D rip; + + return 0; +} + /* * Local variables: * mode: C diff --git a/xen/include/public/kexec.h b/xen/include/public/kexec.h index abb2a49238..5341ddcda2 100644 --- a/xen/include/public/kexec.h +++ b/xen/include/public/kexec.h @@ -54,13 +54,16 @@ * - kexec into a regular kernel, very similar to a standard reboot * - KEXEC_TYPE_DEFAULT is used to specify this type * - kexec into a special "crash kernel", aka kexec-on-panic - * - KEXEC_TYPE_CRASH is used to specify this type + * - KEXEC_TYPE_CRASH or KEXEC_TYPE_CRASH_EFI are used to specify this t= ype + * - in case of KEXEC_TYPE_CRASH_EFI the first segment will point to the + * full kernel to load and entry point will point to boot params * - parts of our system may be broken at kexec-on-panic time * - the code should be kept as simple and self-contained as possible */ =20 #define KEXEC_TYPE_DEFAULT 0 #define KEXEC_TYPE_CRASH 1 +#define KEXEC_TYPE_CRASH_EFI 3 =20 /* * Perform kexec having previously loaded a kexec or kdump kernel @@ -167,7 +170,11 @@ typedef struct xen_kexec_load { XEN_GUEST_HANDLE(xen_kexec_segment_t) h; uint64_t _pad; } segments; - uint64_t entry_maddr; /* image entry point machine address. */ + /* image entry point machine address or parameters in case of EFI. */ + union { + uint64_t entry_maddr; + uint64_t parameters; + }; } xen_kexec_load_t; DEFINE_XEN_GUEST_HANDLE(xen_kexec_load_t); =20 diff --git a/xen/include/xen/kimage.h b/xen/include/xen/kimage.h index 86250f2939..fdda0a89a5 100644 --- a/xen/include/xen/kimage.h +++ b/xen/include/xen/kimage.h @@ -48,6 +48,7 @@ struct kexec_image { paddr_t next_crash_page; =20 uint8_t digest[SHA2_256_DIGEST_SIZE]; + uint64_t entry_arg; }; =20 int kimage_alloc(struct kexec_image **rimage, uint8_t type, uint16_t arch, @@ -66,6 +67,7 @@ int kimage_build_ind(struct kexec_image *image, mfn_t ind= _mfn, bool kimage_verify_digest(const struct kexec_image *image); void kimage_calc_digest(const struct kexec_image *image, uint8_t digest[SHA2_256_DIGEST_SIZE]); +int kimage_efi_setup(struct kexec_image *image, uint64_t parameters); =20 #endif /* __ASSEMBLER__ */ =20 --=20 2.52.0 From nobody Thu Jul 23 21:54:15 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=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1782141487; cv=pass; d=zohomail.com; s=zohoarc; b=UH2NghzuKfylljEYEsEaUEKEDmBOv6uNeMoVyzn746Jv9oNS76maLZJN8Pe0/1/DpiVTaKaRF2K9BLBILDRyG4b26n3Oe/aBnQNJZsBg1TXUuhcRVo4kVkA+QdL1AyTof/8FXF9juFSrpJQAYUSzjaAldnagWyaFNYTVb4Py8X8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782141487; 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=6eteaBeiMzsuqrMWkmjhp+ii2ze54srInlQVvwTckyo=; b=BlkoNfx2TO1bJF7A+PufN6DCkW33gxGU96x6baWXm+aiJAcvbW1JAsHRaoxt1BQYglgV4k4f3m70/bsbDxzNN63eTGMYUMAZdXnwEdDWCe9Kl4Q0zylddli4myNIvIX1KayShbA9g7pOJkBXXDIznquxN3DYF3Ij8X0ErDcu1XY= 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=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1782141487209430.2989931349339; Mon, 22 Jun 2026 08:18:07 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1343898.1603149 (Exim 4.92) (envelope-from ) id 1wbgPD-0006Za-6B; Mon, 22 Jun 2026 15:17:47 +0000 Received: by outflank-mailman (output) from mailman id 1343898.1603149; Mon, 22 Jun 2026 15:17:47 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wbgPD-0006ZT-2W; Mon, 22 Jun 2026 15:17:47 +0000 Received: by outflank-mailman (input) for mailman id 1343898; Mon, 22 Jun 2026 15:17:45 +0000 Received: from mx.expurgate.net ([195.190.135.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wbgPB-0006Vy-Jx for xen-devel@lists.xenproject.org; Mon, 22 Jun 2026 15:17:45 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wbgPB-0052r4-0b for xen-devel@lists.xenproject.org; Mon, 22 Jun 2026 17:17:45 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a39520c-bab6-0a2a0a5309dd-0a2a4502d4ac-20 for ; Mon, 22 Jun 2026 17:17:44 +0200 Received: from [40.107.208.44] (helo=PH0PR06CU001.outbound.protection.outlook.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.0) (envelope-from ) id 6a395217-fdf1-0a2a45020019-286bd02c5fd5-3 for ; Mon, 22 Jun 2026 17:17:44 +0200 Received: from BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) by PH9PR03MB649383.namprd03.prod.outlook.com (2603:10b6:510:3e7::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Mon, 22 Jun 2026 15:17:42 +0000 Received: from BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07]) by BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07%3]) with mapi id 15.21.0139.018; Mon, 22 Jun 2026 15:17:42 +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=citrix.com header.i="@citrix.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=qmiDqyb9GoAiYoUjjeO2g1/IqKUoTE7zfc7yF90FrmPtt1v4gEzAyG21ctOUpmjc6nh+u8lvGjcBurOd5IZT/6w6J1b7hupngUhGGTB91YNLCAoK4/Pwp26rr7eJZu8YVvkOxRKWssuCHqIF/JvPOhr84wVuUwYV/ISNBZcEas2g33zA3PsY3APhuyifb2t6k3oovsLa7GziU2uJIoYCNJnfZiUm+VMKtkkl79m6lW1O8sWfjFMxUUvz56XEVenEH4gcxc34glMoEavsv5RKt30Z7Y/bq253aqb5BMgJ9jJToNBRr+jfMiF62WYS0aLw1B79Kh/BJeTj2EIu/sQN4Q== 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=6eteaBeiMzsuqrMWkmjhp+ii2ze54srInlQVvwTckyo=; b=JbzOvB7okD7Ft4vSVjrrAJewxGHTjL77GY45SduYecB0OUO4WSqAzfcvIHqogjD2ZMUU3xGa21HntjqRYqvg/ONrw1VaqT0b6FzIpC6TcRrCWcHN0VIkBNTqVpjZJRfi81H7bjuV5lCU3qBsdSrnA3FXTDGWYGeJrASchHPhq4t0pWAbuxlYHr6EIDoQKqvectE5G4LNq2eAyOuM5wxtqjneiUGlZ8O0fFn9kam+qCcrJxLchNPoGJGz9jxfcjwxEvWCCuzaXQR7r+jBp6SJEJHABzk0ygLZPpnsWx4e3ys5Zdh3Uu5Fu6ieY/5FpFLD8wrrcW6XdNv6a1FUpzSmPA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6eteaBeiMzsuqrMWkmjhp+ii2ze54srInlQVvwTckyo=; b=nlvj5j/iURdUMR0YgCpp8IlbYq6M4PNCn6RZjRvwWvhaAuJawKmvKc7OuunJx4krUzbOLv8qr/LOD6tmA79JY/UlC0Qk/y2lsoRI2wVr58UeHvUEjAD3Tm1+IRtvq+/1PPkXgrrdI3FzBleIjvxiaA2ngtPNHAec0WJVNDHLtsw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Kevin Lampis To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger.pau@citrix.com, ross.lagerwall@citrix.com, Kevin Lampis Subject: [PATCH v2 6/7] x86/kexec: Pass boot params directly to new kernel Date: Mon, 22 Jun 2026 16:18:32 +0100 Message-ID: <20260622151833.3397692-7-kevin.lampis@citrix.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260622151833.3397692-1-kevin.lampis@citrix.com> References: <20260622151833.3397692-1-kevin.lampis@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P265CA0083.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2bd::20) To BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PR03MB7996:EE_|PH9PR03MB649383:EE_ X-MS-Office365-Filtering-Correlation-Id: 84a5e4a9-71dc-4d8b-7000-08ded071678f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|376014|22082099003|18002099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: oPUIW9+8ztQv+7REV3ubRx3+58nezB9Xy12MYg3PjLLmlKfxMr6YyhUd/gHl4+ZxHc7M0Y7/7ss/vcslKhxRCN/csjm0qh9qObTKuH18zjzxBeg1iOfS/0GnbKiGMjyDaiA8Oh63jInFumtFLfVHIGiIf9KqxlG9qbTm1MCHH5w8kAIb5omdTR9qvLY5zeD4QVFRrzZiLAewOutOZ8iSENPZLRXdOyK+DjE1M9RB04NKPvgeHM9uB7UWRZ93NF1vdNvpZuP74/5UHsMp5+FE7vRjoszlBu6YKYrTXf56JrtPiqZfKwC0cpQbFX5ytd7xenfYKz/MCvEpe9Zh+gK03Cjj86HeJ7KXqDSjkD76hstAEOU+rgVtrwa2UoCVzpYXUDMUZvxqiKhVGo+caQLsvND7BdbvYnvcYZgVYUNdfL4JrcbWgZJGx72Pdr1B9gMAshZhxCtg7wYTj3+GqbbBdowglN7Y7RnkRzCqk3P7hN5FFAmJyJKGv3MBDBhfuPyTzPmu2ValtWC1zlqPp1GIRPeBkMOjBydI5LRSpJLk0u1m63FY7Lo2vvi4z77baXHhfPSlWDey39dNhnmkCXsPlv2A44hPjVAocECvpSeHlvz0yO4sS4JYwnkhm/XffzHhbKXc4jEjBEloL26iMiNgFS6c2SH3r1vkwai4sqEApXg= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY1PR03MB7996.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(23010399003)(376014)(22082099003)(18002099003)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?g0O6/emUMAC3aBM+wtj5lGRpwODv5UhVb4Ud+TKXoWB2jYdhalTwzYsISimU?= =?us-ascii?Q?ZSzLvY0hE71KUOY5gkJO80Czks0HbtN9So24B3waLVs/qdIYAvsX2ExRG/s9?= =?us-ascii?Q?xg6JQUJs67fXvHzCTonJqLMTEbDpBQZ1O7nnbvA+Wj0UeqtlAuZeRFVoDP9r?= =?us-ascii?Q?1vuCneL3PKJ7tvVDjCKveu66M8/gm/YvHffkfT3CIikQX6ZOqqPtD0FmdwTz?= =?us-ascii?Q?XjSP+awncPVvOdn6iKlVuKA9wAi5tzreZtflvVL054LFYVSSuAlfqpC+LP0k?= =?us-ascii?Q?3n9YxlipFrB/Kb50pc4wygNIl2dm7r4nVMfihSK7yIspzDQr/QLNITb7ti2Y?= =?us-ascii?Q?dUiD0uMUV07L+ZjFUDO0Xnk7p+r+ymFUMU71if+0nm6W6eNj/vLngnOEQ7Sq?= =?us-ascii?Q?evH0FUFE60FDEZ4faNuh1XxGDuWk57dBWI85Q0BtiX6GMvY4EaYnDsTYzERH?= =?us-ascii?Q?0kirGyRguNehBTtdD955CEsoKcklN7xZluZCZxBkeUVQs+3nCHzRm4P9qTKY?= =?us-ascii?Q?6FNDSzJgq9zX2Cgsr2VlwrZlrUifc3aZcGUOuaxQN6BvOvl8zl3GZA4B+a8c?= =?us-ascii?Q?gXn+BYLxRWZKT6Dnm2oxbL7FVCBwYBU2LFiBvk3UsSwEcBQv6oQqHSj+hT0r?= =?us-ascii?Q?lhpsamrJGyuecrJ9ie7I+ata0aLg+ndO3dlaxuvfQzjUNFaXSAUVE4VEjiex?= =?us-ascii?Q?Mx7tdomWH1n8Bn4JT1f5dCcJ3d2kp4voKHChyGZIkBOVQRGnkfdJsY0XkdVB?= =?us-ascii?Q?arj1Uh/B3aTYpQdgxyTjYfH0Hcb2vk6foFrJOVDs0hI8+zCt+T6wxR5uQ9VM?= =?us-ascii?Q?wismybibdSdYxbBLg1g2E9jcrpN4BvsCcfndjrlX5gM/Dn+xGzXfpLX2SbmJ?= =?us-ascii?Q?XPHaUJGJeZGLZuAkSrmRLYBKyNVfYnfNsS6vPvZd+67JXSwDQbmPBfUtm2ah?= =?us-ascii?Q?bBg2lxAZTP8o5b0JlH8bPGmOpFiyidjRlvs5d/7nLKndEOJoWH1VJwOzpUwr?= =?us-ascii?Q?dHVQoOiiw68sIjbIJqjfNED46K9p7Ecy82x+ovh0ahe5UkG0NYUhUL+qH3X5?= =?us-ascii?Q?/TA4aj89cRsc89HuRII8skAr6SSeiizaiS2C14GGl2Bv11QCuTHNHSsSRFXl?= =?us-ascii?Q?LZ2EZj5J1iwXREJ/Y4arjZ03OVP7vXwnNQkgPopVjKb9q1gujdHJLTzIH7vJ?= =?us-ascii?Q?x8iQLUh6XvDDWsKHguIX0x/x/AgoSbblGVlRQCjknQEDYs0i8fHXGvdxClRS?= =?us-ascii?Q?djNrNZvVWmO38t+hi8Joe465kEbmBlRsetUEwoX5X2MeAFHyUT5Yjj+mszgC?= =?us-ascii?Q?Tc03mLOvKoxLAmG9GfQTki784uJ0HKCbpQYKCJF6+RmlIBg0r1PJ4kNKGznf?= =?us-ascii?Q?UyYaFQjQlidNQOQA1lfCByhBJ6Re88F/ckHTSojfKNR8OinC78UvWZ+TP1dW?= =?us-ascii?Q?NHSk5MPqOzlHya+r6gHNzUx4qghPv0LLBwVgIkcDq/bRTuWUJb2KJ7fkdWnC?= =?us-ascii?Q?QhB4xoJUA2uDsKY1Ap0Qcsyy3srFn111B0GIWPbuwZKzibpL32QeDIPuzjZ3?= =?us-ascii?Q?TqqVqci25hcHFsfU6OpCljTg2Qw1u42/vbFY3m99miI0pPfL4BNh7P5jgQH4?= =?us-ascii?Q?8/tR7bLXPz1H5TITc30LNnm0zENwKx/6mat2OIL7wZ9/Me5wzumtrEb6OaRg?= =?us-ascii?Q?GGsPAM6EXRLQ9lqFyXwVTnVxIlyqiTFOf8DeMHWZaC1ZI3ToBdPe68JMKJrL?= =?us-ascii?Q?P9XxWaW6Vg=3D=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 84a5e4a9-71dc-4d8b-7000-08ded071678f X-MS-Exchange-CrossTenant-AuthSource: BY1PR03MB7996.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2026 15:17:42.1397 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9GJ2ly2eu7zhQvpZChqNACmRLqZB9Z4TfSIU5RwIPS4i6G//xSsXD+7zraqV5aEjf2VAEQfmsBbC0ia/ZicWMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH9PR03MB649383 X-purgate-ID: tlsNG-720697/1782141464-4E4623F3-F3AFD43A/0/0 X-purgate-type: clean X-purgate-size: 2436 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1782141488778158500 Content-Type: text/plain; charset="utf-8" When doing kexec on an EFI image there is no purgatory and kexec_reloc.S hands off straight to the new kernel. To facilitate this the Linux kernel boot params need to be passed through %rsi. Signed-off-by: Kevin Lampis --- Changes in v2: - Rename kexec_image->boot_params to entry_arg - Fix indentation --- xen/arch/x86/include/asm/machine_kexec.h | 2 +- xen/arch/x86/machine_kexec.c | 3 ++- xen/arch/x86/x86_64/kexec_reloc.S | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/include/asm/machine_kexec.h b/xen/arch/x86/includ= e/asm/machine_kexec.h index 3e189acf24..010e0c7046 100644 --- a/xen/arch/x86/include/asm/machine_kexec.h +++ b/xen/arch/x86/include/asm/machine_kexec.h @@ -7,7 +7,7 @@ =20 extern void kexec_reloc(unsigned long reloc_code, unsigned long reloc_pt, unsigned long ind_maddr, unsigned long entry_maddr, - unsigned long flags); + unsigned long flags, unsigned long arg); =20 extern const char kexec_reloc_end[]; =20 diff --git a/xen/arch/x86/machine_kexec.c b/xen/arch/x86/machine_kexec.c index f921eec5aa..03776f4723 100644 --- a/xen/arch/x86/machine_kexec.c +++ b/xen/arch/x86/machine_kexec.c @@ -198,7 +198,8 @@ void machine_kexec(struct kexec_image *image) =20 kexec_reloc(page_to_maddr(image->control_code_page), page_to_maddr(image->aux_page), - image->head, image->entry_maddr, reloc_flags); + image->head, image->entry_maddr, reloc_flags, + image->entry_arg); } =20 int machine_kexec_get(xen_kexec_range_t *range) diff --git a/xen/arch/x86/x86_64/kexec_reloc.S b/xen/arch/x86/x86_64/kexec_= reloc.S index b52d31a654..ab9fa7f2b8 100644 --- a/xen/arch/x86/x86_64/kexec_reloc.S +++ b/xen/arch/x86/x86_64/kexec_reloc.S @@ -33,6 +33,7 @@ FUNC(kexec_reloc, PAGE_SIZE) /* %rdx - indirection page maddr */ /* %rcx - entry maddr (%rbp) */ /* %r8 - flags */ + /* %r9 - entry arg */ =20 movq %rcx, %rbp =20 @@ -71,6 +72,8 @@ FUNC(kexec_reloc, PAGE_SIZE) movq %rdx, %rdi call relocate_pages =20 + movq %r9, %rsi /* entry arg */ + /* Need to switch to 32-bit mode? */ testq $KEXEC_RELOC_FLAG_COMPAT, %r8 jnz .L_call_32_bit --=20 2.52.0 From nobody Thu Jul 23 21:54:15 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=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1782141500; cv=pass; d=zohomail.com; s=zohoarc; b=CWYSGJtSi57zuuh/tZgovNbifyPzBrLvaaZKcljXWiqtNjdRQc7kAh+Ag+7BDfx9d2o69LMwy+L0lL6RNCv45o4k9XGrso7Z3WtOatosneUgrryLlKH9FGMSkMUkJ3mC0v5V5W6GisUcVOGgpqSgWz9KqHabXzek8OPNpqfmKik= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782141500; 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=ka899mqYRjHfWYgSOCloGz1lQeceEJ3Vxja9LrEfdBM=; b=F6CZI6QKADvn3sx6ruadKgm7J7puRVqLdedjLIIvX8GSKKbE+sT9o3S0rcP4iGkpVJbhiJWt7TA7MohzkLgsqc8yy8lwv1deRV1qrZl0U9pwWqBhcJZdZtfj3S2ZsQmFtPTyT+DPkqFOWLTUSgOOA9XtWb1YEtCEM+SFn3RnxmQ= 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=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1782141500085720.0412758367316; Mon, 22 Jun 2026 08:18:20 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1343922.1603158 (Exim 4.92) (envelope-from ) id 1wbgPT-0007ie-GW; Mon, 22 Jun 2026 15:18:03 +0000 Received: by outflank-mailman (output) from mailman id 1343922.1603158; Mon, 22 Jun 2026 15:18:03 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wbgPT-0007iP-C8; Mon, 22 Jun 2026 15:18:03 +0000 Received: by outflank-mailman (input) for mailman id 1343922; Mon, 22 Jun 2026 15:18:01 +0000 Received: from mx.expurgate.net ([194.145.224.20]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1wbgPR-0007aY-Fk for xen-devel@lists.xenproject.org; Mon, 22 Jun 2026 15:18:01 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1wbgPQ-006oqV-Sq for xen-devel@lists.xenproject.org; Mon, 22 Jun 2026 17:18:00 +0200 Received: from [10.42.69.12] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6a395223-e002-0a2a0a5209dd-0a2a450caa9a-10 for ; Mon, 22 Jun 2026 17:18:00 +0200 Received: from [40.93.198.55] (helo=CY7PR03CU001.outbound.protection.outlook.com) by tlsNG-d25034.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.0) (envelope-from ) id 6a395227-94a4-0a2a450c0019-285dc6378e5c-3 for ; Mon, 22 Jun 2026 17:18:00 +0200 Received: from BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) by SA3PR03MB7394.namprd03.prod.outlook.com (2603:10b6:806:3a1::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.19; Mon, 22 Jun 2026 15:17:46 +0000 Received: from BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07]) by BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07%3]) with mapi id 15.21.0139.018; Mon, 22 Jun 2026 15:17:46 +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=citrix.com header.i="@citrix.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=EMmB3QhPtYDJbH2qE52b5UXC6m5xhKlXJd6UoFjPK+4pvd3PRWU850Fdsyk22ipVjWTYoOVKG/ji0VPQIyE1uoM0kKDgOeTbOmJ2CkYwrep+sjoDDjsoxpOjk1/mZ4OQKyqeVOjzpw5+2vT9n9aEMA6L13EXrYbpJY2/wsAsPjC5KU1HKU6ncdihS+iA3EvFbvOHIdEDqZVxtr4/mZuBRPSqpg68EPhEoH013SVJLcdQfs/KBsmvlI93I+LCBkDIqL63u4CynzYxUBvcoIaFTHunmXQ2371/Qg9WRhjxydklCzOPcuFv0lOhgZfNJFhFFTK7lhwRQQKAv6ASkQE8ZQ== 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=ka899mqYRjHfWYgSOCloGz1lQeceEJ3Vxja9LrEfdBM=; b=XxZppfaJPPFSmFCsog/D3osF4z/7kmhg7iN6N/+HTlL9NcA2TPrg5xvX032tA44+SDC4mKl5Gas6XbKtIQk+q3gNXIblIk4Lj+/uWfn/Mqadye9OPAzeJMco0YF4jHkFaJvTNtraM9NH5IoO07gp4ntbqha2xtyX7knebd24R83DD3A0wCzCSV/6CKfA0IGyYQnpMBctvvIF7Rrkbks2i1ZnZt1WiVWw227mpUzCFlUkl8Z4wSBMuwo4ZwQ+7lWTZGBzHnXy5fbzuKU5hkXJsdW+fjNCmQ5cnkA9RLh2N0T6F03listTW/rL/b7KWLMTt93nU5MMmF042N2DGRSyjg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ka899mqYRjHfWYgSOCloGz1lQeceEJ3Vxja9LrEfdBM=; b=P9Eb3CdKbMlDT0JSQqxdNqH9DAD/ESXx8Tn82kQFnq/EIFoO0yp2stYYUWXmU+H3AEh6D5+hDzqwQAvDjy0DpIKFTQMlL+vqVoqu3uoXJRHvrx568ZlGTP06wpVekdW8fbs27ifa/uiPQIKp0q4gx49mKwos3j2cvg565ZmVlzQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Kevin Lampis To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger.pau@citrix.com, ross.lagerwall@citrix.com, Kevin Lampis Subject: [PATCH v2 7/7] x86/kexec: Zero GPRs before entering new kernel Date: Mon, 22 Jun 2026 16:18:33 +0100 Message-ID: <20260622151833.3397692-8-kevin.lampis@citrix.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260622151833.3397692-1-kevin.lampis@citrix.com> References: <20260622151833.3397692-1-kevin.lampis@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P265CA0242.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:350::16) To BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PR03MB7996:EE_|SA3PR03MB7394:EE_ X-MS-Office365-Filtering-Correlation-Id: 03eec23d-4321-48ab-15de-08ded07169f5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|23010399003|366016|22082099003|18002099003|56012099006|11063799006; X-Microsoft-Antispam-Message-Info: KNUazDw/LFgwMtntvO351kzv8skJxW5b5/9spFGZKy/MJhSYsloNhF0c8f5poLacPhrtpJ3Er9Zyy7eWdXtUDVsCgUOs5XgXEVSLj/BswKJ4eFXvxB2UeUuITjKbBZGofTwbZBNnEBGkB/UN3VVBHZDmUAxu5EpYeJ9YueOW5q/kGbtnb+S3hH+biYtEWfs9xJRut0WGEI4SOIVLPdElsmY12T+Jcx0QMZ6A5b7GaBhymXAKff3a2W4UhU8i0EBcccn+VBgdn6fl6Lh13Y+Aw7HwFlmF6IIMIIJzTyq4XkdSLXGjIlsLduLqquISXmK4xzABB3WKad9F/dl1sItmzfmZ6NUFsSHLG5fyFvSVV96x1K9CNG7IwalKLC29wLSSZg9RiFZ0qW8VLlGyyvLtqQ1jEmJohitiQDh1gjYw4ThoTvvUlIUPqMrQ1AgldBfOVcFIL9vyr8/NMWiCz25heGMRfX6hcNB3Z1kLsr+wt0kanBo/X5PZNBgYQ+c++MtGHS9kP/5hKoZawyjvqEJOCHKctoow15z5j/N+ohpuZHOTBB0HtH3REa0MMOh+Xlvf7QLu0v+3o5yQg765QXcXd5oBP986qd8d9Guag64QWsTMhC9myBuiFlsIlv575S/0MqDvpTrb0BlKhud+mY1cLSXiBWBwisoIGp39haLcYsE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY1PR03MB7996.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(1800799024)(23010399003)(366016)(22082099003)(18002099003)(56012099006)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?wOFM6likpv7DLjCYcAcMeE2Iqu7Dzl0GjQ/BjONcL1WgIIKMXQw4p81kUjNx?= =?us-ascii?Q?+ddOh94uWJDto5Ja0SOpHIHsfEjQTuPawPobTsQzRKKXgE3vdDH9fvFU8aHL?= =?us-ascii?Q?joie/z5XS5uK8HRdTV4R0hRNAbr+8bgIb3rYOBasS6jpgD9lGpTWzZceThoy?= =?us-ascii?Q?bvb3YrL35+IIpYge1haPZa8baA5kbjrc4jSbJqx7nRJ9PX3JZU64tsEVFvnW?= =?us-ascii?Q?StfzvaVUQzDbhPZdOHO9kPikwT30J8U7nGjbI2LttCDN0vd55NAxdyzC03Tw?= =?us-ascii?Q?S8OtVyqMoqnwaliaMwXL9ZwTqRHiQQ/Up8h4mthKMPsomUpZD3ODNan9u7X0?= =?us-ascii?Q?1Mo79ry1hOJa5X/Ry/K6JM1QtF3+wOa7csq1JY7f5DJ5MXxX5wj+XhtDF7Lg?= =?us-ascii?Q?aVXzE3H+dVZmenxgOBBqQvAvNuKgPw07WKr1FBCqkZCD/ZLM/BjzxLTh11Sk?= =?us-ascii?Q?HjIpINN4N+vAkv4ww8f9NyiM0/+h2TRsaYx9TWrysIlwlgtayb2Nm0BuvnaD?= =?us-ascii?Q?ifRWahZtiCGBrEea8ZNVXzLldXM1JizJos2bkRGmu9eDS9RlaBRdTalCwQhF?= =?us-ascii?Q?ohDKt3VRaPZQJk+AWxJcn9d2OyT5SZlsyFVnImi2+eERMpn1P1QMjjYPA5H7?= =?us-ascii?Q?Jjug7GaPVuVz/LzFFEJ+e0MSa1Kcoqcd277FYf1tsD2DQ8SHvijIM6lyQtX0?= =?us-ascii?Q?fk1xDMPRv3u6r6gLz88+r9L6vXMm6fjhO+c61gMak5ZoYtWBIFhTTVI/h9dG?= =?us-ascii?Q?Ci1+Q7RP3ou7Gg3TrINUAgBOPSt3/KB1+MdEj+qx7PAqN3+KIaTErnXcaOU1?= =?us-ascii?Q?MktGvsHVC8C0Z9tWbBTER8bswlbayiy868F1/0bIbyWC3IbvNEYXPMP6b3De?= =?us-ascii?Q?vp0+9NU+waeBo+IfQZtOJAsWhkMQWDDRQgU68VD/l5e4cMKn5BRPiy6Fd/b3?= =?us-ascii?Q?7lq6ARV+D65wCQ64qGYR7F4QNLH4lqff9E1i6fVvQH2kw6ry+3XlEuqtdiXQ?= =?us-ascii?Q?csT8NxgFdzk9jhkAMpourgPlaD/lZdG9mcdyeedfGZBjmW3r4yLdspWx4hTQ?= =?us-ascii?Q?XSIxQdDOvw4mkw6qr+fG1HNYWA9FZ8XRJ4yjaboYwOoprMnvnn6JeP9loQZv?= =?us-ascii?Q?jX+kHOMrw2/CNglBQQoS+n9Nt0LAt6qrhnLxpNuQzk+t8FPF3xwUeU9r76tp?= =?us-ascii?Q?jvdgkRYNaO4v64y4X88RbgTnf6BwQ1YDga+2mbrYfab0xMSTm6b79CTJzUIX?= =?us-ascii?Q?C1E78GOP+JPj1/Yave9HS7t620Wxz0+/2cInOEQFlgIcxBqSSJe0jukUPehl?= =?us-ascii?Q?5y8lejxVKTkZ9hM1wL5rCjxa5o5A/IbOiVTMVcgWF7zJmLAtrx1Dbl+7JXZr?= =?us-ascii?Q?gzLxpx9dbA6Tq8HgEEPCjC+sFeOmxHnc0r6xyeOGw3HXde8uUDGeZenwxj1i?= =?us-ascii?Q?EYlycCkS2/0rWzR12Ecc6FnakrMXCvVksC67FEk3P6z6m0lwvlWPPZ+1w69g?= =?us-ascii?Q?qD/ZI1sRDWQwSXegSsalCSMwvc7s9VsVxuRuqqDQeUU8xPZTaAqdhOQq1CTp?= =?us-ascii?Q?sFy8jZktT5VVy38oOJJEkwpRSUN1+QuB/yLC8ulvnettKhuaKiz4yTlre7OL?= =?us-ascii?Q?SlcWsxvfDCJ2bTc8DNkRCYZI+RofDLl/aaOhqQve5IpLwk0/0C1dRnOtmgyv?= =?us-ascii?Q?kok2i0eVTzCD8OgbRAPBCml2GVTOioiCUM0Qf3XoL7rhCV63rAYknZlcN8JW?= =?us-ascii?Q?20etX7ShSQ=3D=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 03eec23d-4321-48ab-15de-08ded07169f5 X-MS-Exchange-CrossTenant-AuthSource: BY1PR03MB7996.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2026 15:17:46.1738 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: J3zda2tPHQaVyS/0nIdpuQY9rja3T6T4CSbw4fPI7JZyMCP5hb7UHfWhctHO0qwwi6tUSMeMdMeTZmRynOB17Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR03MB7394 X-purgate-ID: tlsNG-d25034/1782141480-D89FAABF-0CDEC1C3/0/0 X-purgate-type: clean X-purgate-size: 1864 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1782141501077158500 Content-Type: text/plain; charset="utf-8" Purgatory zeros these general purpose registers before jumping to the new kernel. When doing kexec on an EFI kernel there is no purgatory so we need to zero the registers here instead. This change shouldn't affect the functionality of legacy kexec. Signed-off-by: Kevin Lampis --- Changes in v2: - Move the 32bit lines to the correct place - Reword the patch subject line - Fix indentation --- xen/arch/x86/x86_64/kexec_reloc.S | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/xen/arch/x86/x86_64/kexec_reloc.S b/xen/arch/x86/x86_64/kexec_= reloc.S index ab9fa7f2b8..f8ec457a19 100644 --- a/xen/arch/x86/x86_64/kexec_reloc.S +++ b/xen/arch/x86/x86_64/kexec_reloc.S @@ -78,6 +78,20 @@ FUNC(kexec_reloc, PAGE_SIZE) testq $KEXEC_RELOC_FLAG_COMPAT, %r8 jnz .L_call_32_bit =20 + xor %edi, %edi + xor %eax, %eax + xor %ebx, %ebx + xor %ecx, %ecx + xor %edx, %edx + xor %r8d, %r8d + xor %r9d, %r9d + xor %r10d, %r10d + xor %r11d, %r11d + xor %r12d, %r12d + xor %r13d, %r13d + xor %r14d, %r14d + xor %r15d, %r15d + /* Jump to the image entry point */ jmp *%rbp =20 @@ -94,6 +108,7 @@ FUNC(kexec_reloc, PAGE_SIZE) lea compatibility_mode(%rip), %rax push $0x10 push %rax + lretq END(kexec_reloc) =20 @@ -171,6 +186,11 @@ FUNC_LOCAL(compatibility_mode) xorl %eax, %eax movl %eax, %cr4 =20 + xor %edi, %edi + xor %ebx, %ebx + xor %ecx, %ecx + xor %edx, %edx + /* Jump to the image entry point. */ jmp *%ebp END(compatibility_mode) --=20 2.52.0