All of lore.kernel.org
 help / color / mirror / Atom feed
* [dm-devel] [PATCH] libmultipath: check if adopt_path() really added current path
@ 2021-02-02 19:57 mwilck
  2021-02-02 20:40 ` Benjamin Marzinski
  2021-02-03  1:33 ` lixiaokeng
  0 siblings, 2 replies; 8+ messages in thread
From: mwilck @ 2021-02-02 19:57 UTC (permalink / raw)
  To: lixiaokeng, Benjamin Marzinski, Christophe Varoqui; +Cc: dm-devel, Martin Wilck

From: Martin Wilck <mwilck@suse.com>

The description of 2d32d6f ("libmultipath: adopt_paths(): don't bail out on
single path failure") said "we need to check after successful call to
adopt_paths() if that specific path had been actually added, and fail in the
caller otherwise". But the commit failed to actually implement this check.
Instead, it just checked if the path was member of the pathvec, which will
almost always be the case.

Fix it by checking what actually needs to be checked, membership of the
path to be added in mpp->paths.

Fixes: 2d32d6f ("libmultipath: adopt_paths(): don't bail out on single path failure")
Signed-off-by: Martin Wilck <mwilck@suse.com>
---

@lixiaokeng, I believe that this fixes the issue you mentioned in your
post "libmultipath: fix NULL dereference in get_be64".

---
 libmultipath/structs_vec.c | 4 ++--
 multipathd/main.c          | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/libmultipath/structs_vec.c b/libmultipath/structs_vec.c
index f7f45f1..47b1d03 100644
--- a/libmultipath/structs_vec.c
+++ b/libmultipath/structs_vec.c
@@ -707,8 +707,8 @@ struct multipath *add_map_with_path(struct vectors *vecs, struct path *pp,
 		goto out;
 	mpp->size = pp->size;
 
-	if (adopt_paths(vecs->pathvec, mpp) ||
-	    find_slot(vecs->pathvec, pp) == -1)
+	if (adopt_paths(vecs->pathvec, mpp) || pp->mpp != mpp ||
+	    find_slot(mpp->paths, pp) == -1)
 		goto out;
 
 	if (add_vec) {
diff --git a/multipathd/main.c b/multipathd/main.c
index 134185f..425492a 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -1008,8 +1008,8 @@ rescan:
 	if (mpp) {
 		condlog(4,"%s: adopting all paths for path %s",
 			mpp->alias, pp->dev);
-		if (adopt_paths(vecs->pathvec, mpp) ||
-		    find_slot(vecs->pathvec, pp) == -1)
+		if (adopt_paths(vecs->pathvec, mpp) || pp->mpp != mpp ||
+		    find_slot(mpp->paths, pp) == -1)
 			goto fail; /* leave path added to pathvec */
 
 		verify_paths(mpp);
-- 
2.29.2


--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel


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

end of thread, other threads:[~2021-02-04 11:19 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-02 19:57 [dm-devel] [PATCH] libmultipath: check if adopt_path() really added current path mwilck
2021-02-02 20:40 ` Benjamin Marzinski
2021-02-03  1:33 ` lixiaokeng
2021-02-03  8:14   ` Martin Wilck
2021-02-03  9:42     ` lixiaokeng
2021-02-03 13:14       ` Martin Wilck
2021-02-04  7:41         ` lixiaokeng
2021-02-04 11:14           ` Martin Wilck

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.