[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1/8] ipmi: fix SDR length value
From: |
Cédric Le Goater |
Subject: |
[Qemu-devel] [PATCH 1/8] ipmi: fix SDR length value |
Date: |
Tue, 5 Jan 2016 18:29:55 +0100 |
The IPMI BMC simulator populates the SDR table with a set of initial
SDRs. The length of each SDR is taken from the record itself (byte 4)
which does not include the size of the header. But, the full length
(header + data) is required by the sdr_add_entry() routine.
Signed-off-by: Cédric Le Goater <address@hidden>
---
Maybe we could use a sdr struct/typedef to clarify the code. See
patch 7: "ipmi: introduce an ipmi_bmc_init_sensor() API"
hw/ipmi/ipmi_bmc_sim.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/hw/ipmi/ipmi_bmc_sim.c b/hw/ipmi/ipmi_bmc_sim.c
index 0a59e539f549..559e1398d669 100644
--- a/hw/ipmi/ipmi_bmc_sim.c
+++ b/hw/ipmi/ipmi_bmc_sim.c
@@ -362,7 +362,7 @@ static int sdr_find_entry(IPMISdr *sdr, uint16_t recid,
while (pos < sdr->next_free) {
uint16_t trec = sdr->sdr[pos] | (sdr->sdr[pos + 1] << 8);
- unsigned int nextpos = pos + sdr->sdr[pos + 4];
+ unsigned int nextpos = pos + sdr->sdr[pos + 4] + 5;
if (trec == recid) {
if (nextrec) {
@@ -1198,7 +1198,7 @@ static void get_sdr(IPMIBmcSim *ibs,
rsp[2] = IPMI_CC_REQ_ENTRY_NOT_PRESENT;
goto out;
}
- if (cmd[6] > (ibs->sdr.sdr[pos + 4])) {
+ if (cmd[6] > (ibs->sdr.sdr[pos + 4] + 5)) {
rsp[2] = IPMI_CC_PARM_OUT_OF_RANGE;
goto out;
}
@@ -1207,7 +1207,7 @@ static void get_sdr(IPMIBmcSim *ibs,
IPMI_ADD_RSP_DATA((nextrec >> 8) & 0xff);
if (cmd[7] == 0xff) {
- cmd[7] = ibs->sdr.sdr[pos + 4] - cmd[6];
+ cmd[7] = ibs->sdr.sdr[pos + 4] + 5 - cmd[6];
}
if ((cmd[7] + *rsp_len) > max_rsp_len) {
@@ -1709,20 +1709,20 @@ static void ipmi_sim_init(Object *obj)
for (i = 0;;) {
int len;
if ((i + 5) > sizeof(init_sdrs)) {
- error_report("Problem with recid 0x%4.4x: \n", i);
+ error_report("Problem with recid 0x%4.4x\n", i);
return;
}
- len = init_sdrs[i + 4];
+ len = init_sdrs[i + 4] + 5;
recid = init_sdrs[i] | (init_sdrs[i + 1] << 8);
if (recid == 0xffff) {
break;
}
- if ((i + len + 5) > sizeof(init_sdrs)) {
+ if ((i + len) > sizeof(init_sdrs)) {
error_report("Problem with recid 0x%4.4x\n", i);
return;
}
sdr_add_entry(ibs, init_sdrs + i, len, NULL);
- i += len + 5;
+ i += len;
}
ipmi_init_sensors_from_sdrs(ibs);
--
2.1.4
- [Qemu-devel] [PATCH 1/8] ipmi: fix SDR length value,
Cédric Le Goater <=