mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-05-10 10:37:22 +00:00
ID: 212 - 'lib/ipmi_dcmi.c' - possible int *flow
Commit replaces strtol() calls with appropriate str2*() ones in order to prevent possible integer *flow via user input.
This commit is contained in:
parent
bfba2f83f5
commit
afd015709b
@ -1477,9 +1477,15 @@ ipmi_dcmi_pwr_slimit(struct ipmi_intf * intf, const char * option,
|
|||||||
struct ipmi_rq req; /* ipmi request (to send) */
|
struct ipmi_rq req; /* ipmi request (to send) */
|
||||||
struct power_limit val;
|
struct power_limit val;
|
||||||
uint8_t msg_data[15]; /* number of request data bytes */
|
uint8_t msg_data[15]; /* number of request data bytes */
|
||||||
uint32_t lvalue = strtol(value, NULL, 10);
|
uint32_t lvalue = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (str2uint(value, &lvalue) != 0) {
|
||||||
|
lprintf(LOG_ERR, "Given %s '%s' is invalid.",
|
||||||
|
option, value);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
rsp = ipmi_dcmi_pwr_glimit(intf); /* get the power limit settings */
|
rsp = ipmi_dcmi_pwr_glimit(intf); /* get the power limit settings */
|
||||||
# if 0
|
# if 0
|
||||||
{
|
{
|
||||||
@ -1694,6 +1700,9 @@ ipmi_dcmi_main(struct ipmi_intf * intf, int argc, char **argv)
|
|||||||
/* Let`s initialize dcmi power parameters */
|
/* Let`s initialize dcmi power parameters */
|
||||||
struct ipmi_rq req;
|
struct ipmi_rq req;
|
||||||
uint8_t data[256];
|
uint8_t data[256];
|
||||||
|
uint16_t sample = 0;
|
||||||
|
uint16_t limit = 0;
|
||||||
|
uint32_t correction = 0;
|
||||||
|
|
||||||
memset(data, 0, sizeof(data));
|
memset(data, 0, sizeof(data));
|
||||||
memset(&req, 0, sizeof(req));
|
memset(&req, 0, sizeof(req));
|
||||||
@ -1724,13 +1733,36 @@ ipmi_dcmi_main(struct ipmi_intf * intf, int argc, char **argv)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* limit */
|
/* limit */
|
||||||
*(uint16_t*)(&data[5]) = strtol(argv[4], NULL, 10);
|
if (str2ushort(argv[4], &limit) != 0) {
|
||||||
|
lprintf(LOG_ERR,
|
||||||
|
"Given Limit '%s' is invalid.",
|
||||||
|
argv[4]);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
data[5] = limit >> 0;
|
||||||
|
data[6] = limit >> 8;
|
||||||
/* correction */
|
/* correction */
|
||||||
*(uint32_t*)(&data[7]) = strtol(argv[6], NULL, 10);
|
if (str2uint(argv[6], &correction) != 0) {
|
||||||
|
lprintf(LOG_ERR,
|
||||||
|
"Given Correction '%s' is invalid.",
|
||||||
|
argv[6]);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
data[7] = correction >> 0;
|
||||||
|
data[8] = correction >> 8;
|
||||||
|
data[9] = correction >> 16;
|
||||||
|
data[10] = correction >> 24;
|
||||||
data[11] = 0x00; /* reserved */
|
data[11] = 0x00; /* reserved */
|
||||||
data[12] = 0x00; /* reserved */
|
data[12] = 0x00; /* reserved */
|
||||||
/* sample */
|
/* sample */
|
||||||
*(uint16_t*)(&data[13]) = strtol(argv[8], NULL, 10);
|
if (str2ushort(argv[8], &sample) != 0) {
|
||||||
|
lprintf(LOG_ERR,
|
||||||
|
"Given Sample '%s' is invalid.",
|
||||||
|
argv[8]);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
data[13] = sample >> 0;
|
||||||
|
data[14] = sample >> 8;
|
||||||
|
|
||||||
rsp = intf->sendrecv(intf, &req);
|
rsp = intf->sendrecv(intf, &req);
|
||||||
if (chk_rsp(rsp)) {
|
if (chk_rsp(rsp)) {
|
||||||
@ -1836,14 +1868,15 @@ ipmi_dcmi_main(struct ipmi_intf * intf, int argc, char **argv)
|
|||||||
/* end set management controller identifier string */
|
/* end set management controller identifier string */
|
||||||
case 0x07:
|
case 0x07:
|
||||||
{
|
{
|
||||||
uint8_t entityID, entityInst;
|
uint8_t entityID = 0;
|
||||||
|
uint8_t entityInst = 0;
|
||||||
uint8_t persistanceFlag;
|
uint8_t persistanceFlag;
|
||||||
uint8_t actionHardPowerOff;
|
uint8_t actionHardPowerOff;
|
||||||
uint8_t actionLogToSEL;
|
uint8_t actionLogToSEL;
|
||||||
uint8_t tempLimit;
|
uint8_t tempLimit = 0;
|
||||||
uint16_t samplingTime;
|
|
||||||
uint8_t samplingTimeLSB;
|
uint8_t samplingTimeLSB;
|
||||||
uint8_t samplingTimeMSB;
|
uint8_t samplingTimeMSB;
|
||||||
|
uint16_t samplingTime = 0;
|
||||||
/* Thermal policy get/set */
|
/* Thermal policy get/set */
|
||||||
/* dcmitool dcmi thermalpolicy get */
|
/* dcmitool dcmi thermalpolicy get */
|
||||||
switch (str2val2(argv[1], dcmi_thermalpolicy_vals)) {
|
switch (str2val2(argv[1], dcmi_thermalpolicy_vals)) {
|
||||||
@ -1852,8 +1885,18 @@ ipmi_dcmi_main(struct ipmi_intf * intf, int argc, char **argv)
|
|||||||
lprintf(LOG_NOTICE, "Get <entityID> <instanceID>");
|
lprintf(LOG_NOTICE, "Get <entityID> <instanceID>");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
entityID = (uint8_t)strtol(argv[2], NULL,0);
|
if (str2uchar(argv[2], &entityID) != 0) {
|
||||||
entityInst = (uint8_t)strtol(argv[3], NULL, 0);
|
lprintf(LOG_ERR,
|
||||||
|
"Given Entity ID '%s' is invalid.",
|
||||||
|
argv[2]);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
if (str2uchar(argv[3], &entityInst) != 0) {
|
||||||
|
lprintf(LOG_ERR,
|
||||||
|
"Given Instance ID '%s' is invalid.",
|
||||||
|
argv[3]);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
rc = ipmi_dcmi_getthermalpolicy(intf, entityID, entityInst);
|
rc = ipmi_dcmi_getthermalpolicy(intf, entityID, entityInst);
|
||||||
break;
|
break;
|
||||||
case 0x01:
|
case 0x01:
|
||||||
@ -1869,14 +1912,33 @@ ipmi_dcmi_main(struct ipmi_intf * intf, int argc, char **argv)
|
|||||||
-1, 0);
|
-1, 0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
entityID = (uint8_t)strtol(argv[2],NULL, 0);
|
if (str2uchar(argv[2], &entityID) != 0) {
|
||||||
entityInst = (uint8_t)strtol(argv[3], NULL, 0);
|
lprintf(LOG_ERR,
|
||||||
|
"Given Entity ID '%s' is invalid.",
|
||||||
|
argv[2]);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
if (str2uchar(argv[3], &entityInst) != 0) {
|
||||||
|
lprintf(LOG_ERR,
|
||||||
|
"Given Instance ID '%s' is invalid.",
|
||||||
|
argv[3]);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
persistanceFlag = (uint8_t) str2val2(argv[4], dcmi_thermalpolicy_set_parameters_vals);
|
persistanceFlag = (uint8_t) str2val2(argv[4], dcmi_thermalpolicy_set_parameters_vals);
|
||||||
actionHardPowerOff = (uint8_t) str2val2(argv[5], dcmi_thermalpolicy_set_parameters_vals);
|
actionHardPowerOff = (uint8_t) str2val2(argv[5], dcmi_thermalpolicy_set_parameters_vals);
|
||||||
actionLogToSEL = (uint8_t) str2val2(argv[6], dcmi_thermalpolicy_set_parameters_vals);
|
actionLogToSEL = (uint8_t) str2val2(argv[6], dcmi_thermalpolicy_set_parameters_vals);
|
||||||
tempLimit = (uint8_t) strtol(argv[7], NULL, 0);
|
if (str2uchar(argv[7], &tempLimit) != 0) {
|
||||||
samplingTime = (uint16_t) strtol(argv[8], NULL, 0);
|
lprintf(LOG_ERR,
|
||||||
|
"Given Temp Limit '%s' is invalid.",
|
||||||
|
argv[7]);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
if (str2ushort(argv[8], &samplingTime) != 0) {
|
||||||
|
lprintf(LOG_ERR,
|
||||||
|
"Given Sampling Time '%s' is invalid.",
|
||||||
|
argv[8]);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
samplingTimeLSB = (samplingTime & 0xFF);
|
samplingTimeLSB = (samplingTime & 0xFF);
|
||||||
samplingTimeMSB = ((samplingTime & 0xFF00) >> 8);
|
samplingTimeMSB = ((samplingTime & 0xFF00) >> 8);
|
||||||
|
|
||||||
@ -1933,9 +1995,16 @@ ipmi_dcmi_main(struct ipmi_intf * intf, int argc, char **argv)
|
|||||||
if (strncmp(argv[1], "activate_dhcp", 13) == 0) {
|
if (strncmp(argv[1], "activate_dhcp", 13) == 0) {
|
||||||
rsp = ipmi_dcmi_setconfparam(intf, 1, 1);
|
rsp = ipmi_dcmi_setconfparam(intf, 1, 1);
|
||||||
} else {
|
} else {
|
||||||
|
uint16_t tmp_val = 0;
|
||||||
|
if (str2ushort(argv[2], &tmp_val) != 0) {
|
||||||
|
lprintf(LOG_ERR,
|
||||||
|
"Given %s '%s' is invalid.",
|
||||||
|
argv[1], argv[2]);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
rsp = ipmi_dcmi_setconfparam(intf,
|
rsp = ipmi_dcmi_setconfparam(intf,
|
||||||
str2val2(argv[1], dcmi_conf_param_vals),
|
str2val2(argv[1], dcmi_conf_param_vals),
|
||||||
(uint16_t)strtol(argv[2], NULL, 0));
|
tmp_val);
|
||||||
}
|
}
|
||||||
if (chk_rsp(rsp)) {
|
if (chk_rsp(rsp)) {
|
||||||
lprintf(LOG_ERR,
|
lprintf(LOG_ERR,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user