From 6d515dd06bcb89598465cc69e89e37684577e289 Mon Sep 17 00:00:00 2001 From: Patrick Venture Date: Mon, 26 Nov 2018 12:38:04 -0800 Subject: [PATCH] fru: fixup array bounds checking Fixup the following array bounds checking bugs: [lib/ipmi_fru.c:1003]: (style) Array index 'i' is used before limits check. [lib/ipmi_fru.c:1127]: (style) Array index 'i' is used before limits check. [lib/ipmi_fru.c:1262]: (style) Array index 'i' is used before limits check. Signed-off-by: Patrick Venture --- include/ipmitool/ipmi_fru.h | 2 ++ lib/ipmi_fru.c | 9 +++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/include/ipmitool/ipmi_fru.h b/include/ipmitool/ipmi_fru.h index 7ea14d6..b0f183c 100644 --- a/include/ipmitool/ipmi_fru.h +++ b/include/ipmitool/ipmi_fru.h @@ -42,6 +42,8 @@ # include #endif +#define FRU_END_OF_FIELDS 0xc1 + #define GET_FRU_INFO 0x10 #define GET_FRU_DATA 0x11 #define SET_FRU_DATA 0x12 diff --git a/lib/ipmi_fru.c b/lib/ipmi_fru.c index e839ad2..51b1234 100644 --- a/lib/ipmi_fru.c +++ b/lib/ipmi_fru.c @@ -1000,8 +1000,7 @@ fru_area_print_chassis(struct ipmi_intf * intf, struct fru_info * fru, } /* read any extra fields */ - while ((fru_data[i] != 0xc1) && (i < fru_len)) - { + while ((i < fru_len) && (fru_data[i] != FRU_END_OF_FIELDS)) { int j = i; fru_area = get_fru_area_str(fru_data, &i); if (fru_area) { @@ -1124,8 +1123,7 @@ fru_area_print_board(struct ipmi_intf * intf, struct fru_info * fru, } /* read any extra fields */ - while ((fru_data[i] != 0xc1) && (i < fru_len)) - { + while ((i < fru_len) && (fru_data[i] != FRU_END_OF_FIELDS)) { int j = i; fru_area = get_fru_area_str(fru_data, &i); if (fru_area) { @@ -1259,8 +1257,7 @@ fru_area_print_product(struct ipmi_intf * intf, struct fru_info * fru, } /* read any extra fields */ - while ((fru_data[i] != 0xc1) && (i < fru_len)) - { + while ((i < fru_len) && (fru_data[i] != FRU_END_OF_FIELDS)) { int j = i; fru_area = get_fru_area_str(fru_data, &i); if (fru_area) {