mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-05-10 18:47:22 +00:00
fix segfaults
This commit is contained in:
parent
9fd9b29cb5
commit
ee59c4d0f1
@ -493,6 +493,9 @@ ipmi_sdr_get_header(struct ipmi_intf *intf, struct ipmi_sdr_iterator *itr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!rsp)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
lprintf(LOG_DEBUG, "SDR record ID : 0x%04x", itr->next);
|
lprintf(LOG_DEBUG, "SDR record ID : 0x%04x", itr->next);
|
||||||
|
|
||||||
memcpy(&sdr_rs, rsp->data, sizeof (sdr_rs));
|
memcpy(&sdr_rs, rsp->data, sizeof (sdr_rs));
|
||||||
@ -943,7 +946,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
|||||||
desc, sensor->keys.sensor_num);
|
desc, sensor->keys.sensor_num);
|
||||||
validread = 0;
|
validread = 0;
|
||||||
}
|
}
|
||||||
if (rsp->ccode > 0) {
|
else if (rsp->ccode > 0) {
|
||||||
if (rsp->ccode == 0xcb) {
|
if (rsp->ccode == 0xcb) {
|
||||||
/* sensor not found */
|
/* sensor not found */
|
||||||
validread = 0;
|
validread = 0;
|
||||||
@ -1069,7 +1072,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
|||||||
i += snprintf(sval, sizeof (sval), "%.*f %s",
|
i += snprintf(sval, sizeof (sval), "%.*f %s",
|
||||||
(val == (int) val) ? 0 : 2, val,
|
(val == (int) val) ? 0 : 2, val,
|
||||||
do_unit ? unitstr : "");
|
do_unit ? unitstr : "");
|
||||||
else if (IS_SCANNING_DISABLED(rsp->data[1]))
|
else if (rsp && IS_SCANNING_DISABLED(rsp->data[1]))
|
||||||
i += snprintf(sval, sizeof (sval), "disabled ");
|
i += snprintf(sval, sizeof (sval), "disabled ");
|
||||||
else
|
else
|
||||||
i += snprintf(sval, sizeof (sval), "no reading ");
|
i += snprintf(sval, sizeof (sval), "no reading ");
|
||||||
@ -1103,7 +1106,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
|||||||
i += snprintf(sval, sizeof (sval), "%.*f %s",
|
i += snprintf(sval, sizeof (sval), "%.*f %s",
|
||||||
(val == (int) val) ? 0 : 2, val,
|
(val == (int) val) ? 0 : 2, val,
|
||||||
do_unit ? unitstr : "");
|
do_unit ? unitstr : "");
|
||||||
else if (IS_SCANNING_DISABLED(rsp->data[1]))
|
else if (rsp && IS_SCANNING_DISABLED(rsp->data[1]))
|
||||||
i += snprintf(sval, sizeof (sval), "Disabled");
|
i += snprintf(sval, sizeof (sval), "Disabled");
|
||||||
else
|
else
|
||||||
i += snprintf(sval, sizeof (sval), "No Reading");
|
i += snprintf(sval, sizeof (sval), "No Reading");
|
||||||
@ -1129,7 +1132,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
|||||||
printf(" Sensor Reading : ");
|
printf(" Sensor Reading : ");
|
||||||
if (validread)
|
if (validread)
|
||||||
printf("%xh\n", (uint32_t) val);
|
printf("%xh\n", (uint32_t) val);
|
||||||
else if (IS_SCANNING_DISABLED(rsp->data[1]))
|
else if (rsp && IS_SCANNING_DISABLED(rsp->data[1]))
|
||||||
printf("Disabled\n");
|
printf("Disabled\n");
|
||||||
else
|
else
|
||||||
printf("Not Reading\n");
|
printf("Not Reading\n");
|
||||||
@ -1152,8 +1155,9 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
|||||||
|
|
||||||
ipmi_sdr_print_discrete_state("States Asserted",
|
ipmi_sdr_print_discrete_state("States Asserted",
|
||||||
sensor->sensor.type,
|
sensor->sensor.type,
|
||||||
sensor->event_type, rsp->data[2],
|
sensor->event_type,
|
||||||
rsp->data[3]);
|
rsp ? rsp->data[2] : 0,
|
||||||
|
rsp ? rsp->data[3] : 0);
|
||||||
ipmi_sdr_print_sensor_mask(&sensor->mask, sensor->sensor.type,
|
ipmi_sdr_print_sensor_mask(&sensor->mask, sensor->sensor.type,
|
||||||
sensor->event_type, DISCRETE_SENSOR);
|
sensor->event_type, DISCRETE_SENSOR);
|
||||||
ipmi_sdr_print_sensor_event_status(intf,
|
ipmi_sdr_print_sensor_event_status(intf,
|
||||||
@ -1182,7 +1186,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf *intf,
|
|||||||
printf("%.*f (+/- %.*f) %s\n",
|
printf("%.*f (+/- %.*f) %s\n",
|
||||||
(val == (int) val) ? 0 : 3,
|
(val == (int) val) ? 0 : 3,
|
||||||
val, (tol == (int) tol) ? 0 : 3, tol, unitstr);
|
val, (tol == (int) tol) ? 0 : 3, tol, unitstr);
|
||||||
} else if (IS_SCANNING_DISABLED(rsp->data[1]))
|
} else if (rsp && IS_SCANNING_DISABLED(rsp->data[1]))
|
||||||
printf("Disabled\n");
|
printf("Disabled\n");
|
||||||
else
|
else
|
||||||
printf("No Reading\n");
|
printf("No Reading\n");
|
||||||
@ -1486,7 +1490,7 @@ ipmi_sdr_print_sensor_compact(struct ipmi_intf *intf,
|
|||||||
desc, sensor->keys.sensor_num);
|
desc, sensor->keys.sensor_num);
|
||||||
validread = 0;
|
validread = 0;
|
||||||
}
|
}
|
||||||
if (rsp->ccode > 0 && rsp->ccode != 0xcd) {
|
else if (rsp->ccode > 0 && rsp->ccode != 0xcd) {
|
||||||
/* completion code 0xcd is special case */
|
/* completion code 0xcd is special case */
|
||||||
lprintf(LOG_DEBUG, "Error reading sensor %s (#%02x): %s",
|
lprintf(LOG_DEBUG, "Error reading sensor %s (#%02x): %s",
|
||||||
desc, sensor->keys.sensor_num,
|
desc, sensor->keys.sensor_num,
|
||||||
@ -1495,7 +1499,7 @@ ipmi_sdr_print_sensor_compact(struct ipmi_intf *intf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* check for sensor scanning disabled bit */
|
/* check for sensor scanning disabled bit */
|
||||||
if (IS_SCANNING_DISABLED(rsp->data[1])) {
|
if (rsp && IS_SCANNING_DISABLED(rsp->data[1])) {
|
||||||
lprintf(LOG_DEBUG, "Sensor %s (#%02x) scanning disabled",
|
lprintf(LOG_DEBUG, "Sensor %s (#%02x) scanning disabled",
|
||||||
desc, sensor->keys.sensor_num);
|
desc, sensor->keys.sensor_num);
|
||||||
validread = 0;
|
validread = 0;
|
||||||
@ -2379,7 +2383,8 @@ ipmi_sdr_start(struct ipmi_intf *intf)
|
|||||||
* IPMIv2.0 == 0x02
|
* IPMIv2.0 == 0x02
|
||||||
*/
|
*/
|
||||||
if ((sdr_info.version != 0x51) &&
|
if ((sdr_info.version != 0x51) &&
|
||||||
(sdr_info.version != 0x01) && (sdr_info.version != 0x02)) {
|
(sdr_info.version != 0x01) &&
|
||||||
|
(sdr_info.version != 0x02)) {
|
||||||
lprintf(LOG_WARN, "WARNING: Unknown SDR repository "
|
lprintf(LOG_WARN, "WARNING: Unknown SDR repository "
|
||||||
"version 0x%02x", sdr_info.version);
|
"version 0x%02x", sdr_info.version);
|
||||||
}
|
}
|
||||||
@ -3377,10 +3382,13 @@ ipmi_sdr_list_cache_fromfile(struct ipmi_intf *intf, const char *ifile)
|
|||||||
if (header.length == 0)
|
if (header.length == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (header.version != 0x51) {
|
if (header.version != 0x51 &&
|
||||||
|
header.version != 0x01 &&
|
||||||
|
header.version != 0x02) {
|
||||||
lprintf(LOG_WARN, "invalid sdr header version %02x",
|
lprintf(LOG_WARN, "invalid sdr header version %02x",
|
||||||
header.version);
|
header.version);
|
||||||
continue;
|
ret = -1;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
sdrr = malloc(sizeof (struct sdr_record_list));
|
sdrr = malloc(sizeof (struct sdr_record_list));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user