[dm-devel] [PATCH 2/3] access vecs memory outside of locking range in check_path()
tang.junhui at zte.com.cn
tang.junhui at zte.com.cn
Tue Oct 18 02:51:08 UTC 2016
From: "tang.junhui" <tang.junhui at 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.junhui at 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
More information about the dm-devel
mailing list