File efivar-bsc1175989-handle-NULL-set-variable.patch of Package efivar
From a98844ea72b04f8b0d3cc8e71089a6340e7149eb Mon Sep 17 00:00:00 2001
From: Gary Lin <glin@suse.com>
Date: Tue, 8 Sep 2020 17:13:02 +0800
Subject: [PATCH] Handle NULL set_variable()
Add the check of NULL set_variable() to avoid segfault in a non-EFI
system.
Signed-off-by: Gary Lin <glin@suse.com>
---
src/lib.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/src/lib.c b/src/lib.c
index 107e7ef..4a0a161 100644
--- a/src/lib.c
+++ b/src/lib.c
@@ -33,6 +33,11 @@ _efi_set_variable(efi_guid_t guid, const char *name, uint8_t *data,
size_t data_size, uint32_t attributes)
{
int rc;
+ if (!ops->set_variable) {
+ efi_error("set_variable() is not implemented");
+ errno = ENOSYS;
+ return -1;
+ }
rc = ops->set_variable(guid, name, data, data_size, attributes, 0600);
if (rc < 0)
efi_error("ops->set_variable() failed");
@@ -45,6 +50,11 @@ _efi_set_variable_variadic(efi_guid_t guid, const char *name, uint8_t *data,
size_t data_size, uint32_t attributes, ...)
{
int rc;
+ if (!ops->set_variable) {
+ efi_error("set_variable() is not implemented");
+ errno = ENOSYS;
+ return -1;
+ }
rc = ops->set_variable(guid, name, data, data_size, attributes, 0600);
if (rc < 0)
efi_error("ops->set_variable() failed");
@@ -57,6 +67,11 @@ _efi_set_variable_mode(efi_guid_t guid, const char *name, uint8_t *data,
size_t data_size, uint32_t attributes, mode_t mode)
{
int rc;
+ if (!ops->set_variable) {
+ efi_error("set_variable() is not implemented");
+ errno = ENOSYS;
+ return -1;
+ }
rc = ops->set_variable(guid, name, data, data_size, attributes, mode);
if (rc < 0)
efi_error("ops->set_variable() failed");
--
2.28.0