Skip to content

Commit 24753d2

Browse files
committed
drivers/efi/efivars.c: Fix variable state management
Fix changing the variables state when efi_fv_set_option API is used. When variables are being deleted, the VAR_DELETED or VAR_IN_DELETED_TRANSITION are masks, not values to assign to the variable header state. This caused the EDK2 variable driver to ignore entries added or changed by efi_fv_set_option API in coreboot. Upstream-Status: Pending Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
1 parent fd7c535 commit 24753d2

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

src/drivers/efi/efivars.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -615,7 +615,7 @@ enum cb_err efi_fv_set_option(struct region_device *rdev,
615615
rdev_old = store_rdev;
616616

617617
/* Mark as to be deleted */
618-
hdr.State = VAR_IN_DELETED_TRANSITION;
618+
hdr.State &= VAR_IN_DELETED_TRANSITION;
619619
if (rdev_writeat(&store_rdev, &hdr.State, offsetof(VARIABLE_HEADER, State),
620620
sizeof(hdr.State)) != sizeof(hdr.State))
621621
return CB_EFI_ACCESS_ERROR;
@@ -642,7 +642,7 @@ enum cb_err efi_fv_set_option(struct region_device *rdev,
642642

643643
if (found_existing) {
644644
/* Mark old variable as deleted */
645-
hdr.State = VAR_DELETED;
645+
hdr.State &= VAR_DELETED;
646646
if (rdev_writeat(&rdev_old, &hdr.State, offsetof(VARIABLE_HEADER, State),
647647
sizeof(hdr.State)) != sizeof(hdr.State))
648648
return CB_EFI_ACCESS_ERROR;

0 commit comments

Comments
 (0)