|
|
923a60 |
From be973ab9f6585be762ea0888c81b011222eabb13 Mon Sep 17 00:00:00 2001
|
|
|
923a60 |
From: Jan Synacek <jsynacek@redhat.com>
|
|
|
923a60 |
Date: Thu, 3 May 2018 11:21:27 +0200
|
|
|
923a60 |
Subject: [PATCH] cryptsetup: support LUKS2 on-disk format
|
|
|
923a60 |
|
|
|
923a60 |
Allow cryptsetup utility to activate LUKS2 devices (with appropriate
|
|
|
923a60 |
libcryptsetup)
|
|
|
923a60 |
|
|
|
923a60 |
The change itself doesn't enforce new libcryptsetup 2.x and is backward
|
|
|
923a60 |
compatible with versions 1.x
|
|
|
923a60 |
|
|
|
923a60 |
(cherry-picked from commit b3b4ebab02395933cde554b5a5d5c363dae3920d)
|
|
|
923a60 |
|
|
|
923a60 |
Resolves: #1573838
|
|
|
923a60 |
---
|
|
|
923a60 |
src/cryptsetup/cryptsetup.c | 20 ++++++++++++++------
|
|
|
923a60 |
1 file changed, 14 insertions(+), 6 deletions(-)
|
|
|
923a60 |
|
|
|
923a60 |
diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c
|
|
|
923a60 |
index 69a0156144..528c36c48b 100644
|
|
|
923a60 |
--- a/src/cryptsetup/cryptsetup.c
|
|
|
923a60 |
+++ b/src/cryptsetup/cryptsetup.c
|
|
|
923a60 |
@@ -36,7 +36,15 @@
|
|
|
923a60 |
#include "libudev.h"
|
|
|
923a60 |
#include "udev-util.h"
|
|
|
923a60 |
|
|
|
923a60 |
-static const char *arg_type = NULL; /* CRYPT_LUKS1, CRYPT_TCRYPT or CRYPT_PLAIN */
|
|
|
923a60 |
+/* libcryptsetup define for any LUKS version, compatible with libcryptsetup 1.x */
|
|
|
923a60 |
+#ifndef CRYPT_LUKS
|
|
|
923a60 |
+#define CRYPT_LUKS NULL
|
|
|
923a60 |
+#endif
|
|
|
923a60 |
+
|
|
|
923a60 |
+/* internal helper */
|
|
|
923a60 |
+#define ANY_LUKS "LUKS"
|
|
|
923a60 |
+
|
|
|
923a60 |
+static const char *arg_type = NULL; /* ANY_LUKS, CRYPT_LUKS1, CRYPT_LUKS2, CRYPT_TCRYPT or CRYPT_PLAIN */
|
|
|
923a60 |
static char *arg_cipher = NULL;
|
|
|
923a60 |
static unsigned arg_key_size = 0;
|
|
|
923a60 |
static int arg_key_slot = CRYPT_ANY_SLOT;
|
|
|
923a60 |
@@ -98,7 +106,7 @@ static int parse_one_option(const char *option) {
|
|
|
923a60 |
|
|
|
923a60 |
} else if (startswith(option, "key-slot=")) {
|
|
|
923a60 |
|
|
|
923a60 |
- arg_type = CRYPT_LUKS1;
|
|
|
923a60 |
+ arg_type = ANY_LUKS;
|
|
|
923a60 |
if (safe_atoi(option+9, &arg_key_slot) < 0) {
|
|
|
923a60 |
log_error("key-slot= parse failure, ignoring.");
|
|
|
923a60 |
return 0;
|
|
|
923a60 |
@@ -138,7 +146,7 @@ static int parse_one_option(const char *option) {
|
|
|
923a60 |
arg_hash = t;
|
|
|
923a60 |
|
|
|
923a60 |
} else if (startswith(option, "header=")) {
|
|
|
923a60 |
- arg_type = CRYPT_LUKS1;
|
|
|
923a60 |
+ arg_type = ANY_LUKS;
|
|
|
923a60 |
|
|
|
923a60 |
if (!path_is_absolute(option+7)) {
|
|
|
923a60 |
log_error("Header path '%s' is not absolute, refusing.", option+7);
|
|
|
923a60 |
@@ -168,7 +176,7 @@ static int parse_one_option(const char *option) {
|
|
|
923a60 |
else if (STR_IN_SET(option, "allow-discards", "discard"))
|
|
|
923a60 |
arg_discards = true;
|
|
|
923a60 |
else if (streq(option, "luks"))
|
|
|
923a60 |
- arg_type = CRYPT_LUKS1;
|
|
|
923a60 |
+ arg_type = ANY_LUKS;
|
|
|
923a60 |
else if (streq(option, "tcrypt"))
|
|
|
923a60 |
arg_type = CRYPT_TCRYPT;
|
|
|
923a60 |
else if (streq(option, "tcrypt-hidden")) {
|
|
|
923a60 |
@@ -430,8 +438,8 @@ static int attach_luks_or_plain(struct crypt_device *cd,
|
|
|
923a60 |
assert(name);
|
|
|
923a60 |
assert(key_file || passwords);
|
|
|
923a60 |
|
|
|
923a60 |
- if (!arg_type || streq(arg_type, CRYPT_LUKS1)) {
|
|
|
923a60 |
- r = crypt_load(cd, CRYPT_LUKS1, NULL);
|
|
|
923a60 |
+ if (!arg_type || STR_IN_SET(arg_type, ANY_LUKS, CRYPT_LUKS1)) {
|
|
|
923a60 |
+ r = crypt_load(cd, CRYPT_LUKS, NULL);
|
|
|
923a60 |
if (r < 0) {
|
|
|
923a60 |
log_error("crypt_load() failed on device %s.\n", crypt_get_device_name(cd));
|
|
|
923a60 |
return r;
|