grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] grub_diskfilter_memberlist: recurse into lv nodes.


From: Patrick Plenefisch
Subject: Re: [PATCH] grub_diskfilter_memberlist: recurse into lv nodes.
Date: Sun, 14 Apr 2024 16:01:13 -0400

This may have some interaction with my pending LVM patches from
January & Febuary for a superficially similar issue on complex lv's.

My original patch:
https://lists.gnu.org/archive/html/grub-devel/2024-01/msg00110.html
Github branch with split patches:
https://github.com/byteit101/grub2/tree/grub-lvmintegrity

Patrick

On Sun, Apr 14, 2024 at 7:05 AM GUO Yixuan <culu.gyx@gmail.com> wrote:
>
> From: Yixuan Guo <gyx@google.com>
>
> This applies to lvm2 LVs with redundancy, which use internal LVs, so it's
> necessary to go into seg->nodes[j].lv to find the underlying PV.
>
> Example of a raid1 LV and its internal LVs, created with lvm2.
>
> ├─vdb3                        254:19   0  9.3G  0 part
> │ └─vdb3_crypt                253:3    0  9.3G  0 crypt
> │   ├─crypt--vg-root_rmeta_0  253:11   0    4M  0 lvm
> │   │ └─crypt--vg-root        253:15   0    1G  0 lvm
> │   └─crypt--vg-root_rimage_0 253:12   0    1G  0 lvm
> │     └─crypt--vg-root        253:15   0    1G  0 lvm
> ├─vdb4                        254:20   0  9.3G  0 part
> │ └─vdb4_crypt                253:4    0  9.3G  0 crypt
> │   ├─crypt--vg-root_rmeta_1  253:13   0    4M  0 lvm
> │   │ └─crypt--vg-root        253:15   0    1G  0 lvm
> │   └─crypt--vg-root_rimage_1 253:14   0    1G  0 lvm
> │     └─crypt--vg-root        253:15   0    1G  0 lvm
>
> Currently, grub-probe returns incomplete results for these LVs if their PVs
> are encrypted:
> $ grub-probe -t abstraction -d /dev/crypt-vg/root
> lvm
>
> This patch allows grub-probe to detect the underlying cryptodisk correctly:
> $ ./grub-probe -t abstraction -d /dev/crypt-vg/root
> cryptodisk
> luks2
> gcry_rijndael
> gcry_rijndael
> gcry_sha256
> cryptodisk
> luks2
> gcry_rijndael
> gcry_rijndael
> gcry_sha256
> lvm
>
> Signed-off-by: Yixuan Guo <gyx@google.com>
> ---
>  grub-core/disk/diskfilter.c | 24 ++++++++++++++++++++++--
>  1 file changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c
> index 21e239511..6c24cabce 100644
> --- a/grub-core/disk/diskfilter.c
> +++ b/grub-core/disk/diskfilter.c
> @@ -291,9 +291,8 @@ grub_diskfilter_iterate (grub_disk_dev_iterate_hook_t 
> hook, void *hook_data,
>
>  #ifdef GRUB_UTIL
>  static grub_disk_memberlist_t
> -grub_diskfilter_memberlist (grub_disk_t disk)
> +grub_diskfilter_memberlist_lv (struct grub_diskfilter_lv *lv)
>  {
> -  struct grub_diskfilter_lv *lv = disk->data;
>    grub_disk_memberlist_t list = NULL, tmp;
>    struct grub_diskfilter_pv *pv;
>    grub_disk_pull_t pull;
> @@ -367,6 +366,20 @@ grub_diskfilter_memberlist (grub_disk_t disk)
>           tmp->next = list;
>           list = tmp;
>         }
> +      else if (seg->nodes[j].lv != NULL)
> +       {
> +         tmp = grub_diskfilter_memberlist_lv(seg->nodes[j].lv);
> +         if (tmp == NULL)
> +           goto fail;
> +         if (list != NULL)
> +           {
> +             grub_disk_memberlist_t tail = tmp;
> +             while (tail->next != NULL)
> +               tail = tail->next;
> +             tail->next = list;
> +           }
> +         list = tmp;
> +       }
>
>    return list;
>
> @@ -381,6 +394,13 @@ grub_diskfilter_memberlist (grub_disk_t disk)
>    return NULL;
>  }
>
> +static grub_disk_memberlist_t
> +grub_diskfilter_memberlist (grub_disk_t disk)
> +{
> +  struct grub_diskfilter_lv *lv = disk->data;
> +  return grub_diskfilter_memberlist_lv(lv);
> +}
> +
>  void
>  grub_diskfilter_get_partmap (grub_disk_t disk,
>                              void (*cb) (const char *pm, void *data),
> --
> 2.43.0
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel



reply via email to

[Prev in Thread] Current Thread [Next in Thread]