chiark / gitweb /
cryptsetup: hash=plain means don't use a hash
authorDave Reisner <dreisner@archlinux.org>
Tue, 6 Nov 2012 14:49:27 +0000 (09:49 -0500)
committerDave Reisner <dreisner@archlinux.org>
Tue, 6 Nov 2012 14:53:00 +0000 (09:53 -0500)
"plain" is a semantic value that cryptsetup(8) uses to describe a plain
dm-crypt volume that does not use a hash. Catch this value earlier and
ensure that a NULL params.hash is passed to crypt_format to avoid
passing an invalid hash type to the libcryptsetup backend.

FDO bug #56593.

src/cryptsetup/cryptsetup.c

index 916509ab93481b17b3ddd30077f89e759f12c113..e8ba3f02a3060e5fe60b36cb049e89fdfe130033 100644 (file)
@@ -342,7 +342,12 @@ int main(int argc, char *argv[]) {
 
                 opt_tries = opt_tries > 0 ? opt_tries : 3;
                 opt_key_size = (opt_key_size > 0 ? opt_key_size : 256);
 
                 opt_tries = opt_tries > 0 ? opt_tries : 3;
                 opt_key_size = (opt_key_size > 0 ? opt_key_size : 256);
-                hash = opt_hash ? opt_hash : "ripemd160";
+                if (opt_hash) {
+                        /* plain isn't a real hash type. it just means "use no hash" */
+                        if (!streq(opt_hash, "plain"))
+                                hash = opt_hash;
+                } else
+                        hash = "ripemd160";
 
                 if (opt_cipher) {
                         size_t l;
 
                 if (opt_cipher) {
                         size_t l;
@@ -463,7 +468,7 @@ int main(int argc, char *argv[]) {
                                                  opt_keyfile_size,
                                                  &params);
 
                                                  opt_keyfile_size,
                                                  &params);
 
-                                pass_volume_key = streq(hash, "plain");
+                                pass_volume_key = !!hash;
                         }
 
                         if (k < 0) {
                         }
 
                         if (k < 0) {