All of lore.kernel.org
 help / color / mirror / Atom feed
* fix fs-integrity for non-PI metadata v2
@ 2026-07-24  5:09 Christoph Hellwig
  2026-07-24  5:09 ` [PATCH 1/4] block: remove bip_should_check Christoph Hellwig
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Christoph Hellwig @ 2026-07-24  5:09 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Martin K. Petersen, Kanchan Joshi, Anuj Gupta, Christian Brauner,
	Darrick J. Wong, linux-block, linux-xfs, linux-fsdevel

Hi all,

this series fixes incorrect calls into the PI generation helpers
when using fs-integrity on devics with non-PI metadata.

Changes since v1:
 - fix two more null pointer dereferences

(I though I already sent this out yesterday, but can't find it in the
archives.  At least this way I could pick up two more reviews from the
post as part of the larger lazy bounce buffer series.  Sorry if you
somehow got this twice)

Diffstat:
 block/bio-integrity-auto.c    |   10 ++--------
 block/bio-integrity-fs.c      |    6 +++++-
 fs/iomap/bio.c                |    2 +-
 include/linux/bio-integrity.h |    3 +++
 4 files changed, 11 insertions(+), 10 deletions(-)

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/4] block: remove bip_should_check
  2026-07-24  5:09 fix fs-integrity for non-PI metadata v2 Christoph Hellwig
@ 2026-07-24  5:09 ` Christoph Hellwig
  2026-07-24 12:22   ` Kanchan Joshi
  2026-07-24  5:09 ` [PATCH 2/4] block: lift BIP_CHECK_FLAGS to include/linux/bio-integrity.h Christoph Hellwig
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 12+ messages in thread
From: Christoph Hellwig @ 2026-07-24  5:09 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Martin K. Petersen, Kanchan Joshi, Anuj Gupta, Christian Brauner,
	Darrick J. Wong, linux-block, linux-xfs, linux-fsdevel

There is no benefit in using this helper over the simple flags check.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Anuj Gupta <anuj20.g@samsung.com>
---
 block/bio-integrity-auto.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/block/bio-integrity-auto.c b/block/bio-integrity-auto.c
index b1c733ecfd2e..43ac9f338183 100644
--- a/block/bio-integrity-auto.c
+++ b/block/bio-integrity-auto.c
@@ -45,10 +45,6 @@ static void bio_integrity_verify_fn(struct work_struct *work)
 }
 
 #define BIP_CHECK_FLAGS (BIP_CHECK_GUARD | BIP_CHECK_REFTAG | BIP_CHECK_APPTAG)
-static bool bip_should_check(struct bio_integrity_payload *bip)
-{
-	return bip->bip_flags & BIP_CHECK_FLAGS;
-}
 
 /**
  * __bio_integrity_endio - Integrity I/O completion function
@@ -66,7 +62,7 @@ bool __bio_integrity_endio(struct bio *bio)
 		container_of(bip, struct bio_integrity_data, bip);
 
 	if (bio_op(bio) == REQ_OP_READ && !bio->bi_status &&
-	    bip_should_check(bip)) {
+	    (bip->bip_flags & BIP_CHECK_FLAGS)) {
 		INIT_WORK(&bid->work, bio_integrity_verify_fn);
 		queue_work(kintegrityd_wq, &bid->work);
 		return false;
@@ -99,7 +95,7 @@ void bio_integrity_prep(struct bio *bio, unsigned int action)
 		bio_integrity_setup_default(bio);
 
 	/* Auto-generate integrity metadata if this is a write */
-	if (bio_data_dir(bio) == WRITE && bip_should_check(&bid->bip))
+	if (bio_data_dir(bio) == WRITE && (bid->bip.bip_flags & BIP_CHECK_FLAGS))
 		bio_integrity_generate(bio);
 	else
 		bid->saved_bio_iter = bio->bi_iter;
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 2/4] block: lift BIP_CHECK_FLAGS to include/linux/bio-integrity.h
  2026-07-24  5:09 fix fs-integrity for non-PI metadata v2 Christoph Hellwig
  2026-07-24  5:09 ` [PATCH 1/4] block: remove bip_should_check Christoph Hellwig
@ 2026-07-24  5:09 ` Christoph Hellwig
  2026-07-24 12:22   ` Kanchan Joshi
  2026-07-24  5:09 ` [PATCH 3/4] block: handle nogenerate/noverify properly in fs-integrity Christoph Hellwig
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 12+ messages in thread
From: Christoph Hellwig @ 2026-07-24  5:09 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Martin K. Petersen, Kanchan Joshi, Anuj Gupta, Christian Brauner,
	Darrick J. Wong, linux-block, linux-xfs, linux-fsdevel

