From nobody Fri Oct 31 03:54:05 2025 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; dmarc=pass(p=reject dis=none) header.from=cloud.com ARC-Seal: i=1; a=rsa-sha256; t=1751093233; cv=none; d=zohomail.com; s=zohoarc; b=gqEHkK6V8ZebAuDj+iYdecNf4u7CSlIvcuZNlTWHp915ICtW8DICbvKt7O0MV6ps5ylz3ImVfbJHXQFP0zmSmJWOQmKzAWNfnH7HDgzyWkcM31nsHN+6zVT2kaFwaFw2V3oz7kp7TYFRRH/OWAVmFjlHxjmu2FLgNDHFeTwLOsQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751093233; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ow9uK6vnAdJJy0Mj/oldGRR5lyMmniaKiPz0dy9nDSI=; b=CHLbRdPlzPyc2mWjxNscOLcDhGYeBSho2SJARnt7yYSNKnNDOHRPyZ05VPqbU65WyO4Mi7NlxaZrAah68+M1TAkSeC8Mx3PP1lvA7mFj/8Om9GIBIwFvzAK6hiqmlR0naZD2QdtUsmjS/kx2xqwLylwH7t34PuHitB6fS6Mulu0= ARC-Authentication-Results: i=1; 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; 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 1751093233304501.64826968607315; Fri, 27 Jun 2025 23:47:13 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1028173.1402328 (Exim 4.92) (envelope-from ) id 1uVPKj-0005J2-Gm; Sat, 28 Jun 2025 06:46:41 +0000 Received: by outflank-mailman (output) from mailman id 1028173.1402328; Sat, 28 Jun 2025 06:46:41 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uVPKj-0005Ik-Ad; Sat, 28 Jun 2025 06:46:41 +0000 Received: by outflank-mailman (input) for mailman id 1028173; Sat, 28 Jun 2025 06:46:40 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1uVPKi-0005Ie-2v for xen-devel@lists.xenproject.org; Sat, 28 Jun 2025 06:46:40 +0000 Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [2a00:1450:4864:20::429]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id a1088e74-53eb-11f0-b894-0df219b8e170; Sat, 28 Jun 2025 08:46:34 +0200 (CEST) Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3a531fcaa05so217060f8f.3 for ; Fri, 27 Jun 2025 23:46:33 -0700 (PDT) Received: from localhost.localdomain (253.226.6.51.dyn.plus.net. [51.6.226.253]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a88c80b50bsm4506375f8f.42.2025.06.27.23.46.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Jun 2025 23:46:32 -0700 (PDT) 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" X-Inumbo-ID: a1088e74-53eb-11f0-b894-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloud.com; s=cloud; t=1751093192; x=1751697992; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=ow9uK6vnAdJJy0Mj/oldGRR5lyMmniaKiPz0dy9nDSI=; b=IRfLhTrEx6mw0pgIEQEpp8G/f7ehlHtcGJDwjCn3BnHmMCDyC0kd5UAMjg+h56Gq3b nbCTRY1uO9GWsbA7lR7RY9zbZ5TgRkAmx/4i08Ll2Dp4ExiaFMSeNk5EvuOx1FVQPyZG ftAuvk0Wb429h9XhOnH/eVkm2jBFQSlyBvgII= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751093193; x=1751697993; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ow9uK6vnAdJJy0Mj/oldGRR5lyMmniaKiPz0dy9nDSI=; b=l2jyoF2YlPNUDUNlHcD7YPJiNnDYsmdhaRHZiTk/lPCSC6hJD4RgbOkRdZUmEiMcjZ ElizqvyOOI2mpkDxgd1PVuhBZltubTpelaLcjXGtWTb5otUpRp52d0RuWZmavymF/YyA NcXyismLZYrBS9+8YKHs8v5iwuURplWYc/FXsVcsWYWeuq64m1caePwQJSwPcVmUXGjS S81Bt7F4T2dltqGvBPojiASl7jZcqBQzpE2y1Tdcz1FygOOD/HZyScK5INu/gl+ujoKi 2jK4qAkkFo/Ym/Jz1ChGhEG6j12A+ZDTpEfyM38w2R44G2zBE/VkchypKq6B1PLfdLi4 IEHQ== X-Gm-Message-State: AOJu0YxDtr0A3PX+0Uzb9f5AEpoGgYuYfSN62ZpGv2Xl3XqccpmpkPeQ qSTRMV3wNihST13UFYMH1P38/HPt8TQhBRgYusUA226iP1G5RzXFzYFEAV2Cr3VnFwc/xbxbUER Zj6XG2DY= X-Gm-Gg: ASbGncsoWaHT4jFzs8jgNZLcPl6vnFf1kRtSjtjspnyMLsD4UiT+DSpnFUNfLCu8Auo sAygMikIkPXywSVIL1nmq8EqESBe4sriF6vIhFcBSPAv3Hs614j+LweJmLyTLFVjOBlDyp8WIbt zEq7Dwh3/ocRiy7/++rwY+Mppllf3u2btuv7NSWaRoFKgs+SFVjySp4Vkouxz8nlQYTqhoZGcJL ZJPDh0soWqkXinjZc4qcLJP57vmwMeZPk4vmLYD39nePbYgFVP/gTRCecwKFvW9BnHMeG55wLWw T/rTipMy3n8Boj2gFgirlAGXx5JnRocfRxTKd2SyYghg4ZrDyhhZ27IniUO/av2GnH35GA/OqYQ FIZN0i1Q5+U6Qv3y5uGmo00nzhA3skA== X-Google-Smtp-Source: AGHT+IGsT4qU7r69IPWDvVCaRs1obowz3Sw1fw2t2kepVAmQpnEnqRrEfif3OhNQ8SuvkIwQb/qI0w== X-Received: by 2002:a05:6000:250f:b0:3a4:f936:7882 with SMTP id ffacd0b85a97d-3a8ffcca8b2mr5864226f8f.55.1751093192582; Fri, 27 Jun 2025 23:46:32 -0700 (PDT) From: Frediano Ziglio To: xen-devel@lists.xenproject.org Cc: Frediano Ziglio , "Daniel P. Smith" , =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= , Jan Beulich Subject: [PATCH v5] xen/efi: Update error flow for read_file function Date: Sat, 28 Jun 2025 07:46:18 +0100 Message-ID: <20250628064630.2222323-1-frediano.ziglio@cloud.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @cloud.com) X-ZM-MESSAGEID: 1751093234801116600 Content-Type: text/plain; charset="utf-8" Use more explicit goto statements to handle common error code path instead of a lot of if/else. Signed-off-by: Frediano Ziglio Reviewed-by: Marek Marczykowski-G=C3=B3recki --- Change since v4: - fixed label indentation. --- xen/common/efi/boot.c | 80 +++++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 37 deletions(-) diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c index 9306dc8953..1019de6950 100644 --- a/xen/common/efi/boot.c +++ b/xen/common/efi/boot.c @@ -792,6 +792,8 @@ static bool __init read_file(EFI_FILE_HANDLE dir_handle= , CHAR16 *name, =20 if ( !name ) PrintErrMesg(L"No filename", EFI_OUT_OF_RESOURCES); + + what =3D L"Open"; if ( dir_handle ) ret =3D dir_handle->Open(dir_handle, &FileHandle, name, EFI_FILE_MODE_READ, 0); @@ -800,54 +802,58 @@ static bool __init read_file(EFI_FILE_HANDLE dir_hand= le, CHAR16 *name, if ( file =3D=3D &cfg && ret =3D=3D EFI_NOT_FOUND ) return false; if ( EFI_ERROR(ret) ) - what =3D L"Open"; - else - ret =3D FileHandle->SetPosition(FileHandle, -1); + goto fail; + + what =3D L"Seek"; + ret =3D FileHandle->SetPosition(FileHandle, -1); if ( EFI_ERROR(ret) ) - what =3D what ?: L"Seek"; - else - ret =3D FileHandle->GetPosition(FileHandle, &size); + goto fail; + + what =3D L"Get size"; + ret =3D FileHandle->GetPosition(FileHandle, &size); if ( EFI_ERROR(ret) ) - what =3D what ?: L"Get size"; - else - ret =3D FileHandle->SetPosition(FileHandle, 0); + goto fail; + + what =3D L"Seek"; + ret =3D FileHandle->SetPosition(FileHandle, 0); if ( EFI_ERROR(ret) ) - what =3D what ?: L"Seek"; - else - { - file->addr =3D min(1UL << (32 + PAGE_SHIFT), - HYPERVISOR_VIRT_END - DIRECTMAP_VIRT_START); - ret =3D efi_bs->AllocatePages(AllocateMaxAddress, EfiLoaderData, - PFN_UP(size), &file->addr); - } + goto fail; + + what =3D L"Allocation"; + file->addr =3D min(1UL << (32 + PAGE_SHIFT), + HYPERVISOR_VIRT_END - DIRECTMAP_VIRT_START); + ret =3D efi_bs->AllocatePages(AllocateMaxAddress, EfiLoaderData, + PFN_UP(size), &file->addr); if ( EFI_ERROR(ret) ) - what =3D what ?: L"Allocation"; - else - { - file->need_to_free =3D true; - file->size =3D size; - handle_file_info(name, file, options); + goto fail; =20 - ret =3D FileHandle->Read(FileHandle, &file->size, file->str); - if ( !EFI_ERROR(ret) && file->size !=3D size ) - ret =3D EFI_ABORTED; - if ( EFI_ERROR(ret) ) - what =3D L"Read"; - } + file->need_to_free =3D true; + file->size =3D size; + handle_file_info(name, file, options); =20 - if ( FileHandle ) - FileHandle->Close(FileHandle); + what =3D L"Read"; + ret =3D FileHandle->Read(FileHandle, &file->size, file->str); + if ( !EFI_ERROR(ret) && file->size !=3D size ) + ret =3D EFI_ABORTED; + if ( EFI_ERROR(ret) ) + goto fail; =20 - if ( what ) - { - PrintErr(what); - PrintErr(L" failed for "); - PrintErrMesg(name, ret); - } + FileHandle->Close(FileHandle); =20 efi_arch_flush_dcache_area(file->ptr, file->size); =20 return true; + + fail: + if ( FileHandle ) + FileHandle->Close(FileHandle); + + PrintErr(what); + PrintErr(L" failed for "); + PrintErrMesg(name, ret); + + /* not reached */ + return false; } =20 static bool __init read_section(const EFI_LOADED_IMAGE *image, --=20 2.43.0