linux-stable/drivers/md
Mike Snitzer e6f79d24db dm: fix improper splitting for abnormal bios
[ Upstream commit f7b58a69fa ]

"Abnormal" bios include discards, write zeroes and secure erase. By no
longer passing the calculated 'len' pointer, commit 7dd06a2548 ("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: 7dd06a2548 ("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: Sasha Levin <sashal@kernel.org>
2023-04-13 17:02:34 +02:00
..
bcache bcache: Silence memcpy() run-time false positive warnings 2023-01-25 12:24:50 -08:00
persistent-data dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-audit.c
dm-audit.h
dm-bio-prison-v1.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-bio-prison-v1.h
dm-bio-prison-v2.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-bio-prison-v2.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-bio-record.h
dm-bufio.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-builtin.c
dm-cache-background-tracker.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-cache-background-tracker.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-cache-block-types.h
dm-cache-metadata.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-cache-metadata.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-cache-policy-internal.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-cache-policy-smq.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-cache-policy.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-cache-policy.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-cache-target.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-clone-metadata.c
dm-clone-metadata.h
dm-clone-target.c dm clone: Fix UAF in clone_dtr() 2022-11-30 13:29:34 -05:00
dm-core.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-crypt.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-delay.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-dust.c
dm-ebs-target.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-era-target.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-exception-store.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-exception-store.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-flakey.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-ima.c dm table: audit all dm_table_get_target() callers 2022-07-07 11:49:34 -04:00
dm-ima.h
dm-init.c dm init: add dm-mod.waitfor to wait for asynchronously probed block devices 2022-12-02 17:37:45 -05:00
dm-integrity.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-io-rewind.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-io-tracker.h
dm-io.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-ioctl.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-kcopyd.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-linear.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-log-userspace-base.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-log-userspace-transfer.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-log-userspace-transfer.h
dm-log-writes.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-log.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-mpath.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-mpath.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-path-selector.c
dm-path-selector.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-ps-historical-service-time.c
dm-ps-io-affinity.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-ps-queue-length.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-ps-round-robin.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-ps-service-time.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-raid.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-raid1.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-region-hash.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-rq.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-rq.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-snap-persistent.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-snap-transient.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-snap.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-stats.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-stats.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-stripe.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-switch.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-sysfs.c
dm-table.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-target.c
dm-thin-metadata.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-thin-metadata.h
dm-thin.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-uevent.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-uevent.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-unstripe.c
dm-verity-fec.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-verity-fec.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-verity-loadpin.c dm: verity-loadpin: Only trust verity targets with enforcement 2022-09-07 16:37:27 -07:00
dm-verity-target.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-verity-verify-sig.c
dm-verity-verify-sig.h
dm-verity.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-writecache.c dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
dm-zero.c
dm-zone.c - Refactor DM core's mempool allocation so that it clearer by not 2022-08-02 14:21:25 -07:00
dm-zoned-metadata.c dm: improve shrinker debug names 2023-03-10 09:28:36 +01:00
dm-zoned-reclaim.c
dm-zoned-target.c dm-zoned: cleanup dmz_fixup_devices 2022-07-06 06:46:26 -06:00
dm-zoned.h dm/dm-zoned: Use the enum req_op type 2022-07-14 12:14:31 -06:00
dm.c dm: fix improper splitting for abnormal bios 2023-04-13 17:02:34 +02:00
dm.h dm: change "unsigned" to "unsigned int" 2023-04-13 17:02:34 +02:00
Kconfig md: select BLOCK_LEGACY_AUTOLOAD 2023-03-22 13:38:00 +01:00
Makefile hardening updates for v5.20-rc1 2022-08-02 14:38:59 -07:00
md-autodetect.c md: return the allocated devices from md_alloc 2022-08-02 17:22:46 -06:00
md-bitmap.c md/bitmap: Fix bitmap chunk size overflow issues 2022-11-14 09:35:50 -08:00
md-bitmap.h
md-cluster.c fs: dlm: remove DLM_LSFL_FS from uapi 2022-08-23 14:54:54 -05:00
md-cluster.h
md-faulty.c
md-linear.c md: remove most calls to bdevname 2022-05-22 23:07:21 -07:00
md-linear.h
md-multipath.c md: remove most calls to bdevname 2022-05-22 23:07:21 -07:00
md-multipath.h
md.c md: avoid signed overflow in slot_store() 2023-04-06 12:12:27 +02:00
md.h md: mark md_kick_rdev_from_array static 2022-12-02 11:21:01 -08:00
raid0.c md/raid0, raid10: Don't set discard sectors for request queue 2022-11-14 10:15:34 -08:00
raid0.h
raid1-10.c
raid1.c block: remove bio_set_op_attrs 2022-12-07 09:43:12 -07:00
raid1.h
raid5-cache.c md/raid5: use bdev_write_cache instead of open coding it 2022-11-14 10:15:35 -08:00
raid5-log.h md/raid5-ppl: Drop unused argument from ppl_handle_flush_request() 2022-08-02 17:14:31 -06:00
raid5-ppl.c md/raid5: use bdev_write_cache instead of open coding it 2022-11-14 10:15:35 -08:00
raid5.c md/raid5: Wait for MD_SB_CHANGE_PENDING in raid5d 2022-09-22 00:05:06 -07:00
raid5.h md/raid5: Cleanup prototype of raid5_get_active_stripe() 2022-09-22 00:05:04 -07:00
raid10.c block: remove bio_set_op_attrs 2022-12-07 09:43:12 -07:00
raid10.h md/raid10: convert resync_lock to use seqlock 2022-09-22 00:05:05 -07:00