Commit Graph

4245 Commits

Author SHA1 Message Date
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
Ondrej Kozina
002f73b360 Add --shared option in veritysetup open action.
The option allows data device to be used in multiple
DM table mappings and exclusive access is not checked
anymore in-before device activation.

It also allows correct concurrent verity device activation.
With --shared option if multiple processes compete for same DM
verity name using same underlying data device we can now guarantee
one process succeeds and all other fails with -EEXIST.
2024-07-24 09:39:21 +00:00
Ondrej Kozina
ec9b97a731 Fix shared activation for dm-verity devices.
CRYPT_ACTIVATE_SHARED flag was silently ignored
while activating dm-verity devices by libcryptsetup.
This was a bug.

DM verity shared activation is generaly safe (single mapped data device
in multiple DM verity tables) since all verity devices are
read only.

The CRYPT_ACTIVATE_SHARED flag also fixes a race condition
when multiple processes compete for the same DM device name
(all dm-verity) while using same backing data device.

The exclusive open check in-before verity activation could
fail DM table load for a process that otherwise successfully acquired
DM device name (succeed in creating the DM device). This could (in some
cases) result in all processes competening for the DM verity device
to fail and none would activate the DM verity device.
2024-07-24 09:39:21 +00:00
Milan Broz
5873a65183 Do not use O_EXCL for allocated backing loop device.
Exclusive flag is defined only when creating a file,
for opening existing file it is undefinded operation.

Remove it from crypt_loop_attach as it was wrong since
the initial commit.
2024-07-24 08:28:32 +00:00
Milan Broz
d88a97b1a0 libdevmapper: properly detect device busy failure for dm table devices
Due to internal retry-overengineering in libdevmapper, some dm-ioctl
failures can disappear. One such case is when there is a device
creation race and DM device is created but reload fails.
this can heppen because some block device used in table mapping is
already claimed (it needs exclusive access for bdev_open in kernel).

The kernel ioctl properly returns EBUSY, this errno is lost
in libdevmapper (dm_task_get_errno returns 0).

While this should be solved by libdevampper, we need some reliable
way on older systems to properly report "busy" error instead of
overloaded "invalid" error.

With modified reproducer (see check_concurrent in very compat test),
this situation can happen quite often.

This patch modifies dm_create_device to return ENODEV only if
dm-ioctl also reports no device (ENXIO); following dm status reports ENODEV
and also some referenced device is no longer accesible through stat().

In all other cases we return EBUSY. Command line translates EBUSY and EEXIST
to the same return vaules, for API users it now returns EBUSY instead
of generic EINVAL.

IOW, if device activation returns EEXIST or EBUSY, device-mapper
cannot create the device because it already exits (EEXIST) or some referenced
device is claimed by other subystem (EBUSY) and mapping table cannot be created.
2024-07-23 11:15:06 +00:00
Milan Broz
3dc5d50918 fuzz: Fix build as upstream xz repo has disabled cloning 2024-07-23 08:41:53 +02:00
Milan Broz
021e5c31fd Check for bad device-mapper name early
There is no need to unlock keyslot if the provided name
has wrong format. Let's check for length and '/' in name early.

Note that other commands could accept path to the device
as libdevmapper translate it to the name (status /dev/mapper/xxx).
Add early check only to activate commands.

It still can fail later because of mangled characters.

