dm-crypt: recheck the integrity tag after a failure
authorMikulas Patocka <mpatocka@redhat.com>
Mon, 19 Feb 2024 20:31:11 +0000 (21:31 +0100)
committerMike Snitzer <snitzer@kernel.org>
Tue, 20 Feb 2024 18:34:32 +0000 (13:34 -0500)
commit42e15d12070b4ff9af2b980f1b65774c2dab0507
tree4b9f75a15e855dec081f7b81b99f83959a73b0d0
parent50c70240097ce41fe6bce6478b80478281e4d0f7
dm-crypt: recheck the integrity tag after a failure

If a userspace process reads (with O_DIRECT) multiple blocks into the same
buffer, dm-crypt reports an authentication error [1]. The error is
reported in a log and it may cause RAID leg being kicked out of the
array.

This commit fixes dm-crypt, so that if integrity verification fails, the
data is read again into a kernel buffer (where userspace can't modify it)
and the integrity tag is rechecked. If the recheck succeeds, the content
of the kernel buffer is copied into the user buffer; if the recheck fails,
an integrity error is reported.

[1] https://people.redhat.com/~mpatocka/testcases/blk-auth-modify/read2.c

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
drivers/md/dm-crypt.c