From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1kAqXI-00078J-Gd for mharc-grub-devel@gnu.org; Wed, 26 Aug 2020 04:12:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:32850) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kAqXH-00076k-Pn for grub-devel@gnu.org; Wed, 26 Aug 2020 04:11:59 -0400 Received: from wout1-smtp.messagingengine.com ([64.147.123.24]:33103) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kAqXG-0005Pb-1c for grub-devel@gnu.org; Wed, 26 Aug 2020 04:11:59 -0400 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.west.internal (Postfix) with ESMTP id A105B10B9; Wed, 26 Aug 2020 04:11:56 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Wed, 26 Aug 2020 04:11:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=date :from:to:cc:subject:message-id:references:mime-version :content-type:in-reply-to; s=fm1; bh=yRHxA1e2vjWbb9l6TfQXt4BbSs/ zKFg+qWpJiovOg80=; b=AcAldnaO4SCG4V0HGWK6bm+ETM919dmWYNc24Ro2U99 bLqcjGg7rlhMMegsj6ShHFAYx1Mkyjevg9MZqndsFfVPrrP1VkrzNFDVFRZ5Zm0H 9jYiPdPWOfT6lFmti4dljDYhApoBMNV6aNO+l9F7+6K4FVXlipKjcEn+tGjGJuC5 vaLdtKdglrnM0/Tcqh0qL7TM78Ez5VpN07xtCDp6BcSxwddPWG4HIjSeDnJP+Ck1 GToTGTDMq0fbui86E+7lNRzr3WXFkH/VRt5O3vkU2FDBQCggOIn4wmCGbfTe/Jud FzSYh3l+WpVS1z5FlF1/VrRRyDjrDSLhwUH86Th8c5w== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=yRHxA1 e2vjWbb9l6TfQXt4BbSs/zKFg+qWpJiovOg80=; b=uH1YmXu6nTFy7TA+EGk0mt k6aD5TU0YLVKTQkVTDV3mnpfYjfdrNuU29ATvKP8aOnEaqLwwvourCnLCg46uDiE TFMPp28eUyQyN3ZsRxukTpwDSBkxYl0bRHyuL+Hngy5nGAzD3O8UShFZv5QY3AbV gFPEQlVXr8+OAzH2srIQGz7F1BxrzZx5GQmKyACWqxmnUS398ODt++hQVuORIlNJ LO3+WP4wauuJ47abkF63fhwU+7cE21k5BZLKExpuvvwuvwECX8UOie5r3HWK47Je iSqQrENtQ3HcfJcnE0zoq+BRqo3w8bszhl8ZcvCcetRytcvnwuh27ESQJvMdmE/Q == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduiedruddvvddgtdduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvffukfhfgggtuggjsehgtderredttddvnecuhfhrohhmpefrrghtrhhi tghkucfuthgvihhnhhgrrhguthcuoehpshesphhkshdrihhmqeenucggtffrrghtthgvrh hnpeehgefhtdefueffheekgfffudelffejtdfhvdejkedthfehvdelgfetgfdvtedthfen ucfkphepkeelrdduvddrfeekrddvfeeinecuvehluhhsthgvrhfuihiivgepjeenucfrrg hrrghmpehmrghilhhfrhhomhepphhssehpkhhsrdhimh X-ME-Proxy: Received: from vm-mail.pks.im (x590c26ec.dyn.telefonica.de [89.12.38.236]) by mail.messagingengine.com (Postfix) with ESMTPA id 6B4AC328005A; Wed, 26 Aug 2020 04:11:55 -0400 (EDT) Received: from localhost (xps [10.192.0.12]) by vm-mail.pks.im (OpenSMTPD) with ESMTPSA id 6f0badf4 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Wed, 26 Aug 2020 08:11:55 +0000 (UTC) Date: Wed, 26 Aug 2020 10:13:53 +0200 From: Patrick Steinhardt To: grub-devel@gnu.org Cc: Denis GNUtoo Carikli , Glenn Washburn , Daniel Kiper Subject: [PATCH v2 7/9] cryptodisk: Fix incorrect calculation of start sector Message-ID: <4ee7f87740d0071ada169f0a7a5adfdad495a4ac.1598429170.git.ps@pks.im> References: MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="h31gzZEtNLTqOjlF" Content-Disposition: inline In-Reply-To: Received-SPF: pass client-ip=64.147.123.24; envelope-from=ps@pks.im; helo=wout1-smtp.messagingengine.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/26 03:16:08 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 26 Aug 2020 08:12:00 -0000 --h31gzZEtNLTqOjlF Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable =46rom: Glenn Washburn Here dev is a grub_cryptodisk_t and dev->offset is offset in sectors of size native to the cryptodisk device. The sector is correctly transformed into native grub sector size, but then added to dev->offset which is not transformed. It would be nice if the type system would help us with this. Signed-off-by: Glenn Washburn Reviewed-by: Patrick Steinhardt --- grub-core/disk/cryptodisk.c | 11 ++++------- include/grub/disk.h | 7 +++++++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c index b2c6e9a7d..1eea4161f 100644 --- a/grub-core/disk/cryptodisk.c +++ b/grub-core/disk/cryptodisk.c @@ -757,9 +757,8 @@ grub_cryptodisk_read (grub_disk_t disk, grub_disk_addr_= t sector, size, sector, dev->offset); =20 err =3D grub_disk_read (dev->source_disk, - (sector << (disk->log_sector_size - - GRUB_DISK_SECTOR_BITS)) + dev->offset, 0, - size << disk->log_sector_size, buf); + grub_disk_from_native_sector (disk, sector + dev->offset), + 0, size << disk->log_sector_size, buf); if (err) { grub_dprintf ("cryptodisk", "grub_disk_read failed with error %d\n",= err); @@ -816,12 +815,10 @@ grub_cryptodisk_write (grub_disk_t disk, grub_disk_ad= dr_t sector, } =20 /* Since ->write was called so disk.mod is loaded but be paranoid */ - =20 + sector =3D sector + dev->offset; if (grub_disk_write_weak) err =3D grub_disk_write_weak (dev->source_disk, - (sector << (disk->log_sector_size - - GRUB_DISK_SECTOR_BITS)) - + dev->offset, + grub_disk_from_native_sector (disk, sector), 0, size << disk->log_sector_size, tmp); else err =3D grub_error (GRUB_ERR_BUG, "disk.mod not loaded"); diff --git a/include/grub/disk.h b/include/grub/disk.h index 316659fee..af9f886d3 100644 --- a/include/grub/disk.h +++ b/include/grub/disk.h @@ -174,6 +174,13 @@ typedef struct grub_disk_memberlist *grub_disk_memberl= ist_t; /* Return value of grub_disk_get_size() in case disk size is unknown. */ #define GRUB_DISK_SIZE_UNKNOWN 0xffffffffffffffffULL =20 +/* Convert to grub native disk sized sector from disk sized sector */ +static inline grub_disk_addr_t +grub_disk_from_native_sector (grub_disk_t disk, grub_disk_addr_t sector) +{ + return sector << (disk->log_sector_size - GRUB_DISK_SECTOR_BITS); +} + /* This is called from the memory manager. */ void grub_disk_cache_invalidate_all (void); =20 --=20 2.28.0 --h31gzZEtNLTqOjlF Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEF9hrgiFbCdvenl/rVbJhu7ckPpQFAl9GGcAACgkQVbJhu7ck PpRPoA/5AQwtpLSJdglm8XXLp+vwlQaf4SqXpFwPbySOj1dDtLXrobUxcpQhERn1 UrFXtyhp8Yd6qd74QvMv8XOwlY/Zl6WGLCxorB01eHsbRUPksoNFfZucKCXgb/gl YZDSJxK+2LHaHF66gp74HZ3d9Wqy4Q9djnIUKm3/yqzX7kAogbxFPhZL7g0Am8yx vZmCL0mgND77gXVQCiBclstg/SnOjd9IWw4Q/P1CQ34eDzECVYkiTGd26wfMMy7V WpYc63MiCaMM1U+PczlAiJQG7X7sC5RXjqUYh33AElvzIhH6XZyg8JzSjKnZObG+ D0XJUxrvq0bxorf2BrAheEKBgWKLZAiL7sggC7ftlbgC7ay/jIHvJIr5Oat0jD7e rhf4NhY24qZUHhg3sxrF3Y3qG+XPOOhJPXKFwC+IM3BlwZUXv5hyhovorrn7MQtZ aJD0oQizxijqdqQ792LQhT4MecMVMfxi2A3iZbyqY2ckxQIdpszf75xt1qjkGTTt JXgbyU5e4mYVHZqSdTYYLg9YgY6YFT0CBj8Dyfdylewc20fqjSmRBmozgcRFzeRB bGKUg3zSaNYSRyUimtHjCl0fjZdcXo2CTJn/QxYtdlPdyXgxH+lQ6Hayv4jUcOym qlW7FpFPuxZLM7gKkDxe2AYUxGGU+ycOqRZfJ7mhnRHImUpXn1M= =qjbP -----END PGP SIGNATURE----- --h31gzZEtNLTqOjlF--