Fix out-of-bound-reads in get_supermicro_evt_desc()

CID#1149029 and CID#1149030
This commit is contained in:
Zdenek Styblik 2015-01-08 20:22:15 +01:00
parent e4be291c65
commit af276d4082
2 changed files with 11 additions and 11 deletions

View File

@ -690,41 +690,41 @@ static struct ipmi_event_sensor_types sensor_specific_types[] __attribute__((unu
}; };
static uint16_t supermicro_x9dal[] = { static uint16_t supermicro_x9dal[] = {
0x0635 0x0635, 0xFFFF
}; };
static uint16_t supermicro_x9db[] = { static uint16_t supermicro_x9db[] = {
0x0733, 0x0722, 0x0703, 0x0721, 0x0716, 0x0637 0x0733, 0x0722, 0x0703, 0x0721, 0x0716, 0x0637, 0xFFFF
}; };
static uint16_t supermicro_x9sb[] = { static uint16_t supermicro_x9sb[] = {
0x0651 0x0651, 0xFFFF
}; };
static uint16_t supermicro_x9[] = { static uint16_t supermicro_x9[] = {
0x0635, 0x0733, 0x0722, 0x0703, 0x0721, 0x0716, 0x0637, 0x0651 0x0635, 0x0733, 0x0722, 0x0703, 0x0721, 0x0716, 0x0637, 0x0651, 0xFFFF
}; };
static uint16_t supermicro_b8[] = { static uint16_t supermicro_b8[] = {
0x000A, 0x061c, 0x0620, 0x0101, 0x061f, 0x0612, 0x061e 0x000A, 0x061c, 0x0620, 0x0101, 0x061f, 0x0612, 0x061e, 0xFFFF
}; };
static uint16_t supermicro_h8[] = { static uint16_t supermicro_h8[] = {
0xa111, 0x0408, 0x0811, 0x1411, 0x0911, 0x1211, 0x1011, 0xcd11, 0x1111, 0xbe11, 0xce11, 0xbd11, 0xa111, 0x0408, 0x0811, 0x1411, 0x0911, 0x1211, 0x1011, 0xcd11, 0x1111, 0xbe11, 0xce11, 0xbd11,
0xbc11, 0xa911, 0xaa11, 0xbd11, 0xcb11, 0xad11, 0xa811, 0xac11, 0xaf11, 0xa511, 0xa011, 0x1611, 0xbc11, 0xa911, 0xaa11, 0xbd11, 0xcb11, 0xad11, 0xa811, 0xac11, 0xaf11, 0xa511, 0xa011, 0x1611,
0x2511, 0xbf11, 0x1511, 0x2211, 0x2411, 0x1911, 0xab11, 0xd011, 0xae11, 0xca11, 0x0409, 0xa211, 0x2511, 0xbf11, 0x1511, 0x2211, 0x2411, 0x1911, 0xab11, 0xd011, 0xae11, 0xca11, 0x0409, 0xa211,
0xa311, 0x1311, 0xba11, 0xa711, 0xd111, 0x1711, 0xcf11, 0x2011, 0x1811 0xa311, 0x1311, 0xba11, 0xa711, 0xd111, 0x1711, 0xcf11, 0x2011, 0x1811, 0xFFFF
}; };
static uint16_t supermicro_p8[] = { static uint16_t supermicro_p8[] = {
0x6480, 0x7380, 0x6280, 0x7480, 0x5980 0x6480, 0x7380, 0x6280, 0x7480, 0x5980, 0xFFFF
}; };
static uint16_t supermicro_x8[] = { static uint16_t supermicro_x8[] = {
0xa880, 0x0403, 0x0100, 0x0601, 0x0001, 0x0404, 0x0606, 0x0608, 0x0632, 0x0400, 0x0401, 0x0006, 0xa880, 0x0403, 0x0100, 0x0601, 0x0001, 0x0404, 0x0606, 0x0608, 0x0632, 0x0400, 0x0401, 0x0006,
0x040a, 0xf280, 0x060f, 0x0609, 0x0008, 0x0613, 0x061b, 0x0007, 0x0600, 0x060c, 0x060d, 0x0614, 0x040a, 0xf280, 0x060f, 0x0609, 0x0008, 0x0613, 0x061b, 0x0007, 0x0600, 0x060c, 0x060d, 0x0614,
0x060c, 0x0003, 0x040b, 0x0621, 0x0610, 0x0638, 0xf380, 0x060b, 0x040d, 0x0605, 0x062d, 0x060e, 0x060c, 0x0003, 0x040b, 0x0621, 0x0610, 0x0638, 0xf380, 0x060b, 0x040d, 0x0605, 0x062d, 0x060e,
0x061a, 0xf580, 0x062e, 0x0009 0x061a, 0xf580, 0x062e, 0x0009, 0xFFFF
}; };
static uint16_t supermicro_X8[] = { static uint16_t supermicro_X8[] = {
@ -736,7 +736,7 @@ static uint16_t supermicro_X8[] = {
0x0601, 0x0001, 0x0404, 0x0606, 0x0608, 0x0632, 0x0400, 0x0401, 0x0006, 0x040a, 0xf280, 0x060f, 0x0601, 0x0001, 0x0404, 0x0606, 0x0608, 0x0632, 0x0400, 0x0401, 0x0006, 0x040a, 0xf280, 0x060f,
0x0609, 0x0008, 0x0613, 0x061b, 0x0007, 0x0600, 0x060c, 0x060d, 0x0614, 0x060c, 0x0003, 0x040b, 0x0609, 0x0008, 0x0613, 0x061b, 0x0007, 0x0600, 0x060c, 0x060d, 0x0614, 0x060c, 0x0003, 0x040b,
0x0621, 0x0610, 0x0638, 0xf380, 0x060b, 0x040d, 0x0605, 0x062d, 0x060e, 0x061a, 0xf580, 0x062e, 0x0621, 0x0610, 0x0638, 0xf380, 0x060b, 0x040d, 0x0605, 0x062d, 0x060e, 0x061a, 0xf580, 0x062e,
0x0009 0x0009, 0xFFFF
}; };
int ipmi_sel_main(struct ipmi_intf *, int, char **); int ipmi_sel_main(struct ipmi_intf *, int, char **);

View File

@ -594,14 +594,14 @@ get_supermicro_evt_desc(struct ipmi_intf *intf, struct sel_event_record *rec)
return NULL; return NULL;
} }
length = sizeof(supermicro_X8); length = sizeof(supermicro_X8);
for (i = 0; i < length; i++) { for (i = 0; i < length && supermicro_X8[i] != 0xFFFF; i++) {
if (oem_id == supermicro_X8[i]) { if (oem_id == supermicro_X8[i]) {
chipset_type = 0; chipset_type = 0;
break; break;
} }
} }
length = sizeof(supermicro_x9); length = sizeof(supermicro_x9);
for (i = 0; i < length; i++) { for (i = 0; i < length && supermicro_x9[i] != 0xFFFF; i++) {
if (oem_id == supermicro_x9[i]) { if (oem_id == supermicro_x9[i]) {
chipset_type = 2; chipset_type = 2;
break; break;