From: Lukasz Majewski <lukma@denx.de>
To: u-boot@lists.denx.de
Subject: [PATCH] fastboot: add UUU command UCmd and ACmd support
Date: Mon, 1 Feb 2021 08:56:33 +0100 [thread overview]
Message-ID: <20210201085633.2a9b29f3@jawa> (raw)
In-Reply-To: <aadd7eb8-16ab-ba90-dbbf-204eacdd7a2f@denx.de>
Hi Heiko,
> Hello Roman,
>
> Am 27.01.21 um 10:34 schrieb Roman Stratiienko:
> > Hello Heiko,
> >
> > Looks like these commands will provide full access to any u-boot
> > commands, including working with memory.
> > It can be used to read/set any registers/data which is not in the
> > trust zone, thus opening a huge backdoor.
> >
> > This command could be useful for debug/CI purposes, but do you
> > really want this in release builds?
>
> Hmm.. indeed.
>
> I set the default to no not to yes, so you need
> to enable it, and add a comment in Kconfig.
Do you plan to send another version of this patch? Or is it ready for
being pull?
>
> Thanks!
>
> bye,
> Heiko
> >
> > Best regards,
> > Roman
> >
> > ??, 11 ???. 2021 ?. ? 12:19, Heiko Schocher <hs@denx.de>:
> >>
> >> add support for the UUU commands ACmd and UCmd.
> >>
> >> Enable them through the Kconfig option
> >> CONFIG_FASTBOOT_UUU_SUPPORT
> >>
> >> base was commit in NXP kernel
> >> 9b149c2a2882: ("MLK-18591-3 android: Add FSL android fastboot
> >> support")
> >>
> >> and ported it to current mainline. Tested this patch
> >> on imx6ul based board.
> >>
> >> Signed-off-by: Heiko Schocher <hs@denx.de>
> >> ---
> >> azure build:
> >> https://dev.azure.com/hs0298/hs/_build/results?buildId=57&view=results
> >>
> >> version uuu tool used for tests:
> >> commit 3870fb781b35: ("fastboot: default to logical-block-size
> >> 4096")
> >>
> >> doc/android/fastboot-protocol.rst | 5 +++
> >> doc/android/fastboot.rst | 2 +
> >> drivers/fastboot/Kconfig | 7 ++++
> >> drivers/fastboot/fb_command.c | 62
> >> +++++++++++++++++++++++++++++++ drivers/usb/gadget/f_fastboot.c
> >> | 17 +++++++++ include/fastboot.h | 7 ++++
> >> 6 files changed, 100 insertions(+)
> >>
> >> diff --git a/doc/android/fastboot-protocol.rst
> >> b/doc/android/fastboot-protocol.rst index e723659e49c..e8cbd7f24ea
> >> 100644 --- a/doc/android/fastboot-protocol.rst
> >> +++ b/doc/android/fastboot-protocol.rst
> >> @@ -144,6 +144,11 @@ Command Reference
> >>
> >> "powerdown" Power off the device.
> >>
> >> + "ucmd" execute any bootloader command and wait
> >> until it
> >> + finishs.
> >> +
> >> + "acmd" execute any bootloader command, do not
> >> wait. +
> >> Client Variables
> >> ----------------
> >>
> >> diff --git a/doc/android/fastboot.rst b/doc/android/fastboot.rst
> >> index 2877c3cbaaa..b58d1b5b31a 100644
> >> --- a/doc/android/fastboot.rst
> >> +++ b/doc/android/fastboot.rst
> >> @@ -19,6 +19,8 @@ The current implementation supports the
> >> following standard commands:
> >> - ``reboot``
> >> - ``reboot-bootloader``
> >> - ``set_active`` (only a stub implementation which always
> >> succeeds) +- ``ucmd`` (if enabled)
> >> +- ``acmd`` (if enabled)
> >>
> >> The following OEM commands are supported (if enabled):
> >>
> >> diff --git a/drivers/fastboot/Kconfig b/drivers/fastboot/Kconfig
> >> index 4352ba67a71..b1f8cd74a15 100644
> >> --- a/drivers/fastboot/Kconfig
> >> +++ b/drivers/fastboot/Kconfig
> >> @@ -72,6 +72,13 @@ config FASTBOOT_FLASH
> >> the downloaded image to a non-volatile storage device.
> >> Define this to enable the "fastboot flash" command.
> >>
> >> +config FASTBOOT_UUU_SUPPORT
> >> + bool "Enable FASTBOOT i.MX UUU special command"
> >> + default y if ARCH_MX7 || ARCH_MX6 || ARCH_IMX8 ||
> >> ARCH_IMX8M || ARCH_MX7ULP
> >> + select FSL_FASTBOOT
> >> + help
> >> + The fastboot protocol includes "UCmd" command and "ACmd"
> >> command +
> >> choice
> >> prompt "Flash provider for FASTBOOT"
> >> depends on FASTBOOT_FLASH
> >> diff --git a/drivers/fastboot/fb_command.c
> >> b/drivers/fastboot/fb_command.c index d3c578672dc..31a47e46386
> >> 100644 --- a/drivers/fastboot/fb_command.c
> >> +++ b/drivers/fastboot/fb_command.c
> >> @@ -43,6 +43,11 @@ static void reboot_recovery(char *, char *);
> >> static void oem_format(char *, char *);
> >> #endif
> >>
> >> +#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT)
> >> +static void run_ucmd(char *, char *);
> >> +static void run_acmd(char *, char *);
> >> +#endif
> >> +
> >> static const struct {
> >> const char *command;
> >> void (*dispatch)(char *cmd_parameter, char *response);
> >> @@ -99,6 +104,16 @@ static const struct {
> >> .dispatch = oem_format,
> >> },
> >> #endif
> >> +#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT)
> >> + [FASTBOOT_COMMAND_UCMD] = {
> >> + .command = "UCmd",
> >> + .dispatch = run_ucmd,
> >> + },
> >> + [FASTBOOT_COMMAND_ACMD] = {
> >> + .command = "ACmd",
> >> + .dispatch = run_acmd,
> >> + },
> >> +#endif
> >> };
> >>
> >> /**
> >> @@ -309,6 +324,53 @@ static void erase(char *cmd_parameter, char
> >> *response) }
> >> #endif
> >>
> >> +#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT)
> >> +/**
> >> + * run_ucmd() - Execute the UCmd command
> >> + *
> >> + * @cmd_parameter: Pointer to command parameter
> >> + * @response: Pointer to fastboot response buffer
> >> + */
> >> +static void run_ucmd(char *cmd_parameter, char *response)
> >> +{
> >> + if (!cmd_parameter) {
> >> + pr_err("missing slot suffix\n");
> >> + fastboot_fail("missing command", response);
> >> + return;
> >> + }
> >> +
> >> + if (run_command(cmd_parameter, 0))
> >> + fastboot_fail("", response);
> >> + else
> >> + fastboot_okay(NULL, response);
> >> +}
> >> +
> >> +static char g_a_cmd_buff[64];
> >> +
> >> +void fastboot_acmd_complete(void)
> >> +{
> >> + run_command(g_a_cmd_buff, 0);
> >> +}
> >> +
> >> +/**
> >> + * run_acmd() - Execute the ACmd command
> >> + *
> >> + * @cmd_parameter: Pointer to command parameter
> >> + * @response: Pointer to fastboot response buffer
> >> + */
> >> +static void run_acmd(char *cmd_parameter, char *response)
> >> +{
> >> + if (!cmd_parameter) {
> >> + pr_err("missing slot suffix\n");
> >> + fastboot_fail("missing command", response);
> >> + return;
> >> + }
> >> +
> >> + strcpy(g_a_cmd_buff, cmd_parameter);
> >> + fastboot_okay(NULL, response);
> >> +}
> >> +#endif
> >> +
> >> /**
> >> * reboot_bootloader() - Sets reboot bootloader flag.
> >> *
> >> diff --git a/drivers/usb/gadget/f_fastboot.c
> >> b/drivers/usb/gadget/f_fastboot.c index d1d087e12b2..bf52d2505f4
> >> 100644 --- a/drivers/usb/gadget/f_fastboot.c
> >> +++ b/drivers/usb/gadget/f_fastboot.c
> >> @@ -419,6 +419,18 @@ static void do_bootm_on_complete(struct
> >> usb_ep *ep, struct usb_request *req) do_exit_on_complete(ep, req);
> >> }
> >>
> >> +#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT)
> >> +static void do_acmd_complete(struct usb_ep *ep, struct
> >> usb_request *req) +{
> >> + /* When usb dequeue complete will be called
> >> + * Need status value before call run_command.
> >> + * otherwise, host can't get last message.
> >> + */
> >> + if (req->status == 0)
> >> + fastboot_acmd_complete();
> >> +}
> >> +#endif
> >> +
> >> static void rx_handler_command(struct usb_ep *ep, struct
> >> usb_request *req) {
> >> char *cmdbuf = req->buf;
> >> @@ -457,6 +469,11 @@ static void rx_handler_command(struct usb_ep
> >> *ep, struct usb_request *req) case
> >> FASTBOOT_COMMAND_REBOOT_RECOVERY: fastboot_func->in_req->complete
> >> = compl_do_reset; break;
> >> +#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT)
> >> + case FASTBOOT_COMMAND_ACMD:
> >> + fastboot_func->in_req->complete =
> >> do_acmd_complete;
> >> + break;
> >> +#endif
> >> }
> >> }
> >>
> >> diff --git a/include/fastboot.h b/include/fastboot.h
> >> index 8e9ee80907d..ef8cd842bb3 100644
> >> --- a/include/fastboot.h
> >> +++ b/include/fastboot.h
> >> @@ -38,6 +38,10 @@ enum {
> >> #if CONFIG_IS_ENABLED(FASTBOOT_CMD_OEM_FORMAT)
> >> FASTBOOT_COMMAND_OEM_FORMAT,
> >> #endif
> >> +#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT)
> >> + FASTBOOT_COMMAND_ACMD,
> >> + FASTBOOT_COMMAND_UCMD,
> >> +#endif
> >>
> >> FASTBOOT_COMMAND_COUNT
> >> };
> >> @@ -172,4 +176,7 @@ void fastboot_data_download(const void
> >> *fastboot_data, */
> >> void fastboot_data_complete(char *response);
> >>
> >> +#if CONFIG_IS_ENABLED(FASTBOOT_UUU_SUPPORT)
> >> +void fastboot_acmd_complete(void);
> >> +#endif
> >> #endif /* _FASTBOOT_H_ */
> >> --
> >> 2.25.4
> >>
>
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210201/58f983c5/attachment.sig>
next prev parent reply other threads:[~2021-02-01 7:56 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-11 10:19 [PATCH] fastboot: add UUU command UCmd and ACmd support Heiko Schocher
2021-01-13 16:10 ` Simon Glass
2021-01-26 5:23 ` Heiko Schocher
2021-01-26 11:46 ` Tom Rini
2021-01-26 12:08 ` Heiko Schocher
2021-01-27 8:06 ` Lukasz Majewski
2021-01-27 9:34 ` Roman Stratiienko
2021-01-27 10:11 ` Heiko Schocher
2021-02-01 7:56 ` Lukasz Majewski [this message]
2021-02-01 8:21 ` Heiko Schocher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210201085633.2a9b29f3@jawa \
--to=lukma@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.