Compare commits

...

No commits in common. "c8s" and "c8" have entirely different histories.
c8s ... c8

701 changed files with 16 additions and 631 deletions

9
.gitignore vendored
View File

@ -1,6 +1,9 @@
SOURCES/grub-2.02.tar.xz
SOURCES/redhatsecureboot301.cer
SOURCES/redhatsecureboot502.cer
SOURCES/redhatsecureboot601.cer
SOURCES/redhatsecureboot701.cer
SOURCES/redhatsecurebootca3.cer
SOURCES/redhatsecurebootca5.cer
SOURCES/theme.tar.bz2
SOURCES/unifont-5.1.20080820.pcf.gz
/grub-2.02.tar.xz
/theme.tar.bz2
/unifont-5.1.20080820.pcf.gz

9
.grub2.metadata Normal file
View File

@ -0,0 +1,9 @@
3d7eb6eaab28b88cb969ba9ab24af959f4d1b178 SOURCES/grub-2.02.tar.xz
4a07b56e28741884b86da6ac91f8f9929541a1e4 SOURCES/redhatsecureboot301.cer
3f94c47f1d08bacc7cb29bdd912e286b8d2f6fcf SOURCES/redhatsecureboot502.cer
039357ef97aab3e484d1119edd4528156f5859e6 SOURCES/redhatsecureboot601.cer
e89890ca0ded2f9058651cc5fa838b78db2e6cc2 SOURCES/redhatsecureboot701.cer
cf9230e69000076727e5b784ec871d22716dc5da SOURCES/redhatsecurebootca3.cer
e6f506462069aa17d2e8610503635c20f3a995c3 SOURCES/redhatsecurebootca5.cer
cf0b7763c528902da7e8b05cfa248f20c8825ce5 SOURCES/theme.tar.bz2
87f8600ba24e521b5d20bdf6c4b71af8ae861e3a SOURCES/unifont-5.1.20080820.pcf.gz

View File

