Patch "block: initialize integrity buffer to zero before writing it to media" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    block: initialize integrity buffer to zero before writing it to media

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     block-initialize-integrity-buffer-to-zero-before-wri.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 97cc35196930ee25f7b4f56ea01890dafc7cce6a
Author: Christoph Hellwig <hch@xxxxxx>
Date:   Thu Jun 13 10:48:11 2024 +0200

    block: initialize integrity buffer to zero before writing it to media
    
    [ Upstream commit 899ee2c3829c5ac14bfc7d3c4a5846c0b709b78f ]
    
    Metadata added by bio_integrity_prep is using plain kmalloc, which leads
    to random kernel memory being written media.  For PI metadata this is
    limited to the app tag that isn't used by kernel generated metadata,
    but for non-PI metadata the entire buffer leaks kernel memory.
    
    Fix this by adding the __GFP_ZERO flag to allocations for writes.
    
    Fixes: 7ba1ba12eeef ("block: Block layer data integrity support")
    Signed-off-by: Christoph Hellwig <hch@xxxxxx>
    Reviewed-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx>
    Reviewed-by: Kanchan Joshi <joshi.k@xxxxxxxxxxx>
    Reviewed-by: Chaitanya Kulkarni <kch@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240613084839.1044015-2-hch@xxxxxx
    Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/block/bio-integrity.c b/block/bio-integrity.c
index 3693daa1c894e..bb364a25ac869 100644
--- a/block/bio-integrity.c
+++ b/block/bio-integrity.c
@@ -203,6 +203,7 @@ bool bio_integrity_prep(struct bio *bio)
 	unsigned long start, end;
 	unsigned int len, nr_pages;
 	unsigned int bytes, offset, i;
+	gfp_t gfp = GFP_NOIO;
 
 	if (!bi)
 		return true;
@@ -225,11 +226,19 @@ bool bio_integrity_prep(struct bio *bio)
 		if (!bi->profile->generate_fn ||
 		    !(bi->flags & BLK_INTEGRITY_GENERATE))
 			return true;
+
+		/*
+		 * Zero the memory allocated to not leak uninitialized kernel
+		 * memory to disk.  For PI this only affects the app tag, but
+		 * for non-integrity metadata it affects the entire metadata
+		 * buffer.
+		 */
+		gfp |= __GFP_ZERO;
 	}
 
 	/* Allocate kernel buffer for protection data */
 	len = bio_integrity_bytes(bi, bio_sectors(bio));
-	buf = kmalloc(len, GFP_NOIO);
+	buf = kmalloc(len, gfp);
 	if (unlikely(buf == NULL)) {
 		printk(KERN_ERR "could not allocate integrity buffer\n");
 		goto err_end_io;




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux