diff mbox series

cmd: pxe_utils: sysboot: fix crash if either board or soc are not set.

Message ID 20210421114201.57994-1-xnox@ubuntu.com
State Accepted
Delegated to: Ramon Fried
Headers show
Series cmd: pxe_utils: sysboot: fix crash if either board or soc are not set. | expand

Commit Message

Dimitri John Ledkov April 21, 2021, 11:42 a.m. UTC
If the environment does not have "soc" or "board" set, and fdtdir
option is specified in extlinux.conf, the bootloader will crash whilst
dereferencing a null pointer. Add a guard against null soc or
board. Fixes a crash of qemu-riscv64_smode configuration, which does
not have CONFIG_SYS_SOC defined.

Signed-off-by: Dimitri John Ledkov <xnox@ubuntu.com>
---
 cmd/pxe_utils.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Dimitri John Ledkov May 4, 2021, 10:25 a.m. UTC | #1
Hi qemu-board meaintainers,

The below patch affects any boards that do not have either board or
soc variables set.

Of which non-x86 qemu boards are exactly that, preventing to netboot
the same rootfs across multiple boards and qemu at the same time.

Another alternative would be for all non-x86 qemu boards to also define
config SYS_SOC
        default "qemu"

However, I fear similar situation might still arise in the future
where some boards lack either SYS_BOARD or SYS_SOC definitions. Thus
even if non-qemu boards are fixed up, the below should still be
applied?

Do you want me to send a separate patch to add SYS_SOC to all qemu boards?

On Wed, Apr 21, 2021 at 3:32 PM Dimitri John Ledkov <xnox@ubuntu.com> wrote:
>
> If the environment does not have "soc" or "board" set, and fdtdir
> option is specified in extlinux.conf, the bootloader will crash whilst
> dereferencing a null pointer. Add a guard against null soc or
> board. Fixes a crash of qemu-riscv64_smode configuration, which does
> not have CONFIG_SYS_SOC defined.
>
> Signed-off-by: Dimitri John Ledkov <xnox@ubuntu.com>
> ---
>  cmd/pxe_utils.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/cmd/pxe_utils.c b/cmd/pxe_utils.c
> index 71c5af4c25..9a30629e26 100644
> --- a/cmd/pxe_utils.c
> +++ b/cmd/pxe_utils.c
> @@ -587,6 +587,14 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label)
>                                 f2 = "-";
>                                 f3 = env_get("board");
>                                 f4 = ".dtb";
> +                               if (!f1) {
> +                                       f1 = "";
> +                                       f2 = "";
> +                               }
> +                               if (!f3) {
> +                                       f2 = "";
> +                                       f3 = "";
> +                               }
>                         }
>
>                         len = strlen(label->fdtdir);
> --
> 2.27.0
>
Ramon Fried May 8, 2021, 6:23 a.m. UTC | #2
On Wed, Apr 21, 2021 at 5:32 PM Dimitri John Ledkov <xnox@ubuntu.com> wrote:
>
> If the environment does not have "soc" or "board" set, and fdtdir
> option is specified in extlinux.conf, the bootloader will crash whilst
> dereferencing a null pointer. Add a guard against null soc or
> board. Fixes a crash of qemu-riscv64_smode configuration, which does
> not have CONFIG_SYS_SOC defined.
>
> Signed-off-by: Dimitri John Ledkov <xnox@ubuntu.com>
> ---
>  cmd/pxe_utils.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/cmd/pxe_utils.c b/cmd/pxe_utils.c
> index 71c5af4c25..9a30629e26 100644
> --- a/cmd/pxe_utils.c
> +++ b/cmd/pxe_utils.c
> @@ -587,6 +587,14 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label)
>                                 f2 = "-";
>                                 f3 = env_get("board");
>                                 f4 = ".dtb";
> +                               if (!f1) {
> +                                       f1 = "";
> +                                       f2 = "";
> +                               }
> +                               if (!f3) {
> +                                       f2 = "";
> +                                       f3 = "";
> +                               }
>                         }
>
>                         len = strlen(label->fdtdir);
> --
> 2.27.0
>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
diff mbox series

Patch

diff --git a/cmd/pxe_utils.c b/cmd/pxe_utils.c
index 71c5af4c25..9a30629e26 100644
--- a/cmd/pxe_utils.c
+++ b/cmd/pxe_utils.c
@@ -587,6 +587,14 @@  static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label)
 				f2 = "-";
 				f3 = env_get("board");
 				f4 = ".dtb";
+				if (!f1) {
+					f1 = "";
+					f2 = "";
+				}
+				if (!f3) {
+					f2 = "";
+					f3 = "";
+				}
 			}
 
 			len = strlen(label->fdtdir);