Skip to content

Commit

Permalink
discover/platform-powerpc: limit mailbox response size
Browse files Browse the repository at this point in the history
The maximum size of the mailbox with Boot Initiator info is defined in
the specification (1). The code should not extract data from the IPMI
response message if its size exceeds the maximum limit from the
specification.

[1] page 398, IPMI Specification v2.0, Revision 1.1, October 1, 2013

Signed-off-by: Maxim Polyakov <m.polyakov@yadro.com>
  • Loading branch information
maxpoliak authored and jk-ozlabs committed Oct 8, 2019
1 parent 43813e6 commit 1088a8a
Showing 1 changed file with 17 additions and 14 deletions.
31 changes: 17 additions & 14 deletions discover/platform-powerpc.c
Expand Up @@ -461,24 +461,27 @@ static int get_ipmi_boot_mailbox_block(struct platform_powerpc *platform,
return -1;
}

if (resp_len < sizeof(resp)) {
if (resp_len < 4) {
pb_log("platform: unexpected length (%d) in "
"boot options mailbox response\n",
resp_len);
return -1;
}
if (resp_len > sizeof(resp)) {
pb_debug("platform: invalid mailbox response size!\n");
return -1;
}

if (resp_len == 4) {
pb_debug_fn("block %hu empty\n", block);
return 0;
}
if (resp_len < 4) {
pb_log("platform: unexpected length (%d) in "
"boot options mailbox response\n",
resp_len);
return -1;
}

blocksize = sizeof(resp) - 4;
pb_debug_fn("Mailbox block %hu returns only %zu bytes in block\n",
block, blocksize);
if (resp_len == 4) {
pb_debug_fn("block %hu empty\n", block);
return 0;
}

blocksize = sizeof(resp) - 4;
pb_debug_fn("Mailbox block %hu returns only %zu bytes in block\n",
block, blocksize);

debug_buf = format_buffer(platform, resp, resp_len);
pb_debug_fn("IPMI bootdev mailbox block %hu:\n%s\n", block, debug_buf);
talloc_free(debug_buf);
Expand Down

0 comments on commit 1088a8a

Please sign in to comment.