Commit 3b3f5017 authored by Mikulas Patocka's avatar Mikulas Patocka Committed by Li Lingfeng
Browse files

dm-crypt: don't modify the data when using authenticated encryption

stable inclusion
from stable-v5.10.211
commit 3c652f6fa1e1f9f02c3fbf359d260ad153ec5f90
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I9E2LW
CVE: CVE-2024-26763

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=3c652f6fa1e1f9f02c3fbf359d260ad153ec5f90

--------------------------------

commit 50c70240097ce41fe6bce6478b80478281e4d0f7 upstream.

It was said that authenticated encryption could produce invalid tag when
the data that is being encrypted is modified [1]. So, fix this problem by
copying the data into the clone bio first and then encrypt them inside the
clone bio.

This may reduce performance, but it is needed to prevent the user from
corrupting the device by writing data with O_DIRECT and modifying them at
the same time.

[1] https://lore.kernel.org/all/20240207004723.GA35324@sol.localdomain/T/



Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarLi Lingfeng <lilingfeng3@huawei.com>
parent 9f126942
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -2064,6 +2064,12 @@ static void kcryptd_crypt_write_convert(struct dm_crypt_io *io)
	io->ctx.bio_out = clone;
	io->ctx.iter_out = clone->bi_iter;

	if (crypt_integrity_aead(cc)) {
		bio_copy_data(clone, io->base_bio);
		io->ctx.bio_in = clone;
		io->ctx.iter_in = clone->bi_iter;
	}

	sector += bio_sectors(clone);

	crypt_inc_pending(io);