Fixes: #893
2024-07-16 08:05:13 +00:00
Milan Broz
624b7087b0 ci: fix backends job logic 2024-07-15 14:44:31 +02:00
Yiyuan Zhong
cb7b7fd863 Add Mbed-TLS crypto backend
Mbed-TLS is a tiny TLS implementation designed for embedded environment which
can greatly reduce the disk space requirement compared to OpenSSL. While we
already have crypto_kernel for this purpose and Mbed-TLS lacking hash/cipher
support can cause reduced functionality, there're situations where AF_ALG is
not available but we're fine with limited scenarios like LUKS2 only.
2024-07-14 17:12:03 +08:00
Milan Broz
4daf8ef0dc tests: skip reencryption test if non-AES ciphers fails in luksFormat 2024-07-12 21:08:05 +02:00
Milan Broz
2d041439bc tests: Print N/A visible in mode_test (LUKS2 userspace crypto) 2024-07-12 21:07:59 +02:00
Milan Broz
7fa19da140 tests: use crypto check tool in tests 2024-07-12 21:07:15 +02:00
Milan Broz
a9617c7c4a tests: Add crypto check program for crypto backend.
We use benchmark, but backend can implement different
set of ciphers than kernel crypto API.
2024-07-12 21:04:37 +02:00
Milan Broz
ce38d82025 Fix crypt_cipher_check_kernel to work with length-preserving modes too.
The check is currently used only with AEAD, but whould work also
with common block ciphers and modes.
2024-07-12 18:02:37 +00:00
Milan Broz
5e04a82e53 Fix wiping of hash struct in nss and nettle backend. 2024-07-12 16:38:56 +00:00
Milan Broz
3839e2bf98 Fix scan-build warnings in gcrypt backend 2024-07-12 16:38:56 +00:00
Milan Broz
8accd612a3 CI: Add fanalyzer and scan-build test for crypto backends 2024-07-12 16:38:56 +00:00
Frank Rehberger
fddec0f2d7 doc: build dependency update 2024-07-12 16:05:52 +00:00
Milan Broz
7a816abf82 TCRYPT: fix system encryption test if kernel does not support EFI partition
If kernel is mising CONFIG_EFI_PARTITION, the required partitons
are missing too.
Just skip the test if loop block device is not available.
2024-07-12 11:58:06 +00:00
Milan Broz
94f37efb57 Remove obsolete AC_PROG_GCC_TRADITIONAL macro.
As it causes warnings and does nothing for many years already.
2024-07-10 10:32:27 +02:00
Milan Broz
5fb6d711c1 Fix clang possible rh NULL dereference warning. 2024-07-10 09:48:10 +02:00
Milan Broz
b0be186f9e Fix leaked fd gcc analyzer warning.
These are actually false positives (fd 0 is always open as stdin),
but code is even more readable with this fix.
2024-07-10 09:48:08 +02:00
Milan Broz
b1cc660df3 Do not use assert() that depends on external data.
Just fail function. Also fixed gcc analyzer warning (leaked fd).
2024-07-10 09:48:05 +02:00
Milan Broz
35a9f08062 Fix warning about unitialized passwordLen.
THis is false positive, but fix is trivial.
2024-07-10 09:48:02 +02:00
Milan Broz
9c47812904 Use buffer functions and fix potential fd leak.
Use read/write buffer functions to avoid partial operation.

This also fixed leaked fd warning. Also fix error path
for context failure - if initialize_context() fails,
rc->log_fd is closed in context destructor, no need to close
it in open_log/parse_log.

Another fixed bug is in parse_log, where immediatelly after
creation we have to seek to the beginning of the file first.
2024-07-10 09:47:59 +02:00
Milan Broz
8b21b4b2ee Fix "allocated buffer size is not a multiple of the pointee's size" warning
No need to play games with void pointers, two separate functions are
much more readable.
2024-07-10 09:47:56 +02:00
Milan Broz
bf088de00f Update CI shared runner compiler versions. 2024-07-10 09:43:33 +02:00
Milan Broz
1423c6eac2 TCRYPT: make algorithms definitions static 2024-07-02 13:04:30 +00:00
Milan Broz
e5b430cdc1 TCRYPT: use bool instead of one bit integer 2024-07-02 13:04:30 +00:00
Milan Broz
a5e409c186 TCRYPT: update system encryption images and test. 2024-07-02 13:04:30 +00:00
Milan Broz
0cc686af59 TCRYPT: Clear mapping of system encrypted partitions.
TrueCrypt/VeraCrypt supports full system encryption (only a partition
table is not encrypted) or system partition encryption
(only a system partition is encrypted).
The metadata header then contains the offset and size of the encrypted area.
Cryptsetup needs to know the specific partition offset to calculate encryption parameters.
To properly map a partition, you must specify a real partition device so cryptsetup can calculate this offset.

As user can specify various combination, we need to determine the proper
IV and data offsets.

The logic for CRYPT_TCRYPT_SYSTEM_HEADER flag should be (in this order):
- if data device is a real partition, calculate offset from it.
- if --header is a real partition , calculate offset from it.
- if device is a real disk, try to search for partition using decrypted offset and size
(works only for system partition-only encryption).
- if data and metadata (header) device is the same, map whole encrypted area
(this is the ost confusing for user)
- if data and metadata (header) divice differs, expect data image contains
only partition (setting offset to 0, but using IV offset from header).

There are still situation that can end with wrong mapping, but user now has the option
to setup it properly.

Also this patch fixes use of stored encryption size in header,
so we do not map larger area.

Fixes:#889
2024-07-02 13:04:30 +00:00
Milan Broz
14fd0b5fc1 TCRYPT: Print all information from decrypted header.
Print also volume sizes (if present) and flags.
This inforamtion is useful mainly for setting systemd encryption
where size determines encrypted region.
2024-07-02 13:04:30 +00:00
Ondrej Kozina
9651d1f376 Fix a typo in valgrind test parameter. 2024-07-02 13:03:01 +00:00
Milan Broz
98b4243432 Add support for high-priority dm-crypt flag.
This patch add new --perf-high_priority cryptsetup option
for flga added in Linux kernel 6.10, dm-crypt target version 1.26.
2024-06-18 11:00:38 +00:00
Milan Broz
e32ea56b59 Update README for version 2.7.3. 2024-06-17 14:39:42 +02:00