From: "tang.junhui" <tang.jun...@zte.com.cn>

there are vecs->mpvec memory accesses outside of locking range in
check_path(), the judgments is not necessary since the they has
existed in vector_foreach_slot(), so delete them.

Signed-off-by: tang.junhui <tang.jun...@zte.com.cn>
---
 multipathd/main.c | 45 ++++++++++++++++++++++-----------------------
 1 file changed, 22 insertions(+), 23 deletions(-)

diff --git a/multipathd/main.c b/multipathd/main.c
index b6eb696..e369a79 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -1804,30 +1804,29 @@ checkerloop (void *ap)
                        condlog(4, "timeout waiting for DAEMON_IDLE");
                        continue;
                }
-               if (vecs->pathvec) {
-                       pthread_cleanup_push(cleanup_lock, &vecs->lock);
-                       lock(&vecs->lock);
-                       pthread_testcancel();
-                       vector_foreach_slot (vecs->pathvec, pp, i) {
-                               rc = check_path(vecs, pp, ticks);
-                               if (rc < 0) {
-                                       vector_del_slot(vecs->pathvec, i);
-                                       free_path(pp);
-                                       i--;
-                               } else
-                                       num_paths += rc;
-                       }
-                       lock_cleanup_pop(vecs->lock);
-               }
-               if (vecs->mpvec) {
-                       pthread_cleanup_push(cleanup_lock, &vecs->lock);
-                       lock(&vecs->lock);
-                       pthread_testcancel();
-                       defered_failback_tick(vecs->mpvec);
-                       retry_count_tick(vecs->mpvec);
-                       missing_uev_wait_tick(vecs);
-                       lock_cleanup_pop(vecs->lock);
+
+               pthread_cleanup_push(cleanup_lock, &vecs->lock);
+               lock(&vecs->lock);
+               pthread_testcancel();
+               vector_foreach_slot (vecs->pathvec, pp, i) {
+                       rc = check_path(vecs, pp, ticks);
+                       if (rc < 0) {
+                               vector_del_slot(vecs->pathvec, i);
+                               free_path(pp);
+                               i--;
+                       } else
+                               num_paths += rc;
                }
+               lock_cleanup_pop(vecs->lock);
+
+               pthread_cleanup_push(cleanup_lock, &vecs->lock);
+               lock(&vecs->lock);
+               pthread_testcancel();
+               defered_failback_tick(vecs->mpvec);
+               retry_count_tick(vecs->mpvec);
+               missing_uev_wait_tick(vecs);
+               lock_cleanup_pop(vecs->lock);
+
                if (count)
                        count--;
                else {
-- 
2.8.1.windows.1

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

Reply via email to