From: Glenn Washburn <development@efficientek.com>
To: Patrick Steinhardt <ps@pks.im>
Cc: Daniel Kiper <daniel.kiper@oracle.com>,
grub-devel@gnu.org, Glenn Washburn <development@efficientek.com>
Subject: [CRYPTO-LUKS v3 03/19] cryptodisk: Incorrect calculation of start sector for grub_disk_read in grub_cryptodisk_read.
Date: Mon, 24 Aug 2020 21:39:18 -0500 [thread overview]
Message-ID: <20200825023918.1856369-1-development@efficientek.com> (raw)
In-Reply-To: <20200824051051.GA953@tanuki.pks.im>
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 <development@efficientek.com>
---
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 b87925ad3..38bd49835 100644
--- a/grub-core/disk/cryptodisk.c
+++ b/grub-core/disk/cryptodisk.c
@@ -762,9 +762,8 @@ grub_cryptodisk_read (grub_disk_t disk, grub_disk_addr_t sector,
size, sector, dev->offset);
err = 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);
@@ -821,12 +820,10 @@ grub_cryptodisk_write (grub_disk_t disk, grub_disk_addr_t sector,
}
/* Since ->write was called so disk.mod is loaded but be paranoid */
-
+ sector = sector + dev->offset;
if (grub_disk_write_weak)
err = 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 = 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_memberlist_t;
/* Return value of grub_disk_get_size() in case disk size is unknown. */
#define GRUB_DISK_SIZE_UNKNOWN 0xffffffffffffffffULL
+/* 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);
--
2.27.0
next prev parent reply other threads:[~2020-08-25 2:39 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-31 12:01 [CRYPTO-LUKS v1 00/19] Fixes and improvements for cryptodisks+luks2 and a few other things Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 01/19] configure: Add Ubuntu dejavu font path Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 02/19] cryptodisk: Fix cipher IV mode 'plain64' always being set as 'plain' Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 03/19] cryptodisk: Incorrect calculation of start sector for grub_disk_read in grub_cryptodisk_read Glenn Washburn
2020-08-23 10:39 ` Patrick Steinhardt
2020-08-24 4:31 ` Glenn Washburn
2020-08-24 5:10 ` Patrick Steinhardt
2020-08-24 23:42 ` [CRYPTO-LUKS v2 03/19] cryptodisk: Incorrect calculation of sector in grub_cryptodisk_read/write Glenn Washburn
2020-08-25 2:09 ` Glenn Washburn
2020-08-24 23:58 ` [CRYPTO-LUKS v1 03/19] cryptodisk: Incorrect calculation of start sector for grub_disk_read in grub_cryptodisk_read Glenn Washburn
2020-08-25 2:39 ` Glenn Washburn [this message]
2020-07-31 12:01 ` [CRYPTO-LUKS v1 04/19] cryptodisk: Add more verbosity when reading/writing cryptodisks Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 05/19] luks2: Add support for LUKS2 in (proc)/luks_script Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 06/19] luks2: Rename source disk variabled named 'disk' to 'source' as in luks.c Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 07/19] luks2: grub_cryptodisk_t->total_length is the max number of device native sectors Glenn Washburn
2020-08-23 10:20 ` Patrick Steinhardt
2020-07-31 12:01 ` [CRYPTO-LUKS v1 08/19] cryptodisk, luks: Allow special processing for comparing UUIDs Glenn Washburn
2020-07-31 15:34 ` Patrick Steinhardt
2020-07-31 12:01 ` [CRYPTO-LUKS v1 09/19] cryptodisk: Unregister cryptomount command when removing module Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 10/19] fs: Fix block lists not being able to address to end of disk sometimes Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 11/19] cryptodisk: Properly handle non-512 byte sized sectors Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 12/19] cryptodisk: Rename total_length field in grub_cryptodisk_t to total_sectors Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 13/19] fs: Allow number of blocks in block list to be optional, where length will be defaulted to the length of the device Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 14/19] loopback: Add procfs entry 'loopbacks' to output configured loopback devices Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 15/19] cryptodisk, luks2: Add header line to procfs entry and crypto and source device names Glenn Washburn
2020-07-31 15:37 ` [CRYPTO-LUKS v1 15/19] cryptodisk,luks2: " Patrick Steinhardt
2020-07-31 16:22 ` Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 16/19] cryptodisk: Add a couple comments noting the usage of a couple fields in grub_cryptodisk_t as is done for grub_disk_t Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 17/19] luks2: Ensure that bit fields of grub_luks2_digest_t in luks2_parse_digest are initialized before returning Glenn Washburn
2020-07-31 12:01 ` [CRYPTO-LUKS v1 18/19] luks2: Fix use of incorrect index and some error messages Glenn Washburn
2020-07-31 12:02 ` [CRYPTO-LUKS v1 19/19] cryptodisk: Rename offset in grub_cryptodisk_t to offset_sectors to improve readability Glenn Washburn
2020-07-31 15:59 ` [CRYPTO-LUKS v1 00/19] Fixes and improvements for cryptodisks+luks2 and a few other things Patrick Steinhardt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200825023918.1856369-1-development@efficientek.com \
--to=development@efficientek.com \
--cc=daniel.kiper@oracle.com \
--cc=grub-devel@gnu.org \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.