In checker_state_name func, we donot check whether input i
is valid. It may cause array access violation problem.

Signed-off-by: Zhiqiang Liu <[email protected]>
---
 libmultipath/checkers.c | 26 +++++++++++++++-----------
 libmultipath/checkers.h |  3 ++-
 2 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/libmultipath/checkers.c b/libmultipath/checkers.c
index c3cf53db..c91e1686 100644
--- a/libmultipath/checkers.c
+++ b/libmultipath/checkers.c
@@ -22,23 +22,27 @@ struct checker_class {
        short msgtable_size;
 };

-char *checker_state_names[] = {
-       "wild",
-       "unchecked",
-       "down",
-       "up",
-       "shaky",
-       "ghost",
-       "pending",
-       "timeout",
-       "removed",
-       "delayed",
+static const char *checker_state_names[PATH_MAX_STATE] = {
+       [PATH_WILD] = "wild",
+       [PATH_UNCHECKED] = "unchecked",
+       [PATH_DOWN] = "down",
+       [PATH_UP] = "up",
+       [PATH_SHAKY] = "shaky",
+       [PATH_GHOST] = "ghost",
+       [PATH_PENDING] = "pending",
+       [PATH_TIMEOUT] = "timeout",
+       [PATH_REMOVED] = "removed",
+       [PATH_DELAYED] = "delayed",
 };

 static LIST_HEAD(checkers);

 const char *checker_state_name(int i)
 {
+       if (i < 0 || i >= PATH_MAX_STATE) {
+               condlog (2, "invalid state index = %d", i);
+               return INVALID;
+       }
        return checker_state_names[i];
 }

diff --git a/libmultipath/checkers.h b/libmultipath/checkers.h
index 5237e7ec..93052b72 100644
--- a/libmultipath/checkers.h
+++ b/libmultipath/checkers.h
@@ -67,7 +67,7 @@
  *   During this time, it is marked as "delayed"
  */
 enum path_check_state {
-       PATH_WILD,
+       PATH_WILD = 0,
        PATH_UNCHECKED,
        PATH_DOWN,
        PATH_UP,
@@ -88,6 +88,7 @@ enum path_check_state {
 #define READSECTOR0  "readsector0"
 #define CCISS_TUR    "cciss_tur"
 #define NONE         "none"
+#define INVALID      "invalid"

 #define ASYNC_TIMEOUT_SEC      30

-- 
2.24.0.windows.2


--
dm-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/dm-devel

Reply via email to