On Friday, November 10, 2017 09:26:44 PM Ed Maste wrote:
> Author: emaste
> Date: Fri Nov 10 21:26:44 2017
> New Revision: 325681
> URL: https://svnweb.freebsd.org/changeset/base/325681
> 
> Log:
>   boot1: avoid using NULL device path
>   
>   As of r323063 boot1 printed out the path & device from which it was
>   loaded, but uboot's EFI implementation lacked some support, resulting in
>   a NULL pointer and a crash.  Check for a NULL pointer and avoid
>   reporting (and storing in the environment) the device and path in this
>   case.
>   
>   Submitted by:       Zakary Nafziger <[email protected]>
>   MFC after:  1 week
>   Sponsored by:       The FreeBSD Foundation
>   Differential Revision:      https://reviews.freebsd.org/D13038
> 
> Modified:
>   head/sys/boot/efi/boot1/boot1.c
> 
> Modified: head/sys/boot/efi/boot1/boot1.c
> ==============================================================================
> --- head/sys/boot/efi/boot1/boot1.c   Fri Nov 10 20:30:10 2017        
> (r325680)
> +++ head/sys/boot/efi/boot1/boot1.c   Fri Nov 10 21:26:44 2017        
> (r325681)
> @@ -460,22 +460,23 @@ efi_main(EFI_HANDLE Ximage, EFI_SYSTEM_TABLE *Xsystab)
>       imgpath = NULL;
>       if (status == EFI_SUCCESS) {
>               text = efi_devpath_name(img->FilePath);
> -             printf("   Load Path: %S\n", text);
> -             efi_setenv_freebsd_wcs("Boot1Path", text);
> -             efi_free_devpath_name(text);
> -
> -             status = BS->HandleProtocol(img->DeviceHandle, &DevicePathGUID,
> -                 (void **)&imgpath);
> -             if (status != EFI_SUCCESS) {
> -                     DPRINTF("Failed to get image DevicePath (%lu)\n",
> -                         EFI_ERROR_CODE(status));
> -             } else {
> -                     text = efi_devpath_name(imgpath);
> -                     printf("   Load Device: %S\n", text);
> -                     efi_setenv_freebsd_wcs("Boot1Dev", text);
> +             if (text != NULL) {
> +                     printf("   Load Path: %S\n", text);
> +                     efi_setenv_freebsd_wcs("Boot1Path", text);
>                       efi_free_devpath_name(text);
> -             }
>  
> +                     status = BS->HandleProtocol(img->DeviceHandle,
> +                         &DevicePathGUID, (void **)&imgpath);
> +                     if (status != EFI_SUCCESS) {
> +                             DPRINTF("Failed to get image DevicePath 
> (%lu)\n",
> +                                 EFI_ERROR_CODE(status));
> +                     } else {
> +                             text = efi_devpath_name(imgpath);

Shouldn't you check this for NULL as well then?

-- 
John Baldwin
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to