On 11/15/23 23:46, Heinrich Schuchardt wrote:


Am 15. November 2023 23:15:46 MEZ schrieb Simon Glass <s...@chromium.org>:
Hi Shantur,

On Wed, 15 Nov 2023 at 15:13, Shantur Rathore <i...@shantur.com> wrote:

Hi Simon,

I have figured out the cause of the crash.
It happens here -
https://github.com/u-boot/u-boot/blob/master/boot/bootflow.c#L470
while doing - free(bflow->buf)

Unfortunately the description of the field bflow->buf is deceptively wrong:

 @buf: Bootflow file contents (allocated)

The EFI bootflow never allocates this buffer but uses the address
$kernel_addr_r without allocation.

We must not call free on an address that we never allocated via malloc().

Doesn't this also explain the error you experienced before writing

[PATCH v4 05/12] usb: Avoid unbinding devices in use by bootflows
https://lore.kernel.org/u-boot/cahc5_t3v23k_xbws5o-g9iqfoq7fhpkscf89xdaaago+bu8...@mail.gmail.com/T/#m992e20fb25fe0f2f0047e901a76e78628e59da7a

Best regards

Heinrich


As I understand it,
- Just before starting kernel EFI binary calls usb-uclass->usb_stop()
- This starts removing all devices in my case ( 6x usb_hub, 2x
partition, 1x blk, 2x bootdev, 1x usb_maas_storage)
- While removing bootdev, it ends up calling bootdev-uclass ->
bootdev_pre_unbind -> bootdev_clear_bootflows which calls
bootflow->bootflow_remove and bootflow_free

I don't know why this buf cannot be freed, is it because the EFI
binary in the buffer is still being used ( efi/boot/bootaa64.efi ) ?

EFI binaries should never be started from memory allocated with malloc. 
efi_load_image() should be invoked which allocates EFI memory via 
efi_allocate_pages(). The handle created has to be passed to efi_start_image().

But commenting this line out fixes the crash and linux boots happily.

Fixing this properly is above my pay grade as of now.

Great, thank you! I will send a patch.

Free() typically crashes in U-Boot when freeing the same memory twice.

Best regards

Heinrich




Regards,
Simon


Kind regards,
Shantur

On Wed, Nov 15, 2023 at 3:58 PM Simon Glass <s...@chromium.org> wrote:

Hi Shantur,

On Wed, 15 Nov 2023 at 08:23, Shantur Rathore <i...@shantur.com> wrote:

Hi Simon,


Is this the blue port on top of the USB-C connector?

Yes, that's correct.
For my drive I needed -
https://patchwork.ozlabs.org/project/uboot/patch/20231110141311.512334-...@shantur.com/


Which version of Armbian / download link?

https://redirect.armbian.com/rockpro64/Bookworm_current

Yes it is scanning first, before reading the efi app, etc.

I have the same hardware so may be able to dig into this.

Sorry, I meant to ask if anything specific to USB.
I see it loads efi from the network or disk and calls bootefi with the
loaded address.
I don't know deep boot / efi stuff, just trying to compare how it's
loading efi differently than fatload in this case.

There is nothing special about USB in boootstd, so far as I know.

But until we figure out this bug, it is hard to be sure.

Regards,
Simon

Reply via email to