fastboot: add oem console command support

"oem console" serves to read console record buffer.

Signed-off-by: Ion Agorria <ion@agorria.com>
Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
Link: https://lore.kernel.org/r/20240105072212.6615-7-clamor95@gmail.com
Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
This commit is contained in:
Ion Agorria 2024-01-05 09:22:11 +02:00 committed by Mattijs Korpershoek
parent e58bafc35f
commit 16f79dd4cd
4 changed files with 48 additions and 0 deletions

View File

@ -29,6 +29,7 @@ The following OEM commands are supported (if enabled):
with <arg> = boot_ack boot_partition with <arg> = boot_ack boot_partition
- ``oem bootbus`` - this executes ``mmc bootbus %x %s`` to configure eMMC - ``oem bootbus`` - this executes ``mmc bootbus %x %s`` to configure eMMC
- ``oem run`` - this executes an arbitrary U-Boot command - ``oem run`` - this executes an arbitrary U-Boot command
- ``oem console`` - this dumps U-Boot console record buffer
Support for both eMMC and NAND devices is included. Support for both eMMC and NAND devices is included.

View File

@ -242,6 +242,13 @@ config FASTBOOT_OEM_RUN
this feature if you are using verified boot, as it will allow an this feature if you are using verified boot, as it will allow an
attacker to bypass any restrictions you have in place. attacker to bypass any restrictions you have in place.
config FASTBOOT_CMD_OEM_CONSOLE
bool "Enable the 'oem console' command"
depends on CONSOLE_RECORD
help
Add support for the "oem console" command to input and read console
record buffer.
endif # FASTBOOT endif # FASTBOOT
endmenu endmenu

View File

@ -41,6 +41,7 @@ static void reboot_recovery(char *, char *);
static void oem_format(char *, char *); static void oem_format(char *, char *);
static void oem_partconf(char *, char *); static void oem_partconf(char *, char *);
static void oem_bootbus(char *, char *); static void oem_bootbus(char *, char *);
static void oem_console(char *, char *);
static void run_ucmd(char *, char *); static void run_ucmd(char *, char *);
static void run_acmd(char *, char *); static void run_acmd(char *, char *);
@ -108,6 +109,10 @@ static const struct {
.command = "oem run", .command = "oem run",
.dispatch = CONFIG_IS_ENABLED(FASTBOOT_OEM_RUN, (run_ucmd), (NULL)) .dispatch = CONFIG_IS_ENABLED(FASTBOOT_OEM_RUN, (run_ucmd), (NULL))
}, },
[FASTBOOT_COMMAND_OEM_CONSOLE] = {
.command = "oem console",
.dispatch = CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_CONSOLE, (oem_console), (NULL))
},
[FASTBOOT_COMMAND_UCMD] = { [FASTBOOT_COMMAND_UCMD] = {
.command = "UCmd", .command = "UCmd",
.dispatch = CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT, (run_ucmd), (NULL)) .dispatch = CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT, (run_ucmd), (NULL))
@ -159,6 +164,23 @@ void fastboot_multiresponse(int cmd, char *response)
case FASTBOOT_COMMAND_GETVAR: case FASTBOOT_COMMAND_GETVAR:
fastboot_getvar_all(response); fastboot_getvar_all(response);
break; break;
case FASTBOOT_COMMAND_OEM_CONSOLE:
if (CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_CONSOLE)) {
char buf[FASTBOOT_RESPONSE_LEN] = { 0 };
if (console_record_isempty()) {
console_record_reset();
fastboot_okay(NULL, response);
} else {
int ret = console_record_readline(buf, sizeof(buf) - 5);
if (ret < 0)
fastboot_fail("Error reading console", response);
else
fastboot_response("INFO", response, "%s", buf);
}
break;
}
default: default:
fastboot_fail("Unknown multiresponse command", response); fastboot_fail("Unknown multiresponse command", response);
break; break;
@ -503,3 +525,20 @@ static void __maybe_unused oem_bootbus(char *cmd_parameter, char *response)
else else
fastboot_okay(NULL, response); fastboot_okay(NULL, response);
} }
/**
* oem_console() - Execute the OEM console command
*
* @cmd_parameter: Pointer to command parameter
* @response: Pointer to fastboot response buffer
*/
static void __maybe_unused oem_console(char *cmd_parameter, char *response)
{
if (cmd_parameter)
console_in_puts(cmd_parameter);
if (console_record_isempty())
fastboot_fail("Empty console", response);
else
fastboot_response(FASTBOOT_MULTIRESPONSE_START, response, NULL);
}

View File

@ -47,6 +47,7 @@ enum {
FASTBOOT_COMMAND_OEM_PARTCONF, FASTBOOT_COMMAND_OEM_PARTCONF,
FASTBOOT_COMMAND_OEM_BOOTBUS, FASTBOOT_COMMAND_OEM_BOOTBUS,
FASTBOOT_COMMAND_OEM_RUN, FASTBOOT_COMMAND_OEM_RUN,
FASTBOOT_COMMAND_OEM_CONSOLE,
FASTBOOT_COMMAND_ACMD, FASTBOOT_COMMAND_ACMD,
FASTBOOT_COMMAND_UCMD, FASTBOOT_COMMAND_UCMD,
FASTBOOT_COMMAND_COUNT FASTBOOT_COMMAND_COUNT