To allow for users outside of bio-integrity-auto.c.  Also add a little
comment explaining it.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Anuj Gupta <anuj20.g@samsung.com>
---
 block/bio-integrity-auto.c    | 2 --
 include/linux/bio-integrity.h | 3 +++
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/block/bio-integrity-auto.c b/block/bio-integrity-auto.c
index 43ac9f338183..9456dcffd17a 100644
--- a/block/bio-integrity-auto.c
+++ b/block/bio-integrity-auto.c
@@ -44,8 +44,6 @@ static void bio_integrity_verify_fn(struct work_struct *work)
 	bio_endio(bio);
 }
 
-#define BIP_CHECK_FLAGS (BIP_CHECK_GUARD | BIP_CHECK_REFTAG | BIP_CHECK_APPTAG)
-
 /**
  * __bio_integrity_endio - Integrity I/O completion function
  * @bio:	Protected bio
diff --git a/include/linux/bio-integrity.h b/include/linux/bio-integrity.h
index c3dda32fd803..0ea2a8bf7efb 100644
--- a/include/linux/bio-integrity.h
+++ b/include/linux/bio-integrity.h
@@ -17,6 +17,9 @@ enum bip_flags {
 	BIP_MEMPOOL		= 1 << 15, /* buffer backed by mempool */
 };
 
+/* flags that require generate/verify action. */
+#define BIP_CHECK_FLAGS (BIP_CHECK_GUARD | BIP_CHECK_REFTAG | BIP_CHECK_APPTAG)
+
 struct bio_integrity_payload {
 	struct bvec_iter	bip_iter;
 
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 3/4] block: handle nogenerate/noverify properly in fs-integrity
  2026-07-24  5:09 fix fs-integrity for non-PI metadata v2 Christoph Hellwig
  2026-07-24  5:09 ` [PATCH 1/4] block: remove bip_should_check Christoph Hellwig
  2026-07-24  5:09 ` [PATCH 2/4] block: lift BIP_CHECK_FLAGS to include/linux/bio-integrity.h Christoph Hellwig
@ 2026-07-24  5:09 ` Christoph Hellwig
  2026-07-24 12:24   ` Kanchan Joshi
  2026-07-24  5:09 ` [PATCH 4/4] iomap: don't free integrity payload that doesn't exist Christoph Hellwig
  2026-07-24 13:47 ` fix fs-integrity for non-PI metadata v2 Martin K. Petersen
  4 siblings, 1 reply; 12+ messages in thread
From: Christoph Hellwig @ 2026-07-24  5:09 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Martin K. Petersen, Kanchan Joshi, Anuj Gupta, Christian Brauner,
	Darrick J. Wong, linux-block, linux-xfs, linux-fsdevel

Check the BIP_CHECK flags before generating or verifying PI information,
otherwise this can be incorrectly called for non-PI metadata and
cause generation of incorrect metadata and crashed in the verification
handler.

The new behavior matches that of the block layer auto-generated
metadata.

Fixes: 0bde8a12b554 ("block: add fs_bio_integrity helpers")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Anuj Gupta <anuj20.g@samsung.com>
---
 block/bio-integrity-fs.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/block/bio-integrity-fs.c b/block/bio-integrity-fs.c
index 9c5fe5fa8f0d..692403dfa047 100644
--- a/block/bio-integrity-fs.c
+++ b/block/bio-integrity-fs.c
@@ -46,7 +46,8 @@ void fs_bio_integrity_free(struct bio *bio)
 
 void fs_bio_integrity_generate(struct bio *bio)
 {
-	if (fs_bio_integrity_alloc(bio))
+	if (fs_bio_integrity_alloc(bio) &&
+	    (bio_integrity(bio)->bip_flags & BIP_CHECK_FLAGS))
 		bio_integrity_generate(bio);
 }
 EXPORT_SYMBOL_GPL(fs_bio_integrity_generate);
@@ -60,6 +61,9 @@ int fs_bio_integrity_verify(struct bio *bio, sector_t sector, unsigned int size)
 		.bi_size	= size,
 	};
 
+	if (!bip || !(bip->bip_flags & BIP_CHECK_FLAGS))
+		return 0;
+
 	/*
 	 * Reinitialize bip->bip_iter.
 	 *
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 4/4] iomap: don't free integrity payload that doesn't exist
  2026-07-24  5:09 fix fs-integrity for non-PI metadata v2 Christoph Hellwig
                   ` (2 preceding siblings ...)
  2026-07-24  5:09 ` [PATCH 3/4] block: handle nogenerate/noverify properly in fs-integrity Christoph Hellwig
@ 2026-07-24  5:09 ` Christoph Hellwig
  2026-07-24 12:29   ` Kanchan Joshi
                     ` (2 more replies)
  2026-07-24 13:47 ` fix fs-integrity for non-PI metadata v2 Martin K. Petersen
  4 siblings, 3 replies; 12+ messages in thread
From: Christoph Hellwig @ 2026-07-24  5:09 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Martin K. Petersen, Kanchan Joshi, Anuj Gupta, Christian Brauner,
	Darrick J. Wong, linux-block, linux-xfs, linux-fsdevel, stable

fs_bio_integrity_alloc might not allocate a bio integrity payload if PI
verification is disabled on the block device.  Check for that case before
calling fs_bio_integirty_free in iomap_bio_read_folio_range_sync to
avoid a NULL pointer dereferences.

Make the branch cover the PI verification as well - while
fs_bio_integrity_verify works without an integrity payload, it requires
one to actually do useful work.

Fixes: 0b10a370529c ("iomap: support T10 protection information")
Cc: <stable@vger.kernel.org> # v7.1
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
---
 fs/iomap/bio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/iomap/bio.c b/fs/iomap/bio.c
index dc8ac7e370a5..30ef78a66b4f 100644
--- a/fs/iomap/bio.c
+++ b/fs/iomap/bio.c
@@ -179,7 +179,7 @@ int iomap_bio_read_folio_range_sync(const struct iomap_iter *iter,
 	if (srcmap->flags & IOMAP_F_INTEGRITY)
 		fs_bio_integrity_alloc(&bio);
 	error = submit_bio_wait(&bio);
-	if (srcmap->flags & IOMAP_F_INTEGRITY) {
+	if (bio_integrity(&bio)) {
 		if (!error)
 			error = fs_bio_integrity_verify(&bio, sector, len);
 		fs_bio_integrity_free(&bio);
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] block: remove bip_should_check
  2026-07-24  5:09 ` [PATCH 1/4] block: remove bip_should_check Christoph Hellwig
@ 2026-07-24 12:22   ` Kanchan Joshi
  0 siblings, 0 replies; 12+ messages in thread
From: Kanchan Joshi @ 2026-07-24 12:22 UTC (permalink / raw)
  To: Christoph Hellwig, Jens Axboe
  Cc: Martin K. Petersen, Anuj Gupta, Christian Brauner,
	Darrick J. Wong, linux-block, linux-xfs, linux-fsdevel

Reviewed-by: Kanchan Joshi <joshi.k@samsung.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/4] block: lift BIP_CHECK_FLAGS to include/linux/bio-integrity.h
  2026-07-24  5:09 ` [PATCH 2/4] block: lift BIP_CHECK_FLAGS to include/linux/bio-integrity.h Christoph Hellwig
@ 2026-07-24 12:22   ` Kanchan Joshi
  0 siblings, 0 replies; 12+ messages in thread
From: Kanchan Joshi @ 2026-07-24 12:22 UTC (permalink / raw)
  To: Christoph Hellwig, Jens Axboe
  Cc: Martin K. Petersen, Anuj Gupta, Christian Brauner,
	Darrick J. Wong, linux-block, linux-xfs, linux-fsdevel

Reviewed-by: Kanchan Joshi <joshi.k@samsung.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 3/4] block: handle nogenerate/noverify properly in fs-integrity
  2026-07-24  5:09 ` [PATCH 3/4] block: handle nogenerate/noverify properly in fs-integrity Christoph Hellwig
@ 2026-07-24 12:24   ` Kanchan Joshi
  0 siblings, 0 replies; 12+ messages in thread
From: Kanchan Joshi @ 2026-07-24 12:24 UTC (permalink / raw)
  To: Christoph Hellwig, Jens Axboe
  Cc: Martin K. Petersen, Anuj Gupta, Christian Brauner,
	Darrick J. Wong, linux-block, linux-xfs, linux-fsdevel

Reviewed-by: Kanchan Joshi <joshi.k@samsung.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 4/4] iomap: don't free integrity payload that doesn't exist
  2026-07-24  5:09 ` [PATCH 4/4] iomap: don't free integrity payload that doesn't exist Christoph Hellwig
@ 2026-07-24 12:29   ` Kanchan Joshi
  2026-07-24 13:33   ` Anuj gupta
  2026-07-24 13:48   ` Martin K. Petersen
  2 siblings, 0 replies; 12+ messages in thread
From: Kanchan Joshi @ 2026-07-24 12:29 UTC (permalink / raw)
  To: Christoph Hellwig, Jens Axboe
  Cc: Martin K. Petersen, Anuj Gupta, Christian Brauner,
	Darrick J. Wong, linux-block, linux-xfs, linux-fsdevel, stable

Reviewed-by: Kanchan Joshi <joshi.k@samsung.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 4/4] iomap: don't free integrity payload that doesn't exist
  2026-07-24  5:09 ` [PATCH 4/4] iomap: don't free integrity payload that doesn't exist Christoph Hellwig
  2026-07-24 12:29   ` Kanchan Joshi
@ 2026-07-24 13:33   ` Anuj gupta
  2026-07-24 13:48   ` Martin K. Petersen
  2 siblings, 0 replies; 12+ messages in thread
From: Anuj gupta @ 2026-07-24 13:33 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Jens Axboe, Martin K. Petersen, Kanchan Joshi, Anuj Gupta,
	Christian Brauner, Darrick J. Wong, linux-block, linux-xfs,
	linux-fsdevel, stable

Reviewed-by: Anuj Gupta <anuj20.g@samsung.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: fix fs-integrity for non-PI metadata v2
  2026-07-24  5:09 fix fs-integrity for non-PI metadata v2 Christoph Hellwig
                   ` (3 preceding siblings ...)
  2026-07-24  5:09 ` [PATCH 4/4] iomap: don't free integrity payload that doesn't exist Christoph Hellwig
@ 2026-07-24 13:47 ` Martin K. Petersen
  4 siblings, 0 replies; 12+ messages in thread
From: Martin K. Petersen @ 2026-07-24 13:47 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Jens Axboe, Martin K. Petersen, Kanchan Joshi, Anuj Gupta,
	Christian Brauner, Darrick J. Wong, linux-block, linux-xfs,
	linux-fsdevel


Christoph,

> this series fixes incorrect calls into the PI generation helpers when
> using fs-integrity on devics with non-PI metadata.

Looks OK.

Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>

-- 
Martin K. Petersen

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 4/4] iomap: don't free integrity payload that doesn't exist
  2026-07-24  5:09 ` [PATCH 4/4] iomap: don't free integrity payload that doesn't exist Christoph Hellwig
  2026-07-24 12:29   ` Kanchan Joshi
  2026-07-24 13:33   ` Anuj gupta
@ 2026-07-24 13:48   ` Martin K. Petersen
  2 siblings, 0 replies; 12+ messages in thread
From: Martin K. Petersen @ 2026-07-24 13:48 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Jens Axboe, Martin K. Petersen, Kanchan Joshi, Anuj Gupta,
	Christian Brauner, Darrick J. Wong, linux-block, linux-xfs,
	linux-fsdevel, stable


Christoph,

> fs_bio_integrity_alloc might not allocate a bio integrity payload if PI
> verification is disabled on the block device.  Check for that case before
> calling fs_bio_integirty_free in iomap_bio_read_folio_range_sync to
                 ^^^^^^^^^
Nit: Typo.

-- 
Martin K. Petersen

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2026-07-24 13:48 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-24  5:09 fix fs-integrity for non-PI metadata v2 Christoph Hellwig
2026-07-24  5:09 ` [PATCH 1/4] block: remove bip_should_check Christoph Hellwig
2026-07-24 12:22   ` Kanchan Joshi
2026-07-24  5:09 ` [PATCH 2/4] block: lift BIP_CHECK_FLAGS to include/linux/bio-integrity.h Christoph Hellwig
2026-07-24 12:22   ` Kanchan Joshi
2026-07-24  5:09 ` [PATCH 3/4] block: handle nogenerate/noverify properly in fs-integrity Christoph Hellwig
2026-07-24 12:24   ` Kanchan Joshi
2026-07-24  5:09 ` [PATCH 4/4] iomap: don't free integrity payload that doesn't exist Christoph Hellwig
2026-07-24 12:29   ` Kanchan Joshi
2026-07-24 13:33   ` Anuj gupta
2026-07-24 13:48   ` Martin K. Petersen
2026-07-24 13:47 ` fix fs-integrity for non-PI metadata v2 Martin K. Petersen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.