|
@@ -35,6 +35,22 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
35
|
35
|
|
36
|
36
|
FEATURE ( FEATURE_IMAGE, "EFI", DHCP_EB_FEATURE_EFI, 1 );
|
37
|
37
|
|
|
38
|
+/* Disambiguate the various error causes */
|
|
39
|
+#define EINFO_EEFI_LOAD \
|
|
40
|
+ __einfo_uniqify ( EINFO_EPLATFORM, 0x01, \
|
|
41
|
+ "Could not load image" )
|
|
42
|
+#define EINFO_EEFI_LOAD_PROHIBITED \
|
|
43
|
+ __einfo_platformify ( EINFO_EEFI_LOAD, EFI_SECURITY_VIOLATION, \
|
|
44
|
+ "Image prohibited by security policy" )
|
|
45
|
+#define EEFI_LOAD_PROHIBITED \
|
|
46
|
+ __einfo_error ( EINFO_EEFI_LOAD_PROHIBITED )
|
|
47
|
+#define EEFI_LOAD( efirc ) EPLATFORM ( EINFO_EEFI_LOAD, efirc, \
|
|
48
|
+ EEFI_LOAD_PROHIBITED )
|
|
49
|
+#define EINFO_EEFI_START \
|
|
50
|
+ __einfo_uniqify ( EINFO_EPLATFORM, 0x02, \
|
|
51
|
+ "Could not start image" )
|
|
52
|
+#define EEFI_START( efirc ) EPLATFORM ( EINFO_EEFI_START, efirc )
|
|
53
|
+
|
38
|
54
|
/** EFI loaded image protocol GUID */
|
39
|
55
|
static EFI_GUID efi_loaded_image_protocol_guid =
|
40
|
56
|
EFI_LOADED_IMAGE_PROTOCOL_GUID;
|
|
@@ -176,7 +192,7 @@ static int efi_image_exec ( struct image *image ) {
|
176
|
192
|
user_to_virt ( image->data, 0 ),
|
177
|
193
|
image->len, &handle ) ) != 0 ) {
|
178
|
194
|
/* Not an EFI image */
|
179
|
|
- rc = -EEFI ( efirc );
|
|
195
|
+ rc = -EEFI_LOAD ( efirc );
|
180
|
196
|
DBGC ( image, "EFIIMAGE %p could not load: %s\n",
|
181
|
197
|
image, strerror ( rc ) );
|
182
|
198
|
goto err_load_image;
|
|
@@ -205,7 +221,7 @@ static int efi_image_exec ( struct image *image ) {
|
205
|
221
|
|
206
|
222
|
/* Start the image */
|
207
|
223
|
if ( ( efirc = bs->StartImage ( handle, NULL, NULL ) ) != 0 ) {
|
208
|
|
- rc = -EEFI ( efirc );
|
|
224
|
+ rc = -EEFI_START ( efirc );
|
209
|
225
|
DBGC ( image, "EFIIMAGE %p returned with status %s\n",
|
210
|
226
|
image, strerror ( rc ) );
|
211
|
227
|
goto err_start_image;
|
|
@@ -254,7 +270,7 @@ static int efi_image_probe ( struct image *image ) {
|
254
|
270
|
user_to_virt ( image->data, 0 ),
|
255
|
271
|
image->len, &handle ) ) != 0 ) {
|
256
|
272
|
/* Not an EFI image */
|
257
|
|
- rc = -EEFI ( efirc );
|
|
273
|
+ rc = -EEFI_LOAD ( efirc );
|
258
|
274
|
DBGC ( image, "EFIIMAGE %p could not load: %s\n",
|
259
|
275
|
image, strerror ( rc ) );
|
260
|
276
|
return rc;
|