grub-devel
[Top][All Lists]
Advanced

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

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


From: Pierre-Louis Bonicoli
Subject: [PATCH 1/3] grub-fs-tester: add luks1 and luks2 support
Date: Thu, 3 Feb 2022 18:21:03 +0100

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

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 "$@";;
+    *)
+       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
+                   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
+                   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
+                   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`;;
+               *)
+                   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) ;;
-- 
2.34.1




reply via email to

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