Commit Graph

4555 Commits

Author SHA1 Message Date
Milan Broz
70f0938fff tests: disable broken OPAL HW
This NVMe is crashing kernel now.
2025-03-20 14:04:16 +01:00
Ondrej Kozina
fbb8d2e910 Revert "Add temporary workaround for broken kernels since 6.14-rc3."
This reverts commit b2da80909a.

The kernel 6.14-rc7 was already release including the proper fix.
2025-03-20 10:03:41 +01:00
Milan Broz
9e6fcefefc Remove redundant --verify-passphrase in man.
Fixes: #938
2025-03-09 20:23:12 +01:00
Vojtech Trefny
bf5d56d804 tests: Add a BITLK test image with two recovery passphrases
It is possible to add multiple recovery passphrases to a BitLocker
device so we should make sure we check both key slots when trying
to activate the device.
2025-03-09 11:23:48 +01:00
Ondrej Kozina
c1b7ad8979 Fix the debug message for too large json data during write. 2025-03-07 15:44:41 +01:00
Ondrej Kozina
fcf266667b Add validation tests for json area in non compact version.
The non compact json area may contiain whitespace characters
in between json object key and value (e.g.: {"key":   "the_value"}).

For LUKS2 write optimization we need to check and do regression testing
for the case where LUKS2 metadata would contain valid LUKS2 json area in
non compact format. The test is meant to verify if the write optimization
does not leave invalid characters beyond valid and properly terminated
LUKS2 json area.
2025-03-07 15:44:41 +01:00
Ondrej Kozina
cb0f568932 Optimize LUKS2 metadata writes.
LUKS2 supports several jsom area length configurations. With
the largest size supported in megabytes we do not want to write full
metadata area unconditionaly (current code) with every metadata
update. This might generate noticeble overhead with LUKS2
reencryption.

With this patch we write only the real used json area
length plus necessary padding to overwrite remaining previous
metadata stored on the disk.

During LUKS2 format and LUKS2 autorecovery we always overwrite
whole json metadata area no matter the used size.
2025-03-07 15:44:41 +01:00
Ondrej Kozina
000f03ad31 Switch to crypt_jobj_to_string_on_disk().
Use single function when we require json format
string representation for on disk format.
2025-03-07 15:44:41 +01:00
Ondrej Kozina
07e8628940 Add helper to unify json string format.
Add a single function to use when generating
json format string representation for on disk
storage purposes so that it can be easily
reused when needed.
2025-03-07 15:44:41 +01:00
Milan Broz
fdb179ea8b verity: Avoid false positive unititialized warning. 2025-03-07 14:43:57 +01:00
Ondrej Kozina
b91aee46c1 Use lower level code for droping signature from kernel keyring.
We do not need to used crypt_unlink_key_by_description_from_thread_keyring
since it also sets some additional parameters unrelated to dm-verity
signatures.

Also it's useless to search kernel key by description when
we have the key id.
2025-03-06 17:17:36 +01:00
Ondrej Kozina
eccccfd9b5 Fix drop of volume key from kernel keyring on crypt_suspend.
We do not have to query device-mapper subsystem
twice in order to get volume key description in kernel keyring.

Also there was a bug that wrongly used kernel key type set by function
supposed to set custom user key type used only when linking volume key
in arbitrary kernel keyring on caller demand.
2025-03-06 17:17:36 +01:00
Ondrej Kozina
2dc886053f Drop unused temporary volume key helpers. 2025-03-06 17:17:36 +01:00
Ondrej Kozina
0a6ee8633a Switch to volume key keyring helpers.
And do not access volume key internals bearing
information whether the key payload was uploaded
in kernel keyring or not.
2025-03-06 17:17:36 +01:00
Ondrej Kozina
15c4a410fd Add volume key helpers for manipulating kernel keys. 2025-03-06 17:17:36 +01:00
Ondrej Kozina
5615488196 Refactor and unify naming conventions for internal keyring helpers.
Functions related to uploading/unlinking volume keys in user
requested kernel keyrings are named as follows:

