From 92939674d6cb7689872ba635ceb4c84acb9087af Mon Sep 17 00:00:00 2001 From: Chris Harris Date: Thu, 23 Oct 2025 18:09:18 +0000 Subject: [PATCH] Handle "self" channel Check for IPMI_SELF_CHANNEL before looking up channel. --- lanserv/bmc_app.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/lanserv/bmc_app.c b/lanserv/bmc_app.c index 73aa6d6b..6aa83d44 100644 --- a/lanserv/bmc_app.c +++ b/lanserv/bmc_app.c @@ -1150,6 +1150,7 @@ handle_get_channel_payload_support(lmc_data_t *mc, void *cb_data) { channel_t *channel; + unsigned char channel_num; if (msg->len < 1) { rdata[0] = IPMI_REQUEST_DATA_LENGTH_INVALID_CC; @@ -1157,7 +1158,25 @@ handle_get_channel_payload_support(lmc_data_t *mc, return; } - channel = mc->channels[msg->data[0] & 0xf]; + channel_num = msg->data[0] & 0xf; + + // current channel + if (channel_num == IPMI_SELF_CHANNEL) { + channel = msg->orig_channel; + } else if (channel_num >= IPMI_MAX_CHANNELS) { // invalid channel + rdata[0] = IPMI_INVALID_DATA_FIELD_CC; + *rdata_len = 1; + return; + } else { // specified channel + channel = mc->channels[channel_num]; + } + + // check if channel is valid + if (!channel) { + rdata[0] = IPMI_INVALID_DATA_FIELD_CC; + *rdata_len = 1; + return; + } rdata[0] = 0; rdata[1] = ((1 << 1) |