4629 Commits

Author SHA1 Message Date
Ondrej Kozina
00b89c4862 Export expected fvault2 volume key size. 2024-10-30 13:28:56 +00:00
Ondrej Kozina
305aa376b6 Add crypt_reencrypt_init_by_keyslot_context API test. 2024-10-30 13:25:57 +01:00
Ondrej Kozina
651a089f38 Add crypt_reencrypt_init_by_keyslot_context.
It allows initializing reencryption operation by
providing access to volume keys via keyslot context.
2024-10-30 13:25:57 +01:00
Ondrej Kozina
45af8de034 Allow shared activation of device in reencryption.
This would be regression when we later switch all internal
implementation to keyslot context.
2024-10-30 13:25:57 +01:00
Ondrej Kozina
0eccd6e194 Check also CRYPT_ANY_SLOT in LUKS2_keyslot_for_segment.
The function did not work properly if keyslot parameter
was set to CRYPT_ANY_SLOT and returned always error.

But it will be used later when we need to find if there's
at least one keyslot asigned to a specific segment.
2024-10-30 13:25:55 +01:00
Ondrej Kozina
4de453d6a5 Retain original error code when reading data from keyring.
If key description is not available we expect -ENOENT.
-EINVAL usually aborts all following effort to unlock
device/keyslot.
2024-10-29 13:26:35 +01:00
Milan Broz
66c1523163 ci: Make unreleased RHEL distro build optional. 2024-10-26 10:51:43 +02:00
Milan Broz
5f066777a1 ci: Print output for RHEL packages install. 2024-10-26 10:38:34 +02:00
Michal Privoznik
fb04611ff7 crypto_backend.h: Wrap APIs in extern C
It's a good practice to mark public APIs as extern "C" so that
projects written in C++ can use our library.

[mbroz] It is not public API in cryptsetup, but we use this backend
in other projects, this aligns the code changes.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
2024-10-18 20:40:50 +02:00
Ondrej Kozina
b7cf60f229 Add regression test for decryption with datashift.
Test if decryption works when default segment
is assigned to volume key with digest id set
to non zero value.
2024-10-11 15:06:48 +02:00
Ondrej Kozina
81d8c12cbe Fix LUKS2 decryption when volume key digest id not zero.
During the initialization phase future moved data segments
were incorrectly assigned (hardcoded) to digest with id 0.

When the default segment was assigned to a different value,
the initialization failed and was aborted.

This patch fixes the issue by assigning intermediary segments
to corect digest id.

Reported-by: 谢致邦 (XIE Zhibang) <Yeking@Red54.com>
2024-10-11 14:55:08 +02:00
Ondrej Kozina
e19030915b Unify integer format parameter in prompt.
There was only single occurence of the prompt
message with %u. Let's use %d as anywhere else.
2024-10-09 11:15:56 +00:00
Ondrej Kozina
e4bf1f91b9 Properly block opal devices from deferred deactivation.
The check did not work properly for stacked dm_crypt over
hw opal devices.

Also it did not work at all for active dm mappings with
missing (or detached) LUKS2 metadata.
2024-10-09 09:57:49 +00:00
Ondrej Kozina
7c83d4e639 Simplify internal crypt_get_hdr for LUKS2 type. 2024-10-09 08:04:19 +00:00
Yiyuan Zhong
939b7c0a9e Mbed-TLS: implement PBKDF2
PBKDF2 has been implemented since 2.0.0 and a new API was introduced in 3.3.0
deprecating the old one. This implementation will use the new API if detected.
2024-10-08 20:21:21 +00:00
Milan Broz
443a555559 integrity: print debug message if superblock metadata read fails. 2024-10-08 12:22:46 +00:00
Milan Broz
79ef5bee86 Do not run direct-io read check on block devices.
Block devices must support direct-io. This check causes more problems
than it solves - for Opal locked device it disables direct-io
and we can later possible read wrong data (if kernel does not flush
cache).
2024-10-08 12:22:46 +00:00
Milan Broz
cd818156f6 Do not print debug message if device read check fails.
It really should not print "direct-io works" when it just failed :)
2024-10-08 12:22:46 +00:00
Milan Broz
faeb0c3483 Fix a possible segfault in deferred deactivation.
For device without a type code shoud not try to use
strcmp function.

This can happen for example if deferref flag is used
for device without proper DM-UUID where init_by_name
does not set know device type.

Thanks Clément Guérin for the report.

Fixes: #910
2024-10-08 13:08:18 +02:00
Milan Broz
d35fb1e671 ci: run vectors test when compiling crypto backends.
This should cost only few seconds but will verify
basic crypto backend operations as we do not run full testsuite
with all backends.
2024-10-04 21:57:09 +02:00
Ondrej Kozina
8ad28547ee Simplify keyslot context initialization code. 2024-09-29 19:14:56 +00:00
Jan Zerebecki
3c00305156 add warning to order luksChangeKey and reencrypt 2024-09-29 19:13:02 +00:00
Ondrej Kozina
31bf986084 Adapt cryptsetup to self-contained keyslot contexts. 2024-09-29 16:10:44 +00:00
Ondrej Kozina
6ef0650332 Rename internal keyslot context functions. 2024-09-29 16:10:44 +00:00
Ondrej Kozina
9311c923ca Make all keyslot context types fully self-contained.
Duplicate all dynamically allocated memory passed
keyslot context during initialization and make it
self contained.

Before current patch all pointers passed in keyslot
context initialization routines have to remain valid
for the duration of the keyslot context. Otherwise
memory violation could occur.

This patch fixes the issue in backward compatible
way so that we do not have to change API for all
keyslot contexts. As of now all dynamically allocated
memory can be freed right after keyslot context
initialization.
2024-09-29 16:10:44 +00:00
Eric Biggers
209e6167b5 Exclude cipher allocation time from benchmark
For each 1 MiB of data en/decrypted, 'cryptsetup benchmark' is setting
up a new AF_ALG socket, which involves 4 system calls and is included in
the data en/decryption time.  With high-speed ciphers (e.g. VAES
optimized AES-XTS) this can measure well over 10000 AF_ALG socket setups
per second.  This is not representative of dm-crypt, which only
allocates a cipher when the dm-crypt device is created.

Therefore, allocate the AF_ALG socket once, before doing the benchmark.

On AMD Ryzen 9 9950X this increases the 'cryptsetup benchmark' result of
AES-256-XTS slightly, from 14000 MiB/s to 14600 MiB/s.

Note that an in-kernel benchmark of the crypto API with the same block
size (65536 bytes) gives 34100 MiB/s, so AF_ALG still takes more time
than the en/decryption itself -- this cannot easily be addressed though.

Signed-off-by: Eric Biggers <ebiggers@google.com>
2024-09-17 10:31:10 -07:00
Milan Broz
b5f7176af1 CI: Install scsi_debug and other kernel modules for Ubuntu CI. 2024-09-12 10:20:21 +00:00
Ondrej Kozina
c0bf271bef Add crypt_safe_memcpy in reencrypt digest routine.
We copy volume keys for purpose of calculating LUKS2
reencryption digest. Add crypt_safe_memcpy in serialization
function as well.
2024-09-12 11:08:16 +02:00
Ondrej Kozina
41c72eaa65 Fix a bug in keyring keyslot context.
It always returned zero upon successful keyslot unlock
instead expected unlocked keyslot id.
2024-09-12 08:07:23 +00:00
Milan Broz
e48c74b77f Update Readme.md. 2024-09-03 11:54:48 +02:00
Milan Broz
46b8275ad9 Add 2.7.5 release notes. 2024-09-02 15:38:59 +02:00
Milan Broz
beef8e325a Fix clang undefined version error for ssh token
We use common libcryptsetup-token.sym version script that contain
all symbols, but some of them are optional.

As clang linker treats missing symbols as errors, the linker
phase for ssh token fails as optional cryptsetup_token_buffer_free
is not defined.
(Most of distros has this option still disabled, though).

As the sym file is also example for token authors, removing symbols
there is not an option. For clang, we can use --undefined-version option,
but it is not supported by other linkers, so it requires non-trivial
checks for usable LDFLAGS (for both autoconf and meson).

Instead, fix it by simply defining the symbol in ssh token, which
duplicates the internal libcryptsetup functionality.

Fixes: #830
2024-09-01 00:38:57 +02:00
Ondrej Kozina
63bb997b41 Abort online reencryption for misconfigured devices.
Hard abort is justified here. The online reencryption on
data devices that do not support O_DIRECT io flag is
dangerous and leads to data corruption. This should be
impossible to hit due to a patch that handles it
in initialization phase. Better safe than sorry.
2024-08-27 14:00:41 +00:00
Ondrej Kozina
9991cbc306 Harden online reencryption checks in initialization phase.
Verify the data device supports O_DIRECT io flag in
the initialization phase. Online reencryption is not
safe unless we can read and write the data in direct
mode.
2024-08-27 14:00:41 +00:00
Milan Broz
4cdd022ba4 Fix detection of direct-io with suspended devices.
Currently, direct-io is disabled if underlying device is suspended.

This was an unfortunate change, as it is part of data corruption
problem in online reenryption.

Let's relax the test to assume that suspended device
(suspended =>  must be a device-mapper device) supports direct-io.

The read test is still needed as some network based devices
misbehaves if opened with direct-io flag.
2024-08-27 12:13:54 +02:00
Ondrej Kozina
e4d25d18eb Remove needless double statements. 2024-08-26 17:40:04 +00:00
Milan Broz
3d89faca18 Fix return code for ssize_t.
The ssize_t must be defined in the range [-1, SSIZE_MAX].

The return value is overwritten to -EINVAL later anyway,
return -1 here to be on the safe side.

Fixes: #900
2024-08-26 16:39:10 +00:00
Ondrej Kozina
a42bd088b5 Add Ubuntu 24.04 runner. 2024-08-22 14:06:21 +00:00
Ondrej Kozina
aeada055d1 Return suspended status also for unknow target types.
This patch allows dm_status_suspended() to report if device
is suspended or not also for unknown target types from
libcryptsetup perspective (e.g.: dm-cache).
2024-08-22 13:53:23 +02:00
Ondrej Kozina
53198bdea9 Do not handle device as suspended on error.
Consider device is suspended only if dm_status_suspended return code
is true.

This function returned -EEXIST for dm devices with target types unknown
to libcryptsetup (for example dm-cache) and turned off O_DIRECT flag
for devices unexpectedly.

Turned out ignoring direct-io was a problem after all :).

Fixes: 0f51b5bacb (Do not run sector read check on suspended device.)
2024-08-22 13:42:13 +02:00
Milan Broz
da09835b6c Document reencryption process status callbak return code. 2024-08-13 09:14:00 +02:00
Vojtech Trefny
42f4a68705 Initialize crypto in crypt_format_luks2_opal
Without this random isn't initialized and crypt_format_luks2_opal
is aborted.
2024-08-07 10:28:17 +00:00
Milan Broz
d5fb76a3b4 CI: Fix backend test after change in previous commit
The same CFLAGS change need to be applied to backend test.
2024-08-04 12:29:02 +02:00
Daniel Zatovic
7c992fa09e CI: update Ubuntu container image and set compiler version 2024-07-31 14:07:13 +02:00
Milan Broz
35bf791e85 Version 2.7.4. 2024-07-30 14:14:22 +02:00
Milan Broz
0d4027291a Add Release notes for stable 2.7.4 version. 2024-07-30 12:38:28 +02:00
Milan Broz
e0852d21dd tests: workaround valgrind SIGPIPE
Parsing --debug output with quiet flag can produce SIGPIPE output
if running with valgrind wrapper, just workaround it with another
grep as used elsewhere.
2024-07-30 10:34:41 +02:00
Milan Broz
3a7794795f Always set cipher_mode even in crypt_parse_name_and_mode.
Othewrwise some tools like valgrind can see unitialized string.
2024-07-29 16:00:01 +02:00
Frédéric Marchal
8be7b01ba8 po: update fr.po (from translationproject.org) 2024-07-24 12:29:27 +02:00
Antonio Ceballos
2bcdb5127a po: update es.po (from translationproject.org) 2024-07-24 12:29:26 +02:00