crypt_single_volume_key_load_in_custom_keyring
crypt_volume_key_load_in_custom_keyring
crypt_unlink_key_from_custom_keyring

helpers for unlinking LUKS2 volume keys from thread keyring:

crypt_unlink_key_from_thread_keyring
crypt_unlink_key_by_description_from_thread_keyring
2025-03-06 17:17:36 +01:00
Ondrej Kozina
c9edd942e8 Remove keyring_add_key_to_custom_keyring function.
The was identical function in keyring utilities already,
except the function name.
2025-03-06 17:17:36 +01:00
Milan Broz
d792de66d5 Fix typo in comment. 2025-03-06 17:16:25 +01:00
Vojtech Trefny
848f16bb5e man: Fix link for --allow-discards option explanation
--allow-discards is documented only in open and refresh man pages
not in luksFormat.
2025-03-06 17:15:41 +01:00
Vojtech Trefny
8573eb515d Fix docstring for crypt_persistent_flags_set
Add all persistent flags and use full name of the flags.
2025-03-06 17:14:11 +01:00
Ondrej Kozina
b2da80909a Add temporary workaround for broken kernels since 6.14-rc3.
The kernel 6.14-rc3 introduced regretion with 1f47ed294a2bd577d5a

The commit changed how errors are propagated and with it OPAL2 devices
no longer returns -EIO on IO to locker region.

Revert this patch after the kernel gets fixed.
2025-03-06 14:23:46 +01:00
Ondrej Kozina
db57571906 Test invalid --luks2-keyslots-size value.
The test was supposed to check if invalid --luks2-keyslots-size
metadata value will trigger failure.

The 128MiB was valid value and the test failed only due to smaller
test device size.

(In case of OPAL2 device it spanned into locked region.)
2025-03-06 14:23:22 +01:00
Milan Broz
93bc8997ea tests: Fix targets/kernel version detection
It is really not a good idea to check minor version without
checking major version is not lower first.

Also try to prepare for situation when major target versions
increases.
2025-02-19 13:50:24 +01:00
nl6720
52c63b5de1 Note the need to omit separator characters from the PSID 2025-02-19 12:42:27 +02:00
Milan Broz
dded9b3305 veritysetup: Support --error-as-corruption option.
The panic/restart_on_error options were introduces in kernel 6.12.

As it does not make sense to set these flags without
data corruption handling, only one option error-as-corruption
is implemented that must be used in combination with
panic/restart on corruption.
2025-02-16 20:53:35 +01:00
Milan Broz
41b8b02ccf verity: Add support for restart/panic on error flag.
Introduced in kernel 6.12.
2025-02-16 20:53:35 +01:00
Milan Broz
7ee0b02967 Make test libdevmapper flags 64bit. 2025-02-16 20:52:37 +01:00
Milan Broz
a3455befe7 Sync libdevmapper flags in tests. 2025-02-16 20:52:37 +01:00
Milan Broz
f07854ab4f Make libdevmapper internal flags 64bit. 2025-02-16 20:52:37 +01:00
Milan Broz
c497945ab3 Make internal dm_flags 64bit. 2025-02-16 20:52:37 +01:00
Ondrej Kozina
036ed52999 Remove volume key internals from internal API. 2025-02-16 18:00:20 +00:00
Ondrej Kozina
1bec71dbe1 Add temporary helpers to indicate uploaded volume key.
To be removed later when we add clear implementation
to hide access to volume key uploaded attribute.
2025-02-16 18:00:20 +00:00
Ondrej Kozina
9e0bcedbaa Harden LUKS2 volume key compare helper. 2025-02-16 18:00:20 +00:00
Milan Broz
6123ea2e0b Add strict compare volume key comparison for non-LUKS2 devices.
[Modified by Ondrej Kozina]
2025-02-16 18:00:20 +00:00
Ondrej Kozina
f421ec0800 Simplify volume key compare helper.
Since we can now identify volume key not containing
real key data we can make _compare_volume_key more
comprehensible.
2025-02-16 18:00:20 +00:00
Ondrej Kozina
843fac813f Indicate volume key with initialized key content.
volume key does not have to always contain properly
initialized key content (binary buffer). Add helper
to notify callers about it.
2025-02-16 18:00:20 +00:00
Ondrej Kozina
6ee76934fa Harden and limit access to volume key internals.
The volume key structure may often be in configuration
where 'key' member does not contain real data. Some
examples:

- volume key acquired by querring device-mapper where key
  was originaly passed by kernel keyring reference.

- volume key allocated by crypt_alloc_volume_key(size, NULL)

With this patch access to internal 'uninitialized' data result
in failed assert().

For use cases where key data are not needed (keyring reference wrapper,
key length info only) we do not have to allocate and lock the safe
buffer in memory.

Further improvements might to completely hide the volume key internals
and access only via setter and getter functions.
2025-02-16 18:00:20 +00:00
Ondrej Kozina
f86ab28ad6 Add crypt_safe_alloc_size helper.
Returns size of the payload. Zero means error.
2025-02-16 18:00:20 +00:00
Ondrej Kozina
54d937dfc7 Switch away from accessing volume key internals directly.
Switch current code to use following volume key helpers
for accessing internal properties:

crypt_volume_key_length(), crypt_volume_key_get_key(),
crypt_volume_key_description() and crypt_volume_key_kernel_key_type()

Remaining direct access to volume key internals will be dealt with in
later commits since it requires some further changes.
2025-02-16 18:00:20 +00:00
Ondrej Kozina
fd9be9e777 Add severeal helpers (get methods) for volume key.
crypt_volume_key_length() for key length
crypt_volume_key_get_key() to access key data (if initialized)
crypt_volume_key_description() for kernel key description
crypt_volume_key_kernel_key_type() for kernel keyring key type
2025-02-16 18:00:20 +00:00
Milan Broz
63f7dc739b fuzz: Better log from installation script
Print last commit from each git repo.
Also use master branch for zlib.
2025-02-15 14:57:19 +01:00
Milan Broz
a2b2c6a8ae Add workaround for memory sanitizer that cannot recognize explicit_bzero.
Otherwise it produces a lot of false positives in OSS-Fuzz.
2025-02-08 15:06:36 +01:00
Milan Broz
3899484be8 fuzz: Fix use of PWD variable.
The PWD variable is set by bash itself on every cd command,
rename it so it works as expected.
2025-02-08 15:06:33 +01:00
Ondrej Kozina
a965a88992 Add const to pointer in blob_serialize() function.
the data is read-only in this context.
2025-02-06 11:41:30 +01:00
Ondrej Kozina
88b3da6042 Use new crypt_generate_volume_key to generate weaker keys.
There were two different use cases for weaker keys:

1) empty keys (zero filled buffer)
2) weak 'random' keys not sucking entropy while being generated

Those key types must not be used to encrypt real data. It's used either
to check cipher can be configured sucessfully on the system or as
a fake envelope during metadata repair.
2025-02-06 11:41:26 +01:00
Ondrej Kozina
1326dfbac1 Add generic crypt_generate_volume_key function.
So that we can generate keys with different 'quality'
attribute at one place.
2025-02-06 11:37:04 +01:00
Ondrej Kozina
4f90213a5b Drop redundant member initialization in volume key.
The memory is already initialized to zeroes after allocation.
2025-02-06 11:30:18 +01:00
Ondrej Kozina
5ee549de1e Remove volume_key struct from fvault2 code.
No volume_key feature is used in the code and it
will make further changes easier.
2025-02-06 11:30:18 +01:00
Ondrej Kozina
e9073e6b19 Add keyring key type in volume key comparison function. 2025-02-06 11:30:18 +01:00
Ondrej Kozina
dc75deff51 Drop bogus usage of vk->uploaded.
The volume key uploaded attribute is respected only with
regard to volume keys uploaded in the thread keyring in logon key type.

Here the uploaded attribute was set for volume keys uploaded in
custom user keyrings in custome key descriptions.
2025-02-06 11:21:42 +01:00