All of lore.kernel.org
 help / color / mirror / Atom feed
* FAILED: patch "[PATCH] dm: fix improper splitting for abnormal bios" failed to apply to 6.1-stable tree
@ 2023-04-03  8:35 gregkh
  2023-04-04 18:25 ` [PATCH 6.1+] dm: fix improper splitting for abnormal bios Mike Snitzer
  0 siblings, 1 reply; 2+ messages in thread
From: gregkh @ 2023-04-03  8:35 UTC (permalink / raw)
  To: snitzer, orange; +Cc: stable


The patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm
tree, then please email the backport, including the original git commit
id to <stable@vger.kernel.org>.

To reproduce the conflict and resubmit, you may use the following commands:

git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x f7b58a69fad9d2c4c90cab0247811155dd0d48e7
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<stable@vger.kernel.org>' --in-reply-to '2023040334-attire-drone-2c8b@gregkh' --subject-prefix 'PATCH 6.1.y' HEAD^..

Possible dependencies:

f7b58a69fad9 ("dm: fix improper splitting for abnormal bios")
86a3238c7b9b ("dm: change "unsigned" to "unsigned int"")
7533afa1d27b ("dm: send just one event on resize, not two")
5cd6d1d53a1f ("dm integrity: Remove bi_sector that's only used by commented debug code")
22c40e134c4c ("dm cache: Add some documentation to dm-cache-background-tracker.h")

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From f7b58a69fad9d2c4c90cab0247811155dd0d48e7 Mon Sep 17 00:00:00 2001
From: Mike Snitzer <snitzer@kernel.org>
Date: Thu, 30 Mar 2023 14:56:38 -0400
Subject: [PATCH] dm: fix improper splitting for abnormal bios

"Abnormal" bios include discards, write zeroes and secure erase. By no
longer passing the calculated 'len' pointer, commit 7dd06a2548b2 ("dm:
allow dm_accept_partial_bio() for dm_io without duplicate bios") took a
senseless approach to disallowing dm_accept_partial_bio() from working
for duplicate bios processed using __send_duplicate_bios().

It inadvertently and incorrectly stopped the use of 'len' when
initializing a target's io (in alloc_tio). As such the resulting tio
could address more area of a device than it should.

For example, when discarding an entire DM striped device with the
following DM table:
 vg-lvol0: 0 159744 striped 2 128 7:0 2048 7:1 2048
 vg-lvol0: 159744 45056 striped 2 128 7:2 2048 7:3 2048

Before this fix:

 device-mapper: striped: target_stripe=0, bdev=7:0, start=2048 len=102400
 blkdiscard: attempt to access beyond end of device
 loop0: rw=2051, sector=2048, nr_sectors = 102400 limit=81920

 device-mapper: striped: target_stripe=1, bdev=7:1, start=2048 len=102400
 blkdiscard: attempt to access beyond end of device
 loop1: rw=2051, sector=2048, nr_sectors = 102400 limit=81920

After this fix;

 device-mapper: striped: target_stripe=0, bdev=7:0, start=2048 len=79872
 device-mapper: striped: target_stripe=1, bdev=7:1, start=2048 len=79872

Fixes: 7dd06a2548b2 ("dm: allow dm_accept_partial_bio() for dm_io without duplicate bios")
Cc: stable@vger.kernel.org
Reported-by: Orange Kao <orange@aiven.io>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>

diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 2d0f934ba6e6..e67a2757c53e 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1467,7 +1467,8 @@ static void setup_split_accounting(struct clone_info *ci, unsigned int len)
 }
 
 static void alloc_multiple_bios(struct bio_list *blist, struct clone_info *ci,
-				struct dm_target *ti, unsigned int num_bios)
+				struct dm_target *ti, unsigned int num_bios,
+				unsigned *len)
 {
 	struct bio *bio;
 	int try;
@@ -1478,7 +1479,7 @@ static void alloc_multiple_bios(struct bio_list *blist, struct clone_info *ci,
 		if (try)
 			mutex_lock(&ci->io->md->table_devices_lock);
 		for (bio_nr = 0; bio_nr < num_bios; bio_nr++) {
-			bio = alloc_tio(ci, ti, bio_nr, NULL,
+			bio = alloc_tio(ci, ti, bio_nr, len,
 					try ? GFP_NOIO : GFP_NOWAIT);
 			if (!bio)
 				break;
@@ -1514,7 +1515,7 @@ static int __send_duplicate_bios(struct clone_info *ci, struct dm_target *ti,
 		break;
 	default:
 		/* dm_accept_partial_bio() is not supported with shared tio->len_ptr */
-		alloc_multiple_bios(&blist, ci, ti, num_bios);
+		alloc_multiple_bios(&blist, ci, ti, num_bios, len);
 		while ((clone = bio_list_pop(&blist))) {
 			dm_tio_set_flag(clone_to_tio(clone), DM_TIO_IS_DUPLICATE_BIO);
 			__map_bio(clone);


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

* [PATCH 6.1+] dm: fix improper splitting for abnormal bios
  2023-04-03  8:35 FAILED: patch "[PATCH] dm: fix improper splitting for abnormal bios" failed to apply to 6.1-stable tree gregkh
@ 2023-04-04 18:25 ` Mike Snitzer
  0 siblings, 0 replies; 2+ messages in thread
From: Mike Snitzer @ 2023-04-04 18:25 UTC (permalink / raw)
  To: gregkh; +Cc: stable, bmarzins, Mike Snitzer

From: Benjamin Marzinski <bmarzins@redhat.com>

Conflicts: Code changes due to missing upstream commit 86a3238c7b9b
           ('dm: change "unsigned" to "unsigned int"')

commit f7b58a69fad9d2c4c90cab0247811155dd0d48e7
Author: Mike Snitzer <snitzer@kernel.org>
Date:   Thu Mar 30 14:56:38 2023 -0400

    dm: fix improper splitting for abnormal bios

    "Abnormal" bios include discards, write zeroes and secure erase. By no
    longer passing the calculated 'len' pointer, commit 7dd06a2548b2 ("dm:
    allow dm_accept_partial_bio() for dm_io without duplicate bios") took a
    senseless approach to disallowing dm_accept_partial_bio() from working
    for duplicate bios processed using __send_duplicate_bios().

    It inadvertently and incorrectly stopped the use of 'len' when
    initializing a target's io (in alloc_tio). As such the resulting tio
    could address more area of a device than it should.

    For example, when discarding an entire DM striped device with the
    following DM table:
     vg-lvol0: 0 159744 striped 2 128 7:0 2048 7:1 2048
     vg-lvol0: 159744 45056 striped 2 128 7:2 2048 7:3 2048

    Before this fix:

     device-mapper: striped: target_stripe=0, bdev=7:0, start=2048 len=102400
     blkdiscard: attempt to access beyond end of device
     loop0: rw=2051, sector=2048, nr_sectors = 102400 limit=81920

     device-mapper: striped: target_stripe=1, bdev=7:1, start=2048 len=102400
     blkdiscard: attempt to access beyond end of device
     loop1: rw=2051, sector=2048, nr_sectors = 102400 limit=81920

    After this fix;

     device-mapper: striped: target_stripe=0, bdev=7:0, start=2048 len=79872
     device-mapper: striped: target_stripe=1, bdev=7:1, start=2048 len=79872

    Fixes: 7dd06a2548b2 ("dm: allow dm_accept_partial_bio() for dm_io without duplicate bios")
    Cc: stable@vger.kernel.org
    Reported-by: Orange Kao <orange@aiven.io>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
---
 drivers/md/dm.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index f9a402c04666..e624a919fe55 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1460,7 +1460,8 @@ static void setup_split_accounting(struct clone_info *ci, unsigned len)
 }
 
 static void alloc_multiple_bios(struct bio_list *blist, struct clone_info *ci,
-				struct dm_target *ti, unsigned num_bios)
+				struct dm_target *ti, unsigned num_bios,
+				unsigned *len)
 {
 	struct bio *bio;
 	int try;
@@ -1471,7 +1472,7 @@ static void alloc_multiple_bios(struct bio_list *blist, struct clone_info *ci,
 		if (try)
 			mutex_lock(&ci->io->md->table_devices_lock);
 		for (bio_nr = 0; bio_nr < num_bios; bio_nr++) {
-			bio = alloc_tio(ci, ti, bio_nr, NULL,
+			bio = alloc_tio(ci, ti, bio_nr, len,
 					try ? GFP_NOIO : GFP_NOWAIT);
 			if (!bio)
 				break;
@@ -1507,7 +1508,7 @@ static int __send_duplicate_bios(struct clone_info *ci, struct dm_target *ti,
 		break;
 	default:
 		/* dm_accept_partial_bio() is not supported with shared tio->len_ptr */
-		alloc_multiple_bios(&blist, ci, ti, num_bios);
+		alloc_multiple_bios(&blist, ci, ti, num_bios, len);
 		while ((clone = bio_list_pop(&blist))) {
 			dm_tio_set_flag(clone_to_tio(clone), DM_TIO_IS_DUPLICATE_BIO);
 			__map_bio(clone);
-- 
2.30.0


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

end of thread, other threads:[~2023-04-04 18:30 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-03  8:35 FAILED: patch "[PATCH] dm: fix improper splitting for abnormal bios" failed to apply to 6.1-stable tree gregkh
2023-04-04 18:25 ` [PATCH 6.1+] dm: fix improper splitting for abnormal bios Mike Snitzer

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.