File renaming is necessary for features like systemd-boot
bootcounting.

Signed-off-by: Daniel Venzin <daniel.ven...@mt.com>

---

(no changes since v2)

Changes in v2:
- Use EFI_ACCESS_DENIED for unsuccessful renames
- Avoid using of "== 0"
- Move the call to set_blk_dev earlier in the sequence

 lib/efi_loader/efi_file.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/lib/efi_loader/efi_file.c b/lib/efi_loader/efi_file.c
index 201fa5f8f3c..9a5a345bfc0 100644
--- a/lib/efi_loader/efi_file.c
+++ b/lib/efi_loader/efi_file.c
@@ -969,6 +969,10 @@ static efi_status_t EFIAPI efi_file_setinfo(struct 
efi_file_handle *file,
                        ret = EFI_ACCESS_DENIED;
                        goto out;
                }
+               if (set_blk_dev(fh)) {
+                       ret = EFI_DEVICE_ERROR;
+                       goto out;
+               }
                /* Check for renaming */
                new_file_name = malloc(utf16_utf8_strlen(info->file_name) + 1);
                if (!new_file_name) {
@@ -978,10 +982,11 @@ static efi_status_t EFIAPI efi_file_setinfo(struct 
efi_file_handle *file,
                pos = new_file_name;
                utf16_utf8_strcpy(&pos, info->file_name);
                if (strcmp(new_file_name, filename)) {
-                       /* TODO: we do not support renaming */
-                       EFI_PRINT("Renaming not supported\n");
+                       if (fs_rename(fh->path, new_file_name) != 0)
+                               ret = EFI_ACCESS_DENIED;
+                       else
+                               ret = EFI_SUCCESS;
                        free(new_file_name);
-                       ret = EFI_ACCESS_DENIED;
                        goto out;
                }
                free(new_file_name);
-- 
2.39.5

Reply via email to