@ -1,399 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Glenn Washburn <development@efficientek.com>
Date: Tue, 8 Dec 2020 16:45:32 -0600
Subject: [PATCH] disk: Rename grub_disk_get_size() to
grub_disk_native_sectors()
The function grub_disk_get_size() is confusingly named because it actually
returns a sector count where the sectors are sized in the GRUB native sector
size. Rename to something more appropriate.
Suggested-by: Daniel Kiper <daniel.kiper@oracle.com>
Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Patrick Steinhardt <ps@pks.im>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
---
grub-core/disk/diskfilter.c | 12 ++++++------
grub-core/disk/dmraid_nvidia.c | 2 +-
grub-core/disk/efi/efidisk.c | 2 +-
grub-core/disk/geli.c | 6 +++---
grub-core/disk/ldm.c | 4 ++--
grub-core/disk/luks.c | 2 +-
grub-core/disk/mdraid1x_linux.c | 2 +-
grub-core/disk/mdraid_linux.c | 2 +-
grub-core/fs/cbfs.c | 16 ++++++++--------
grub-core/fs/nilfs2.c | 2 +-
grub-core/fs/zfs/zfs.c | 4 ++--
grub-core/kern/disk.c | 2 +-
grub-core/kern/mips/arc/init.c | 2 +-
grub-core/normal/misc.c | 6 +++---
grub-core/osdep/windows/platform.c | 2 +-
include/grub/disk.h | 4 ++--
util/grub-install.c | 2 +-
util/grub-probe.c | 2 +-
18 files changed, 37 insertions(+), 37 deletions(-)
diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c
index a881aa2c9c73..1a4c4aba56f0 100644
--- a/grub-core/disk/diskfilter.c
+++ b/grub-core/disk/diskfilter.c
@@ -149,7 +149,7 @@ scan_disk_partition_iter (grub_disk_t disk, grub_partition_t p, void *data)
if (m->disk && m->disk->id == disk->id
&& m->disk->dev->id == disk->dev->id
&& m->part_start == grub_partition_get_start (disk->partition)
- && m->part_size == grub_disk_get_size (disk))
+ && m->part_size == grub_disk_native_sectors (disk))
return 0;
}
@@ -1194,13 +1194,13 @@ insert_array (grub_disk_t disk, const struct grub_diskfilter_pv_id *id,
grub_dprintf ("diskfilter", "Inserting %s (+%lld,%lld) into %s (%s)\n", disk->name,
(unsigned long long) grub_partition_get_start (disk->partition),
- (unsigned long long) grub_disk_get_size (disk),
+ (unsigned long long) grub_disk_native_sectors (disk),
array->name, diskfilter->name);
#ifdef GRUB_UTIL
grub_util_info ("Inserting %s (+%" GRUB_HOST_PRIuLONG_LONG ",%"
GRUB_HOST_PRIuLONG_LONG ") into %s (%s)\n", disk->name,
(unsigned long long) grub_partition_get_start (disk->partition),
- (unsigned long long) grub_disk_get_size (disk),
+ (unsigned long long) grub_disk_native_sectors (disk),
array->name, diskfilter->name);
array->driver = diskfilter;
#endif
@@ -1214,7 +1214,7 @@ insert_array (grub_disk_t disk, const struct grub_diskfilter_pv_id *id,
struct grub_diskfilter_lv *lv;
/* FIXME: Check whether the update time of the superblocks are
the same. */
- if (pv->disk && grub_disk_get_size (disk) >= pv->part_size)
+ if (pv->disk && grub_disk_native_sectors (disk) >= pv->part_size)
return GRUB_ERR_NONE;
pv->disk = grub_disk_open (disk->name);
if (!pv->disk)
@@ -1223,7 +1223,7 @@ insert_array (grub_disk_t disk, const struct grub_diskfilter_pv_id *id,
raid device, we shouldn't change it. */
pv->start_sector -= pv->part_start;
pv->part_start = grub_partition_get_start (disk->partition);
- pv->part_size = grub_disk_get_size (disk);
+ pv->part_size = grub_disk_native_sectors (disk);
#ifdef GRUB_UTIL
{
@@ -1315,7 +1315,7 @@ grub_diskfilter_get_pv_from_disk (grub_disk_t disk,
if (pv->disk && pv->disk->id == disk->id
&& pv->disk->dev->id == disk->dev->id
&& pv->part_start == grub_partition_get_start (disk->partition)
- && pv->part_size == grub_disk_get_size (disk))
+ && pv->part_size == grub_disk_native_sectors (disk))
{
if (vg_out)
*vg_out = vg;
diff --git a/grub-core/disk/dmraid_nvidia.c b/grub-core/disk/dmraid_nvidia.c
index 06027912453b..4d2fb04d1265 100644
--- a/grub-core/disk/dmraid_nvidia.c
+++ b/grub-core/disk/dmraid_nvidia.c
@@ -107,7 +107,7 @@ grub_dmraid_nv_detect (grub_disk_t disk,
/* Skip partition. */
return NULL;
- sector = grub_disk_get_size (disk);
+ sector = grub_disk_native_sectors (disk);
if (sector == GRUB_DISK_SIZE_UNKNOWN)
/* Not raid. */
return NULL;
diff --git a/grub-core/disk/efi/efidisk.c b/grub-core/disk/efi/efidisk.c
index 720a23fcca63..ea8d70a8d127 100644
--- a/grub-core/disk/efi/efidisk.c
+++ b/grub-core/disk/efi/efidisk.c
@@ -871,7 +871,7 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
if (ctx.hd->partition_start == 0
&& (ctx.hd->partition_size << (parent->log_sector_size
- GRUB_DISK_SECTOR_BITS))
- == grub_disk_get_size (parent))
+ == grub_disk_native_sectors (parent))
{
dev_name = grub_strdup (parent->name);
}
diff --git a/grub-core/disk/geli.c b/grub-core/disk/geli.c
index e9d23299a538..3281b1d40482 100644
--- a/grub-core/disk/geli.c
+++ b/grub-core/disk/geli.c
@@ -258,7 +258,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
if (2 * GRUB_MD_SHA256->mdlen + 1 > GRUB_CRYPTODISK_MAX_UUID_LENGTH)
return NULL;
- sector = grub_disk_get_size (disk);
+ sector = grub_disk_native_sectors (disk);
if (sector == GRUB_DISK_SIZE_UNKNOWN || sector == 0)
return NULL;
@@ -391,7 +391,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
newdev->modname = "geli";
- newdev->total_length = grub_disk_get_size (disk) - 1;
+ newdev->total_length = grub_disk_native_sectors (disk) - 1;
grub_memcpy (newdev->uuid, uuid, sizeof (newdev->uuid));
COMPILE_TIME_ASSERT (sizeof (newdev->uuid) >= 32 * 2 + 1);
return newdev;
@@ -420,7 +420,7 @@ recover_key (grub_disk_t source, grub_cryptodisk_t dev)
if (dev->hash->mdlen > GRUB_CRYPTO_MAX_MDLEN)
return grub_error (GRUB_ERR_BUG, "mdlen is too long");
- sector = grub_disk_get_size (source);
+ sector = grub_disk_native_sectors (source);
if (sector == GRUB_DISK_SIZE_UNKNOWN || sector == 0)
return grub_error (GRUB_ERR_BUG, "not a geli");
diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c
index 1510fb35a765..6ba5d73af0f0 100644
--- a/grub-core/disk/ldm.c
+++ b/grub-core/disk/ldm.c
@@ -898,7 +898,7 @@ grub_ldm_detect (grub_disk_t disk,
/* LDM is never inside a partition. */
if (!has_ldm || disk->partition)
continue;
- sector = grub_disk_get_size (disk);
+ sector = grub_disk_native_sectors (disk);
if (sector == GRUB_DISK_SIZE_UNKNOWN)
continue;
sector--;
@@ -1015,7 +1015,7 @@ grub_util_is_ldm (grub_disk_t disk)
/* LDM is never inside a partition. */
if (!has_ldm || disk->partition)
continue;
- sector = grub_disk_get_size (disk);
+ sector = grub_disk_native_sectors (disk);
if (sector == GRUB_DISK_SIZE_UNKNOWN)
continue;
sector--;
diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c
index 18b3a8bb1d3f..ef5130c512d2 100644
--- a/grub-core/disk/luks.c
+++ b/grub-core/disk/luks.c
@@ -300,7 +300,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
newdev->essiv_hash = essiv_hash;
newdev->hash = hash;
newdev->log_sector_size = 9;
- newdev->total_length = grub_disk_get_size (disk) - newdev->offset;
+ newdev->total_length = grub_disk_native_sectors (disk) - newdev->offset;
grub_memcpy (newdev->uuid, uuid, sizeof (newdev->uuid));
newdev->modname = "luks";
COMPILE_TIME_ASSERT (sizeof (newdev->uuid) >= sizeof (uuid));
diff --git a/grub-core/disk/mdraid1x_linux.c b/grub-core/disk/mdraid1x_linux.c
index 7cc80d3df39f..2c83f99fd8ea 100644
--- a/grub-core/disk/mdraid1x_linux.c
+++ b/grub-core/disk/mdraid1x_linux.c
@@ -111,7 +111,7 @@ grub_mdraid_detect (grub_disk_t disk,
grub_uint64_t size;
grub_uint8_t minor_version;
- size = grub_disk_get_size (disk);
+ size = grub_disk_native_sectors (disk);
/* Check for an 1.x superblock.
* It's always aligned to a 4K boundary
diff --git a/grub-core/disk/mdraid_linux.c b/grub-core/disk/mdraid_linux.c
index 11024ae31e06..e40216f51117 100644
--- a/grub-core/disk/mdraid_linux.c
+++ b/grub-core/disk/mdraid_linux.c
@@ -190,7 +190,7 @@ grub_mdraid_detect (grub_disk_t disk,
struct grub_diskfilter_vg *ret;
/* The sector where the mdraid 0.90 superblock is stored, if available. */
- size = grub_disk_get_size (disk);
+ size = grub_disk_native_sectors (disk);
if (size == GRUB_DISK_SIZE_UNKNOWN)
/* not 0.9x raid. */
return NULL;
diff --git a/grub-core/fs/cbfs.c b/grub-core/fs/cbfs.c
index c82980375c83..8f02425d9b52 100644
--- a/grub-core/fs/cbfs.c
+++ b/grub-core/fs/cbfs.c
@@ -149,16 +149,16 @@ grub_cbfs_mount (grub_disk_t disk)
grub_off_t header_off;
struct cbfs_header head;
- if (grub_disk_get_size (disk) == GRUB_DISK_SIZE_UNKNOWN)
+ if (grub_disk_native_sectors (disk) == GRUB_DISK_SIZE_UNKNOWN)
goto fail;
- if (grub_disk_read (disk, grub_disk_get_size (disk) - 1,
+ if (grub_disk_read (disk, grub_disk_native_sectors (disk) - 1,
GRUB_DISK_SECTOR_SIZE - sizeof (ptr),
sizeof (ptr), &ptr))
goto fail;
ptr = grub_cpu_to_le32 (ptr);
- header_off = (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS)
+ header_off = (grub_disk_native_sectors (disk) << GRUB_DISK_SECTOR_BITS)
+ (grub_int32_t) ptr;
if (grub_disk_read (disk, 0, header_off,
@@ -172,16 +172,16 @@ grub_cbfs_mount (grub_disk_t disk)
if (!data)
goto fail;
- data->cbfs_start = (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS)
+ data->cbfs_start = (grub_disk_native_sectors (disk) << GRUB_DISK_SECTOR_BITS)
- (grub_be_to_cpu32 (head.romsize) - grub_be_to_cpu32 (head.offset));
- data->cbfs_end = (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS)
+ data->cbfs_end = (grub_disk_native_sectors (disk) << GRUB_DISK_SECTOR_BITS)
- grub_be_to_cpu32 (head.bootblocksize);
data->cbfs_align = grub_be_to_cpu32 (head.align);
- if (data->cbfs_start >= (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS))
+ if (data->cbfs_start >= (grub_disk_native_sectors (disk) << GRUB_DISK_SECTOR_BITS))
goto fail;
- if (data->cbfs_end > (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS))
- data->cbfs_end = (grub_disk_get_size (disk) << GRUB_DISK_SECTOR_BITS);
+ if (data->cbfs_end > (grub_disk_native_sectors (disk) << GRUB_DISK_SECTOR_BITS))
+ data->cbfs_end = (grub_disk_native_sectors (disk) << GRUB_DISK_SECTOR_BITS);
data->next_hofs = data->cbfs_start;
diff --git a/grub-core/fs/nilfs2.c b/grub-core/fs/nilfs2.c
index 6aaa5b9390f1..fdcd23272335 100644
--- a/grub-core/fs/nilfs2.c
+++ b/grub-core/fs/nilfs2.c
@@ -772,7 +772,7 @@ grub_nilfs2_load_sb (struct grub_nilfs2_data *data)
partition_size = (grub_le_to_cpu64 (data->sblock.s_dev_size)
>> GRUB_DISK_SECTOR_BITS);
else
- partition_size = grub_disk_get_size (disk);
+ partition_size = grub_disk_native_sectors (disk);
if (partition_size != GRUB_DISK_SIZE_UNKNOWN)
{
/* Read second super block. */
diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c
index de6e26fb4336..738dd5065905 100644
--- a/grub-core/fs/zfs/zfs.c
+++ b/grub-core/fs/zfs/zfs.c
@@ -1179,7 +1179,7 @@ scan_disk (grub_device_t dev, struct grub_zfs_data *data,
desc.original = original;
/* Don't check back labels on CDROM. */
- if (grub_disk_get_size (dev->disk) == GRUB_DISK_SIZE_UNKNOWN)
+ if (grub_disk_native_sectors (dev->disk) == GRUB_DISK_SIZE_UNKNOWN)
vdevnum = VDEV_LABELS / 2;
for (label = 0; ubbest == NULL && label < vdevnum; label++)
@@ -1188,7 +1188,7 @@ scan_disk (grub_device_t dev, struct grub_zfs_data *data,
= label * (sizeof (vdev_label_t) >> SPA_MINBLOCKSHIFT)
+ ((VDEV_SKIP_SIZE + VDEV_BOOT_HEADER_SIZE) >> SPA_MINBLOCKSHIFT)
+ (label < VDEV_LABELS / 2 ? 0 :
- ALIGN_DOWN (grub_disk_get_size (dev->disk), sizeof (vdev_label_t))
+ ALIGN_DOWN (grub_disk_native_sectors (dev->disk), sizeof (vdev_label_t))
- VDEV_LABELS * (sizeof (vdev_label_t) >> SPA_MINBLOCKSHIFT));
/* Read in the uberblock ring (128K). */
diff --git a/grub-core/kern/disk.c b/grub-core/kern/disk.c
index 62d6a85cc28c..e26b61f69b8a 100644
--- a/grub-core/kern/disk.c
+++ b/grub-core/kern/disk.c
@@ -550,7 +550,7 @@ grub_disk_read (grub_disk_t disk, grub_disk_addr_t sector,
}
grub_uint64_t
-grub_disk_get_size (grub_disk_t disk)
+grub_disk_native_sectors (grub_disk_t disk)
{
if (disk->partition)
return grub_partition_get_len (disk->partition);
diff --git a/grub-core/kern/mips/arc/init.c b/grub-core/kern/mips/arc/init.c
index 86b3a25ec403..5c40c34078d5 100644
--- a/grub-core/kern/mips/arc/init.c
+++ b/grub-core/kern/mips/arc/init.c
@@ -430,7 +430,7 @@ grub_machine_get_bootlocation (char **device, char **path)
}
if (poff == 0
- && pend == grub_disk_get_size (parent))
+ && pend == grub_disk_native_sectors (parent))
{
grub_disk_close (parent);
*device = dname;
diff --git a/grub-core/normal/misc.c b/grub-core/normal/misc.c
index 38f91b9b9837..ae63d1ebacc3 100644
--- a/grub-core/normal/misc.c
+++ b/grub-core/normal/misc.c
@@ -176,14 +176,14 @@ grub_normal_print_device_info (const char *name)
(grub_partition_get_start (dev->disk->partition) & 1) ? ".5" : "" );
else
grub_printf_ (N_(" - Sector size %uB"), 1 << dev->disk->log_sector_size);
- if (grub_disk_get_size (dev->disk) == GRUB_DISK_SIZE_UNKNOWN)
+ if (grub_disk_native_sectors (dev->disk) == GRUB_DISK_SIZE_UNKNOWN)
grub_puts_ (N_(" - Total size unknown"));
else
grub_printf (_(" - Total size %llu%sKiB"),
- (unsigned long long) (grub_disk_get_size (dev->disk) >> 1),
+ (unsigned long long) (grub_disk_native_sectors (dev->disk) >> 1),
/* TRANSLATORS: Replace dot with appropriate decimal separator for
your language. */
- (grub_disk_get_size (dev->disk) & 1) ? _(".5") : "");
+ (grub_disk_native_sectors (dev->disk) & 1) ? _(".5") : "");
}
if (dev)
diff --git a/grub-core/osdep/windows/platform.c b/grub-core/osdep/windows/platform.c
index 04e0eda9aeb9..0cb9d1b7d007 100644
--- a/grub-core/osdep/windows/platform.c
+++ b/grub-core/osdep/windows/platform.c
@@ -371,7 +371,7 @@ grub_install_register_efi (grub_device_t efidir_grub_dev,
hddp->partition_start = grub_partition_get_start (efidir_grub_dev->disk->partition)
>> (efidir_grub_dev->disk->log_sector_size - GRUB_DISK_SECTOR_BITS);
- hddp->partition_size = grub_disk_get_size (efidir_grub_dev->disk)
+ hddp->partition_size = grub_disk_native_sectors (efidir_grub_dev->disk)
>> (efidir_grub_dev->disk->log_sector_size - GRUB_DISK_SECTOR_BITS);
pathptr = hddp + 1;
diff --git a/include/grub/disk.h b/include/grub/disk.h
index b385af826fc4..0e0c4f430497 100644
--- a/include/grub/disk.h
+++ b/include/grub/disk.h
@@ -170,7 +170,7 @@ typedef struct grub_disk_memberlist *grub_disk_memberlist_t;
#define GRUB_DISK_MAX_MAX_AGGLOMERATE ((1 << (30 - GRUB_DISK_CACHE_BITS - GRUB_DISK_SECTOR_BITS)) - 1)
-/* Return value of grub_disk_get_size() in case disk size is unknown. */
+/* Return value of grub_disk_native_sectors() in case disk size is unknown. */
#define GRUB_DISK_SIZE_UNKNOWN 0xffffffffffffffffULL
/* This is called from the memory manager. */
@@ -211,7 +211,7 @@ extern grub_err_t (*EXPORT_VAR(grub_disk_write_weak)) (grub_disk_t disk,
const void *buf);
-grub_uint64_t EXPORT_FUNC(grub_disk_get_size) (grub_disk_t disk);
+grub_uint64_t EXPORT_FUNC(grub_disk_native_sectors) (grub_disk_t disk);
#if DISK_CACHE_STATS
void
diff --git a/util/grub-install.c b/util/grub-install.c
index 65bb2f99ef1f..eb49a36c5fba 100644
--- a/util/grub-install.c
+++ b/util/grub-install.c
@@ -737,7 +737,7 @@ is_prep_empty (grub_device_t dev)
grub_disk_addr_t dsize, addr;
grub_uint32_t buffer[32768];
- dsize = grub_disk_get_size (dev->disk);
+ dsize = grub_disk_native_sectors (dev->disk);
for (addr = 0; addr < dsize;
addr += sizeof (buffer) / GRUB_DISK_SECTOR_SIZE)
{
diff --git a/util/grub-probe.c b/util/grub-probe.c
index 2a8c2cdffd50..e2e45e16a15e 100644
--- a/util/grub-probe.c
+++ b/util/grub-probe.c
@@ -398,7 +398,7 @@ probe (const char *path, char **device_names, char delim)
if (! dev || !dev->disk)
grub_util_error ("%s", grub_errmsg);
- dsize = grub_disk_get_size (dev->disk);
+ dsize = grub_disk_native_sectors (dev->disk);
for (addr = 0; addr < dsize;
addr += sizeof (buffer) / GRUB_DISK_SECTOR_SIZE)
{

View File

@ -1,45 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Glenn Washburn <development@efficientek.com>
Date: Mon, 23 Nov 2020 03:27:42 -0600
Subject: [PATCH] fs: Fix block lists not being able to address to end of disk
sometimes
When checking if a block list goes past the end of the disk, make sure
the total size of the disk is in GRUB native sector sizes, otherwise there
will be blocks at the end of the disk inaccessible by block lists.
Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
---
grub-core/kern/fs.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/grub-core/kern/fs.c b/grub-core/kern/fs.c
index 730d21770f2b..84d2f14fb88a 100644
--- a/grub-core/kern/fs.c
+++ b/grub-core/kern/fs.c
@@ -139,6 +139,7 @@ grub_fs_blocklist_open (grub_file_t file, const char *name)
unsigned i;
grub_disk_t disk = file->device->disk;
struct grub_fs_block *blocks;
+ grub_size_t max_sectors;
/* First, count the number of blocks. */
do
@@ -156,6 +157,7 @@ grub_fs_blocklist_open (grub_file_t file, const char *name)
return 0;
file->size = 0;
+ max_sectors = grub_disk_from_native_sector (disk, disk->total_sectors);
p = (char *) name;
for (i = 0; i < num; i++)
{
@@ -181,7 +183,7 @@ grub_fs_blocklist_open (grub_file_t file, const char *name)
goto fail;
}
- if (disk->total_sectors < blocks[i].offset + blocks[i].length)
+ if (max_sectors < blocks[i].offset + blocks[i].length)
{
grub_error (GRUB_ERR_BAD_FILENAME, "beyond the total sectors");
goto fail;

View File

@ -1,70 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Mukesh Kumar Chaurasiya <mchauras@linux.vnet.ibm.com>
Date: Thu, 9 Feb 2023 13:09:16 +0530
Subject: [PATCH] osdep/linux/hostdisk: Modify sector by sysfs as disk sector
The disk sector size provided by sysfs file system considers the sector
size of 512 irrespective of disk sector size, thus causing the read by
the GRUB to an incorrect offset from what was originally intended.
Considering the 512 sector size of sysfs data the actual sector needs to
be modified corresponding to disk sector size.
Signed-off-by: Mukesh Kumar Chaurasiya <mchauras@linux.vnet.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
(cherry picked from commit f7564844f82b57078d601befadc438b5bc1fa01b)
---
grub-core/osdep/linux/hostdisk.c | 7 ++++---
include/grub/disk.h | 7 +++++++
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/grub-core/osdep/linux/hostdisk.c b/grub-core/osdep/linux/hostdisk.c
index 06179fca7258..9b3030765b1f 100644
--- a/grub-core/osdep/linux/hostdisk.c
+++ b/grub-core/osdep/linux/hostdisk.c
@@ -240,7 +240,8 @@ have_devfs (void)
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
static int
-grub_hostdisk_linux_find_partition (char *dev, grub_disk_addr_t sector)
+grub_hostdisk_linux_find_partition (const grub_disk_t disk, char *dev,
+ grub_disk_addr_t sector)
{
size_t len = strlen (dev);
const char *format;
@@ -305,7 +306,7 @@ grub_hostdisk_linux_find_partition (char *dev, grub_disk_addr_t sector)
if (fstat (fd, &st) < 0
|| !grub_util_device_is_mapped_stat (&st)
|| !grub_util_get_dm_node_linear_info (st.st_rdev, 0, 0, &start))
- start = grub_util_find_partition_start_os (real_dev);
+ start = grub_disk_to_native_sector (disk, grub_util_find_partition_start_os (real_dev));
/* We don't care about errors here. */
grub_errno = GRUB_ERR_NONE;
@@ -382,7 +383,7 @@ grub_util_fd_open_device (const grub_disk_t disk, grub_disk_addr_t sector, int f
&& strncmp (dev, "/dev/", 5) == 0)
{
if (sector >= part_start)
- is_partition = grub_hostdisk_linux_find_partition (dev, part_start);
+ is_partition = grub_hostdisk_linux_find_partition (disk, dev, part_start);
else
*max = part_start - sector;
}
diff --git a/include/grub/disk.h b/include/grub/disk.h
index 0e0c4f430497..4d3c2e571ef8 100644
--- a/include/grub/disk.h
+++ b/include/grub/disk.h
@@ -173,6 +173,13 @@ typedef struct grub_disk_memberlist *grub_disk_memberlist_t;
/* Return value of grub_disk_native_sectors() in case disk size is unknown. */
#define GRUB_DISK_SIZE_UNKNOWN 0xffffffffffffffffULL
+/* Convert from GRUB native disk sized sector to disk sized sector. */
+static inline grub_disk_addr_t
+grub_disk_to_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);

View File

@ -1,67 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Glenn Washburn <development@efficientek.com>
Date: Mon, 7 Sep 2020 17:27:59 +0200
Subject: [PATCH] cryptodisk: Fix incorrect calculation of start sector
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>
Reviewed-by: Patrick Steinhardt <ps@pks.im>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.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 871640685d73..f4fd59095f6c 100644
--- a/grub-core/disk/cryptodisk.c
+++ b/grub-core/disk/cryptodisk.c
@@ -597,9 +597,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);
@@ -656,12 +655,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 4d3c2e571ef8..0091fbca181c 100644
--- a/include/grub/disk.h
+++ b/include/grub/disk.h
@@ -180,6 +180,13 @@ grub_disk_to_native_sector (grub_disk_t disk, grub_disk_addr_t sector)
return sector >> (disk->log_sector_size - GRUB_DISK_SECTOR_BITS);
}
+/* 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);

Some files were not shown because too many files have changed in this diff Show More