* [PATCH] block: fix lbmd_guard_tag_type assignment in FS_IOC_GETLBMD_CAP [not found] <CGME20250722081938epcas5p12a1ee45419754afa2f1c1c9040d519d6@epcas5p1.samsung.com> @ 2025-07-22 8:19 ` Anuj Gupta 2025-07-22 8:45 ` Christoph Hellwig 0 siblings, 1 reply; 3+ messages in thread From: Anuj Gupta @ 2025-07-22 8:19 UTC (permalink / raw) To: vincent.fu, anuj1072538, axboe, hch, martin.petersen Cc: linux-block, joshi.k, Anuj Gupta The blk_get_meta_cap() implementation directly assigns bi->csum_type to the UAPI field lbmd_guard_tag_type. This is not right as the kernel enum blk_integrity_checksum values is not guaranteed to match the UAPI defined values. Fix this by explicitly mapping internal checksum types to UAPI-defined constants to ensure compatibility and correctness, especially for the devices using CRC64 PI. Fixes: 9eb22f7fedfc (add ioctl to query metadata and protection info capabilities) Reported-by: Vincent Fu <vincent.fu@samsung.com> Signed-off-by: Anuj Gupta <anuj20.g@samsung.com> --- block/blk-integrity.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/block/blk-integrity.c b/block/blk-integrity.c index 61a79e19c78f..2b5829c58aa1 100644 --- a/block/blk-integrity.c +++ b/block/blk-integrity.c @@ -83,7 +83,23 @@ int blk_get_meta_cap(struct block_device *bdev, unsigned int cmd, if (meta_cap.lbmd_opaque_size && !bi->pi_offset) meta_cap.lbmd_opaque_offset = bi->pi_tuple_size; - meta_cap.lbmd_guard_tag_type = bi->csum_type; + switch (bi->csum_type) { + case BLK_INTEGRITY_CSUM_NONE: + meta_cap.lbmd_guard_tag_type = LBMD_PI_CSUM_NONE; + break; + case BLK_INTEGRITY_CSUM_IP: + meta_cap.lbmd_guard_tag_type = LBMD_PI_CSUM_IP; + break; + case BLK_INTEGRITY_CSUM_CRC: + meta_cap.lbmd_guard_tag_type = LBMD_PI_CSUM_CRC16_T10DIF; + break; + case BLK_INTEGRITY_CSUM_CRC64: + meta_cap.lbmd_guard_tag_type = LBMD_PI_CSUM_CRC64_NVME; + break; + default: + break; + } + if (bi->csum_type != BLK_INTEGRITY_CSUM_NONE) meta_cap.lbmd_app_tag_size = 2; -- 2.25.1 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] block: fix lbmd_guard_tag_type assignment in FS_IOC_GETLBMD_CAP 2025-07-22 8:19 ` [PATCH] block: fix lbmd_guard_tag_type assignment in FS_IOC_GETLBMD_CAP Anuj Gupta @ 2025-07-22 8:45 ` Christoph Hellwig 2025-07-22 8:47 ` Christoph Hellwig 0 siblings, 1 reply; 3+ messages in thread From: Christoph Hellwig @ 2025-07-22 8:45 UTC (permalink / raw) To: Anuj Gupta Cc: vincent.fu, anuj1072538, axboe, hch, martin.petersen, linux-block, joshi.k On Tue, Jul 22, 2025 at 01:49:11PM +0530, Anuj Gupta wrote: > + switch (bi->csum_type) { > + case BLK_INTEGRITY_CSUM_NONE: > + meta_cap.lbmd_guard_tag_type = LBMD_PI_CSUM_NONE; > + break; > + case BLK_INTEGRITY_CSUM_IP: > + meta_cap.lbmd_guard_tag_type = LBMD_PI_CSUM_IP; > + break; > + case BLK_INTEGRITY_CSUM_CRC: > + meta_cap.lbmd_guard_tag_type = LBMD_PI_CSUM_CRC16_T10DIF; > + break; > + case BLK_INTEGRITY_CSUM_CRC64: > + meta_cap.lbmd_guard_tag_type = LBMD_PI_CSUM_CRC64_NVME; > + break; > + default: > + break; This should catch and reject invalid values. Otherwise the patch looks fine. ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] block: fix lbmd_guard_tag_type assignment in FS_IOC_GETLBMD_CAP 2025-07-22 8:45 ` Christoph Hellwig @ 2025-07-22 8:47 ` Christoph Hellwig 0 siblings, 0 replies; 3+ messages in thread From: Christoph Hellwig @ 2025-07-22 8:47 UTC (permalink / raw) To: Anuj Gupta Cc: vincent.fu, anuj1072538, axboe, hch, martin.petersen, linux-block, joshi.k On Tue, Jul 22, 2025 at 01:45:53AM -0700, Christoph Hellwig wrote: > On Tue, Jul 22, 2025 at 01:49:11PM +0530, Anuj Gupta wrote: > > + switch (bi->csum_type) { > > + case BLK_INTEGRITY_CSUM_NONE: > > + meta_cap.lbmd_guard_tag_type = LBMD_PI_CSUM_NONE; > > + break; > > + case BLK_INTEGRITY_CSUM_IP: > > + meta_cap.lbmd_guard_tag_type = LBMD_PI_CSUM_IP; > > + break; > > + case BLK_INTEGRITY_CSUM_CRC: > > + meta_cap.lbmd_guard_tag_type = LBMD_PI_CSUM_CRC16_T10DIF; > > + break; > > + case BLK_INTEGRITY_CSUM_CRC64: > > + meta_cap.lbmd_guard_tag_type = LBMD_PI_CSUM_CRC64_NVME; > > + break; > > + default: > > + break; > > This should catch and reject invalid values. Otherwise the patch looks > fine. I guess reject is wrong, as the kernel is the source, but I think a bit of validation here still makes sense. I think if you just leave the default out, the compiler would complain if we added a new value to the union without handling it here, which should be enough. ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-07-22 8:47 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <CGME20250722081938epcas5p12a1ee45419754afa2f1c1c9040d519d6@epcas5p1.samsung.com>
2025-07-22 8:19 ` [PATCH] block: fix lbmd_guard_tag_type assignment in FS_IOC_GETLBMD_CAP Anuj Gupta
2025-07-22 8:45 ` Christoph Hellwig
2025-07-22 8:47 ` Christoph Hellwig
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox