From: Andrey Zhadchenko <andrey.zhadchenko@virtuozzo.com>
To: Alexander Ivanov <alexander.ivanov@virtuozzo.com>
Cc: devel@openvz.org
Subject: Re: [Devel] [PATCH hci-8.1 v2] dm table: don't inherit live table's type for request-based tables
Date: Sun, 25 Oct 2026 22:54:41 +0100 [thread overview]
Message-ID: <ae09be72-08ef-4649-9dc4-5ec63dbd7e0c@virtuozzo.com> (raw)
In-Reply-To: <20261020075243.1283345-1-alexander.ivanov@virtuozzo.com>
Reviewed-by: Andrey Zhadchenko <andrey.zhadchenko@virtuozzo.com>
On 10/20/26 09:52, Alexander Ivanov wrote:
> A request-based table without devices inherits the live table's type
> in dm_table_determine_type(). Since commit 6936c12cf809 ("dm table: fix
> 'all_blk_mq' inconsistency when an empty table is loaded") this
> includes bio-based types, although the inheritance was meant to pick a
> variant of the request-based type, and only one is left now. So a
> request-based table loaded over a bio-based device becomes bio-based,
> which its target cannot serve.
>
> dm-qcow2 and dm-ploop open their images by fd and never call
> dm_get_device(). Loaded over a bio-based device they have no ->map, and
> the first bio calls a NULL ->map from __map_bio():
>
> BUG: kernel NULL pointer dereference, address: 0000000000000000
> RIP: 0010:0x0
> __map_bio+0x197/0x1c0 [dm_mod]
> dm_split_and_process_bio+0x1ad/0x740 [dm_mod]
>
> A multipath table with no paths and the default rq queue_mode keeps
> m->queue_mode request-based while the table is bio-based. Its
> per_io_data_size is sized for a request, so the first bio overruns its
> per-bio data in multipath_map_bio():
>
> BUG: KASAN: slab-out-of-bounds in multipath_map_bio+0x376/0x380
> __map_bio+0x433/0x4f0
> dm_submit_bio+0x48a/0x1620
>
> Removing the device then kicks the requeue list of a bio-based queue
> from multipath_presuspend() and corrupts memory:
>
> WARNING: CPU: 4 PID: 345054 at kernel/workqueue.c:2498 __queue_delayed_work+0xf1/0x130
> kblockd_mod_delayed_work_on+0x1b/0x30
> dm_table_presuspend_targets+0x3d/0x60 [dm_mod]
> __dm_destroy+0x19f/0x1d0 [dm_mod]
> Oops: general protection fault, probably for non-canonical address 0xd352851d5c47d388
>
> Drop the inheritance. table_load() then rejects such a table with
> "can't change device type", as it does for request-based tables with
> devices.
>
> https://virtuozzo.atlassian.net/browse/VSTOR-150573
> Signed-off-by: Alexander Ivanov <alexander.ivanov@virtuozzo.com>
> ---
> drivers/md/dm-table.c | 10 +---------
> 1 file changed, 1 insertion(+), 9 deletions(-)
>
> diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
> index 954bbc338bce..e306eb51b592 100644
> --- a/drivers/md/dm-table.c
> +++ b/drivers/md/dm-table.c
> @@ -983,16 +983,8 @@ static int dm_table_determine_type(struct dm_table *t)
> return -EINVAL;
> }
>
> - if (list_empty(devices)) {
> - int srcu_idx;
> - struct dm_table *live_table = dm_get_live_table(t->md, &srcu_idx);
> -
> - /* inherit live table's type */
> - if (live_table)
> - t->type = live_table->type;
> - dm_put_live_table(t->md, srcu_idx);
> + if (list_empty(devices))
> return 0;
> - }
>
> ti = dm_table_get_target(t, 0);
> if (ti->max_io_len) {
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel
next prev parent reply other threads:[~2026-10-25 21:55 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-20 7:52 Alexander Ivanov
2026-10-20 7:57 ` no-reply
2026-10-25 21:54 ` Andrey Zhadchenko [this message]
2026-10-29 10:49 ` Konstantin Khorenko
2026-10-29 10:50 ` Konstantin Khorenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ae09be72-08ef-4649-9dc4-5ec63dbd7e0c@virtuozzo.com \
--to=andrey.zhadchenko@virtuozzo.com \
--cc=alexander.ivanov@virtuozzo.com \
--cc=devel@openvz.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.