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 <liuzhiqiang26@xxxxxxxxxx> --- 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 dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel