grub-devel
[Top][All Lists]
Advanced

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

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


From: Pierre-Louis Bonicoli
Subject: [PATCH v2 1/3] grub-fs-tester: add luks1 and luks2 support
Date: Tue, 29 Mar 2022 12:31:56 +0200

The logical sector size used by LUKS1 is 512 bytes. LUKS2 uses 512 to
4069 bytes.
---
 .gitignore                   |  2 ++
 Makefile.util.def            | 12 ++++++++++
 tests/luks2_test.in          | 23 ++++++++++++++++++
 tests/luks_test.in           | 23 ++++++++++++++++++
 tests/util/grub-fs-tester.in | 46 ++++++++++++++++++++++++++++++++++--
 5 files changed, 104 insertions(+), 2 deletions(-)
 create mode 100644 tests/luks2_test.in
 create mode 100644 tests/luks_test.in

diff --git a/.gitignore b/.gitignore
index f6a1bd051..9f91f4cf4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -230,6 +230,8 @@ widthspec.bin
 /lib/libgcrypt-grub
 /libgrub_a_init.c
 /lzocompress_test
+/luks_test
+/luks2_test
 /m4/
 /minixfs_test
 /missing
diff --git a/Makefile.util.def b/Makefile.util.def
index d919c562c..a910faa4c 100644
--- a/Makefile.util.def
+++ b/Makefile.util.def
@@ -1213,6 +1213,18 @@ script = {
   common = tests/syslinux_test.in;
 };
 
+script = {
+  testcase = native;
+  name = luks_test;
+  common = tests/luks_test.in;
+};
+
+script = {
+  testcase = native;
+  name = luks2_test;
+  common = tests/luks2_test.in;
+};
+
 program = {
   testcase = native;
   name = example_unit_test;
diff --git a/tests/luks2_test.in b/tests/luks2_test.in
new file mode 100644
index 000000000..6a26ba626
--- /dev/null
+++ b/tests/luks2_test.in
@@ -0,0 +1,23 @@
+#!@BUILD_SHEBANG@
+
+set -e
+
+if [ "x$EUID" = "x" ] ; then
+  EUID=`id -u`
+fi
+
+if [ "$EUID" != 0 ] ; then
+   exit 99
+fi
+
+if ! which mkfs.ext2 >/dev/null 2>&1; then
+   echo "mkfs.ext2 not installed; cannot test luks2."
+   exit 99
+fi
+
+if ! which cryptsetup >/dev/null 2>&1; then
+   echo "cryptsetup not installed; cannot test luks2."
+   exit 99
+fi
+
+"@builddir@/grub-fs-tester" luks2
diff --git a/tests/luks_test.in b/tests/luks_test.in
new file mode 100644
index 000000000..1b155e29f
--- /dev/null
+++ b/tests/luks_test.in
@@ -0,0 +1,23 @@
+#!@BUILD_SHEBANG@
+
+set -e
+
+if [ "x$EUID" = "x" ] ; then
+  EUID=`id -u`
+fi
+
+if [ "$EUID" != 0 ] ; then
+   exit 99
+fi
+
+if ! which mkfs.ext2 >/dev/null 2>&1; then
+   echo "mkfs.ext2 not installed; cannot test luks."
+   exit 99
+fi
+
+if ! which cryptsetup >/dev/null 2>&1; then
+   echo "cryptsetup not installed; cannot test luks."
+   exit 99
+fi
+
+"@builddir@/grub-fs-tester" luks
diff --git a/tests/util/grub-fs-tester.in b/tests/util/grub-fs-tester.in
index 65633c7f8..709927f5c 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 -q "\"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,15 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" 
"$MAXLOGSECSIZE" 1); do
                    sleep 1
                    vgchange -a n grub_test
                    ;;
+               xluks*)
+                   for try in $(range 0 20 1); do
+                       if umount "$MNTPOINTRW" ; then
+                           break;
+                       fi
+                   done
+                   UMOUNT_TIME=$(date -u "+%Y-%m-%d %H:%M:%S")
+                   cryptsetup close grub_luks_test
+                   ;;
                xmdraid*)
                    sleep 1
                    for try in $(range 0 20 1); do
@@ -1117,6 +1153,9 @@ 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
+                   mount -t "$MOUNTFS" "${MOUNTDEVICE}" "$MNTPOINTRO" -o 
${MOUNTOPTS}${SELINUXOPTS}ro ;;
                xmdraid*)
                    mdadm --assemble /dev/md/"${fs}_$NDEVICES" $LODEVICES
                    sleep 1
@@ -1558,6 +1597,9 @@ for LOGSECSIZE in $(range "$MINLOGSECSIZE" 
"$MAXLOGSECSIZE" 1); do
                    vgchange -a n grub_test
                    sleep 1
                    ;;
+               xluks*)
+                   cryptsetup close grub_luks_test
+                   ;;
            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.35.1




reply via email to

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