grub-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 1/3] grub-fs-tester: add luks1 and luks2 support


From: Glenn Washburn
Subject: Re: [PATCH 1/3] grub-fs-tester: add luks1 and luks2 support
Date: Wed, 9 Feb 2022 00:20:23 -0600

On Thu,  3 Feb 2022 18:21:03 +0100
Pierre-Louis Bonicoli <pierre-louis.bonicoli@libregerbil.fr> wrote:

> The logical sector size used by LUKS1 is 512 bytes. LUKS2 uses 512 to
> 4069 bytes.

I like that this has been added here. However there's no test that
actually runs this new code. Please add another two fs tests one for
LUKS and one for LUKS2.

> 
> Signed-off-by: Pierre-Louis Bonicoli <pierre-louis.bonicoli@libregerbil.fr>
> ---
>  tests/util/grub-fs-tester.in | 58 ++++++++++++++++++++++++++++++++++--
>  1 file changed, 55 insertions(+), 3 deletions(-)
> 
> diff --git a/tests/util/grub-fs-tester.in b/tests/util/grub-fs-tester.in
> index aa72b2174..7ed275fd0 100644
> --- a/tests/util/grub-fs-tester.in
> +++ b/tests/util/grub-fs-tester.in
> @@ -15,7 +15,12 @@ XORRISOFS_CHARSET="-input-charset UTF-8 -output-charset 
> UTF-8"
>  
>  # This wrapper is to ease insertion of valgrind or time statistics
>  run_it () {
> -    LC_ALL=C "$GRUBFSTEST" "$@"
> +    case x"$fs" in
> +    xluks*)
> +     LC_ALL=C echo -n pass | "$GRUBFSTEST" -C "$@";;

Why do this here instead of leaving this function alone and doing the
pipe and -C arg below when calling run_grubfstest?

