Le jeu. 8 mai 2025, 20:04, Daniel Kiper via Grub-devel <grub-devel@gnu.org> a écrit :
> From: Maxim Suhanov <dfirb...@gmail.com> > > When the --cryptodisk-only argument is given, also check the target > device using the "cryptocheck" command, if available. > > This extends the checks to common layouts like LVM-on-LUKS, so the > --cryptodisk-only argument transparently handles such setups. > > Signed-off-by: Maxim Suhanov <dfirb...@gmail.com> > Reviewed-by: Daniel Kiper <daniel.ki...@oracle.com> > --- > grub-core/commands/search.c | 32 +++++++++++++++++++++++++++++++- > 1 file changed, 31 insertions(+), 1 deletion(-) > > diff --git a/grub-core/commands/search.c b/grub-core/commands/search.c > index f6bfef958..185c1e70f 100644 > --- a/grub-core/commands/search.c > +++ b/grub-core/commands/search.c > @@ -54,6 +54,36 @@ struct search_ctx > int is_cache; > }; > > +static bool > +is_unencrypted_disk (grub_disk_t disk) > +{ > + grub_command_t cmd; > + char *disk_str; > + int disk_str_len; > + int res; > + > + if (disk->dev->id == GRUB_DISK_DEVICE_CRYPTODISK_ID) > + return false; /* This is (crypto) disk. */ > + > + if (disk->dev->id == GRUB_DISK_DEVICE_DISKFILTER_ID) > + { > + cmd = grub_command_find ("cryptocheck"); > I would prefer not to go through command parser but instead define a function for crypto check. + return true; > + > + disk_str_len = grub_strlen (disk->name) + 2 + 1; > + disk_str = grub_malloc (disk_str_len); > + if (disk_str == NULL) /* Something is wrong, better report as > unencrypted. */ > You need to properly handle the error. Either reset grub_errno or to return an error to upper layer (preferred). > + return true; > + > + grub_snprintf (disk_str, disk_str_len, "(%s)", disk->name); > + res = cmd->func (cmd, 1, &disk_str); > + grub_free (disk_str); > + return (res != GRUB_ERR_NONE) ? true : false; /* GRUB_ERR_NONE for > encrypted. */ > + } > + return true; > +} > + > /* Helper for FUNC_NAME. */ > static int > iterate_device (const char *name, void *data) > @@ -97,7 +127,7 @@ iterate_device (const char *name, void *data) > grub_errno = GRUB_ERR_NONE; > return 0; > } > - if (dev->disk == NULL || dev->disk->dev->id != > GRUB_DISK_DEVICE_CRYPTODISK_ID) > + if (dev->disk == NULL || is_unencrypted_disk (dev->disk) == true) > { > grub_device_close (dev); > grub_errno = GRUB_ERR_NONE; > -- > 2.11.0 > > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel >
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel