From: Benjamin Marzinski <bmarzins@redhat.com>
To: Martin Wilck <martin.wilck@suse.com>
Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>,
dm-devel@lists.linux.dev, Martin Wilck <mwilck@suse.com>
Subject: Re: [PATCH 00/21] Multipath-tools: various bug fixes
Date: Thu, 18 Dec 2025 19:40:25 -0500 [thread overview]
Message-ID: <aUSe-dt4O7-Snhs3@redhat.com> (raw)
In-Reply-To: <20251217212113.234959-1-mwilck@suse.com>
On Wed, Dec 17, 2025 at 10:20:52PM +0100, Martin Wilck wrote:
> This series contains a number of fixes for various recent issues with
> multipath-tools. The starting point was a use-after-free issue reported on
> GitHub [1]. The actual fixes for that are 02/21 and 06/21. Because this
> Patches 3-12 generally rework the freeing of maps, trying to avoid unexpected
> freeing of paths while freeing multipath structures.
>
> Because this changes memory handling in multipathd, I ran a set of tests to
> make sure the series doesn't open up new memory leaks. The good news is that I
> haven't found any, except some trivial ones (15/21, 16/21). But I did see one
> minor issue related to libudev [2]. After I found a warning in the libudev man
> page about the library not being thread-safe, I suspected that this might be
> causing the leak, and came up with code wrapping all libudev calls with a
> mutex (18/21, 19/21). Unfortunately it didn't fix the observed leak, but I
> suppose it's still useful because multipathd is using libudev in a way that
> the authors of the library explicitly dismiss as unsupported.
>
> The release of cmocka 2.0 [3] necessitated rather large-ish adaptations in our
> unit test code (20/21, 21/21).
>
> Finally 13/21 and 17/21 are bug fixes; in particular the latter is rather nasty.
>
> [1] https://github.com/opensvc/multipath-tools/issues/128
> [2] https://github.com/opensvc/multipath-tools/issues/130
> [3] https://github.com/opensvc/multipath-tools/issues/129
>
For everything but 3,9,12, and 17
Reviewed-by: Benjamin Marzinski <bmarzins@redhat.com>
> Martin Wilck (21):
> libmultipath: drop drop_multipath
> libmultipath: don't access path members in free_pgvec()
> multipathd: free paths in checker_finished()
> libmultipath: don't touch mpvec in remove_map()
> libmpathutil: constify find_slot()
> libmultipath: don't free paths in orphan_paths()
> libmultipath: free orphaned paths in check_removed_paths()
> libmultipath: remove free_paths argument from free_pathgroup()
> libmultipath: fix numeric value of free_paths in free_multipaths()
> libmultipath: remove free_paths argument from free_pgvec()
> libmultipath: remove free_paths argument from free_multipathvec()
> libmultipath: free_multipath: fix FREE_PATHS case
> multipath-tools: Fix ISO C23 errors with strchr()
> libmultipath: simplify sysfs_get_target_nodename()
> multipathd: join the init_unwinder dummy thread
> kpartx: fix some memory leaks
> libmpathutil: use union for bitfield
> libmpathutil: add wrapper code for libudev
> multipath-tools: use the libudev wrapper functions
> Makefile: add functionality to determine cmocka version
> multipath-tools tests: adaptations for cmocka 2.0
>
> Makefile.inc | 2 +-
> create-config.mk | 5 +
> kpartx/kpartx.c | 18 +-
> libdmmp/Makefile | 2 +-
> libdmmp/libdmmp.c | 2 +-
> libmpathpersist/mpath_persist.c | 2 +-
> libmpathpersist/mpath_persist_int.c | 2 +-
> libmpathpersist/mpath_pr_ioctl.c | 2 +-
> libmpathpersist/mpath_updatepr.c | 2 +-
> libmpathutil/Makefile | 2 +-
> libmpathutil/globals.c | 2 +-
> libmpathutil/libmpathutil.version | 62 ++
> libmpathutil/mt-libudev.c | 776 ++++++++++++++++++++++++++
> libmpathutil/mt-libudev.h | 120 ++++
> libmpathutil/mt-udev-wrap.h | 90 +++
> libmpathutil/parser.c | 2 +-
> libmpathutil/util.c | 12 +-
> libmpathutil/util.h | 43 +-
> libmpathutil/vector.c | 3 +-
> libmpathutil/vector.h | 2 +-
> libmpathvalid/mpath_valid.c | 2 +-
> libmultipath/blacklist.c | 2 +-
> libmultipath/blacklist.h | 2 +-
> libmultipath/config.c | 2 +-
> libmultipath/configure.c | 22 +-
> libmultipath/dict.c | 2 +-
> libmultipath/discovery.c | 36 +-
> libmultipath/dmparser.c | 6 +-
> libmultipath/foreign.c | 2 +-
> libmultipath/foreign.h | 2 +-
> libmultipath/foreign/nvme.c | 2 +-
> libmultipath/libmultipath.version | 2 +
> libmultipath/pgpolicies.c | 14 +-
> libmultipath/print.c | 2 +-
> libmultipath/prio.c | 2 +-
> libmultipath/prioritizers/alua_rtpg.c | 2 +-
> libmultipath/prioritizers/ana.c | 2 +-
> libmultipath/prkey.c | 4 +-
> libmultipath/prkey.h | 2 +-
> libmultipath/propsel.c | 2 +-
> libmultipath/structs.c | 94 ++--
> libmultipath/structs.h | 7 +-
> libmultipath/structs_vec.c | 58 +-
> libmultipath/structs_vec.h | 4 +-
> libmultipath/sysfs.c | 2 +-
> libmultipath/uevent.c | 2 +-
> libmultipath/valid.c | 2 +-
> mpathpersist/main.c | 2 +-
> multipath/main.c | 16 +-
> multipathd/cli_handlers.c | 2 +-
> multipathd/fpin_handlers.c | 2 +-
> multipathd/init_unwinder.c | 4 +-
> multipathd/main.c | 20 +-
> tests/Makefile | 22 +-
> tests/alias.c | 44 +-
> tests/blacklist.c | 2 +-
> tests/cli.c | 8 +-
> tests/cmocka-compat.h | 16 +
> tests/devt.c | 6 +-
> tests/directio.c | 23 +-
> tests/dmevents.c | 74 +--
> tests/features.c | 2 +-
> tests/hwtable.c | 6 +-
> tests/mapinfo.c | 82 +--
> tests/mpathvalid.c | 18 +-
> tests/parser.c | 2 +-
> tests/pgpolicy.c | 4 +-
> tests/strbuf.c | 130 ++---
> tests/sysfs.c | 76 +--
> tests/test-lib.c | 90 +--
> tests/test-log.c | 10 +-
> tests/uevent.c | 2 +-
> tests/unaligned.c | 8 +-
> tests/util.c | 116 ++--
> tests/valid.c | 30 +-
> tests/vpd.c | 12 +-
> 76 files changed, 1680 insertions(+), 581 deletions(-)
> create mode 100644 libmpathutil/mt-libudev.c
> create mode 100644 libmpathutil/mt-libudev.h
> create mode 100644 libmpathutil/mt-udev-wrap.h
> create mode 100644 tests/cmocka-compat.h
>
> --
> 2.52.0
prev parent reply other threads:[~2025-12-19 0:40 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-17 21:20 [PATCH 00/21] Multipath-tools: various bug fixes Martin Wilck
2025-12-17 21:20 ` [PATCH 01/21] libmultipath: drop drop_multipath Martin Wilck
2025-12-17 21:20 ` [PATCH 02/21] libmultipath: don't access path members in free_pgvec() Martin Wilck
2025-12-17 21:20 ` [PATCH 03/21] multipathd: free paths in checker_finished() Martin Wilck
2025-12-18 23:34 ` Benjamin Marzinski
2025-12-18 23:40 ` Martin Wilck
2025-12-19 10:38 ` Martin Wilck
2025-12-17 21:20 ` [PATCH 04/21] libmultipath: don't touch mpvec in remove_map() Martin Wilck
2025-12-17 21:20 ` [PATCH 05/21] libmpathutil: constify find_slot() Martin Wilck
2025-12-17 21:20 ` [PATCH 06/21] libmultipath: don't free paths in orphan_paths() Martin Wilck
2025-12-17 21:20 ` [PATCH 07/21] libmultipath: free orphaned paths in check_removed_paths() Martin Wilck
2025-12-17 21:21 ` [PATCH 08/21] libmultipath: remove free_paths argument from free_pathgroup() Martin Wilck
2025-12-17 21:21 ` [PATCH 09/21] libmultipath: fix numeric value of free_paths in free_multipaths() Martin Wilck
2025-12-19 0:10 ` Benjamin Marzinski
2025-12-17 21:21 ` [PATCH 10/21] libmultipath: remove free_paths argument from free_pgvec() Martin Wilck
2025-12-17 21:21 ` [PATCH 11/21] libmultipath: remove free_paths argument from free_multipathvec() Martin Wilck
2025-12-17 21:21 ` [PATCH 12/21] libmultipath: free_multipath: fix FREE_PATHS case Martin Wilck
2025-12-19 0:15 ` Benjamin Marzinski
2025-12-17 21:21 ` [PATCH 13/21] multipath-tools: Fix ISO C23 errors with strchr() Martin Wilck
2025-12-17 21:21 ` [PATCH 14/21] libmultipath: simplify sysfs_get_target_nodename() Martin Wilck
2025-12-17 21:21 ` [PATCH 15/21] multipathd: join the init_unwinder dummy thread Martin Wilck
2025-12-17 21:21 ` [PATCH 16/21] kpartx: fix some memory leaks Martin Wilck
2025-12-17 21:21 ` [PATCH 17/21] libmpathutil: use union for bitfield Martin Wilck
2025-12-19 0:17 ` Benjamin Marzinski
2025-12-19 8:08 ` Martin Wilck
2025-12-17 21:21 ` [PATCH 18/21] libmpathutil: add wrapper code for libudev Martin Wilck
2025-12-19 0:38 ` Benjamin Marzinski
2025-12-19 8:06 ` Martin Wilck
2025-12-19 17:27 ` Benjamin Marzinski
2025-12-17 21:21 ` [PATCH 19/21] multipath-tools: use the libudev wrapper functions Martin Wilck
2025-12-17 21:21 ` [PATCH 20/21] Makefile: add functionality to determine cmocka version Martin Wilck
2025-12-17 21:21 ` [PATCH 21/21] multipath-tools tests: adaptations for cmocka 2.0 Martin Wilck
2025-12-19 0:40 ` Benjamin Marzinski [this message]
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=aUSe-dt4O7-Snhs3@redhat.com \
--to=bmarzins@redhat.com \
--cc=christophe.varoqui@opensvc.com \
--cc=dm-devel@lists.linux.dev \
--cc=martin.wilck@suse.com \
--cc=mwilck@suse.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox