diff -rupN cryptsetup-2.0.4.old/tests/api-test-2.c cryptsetup-2.0.4/tests/api-test-2.c
--- cryptsetup-2.0.4.old/tests/api-test-2.c 2018-08-08 14:05:02.000387826 +0200
+++ cryptsetup-2.0.4/tests/api-test-2.c 2018-08-08 14:05:35.946311814 +0200
@@ -41,6 +41,7 @@ typedef int32_t key_serial_t;
#include "api_test.h"
#include "luks.h"
+#include "luks2.h"
#include "libcryptsetup.h"
#define DMDIR "/dev/mapper/"
@@ -165,31 +166,18 @@ static unsigned _min(unsigned a, unsigne
return a < b ? a : b;
}
-/* FIXME: will fail with various LUKS2 header sizes */
-static int get_luks2_offsets(int metadata_device,
- unsigned int alignpayload_sec,
- unsigned int alignoffset_sec, /* unused in LUKS2, bug? */
- unsigned int sector_size,
+static int get_luks2_offsets(unsigned int alignpayload_sec,
uint64_t *r_header_size,
uint64_t *r_payload_offset)
{
- if (!sector_size)
- sector_size = 512; /* default? */
-
- if ((sector_size % 512) && (sector_size % 4096))
- return -1;
-
if (r_payload_offset) {
- if (metadata_device)
- *r_payload_offset = DIV_ROUND_UP_MODULO(4*1024*1024, (alignpayload_sec ?: 1) * sector_size);
- else
- *r_payload_offset = alignpayload_sec * sector_size;
+ *r_payload_offset = DIV_ROUND_UP_MODULO(LUKS2_HDR_DEFAULT_LEN, (alignpayload_sec ?: 1) * SECTOR_SIZE);
- *r_payload_offset /= sector_size;
+ *r_payload_offset >>= SECTOR_SHIFT;
}
if (r_header_size)
- *r_header_size = (4*1024*1024) / sector_size;
+ *r_header_size = LUKS2_HDR_DEFAULT_LEN >> SECTOR_SHIFT;
return 0;
}
@@ -585,7 +573,7 @@ static void AddDeviceLuks2(void)
crypt_decode_key(key3, mk_hex2, key_size);
// init test devices
- OK_(get_luks2_offsets(1, 0, 0, 0, &r_header_size, &r_payload_offset));
+ OK_(get_luks2_offsets(0, &r_header_size, &r_payload_offset));
OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size));
OK_(create_dmdevice_over_loop(H_DEVICE_WRONG, r_header_size - 1));
@@ -613,8 +601,8 @@ static void AddDeviceLuks2(void)
/*
* test limit values for backing device size
*/
- params.data_alignment = 8192;
- OK_(get_luks2_offsets(0, params.data_alignment, 0, 0, NULL, &r_payload_offset));
+ params.data_alignment = LUKS2_HDR_DEFAULT_LEN >> SECTOR_SHIFT;
+ OK_(get_luks2_offsets(params.data_alignment, NULL, &r_payload_offset));
OK_(create_dmdevice_over_loop(L_DEVICE_0S, r_payload_offset));
OK_(create_dmdevice_over_loop(L_DEVICE_1S, r_payload_offset + 1));
OK_(create_dmdevice_over_loop(L_DEVICE_WRONG, r_payload_offset - 1));
@@ -767,7 +755,7 @@ static void AddDeviceLuks2(void)
OK_(strcmp(cipher, crypt_get_cipher(cd)));
OK_(strcmp(cipher_mode, crypt_get_cipher_mode(cd)));
EQ_((int)key_size, crypt_get_volume_key_size(cd));
- EQ_(8192, crypt_get_data_offset(cd));
+ EQ_((LUKS2_HDR_DEFAULT_LEN >> SECTOR_SHIFT), crypt_get_data_offset(cd));
OK_(strcmp(DEVICE_2, crypt_get_device_name(cd)));
reset_log();
@@ -809,7 +797,7 @@ static void AddDeviceLuks2(void)
FAIL_(crypt_keyslot_add_by_volume_key(cd, 1, key, key_size, PASSPHRASE, strlen(PASSPHRASE)), "VK doesn't match any digest");
crypt_free(cd);
- OK_(create_dmdevice_over_loop(L_DEVICE_1S, 8193));
+ OK_(create_dmdevice_over_loop(L_DEVICE_1S, (LUKS2_HDR_DEFAULT_LEN >> SECTOR_SHIFT) + 1));
OK_(crypt_init(&cd, DMDIR L_DEVICE_1S));
crypt_set_iteration_time(cd, 1);
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, NULL));
@@ -900,7 +888,7 @@ static void Luks2HeaderRestore(void)
crypt_decode_key(key, mk_hex, key_size);
- OK_(get_luks2_offsets(0, params.data_alignment, 0, 0, NULL, &r_payload_offset));
+ OK_(get_luks2_offsets(params.data_alignment, NULL, &r_payload_offset));
OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 5000));
// do not restore header over plain device
@@ -976,18 +964,20 @@ static void Luks2HeaderLoad(void)
size_t key_size = strlen(mk_hex) / 2;
const char *cipher = "aes";
const char *cipher_mode = "cbc-essiv:sha256";
- uint64_t r_payload_offset, r_header_size;
+ uint64_t r_payload_offset, r_header_size, r_header_size_compat;
crypt_decode_key(key, mk_hex, key_size);
// prepare test env
- OK_(get_luks2_offsets(0, params.data_alignment, 0, 0, &r_header_size, &r_payload_offset));
+ OK_(t_device_size(IMAGE1, &r_header_size_compat));
+ r_header_size_compat >>= SECTOR_SHIFT;
+ OK_(get_luks2_offsets(params.data_alignment, &r_header_size, &r_payload_offset));
// external header device
OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size));
// prepared header on a device too small to contain header and payload
- //OK_(create_dmdevice_over_loop(H_DEVICE_WRONG, r_payload_offset - 1));
- OK_(create_dmdevice_over_loop(H_DEVICE_WRONG, r_header_size - 1));
- snprintf(cmd, sizeof(cmd), "dd if=" IMAGE1 " of=" DMDIR H_DEVICE_WRONG " bs=%" PRIu32 " count=%" PRIu64 " 2>/dev/null", params.sector_size, r_header_size - 1);
+ // compatimage2.img contains one sector of data. to create wrong device we need one sector less than the header size
+ OK_(create_dmdevice_over_loop(H_DEVICE_WRONG, r_header_size_compat - 2));
+ snprintf(cmd, sizeof(cmd), "dd if=" IMAGE1 " of=" DMDIR H_DEVICE_WRONG " bs=%" PRIu32 " count=%" PRIu64 " 2>/dev/null", params.sector_size, r_header_size_compat - 2);
OK_(_system(cmd, 1));
// some device
OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1000));
@@ -1092,7 +1082,7 @@ static void Luks2HeaderBackup(void)
crypt_decode_key(key, mk_hex, key_size);
- OK_(get_luks2_offsets(0, params.data_alignment, 0, 0, NULL, &r_payload_offset));
+ OK_(get_luks2_offsets(params.data_alignment, NULL, &r_payload_offset));
OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1));
// create LUKS device and backup the header
@@ -1180,8 +1170,8 @@ static void ResizeDeviceLuks2(void)
crypt_decode_key(key, mk_hex, key_size);
// prepare env
- OK_(get_luks2_offsets(0, params.data_alignment, 0, 0, NULL, &r_payload_offset));
- OK_(get_luks2_offsets(1, 0, 0, 0, &r_header_size, NULL));
+ OK_(get_luks2_offsets(params.data_alignment, NULL, &r_payload_offset));
+ OK_(get_luks2_offsets(0, &r_header_size, NULL));
OK_(create_dmdevice_over_loop(H_DEVICE, r_header_size));
OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 1000));
OK_(create_dmdevice_over_loop(L_DEVICE_0S, 1000));
@@ -1303,7 +1293,7 @@ static void TokenActivationByKeyring(voi
}
// prepare the device
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
crypt_set_iteration_time(cd, 1);
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, NULL));
EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0);
@@ -1312,7 +1302,7 @@ static void TokenActivationByKeyring(voi
crypt_free(cd);
// test thread keyring key in token 0
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
EQ_(crypt_activate_by_token(cd, CDEVICE_1, 3, NULL, 0), 0);
FAIL_(crypt_activate_by_token(cd, CDEVICE_1, 3, NULL, 0), "already open");
@@ -1331,7 +1321,7 @@ static void TokenActivationByKeyring(voi
}
// add token 1 with process keyring key
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
EQ_(crypt_token_json_set(cd, 3, NULL), 3);
EQ_(crypt_token_luks2_keyring_set(cd, 1, ¶ms), 1);
@@ -1339,7 +1329,7 @@ static void TokenActivationByKeyring(voi
crypt_free(cd);
// test process keyring key in token 1
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
EQ_(crypt_activate_by_token(cd, CDEVICE_1, 1, NULL, 0), 0);
FAIL_(crypt_activate_by_token(cd, CDEVICE_1, 1, NULL, 0), "already open");
@@ -1364,7 +1354,7 @@ static void TokenActivationByKeyring(voi
exit(1);
}
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
EQ_(crypt_token_luks2_keyring_set(cd, 0, ¶ms), 0);
EQ_(crypt_token_assign_keyslot(cd, 0, 0), 0);
@@ -1376,7 +1366,7 @@ static void TokenActivationByKeyring(voi
crypt_free(cd);
// activate by specific token
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
EQ_(crypt_activate_by_token(cd, CDEVICE_1, 0, NULL, 0), 0);
OK_(crypt_deactivate(cd, CDEVICE_1));
@@ -1390,7 +1380,7 @@ static void TokenActivationByKeyring(voi
}
// activate by any token with token 0 having absent pass from keyring
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
EQ_(crypt_activate_by_token(cd, CDEVICE_1, CRYPT_ANY_TOKEN, NULL, 0), 1);
OK_(crypt_deactivate(cd, CDEVICE_1));
@@ -1403,7 +1393,7 @@ static void TokenActivationByKeyring(voi
}
// replace pass for keyslot 0 making token 0 invalid
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
OK_(crypt_keyslot_destroy(cd, 0));
crypt_set_iteration_time(cd, 1);
@@ -1411,7 +1401,7 @@ static void TokenActivationByKeyring(voi
crypt_free(cd);
// activate by any token with token 0 having wrong pass for keyslot 0
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
EQ_(crypt_activate_by_token(cd, CDEVICE_1, CRYPT_ANY_TOKEN, NULL, 0), 1);
OK_(crypt_deactivate(cd, CDEVICE_1));
@@ -1420,7 +1410,7 @@ static void TokenActivationByKeyring(voi
// create new device, with two tokens:
// 1st token being invalid (missing key in keyring)
// 2nd token can activate keyslot 1 after failing to do so w/ keyslot 0 (wrong pass)
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
crypt_set_iteration_time(cd, 1);
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, NULL));
EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0);
@@ -1442,7 +1432,7 @@ static void TokenActivationByKeyring(voi
exit(1);
}
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
EQ_(crypt_activate_by_token(cd, CDEVICE_1, CRYPT_ANY_TOKEN, NULL, 0), 1);
OK_(crypt_deactivate(cd, CDEVICE_1));
@@ -1507,7 +1497,7 @@ static void Tokens(void)
FAIL_(crypt_token_register(&th_reserved), "luks2- is reserved prefix");
// basic token API tests
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
crypt_set_iteration_time(cd, 1);
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, NULL));
EQ_(crypt_token_status(cd, -1, NULL), CRYPT_TOKEN_INVALID);
@@ -1706,7 +1696,7 @@ static void LuksConvert(void)
crypt_free(cd);
// exercice non-pbkdf2 LUKSv2 conversion
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, NULL));
OK_(crypt_set_pbkdf_type(cd, &argon));
EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0);
@@ -1714,7 +1704,7 @@ static void LuksConvert(void)
crypt_free(cd);
// exercice non LUKS1 compatible keyslot
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, &luks2));
EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0);
EQ_(crypt_keyslot_add_by_key(cd, 1, NULL, 32, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT), 1);
@@ -1723,7 +1713,7 @@ static void LuksConvert(void)
crypt_free(cd);
// exercice LUKSv2 conversion with single pbkdf2 keyslot being active
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, NULL));
offset = crypt_get_data_offset(cd);
OK_(crypt_set_pbkdf_type(cd, &pbkdf2));
@@ -1731,13 +1721,13 @@ static void LuksConvert(void)
OK_(crypt_convert(cd, CRYPT_LUKS1, NULL));
EQ_(crypt_get_data_offset(cd), offset);
crypt_free(cd);
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_load(cd, CRYPT_LUKS, NULL));
EQ_(crypt_get_data_offset(cd), offset);
crypt_free(cd);
// do not allow conversion on keyslot No > 7
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, &luks2));
EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0);
EQ_(crypt_keyslot_add_by_volume_key(cd, 8, NULL, 32, PASSPHRASE1, strlen(PASSPHRASE1)), 8);
@@ -1745,14 +1735,14 @@ static void LuksConvert(void)
crypt_free(cd);
// do not allow conversion with token
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, &luks2));
OK_(crypt_token_json_set(cd, CRYPT_ANY_TOKEN, json));
FAIL_(crypt_convert(cd, CRYPT_LUKS1, NULL), "Can't convert header with token.");
crypt_free(cd);
// should be enough for both luks1 and luks2 devices with all vk lengths
- OK_(get_luks2_offsets(1, 0, 0, 0, NULL, &r_payload_offset));
+ OK_(get_luks2_offsets(0, NULL, &r_payload_offset));
OK_(create_dmdevice_over_loop(L_DEVICE_1S, r_payload_offset + 1));
// do not allow conversion for legacy luks1 device (non-aligned keyslot offset)
@@ -2202,7 +2192,7 @@ static void Pbkdf(void)
// test LUKSv2 device
// test default values are set
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, mode, NULL, NULL, 32, NULL));
NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd));
OK_(strcmp(pbkdf->type, DEFAULT_LUKS2_PBKDF));
@@ -2259,7 +2249,7 @@ static void Pbkdf(void)
FAIL_(crypt_set_pbkdf_type(cd, &pbkdf2), "Unknown hash member");
crypt_free(cd);
// test whether crypt_get_pbkdf_type() behaves accordingly after second crypt_load() call
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_load(cd, CRYPT_LUKS, NULL));
NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd));
OK_(strcmp(pbkdf->type, DEFAULT_LUKS2_PBKDF));
@@ -2277,7 +2267,7 @@ static void Pbkdf(void)
crypt_free(cd);
// test crypt_set_pbkdf_type() overwrites invalid value set by crypt_set_iteration_time()
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
crypt_set_iteration_time(cd, 0);
OK_(crypt_set_pbkdf_type(cd, &argon2));
NOTNULL_(pbkdf = crypt_get_pbkdf_type(cd));
@@ -2352,7 +2342,7 @@ static void Luks2KeyslotAdd(void)
crypt_decode_key(key2, mk_hex2, key_size);
/* test crypt_keyslot_add_by_key */
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
crypt_set_iteration_time(cd, 1);
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, key, key_size, NULL));
EQ_(crypt_keyslot_add_by_key(cd, 1, key2, key_size, PASSPHRASE1, strlen(PASSPHRASE1), CRYPT_VOLUME_KEY_NO_SEGMENT), 1);
@@ -2432,7 +2422,7 @@ static void Luks2ActivateByKeyring(void)
}
// prepare the device
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
crypt_set_iteration_time(cd, 1);
OK_(crypt_format(cd, CRYPT_LUKS2, cipher, cipher_mode, NULL, NULL, 32, NULL));
EQ_(crypt_keyslot_add_by_volume_key(cd, 0, NULL, 32, PASSPHRASE, strlen(PASSPHRASE)), 0);
@@ -2442,7 +2432,7 @@ static void Luks2ActivateByKeyring(void)
// FIXME: all following tests work as expected but most error messages are missing
// check activate by keyring works exactly same as by passphrase
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
EQ_(crypt_activate_by_keyring(cd, NULL, KEY_DESC_TEST0, 0, 0), 0);
EQ_(crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST0, 0, 0), 0);
@@ -2472,7 +2462,7 @@ static void Luks2ActivateByKeyring(void)
exit(1);
}
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
FAIL_(crypt_activate_by_keyring(cd, NULL, KEY_DESC_TEST0, CRYPT_ANY_SLOT, 0), "no such key in keyring");
FAIL_(crypt_activate_by_keyring(cd, CDEVICE_1, KEY_DESC_TEST0, CRYPT_ANY_SLOT, 0), "no such key in keyring");
@@ -2718,7 +2708,7 @@ static void Luks2Requirements(void)
OK_(crypt_activate_by_token(cd, NULL, 1, NULL, 0));
OK_(crypt_activate_by_token(cd, NULL, 1, NULL, t_dm_crypt_keyring_support() ? CRYPT_ACTIVATE_KEYRING_KEY : 0));
#endif
- OK_(get_luks2_offsets(1, 8192, 0, 0, NULL, &r_payload_offset));
+ OK_(get_luks2_offsets(8192, NULL, &r_payload_offset));
OK_(create_dmdevice_over_loop(L_DEVICE_OK, r_payload_offset + 2));
//OK_(_system("dd if=" NO_REQS_LUKS2_HEADER " of=" NO_REQS_LUKS2_HEADER " bs=4096 2>/dev/null", 1));
OK_(_system("dd if=" NO_REQS_LUKS2_HEADER " of=" DMDIR L_DEVICE_OK " bs=1M count=4 oflag=direct 2>/dev/null", 1));
@@ -2863,7 +2853,7 @@ static void Luks2Flags(void)
struct crypt_device *cd;
uint32_t flags = 42;
- OK_(crypt_init(&cd, DEVICE_1));
+ OK_(crypt_init(&cd, DEVICE_2));
OK_(crypt_load(cd, CRYPT_LUKS2, NULL));
/* check library erase passed variable on success when no flags set */
diff -rupN cryptsetup-2.0.4.old/tests/Makefile.am cryptsetup-2.0.4/tests/Makefile.am
--- cryptsetup-2.0.4.old/tests/Makefile.am 2018-08-08 14:05:02.008387808 +0200
+++ cryptsetup-2.0.4/tests/Makefile.am 2018-08-08 14:05:35.944311818 +0200
@@ -80,7 +80,7 @@ api_test_CPPFLAGS = $(AM_CPPFLAGS) -incl
api_test_2_SOURCES = api-test-2.c api_test.h test_utils.c
api_test_2_LDADD = ../libcryptsetup.la
api_test_2_LDFLAGS = $(AM_LDFLAGS) -static
-api_test_2_CFLAGS = -g -Wall -O0 $(AM_CFLAGS) -I$(top_srcdir)/lib/ -I$(top_srcdir)/lib/luks1
+api_test_2_CFLAGS = -g -Wall -O0 $(AM_CFLAGS) -I$(top_srcdir)/lib/ -I$(top_srcdir)/lib/luks1 -I$(top_srcdir)/lib/luks2
api_test_2_CPPFLAGS = $(AM_CPPFLAGS) -include config.h
vectors_test_SOURCES = crypto-vectors.c
diff -rupN cryptsetup-2.0.4.old/tests/Makefile.in cryptsetup-2.0.4/tests/Makefile.in
--- cryptsetup-2.0.4.old/tests/Makefile.in 2018-08-08 14:05:02.000387826 +0200
+++ cryptsetup-2.0.4/tests/Makefile.in 2018-08-08 14:08:28.749924872 +0200
@@ -466,7 +466,7 @@ api_test_CPPFLAGS = $(AM_CPPFLAGS) -incl
api_test_2_SOURCES = api-test-2.c api_test.h test_utils.c
api_test_2_LDADD = ../libcryptsetup.la
api_test_2_LDFLAGS = $(AM_LDFLAGS) -static
-api_test_2_CFLAGS = -g -Wall -O0 $(AM_CFLAGS) -I$(top_srcdir)/lib/ -I$(top_srcdir)/lib/luks1
+api_test_2_CFLAGS = -g -Wall -O0 $(AM_CFLAGS) -I$(top_srcdir)/lib/ -I$(top_srcdir)/lib/luks1 -I$(top_srcdir)/lib/luks2
api_test_2_CPPFLAGS = $(AM_CPPFLAGS) -include config.h
vectors_test_SOURCES = crypto-vectors.c
vectors_test_LDADD = ../libcrypto_backend.la @CRYPTO_LIBS@ @LIBARGON2_LIBS@
diff -rupN cryptsetup-2.0.4.old/tests/test_utils.c cryptsetup-2.0.4/tests/test_utils.c
--- cryptsetup-2.0.4.old/tests/test_utils.c 2018-08-08 14:05:02.008387808 +0200
+++ cryptsetup-2.0.4/tests/test_utils.c 2018-08-08 14:05:35.947311812 +0200
@@ -118,13 +118,21 @@ void xlog(const char *msg, const char *t
int t_device_size(const char *device, uint64_t *size)
{
+ struct stat st;
int devfd, r = 0;
devfd = open(device, O_RDONLY);
if(devfd == -1)
return -EINVAL;
- if (ioctl(devfd, BLKGETSIZE64, size) < 0)
+ if (fstat(devfd, &st) < 0) {
+ close(devfd);
+ return -EINVAL;
+ }
+
+ if (S_ISREG(st.st_mode))
+ *size = (uint64_t)st.st_size;
+ else if (ioctl(devfd, BLKGETSIZE64, size) < 0)
r = -EINVAL;
close(devfd);
return r;