dm-crypt: don't modify the data when using authenticated encryption
authorMikulas Patocka <mpatocka@redhat.com>
Mon, 19 Feb 2024 20:30:10 +0000 (21:30 +0100)
committerMike Snitzer <snitzer@kernel.org>
Tue, 20 Feb 2024 18:34:31 +0000 (13:34 -0500)
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: Mikulas Patocka <mpatocka@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
drivers/md/dm-crypt.c

index f745f85082434dca8fb6d6bf9efe30db79b2a81e..14c5be6eda3b6ac160429ab9100d72f893e83b16 100644 (file)
@@ -2071,6 +2071,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);