summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-boot/efibootmgr/files/efibootmgr-error-reporting.patch')
-rw-r--r--sys-boot/efibootmgr/files/efibootmgr-error-reporting.patch40
1 files changed, 40 insertions, 0 deletions
diff --git a/sys-boot/efibootmgr/files/efibootmgr-error-reporting.patch b/sys-boot/efibootmgr/files/efibootmgr-error-reporting.patch
new file mode 100644
index 000000000000..2c769db23047
--- /dev/null
+++ b/sys-boot/efibootmgr/files/efibootmgr-error-reporting.patch
@@ -0,0 +1,40 @@
+@@ -, +, @@
+---
+ src/lib/efivars_sysfs.c | 16 +++++++++++++---
+ 1 files changed, 13 insertions(+), 3 deletions(-)
+--- a/src/lib/efivars_sysfs.c
++++ a/src/lib/efivars_sysfs.c
+@@ -66,6 +66,7 @@ static efi_status_t
+ sysfs_write_variable(const char *filename, efi_variable_t *var)
+ {
+ int fd;
++ int rc = EFI_SUCCESS;
+ size_t writesize;
+ char buffer[PATH_MAX+40];
+
+@@ -77,12 +78,21 @@ sysfs_write_variable(const char *filename, efi_variable_t *var)
+ return EFI_INVALID_PARAMETER;
+ }
+ writesize = write(fd, var, sizeof(*var));
++ if (writesize == -1) {
++ if (errno == -ENOSPC)
++ rc = EFI_OUT_OF_RESOURCES;
++ else
++ rc = EFI_INVALID_PARAMETER;
++ goto out;
++ }
+ if (writesize != sizeof(*var)) {
+- close(fd);
+- return EFI_INVALID_PARAMETER;
++ rc = EFI_INVALID_PARAMETER;
+ }
++out:
++ if (rc != EFI_SUCCESS)
++ fprintf(stderr, "Failed to write variable: %s\n", strerror(errno));
+ close(fd);
+- return EFI_SUCCESS;
++ return rc;
+ }
+
+
+--