[U-Boot] [PATCH 1/1] vsprintf.c: add EFI device path printing

Wolfgang Denk wd at denx.de
Tue Nov 21 14:16:13 UTC 2017


Dear Heinrich Schuchardt,

In message <d643b22b-2511-9b40-772b-5f7f4486c289 at gmx.de> you wrote:
>
> >>>> +	u16 *str = efi_dp_str((struct efi_device_path *)dp);
> >>>> +
> >>>> +	buf = string16(buf, end, str, field_width, precision, flags);
> >>>> +	efi_free_pool(str);
> >>>
> >>> efi_dp_str() can return NULL. Should this not be handled?
> >>
> >> Thanks for reviewing.
> >>
> >> This situation is caught in string16:
> >> u16 *str = s ? s : L"<NULL>";
> > 
> > This is crash-preventing cosmetics, but no real error handling.  I
> > mean, should we not wave a big red flag and shout at the user: "Hey,
> > your system is going berserk here!" ?
> 
> Why do you think that the error handling should be in THIS function?

It should be somewhere - but you cannot handle an error condition
that you don't report to the caller.

Instead of returning from the function with a clear error message
and an error return code, you ignore it.

The minimum action to take here would be that device_path_string()
returns NULL when the error occurs, if there was a chance for the
caller to handle that.

> I can understand that we might improve error handling in the EFI coding 
> but I do not believe we should do it here.

But if you don't even return an error code you have no chance to
handle it elsewhere.

> > Yes, and running out of memory at such a place is likely to be
> > unrecoverable. So we should terminate all further processing baed on
> > this result, and not continue with bogus data.
> 
> printf() does not have any return value.

This is incorrect. printf() is declared as

	int    printf(const char *fmt, ...);

as usual.

> So here we could only panic().
> 
> Is this really what you have in mind?

Well, which other options do you see when you run out of memory?
I can't see how you could recover from this, so if you don't abort
here with a clear error message you will either do the same
elsewhere (with a misleading error, as the actual problem happened
eventually long before), or you will just crash, or run into
undefined behaviour.

Ignoring error condistions is always a Bad thing (TM).

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
How long does it take a  DEC  field  service  engineer  to  change  a
lightbulb?       It depends on how many bad ones he brought with him.


More information about the U-Boot mailing list