> +    *)
> +     LC_ALL=C "$GRUBFSTEST" "$@";;
> +    esac
>  }
>  
>  range() {
> @@ -48,6 +53,8 @@ run_grubfstest () {
>  MINLOGSECSIZE=9
>  MAXLOGSECSIZE=9
>  case x"$fs" in
> +    xluks2*)
> +     MAXLOGSECSIZE=12;;
>      xntfs*)
>       MINLOGSECSIZE=8
>       MAXLOGSECSIZE=12;;
> @@ -335,7 +342,7 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" 
> "$MAXLOGSECSIZE" 1); do
>                   #FSLABEL="g;/_é莭莽😁кит u"
>                   ;;
>           # FS LIMITATION: reiserfs, extN and jfs label is at most 16 UTF-8 
> characters
> -             x"reiserfs_old" | x"reiserfs" | x"ext"* | x"lvm"* | x"mdraid"* 
> | x"jfs" | x"jfs_caseins")
> +             x"reiserfs_old" | x"reiserfs" | x"ext"* | x"lvm"* | x"luks"* | 
> x"mdraid"* | x"jfs" | x"jfs_caseins")
>                   FSLABEL="g;/éт 莭😁";;
>              # FS LIMITATION: No underscore, space, semicolon, slash or 
> international characters in UFS* in label. Limited to 32 UTF-8 characters
>               x"ufs1" | x"ufs1_sun" | x"ufs2")
> @@ -804,6 +811,12 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" 
> "$MAXLOGSECSIZE" 1); do
>                   MOUNTDEVICE="/dev/mapper/grub_test-testvol"
>                   MOUNTFS=ext2
>                   "mkfs.ext2" -L "$FSLABEL" -q "${MOUNTDEVICE}"  ;;
> +             x"luks"*)
> +                 echo -n pass | cryptsetup luksFormat --type $fs 
> --sector-size $SECSIZE --pbkdf pbkdf2 $LODEVICE
> +                 echo -n pass | cryptsetup open $LODEVICE grub_luks_test
> +                 MOUNTDEVICE="/dev/mapper/grub_luks_test"
> +                 MOUNTFS=ext2
> +                 "mkfs.ext2" -L "$FSLABEL" -q "${MOUNTDEVICE}"  ;;
>               xf2fs)
>                   "mkfs.f2fs" -l "$FSLABEL" -q "${MOUNTDEVICE}" ;;
>               xnilfs2)
> @@ -916,6 +929,20 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" 
> "$MAXLOGSECSIZE" 1); do
>                   GRUBDEVICE="mduuid/`mdadm --detail --export $MOUNTDEVICE | 
> grep MD_UUID=|sed 's,MD_UUID=,,g;s,:,,g'`";;
>               xlvm*)
>                   GRUBDEVICE="lvm/grub_test-testvol";;
> +             xluks*)
> +                 if test x"$fs" = xluks2 && ! (cryptsetup luksDump 
> --dump-json-metadata $LODEVICE | grep "\"sector_size\":$SECSIZE"); then
> +                         echo "Unexpected sector size for $LODEVICE 
> (expected: $SECSIZE)"
> +                         exit 1
> +                 fi
> +
> +                 uuid=$(cryptsetup luksUUID $LODEVICE | tr -d '-')
> +                 probe_uuid=$(@builddir@/grub-probe --device $MOUNTDEVICE 
> --target=cryptodisk_uuid)
> +                 if [ x"$uuid" != x"$probe_uuid" ]; then
> +                     echo "$fs probe command FAIL"
> +                     exit 1
> +                 fi
> +                 GRUBDEVICE="cryptouuid/${uuid}"
> +                 ;;
>           esac
>           GRUBDIR="($GRUBDEVICE)"
>           case x"$fs" in
> @@ -1071,6 +1098,18 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" 
> "$MAXLOGSECSIZE" 1); do
>                   sleep 1
>                   vgchange -a n grub_test
>                   ;;
> +             xluks*)
> +                     sleep 1

Bad indention. Why is this sleep desirable if there's a sleep in the
loop below?

> +                 for try in $(range 0 20 1); do
> +                     if umount "$MNTPOINTRW" ; then
> +                         break;
> +                     fi
> +                     sleep 1;
> +                 done
> +                 UMOUNT_TIME=$(date -u "+%Y-%m-%d %H:%M:%S")
> +                 sleep 1

Why sleeping here again? We already slept in the loop above. We need
more time?

> +                 cryptsetup close grub_luks_test
> +                 ;;
>               xmdraid*)
>                   sleep 1
>                   for try in $(range 0 20 1); do
> @@ -1117,6 +1156,10 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" 
> "$MAXLOGSECSIZE" 1); do
>                   vgchange -a y grub_test
>                   sleep 1
>                   mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o 
> ${MOUNTOPTS}${SELINUXOPTS}ro ;;
> +             xluks*)
> +                 echo -n pass | cryptsetup open $LODEVICE grub_luks_test
> +                 sleep 1

Is this sleep really needed? Seems like you're trying to avoid a race,
but is the dm device ever never fully setup after cryptsetup returns?

> +                 mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o 
> ${MOUNTOPTS}${SELINUXOPTS}ro ;;
>               xmdraid*)
>                   mdadm --assemble /dev/md/"${fs}_$NDEVICES" $LODEVICES
>                   sleep 1
> @@ -1281,7 +1324,12 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" 
> "$MAXLOGSECSIZE" 1); do
>               exit 1
>           fi
>  
> -         LSOUT=`run_grubfstest ls -- -l "($GRUBDEVICE)"`
> +         case x"$fs" in
> +             x"luks"*)
> +                 LSOUT=`run_grubfstest ls -- -l "($GRUBDEVICE)"|tail -n 1`;;

Here is where I'm think if would be better to do the pipe and add -C.
And why is this tail needed?

> +             *)
> +                 LSOUT=`run_grubfstest ls -- -l "($GRUBDEVICE)"`;;
> +         esac
>           if [ x"$NOFSLABEL" = xy ]; then
>               :
>           elif echo "$LSOUT" | grep -F "Label \`$FSLABEL'" > /dev/null; then
> @@ -1558,6 +1606,10 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" 
> "$MAXLOGSECSIZE" 1); do
>                   vgchange -a n grub_test
>                   sleep 1
>                   ;;
> +             xluks*)
> +                 cryptsetup close grub_luks_test
> +                 sleep 1
> +                 ;;
>           esac
>           case x"$fs" in
>               x"tarfs" | x"cpio_"* | x"iso9660" | xrockridge | xjoliet | 
> xrockridge_joliet | x"ziso9660" | x"romfs" | x"squash4_"* | x"iso9660_1999" | 
> xrockridge_1999 | xjoliet_1999 | xrockridge_joliet_1999) ;;

Glenn



reply via email to

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