On 2025-02-05 21:23, Mikulas Patocka wrote:
Introduce ahash support for the "internal hash" algorithm.
Rework the dm-integrity code to be able to run the "internal hash"
either with a synchronous ("shash") or asynchronous ("ahash") hash
algorithm implementation.
The get_mac() function now tries to decide which of the digest
implemenations to use if there is a choice:
- If an ahash and shash tfm is available and both are backed by the
same driver name it is assumed that the shash is the faster
implementation and thus the shash tfm is delivered to the caller.
- If an ahash and shash tfm is available but the backing device driver
divers (different driver names) it is assumed that the ahash
implementation is a "better" hardware based implementation and thus
the ahash tfm is delivered to the caller.
- If there is no choice, for example only an ahash or an shash
implementation is available then this tfm is delivered to the
caller. Especially in cases where only an ahash implementation is
available this is now used instead of failing.
- The caller can steer this choice by passing a NULL to the ahash or
shash parameter, thus enforcing to only allocate an algorithm of the
remaining possibility.
The function integrity_sector_checksum() is now only a dispatcher
function calling one of the two new functions
integrity_ahash_sector_checksum() or integrity_shash_sector_checksum()
based on which tfm is allocated based on the two new fields
internal_shash and internal_ahash in struct dm_integrity_c.
Together with this comes some slight rework around availability and
digest size of the internal hash in use.
Signed-off-by: Harald Freudenberger <freude@xxxxxxxxxxxxx>
Signed-off-by: Mikulas Patocka <mpatocka@xxxxxxxxxx>
---
drivers/md/dm-integrity.c | 350
+++++++++++++++++++++++++++++++++-------------
1 file changed, 252 insertions(+), 98 deletions(-)
Index: linux-2.6/drivers/md/dm-integrity.c
===================================================================
...
static struct target_type integrity_target = {
.name = "integrity",
- .version = {1, 13, 0},
+ .version = {1, 14, 0},
.module = THIS_MODULE,
.features = DM_TARGET_SINGLETON | DM_TARGET_INTEGRITY,
.ctr = dm_integrity_ctr,
Mikulas, I am still working.
All the straight forward tests where successful. Even my new phma-shaxxx
was running fine. The integrity-compat-test also found no issues.
However, as you wrote, I enforced using ahashes in get_mac() and
catched some weird kernel crashes but had no time to investigate
further.
I'll continue on this as soon I have some spare time and will report
the results.
kind regards
Harald Freudenberger