mount + cryptsetup

Szymon Siwek sls w poczta.wp.pl
Śro, 12 Lip 2006, 21:53:51 CEST


Witam!

Natknąłem się na problem z zamontowaniem zaszyfrowanego pliku.

#v+
mount -o encryption=somecipher,loop somefile /mnt/somedir
#v-

rzuca takim tekstem:

#v+
mount: wrong fs type, bad option, bad superblock on
/dev/mapper/loop-0-crypt,
       missing codepage or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
#v-

device-mapper-1.01.05-2
cryptsetup-0.2-1.pre1.8.1
mount-2.12r-4
kernel-2.6.16.21-1

Śledztwo wykazało, że do systemowej funkcji mount przekazywana jest flaga
MS_CRYPT, a jądro tego nie łyka. Poprawka załączona.

Jeszcze zabawniej jest z najnowszym device-mapperem (1.02.07-0.17).
mount oraz cryptsetup wywoływany bezpośrednio segfaultuje. Poprawka (albo
hack) również załączona.

P.S.
Nie gwarantuję sensowności poprawek.
-- 
Szymon Siwek
Los nikomu nie szczędzi rozczarowań.
-------------- następna część ---------
Index: util-linux-dm_crypt.patch
===================================================================
RCS file: /cvsroot/SOURCES/util-linux-dm_crypt.patch,v
retrieving revision 1.2
diff -u -r1.2 util-linux-dm_crypt.patch
--- util-linux-dm_crypt.patch	27 Feb 2005 19:09:11 -0000	1.2
+++ util-linux-dm_crypt.patch	12 Jul 2006 14:55:26 -0000
@@ -263,7 +263,7 @@
  #include "loop.h"
  #include "linux_fs.h"		/* for BLKGETSIZE */
  #include "mount_guess_rootdev.h"
-@@ -98,6 +99,7 @@
+@@ -98,11 +99,12 @@
  #define MS_USER		0x20000000
  #define MS_OWNER	0x10000000
  #define MS_GROUP	0x08000000
@@ -271,6 +271,12 @@
  #define MS_COMMENT	0x00020000
  #define MS_LOOP		0x00010000
  
+ /* Options that we keep the mount system call from seeing.  */
+-#define MS_NOSYS	(MS_NOAUTO|MS_USERS|MS_USER|MS_COMMENT|MS_LOOP)
++#define MS_NOSYS	(MS_NOAUTO|MS_USERS|MS_USER|MS_COMMENT|MS_LOOP|MS_CRYPT)
+ 
+ /* Options that we keep from appearing in the options field in the mtab.  */
+ #define MS_NOMTAB	(MS_REMOUNT|MS_NOAUTO|MS_USERS|MS_USER)
 @@ -607,7 +609,7 @@
        *type = opt_vfstype;
    }
-------------- następna część ---------
--- cryptsetup-0.2-orig/lib/libdevmapper.c	2006-07-12 21:06:34.000000000 +0200
+++ cryptsetup-0.2/lib/libdevmapper.c	2006-07-12 21:06:43.000000000 +0200
@@ -303,6 +303,10 @@
 	r = -EINVAL;
 	if (!dm_task_get_info(dmt, &dmi))
 		goto out;
+	if (!dmi.exists) {
+		r = -ENODEV;
+		goto out;
+	}
 
 	next = dm_get_next_target(dmt, next, &start, &length,
 	                          &target_type, &params);


Więcej informacji o liście dyskusyjnej pld-devel-pl