Skip to content

Commit ca22c56

Browse files
calebsanderaxboe
authored andcommitted
block: zero non-PI portion of auto integrity buffer
The auto-generated integrity buffer for writes needs to be fully initialized before being passed to the underlying block device, otherwise the uninitialized memory can be read back by userspace or anyone with physical access to the storage device. If protection information is generated, that portion of the integrity buffer is already initialized. The integrity data is also zeroed if PI generation is disabled via sysfs or the PI tuple size is 0. However, this misses the case where PI is generated and the PI tuple size is nonzero, but the metadata size is larger than the PI tuple. In this case, the remainder ("opaque") of the metadata is left uninitialized. Generalize the BLK_INTEGRITY_CSUM_NONE check to cover any case when the metadata is larger than just the PI tuple. Signed-off-by: Caleb Sander Mateos <csander@purestorage.com> Fixes: c546d6f ("block: only zero non-PI metadata tuples in bio_integrity_prep") Reviewed-by: Anuj Gupta <anuj20.g@samsung.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent f0d385f commit ca22c56

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

block/bio-integrity-auto.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ bool bio_integrity_prep(struct bio *bio)
140140
return true;
141141
set_flags = false;
142142
gfp |= __GFP_ZERO;
143-
} else if (bi->csum_type == BLK_INTEGRITY_CSUM_NONE)
143+
} else if (bi->metadata_size > bi->pi_tuple_size)
144144
gfp |= __GFP_ZERO;
145145
break;
146146
default:

0 commit comments

Comments
 (0)