summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorMichael Olbrich <m.olbrich@pengutronix.de>2015-07-17 21:22:47 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2015-07-27 07:23:20 +0200
commitaf53ba46c08ed7475a2910884b5b6dd1196102e8 (patch)
treeb26d270ed3ee813c79f642f928b9482dccece039 /fs
parent430ac98b7fdf4e94839ce03dedd6b890e58b91a7 (diff)
downloadbarebox-af53ba46c08ed7475a2910884b5b6dd1196102e8.tar.gz
barebox-af53ba46c08ed7475a2910884b5b6dd1196102e8.tar.xz
fs: efivars: add more error checking
Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'fs')
-rw-r--r--fs/efivarfs.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/fs/efivarfs.c b/fs/efivarfs.c
index 925e8e8be1..87fc771739 100644
--- a/fs/efivarfs.c
+++ b/fs/efivarfs.c
@@ -269,6 +269,7 @@ static int efivarfs_read(struct device_d *_dev, FILE *f, void *buf, size_t insiz
static int efivarfs_write(struct device_d *_dev, FILE *f, const void *buf, size_t insize)
{
struct efivars_file *efile = f->priv;
+ efi_status_t efiret;
if (efile->size < f->pos + insize) {
efile->buf = realloc(efile->buf, f->pos + insize);
@@ -277,8 +278,11 @@ static int efivarfs_write(struct device_d *_dev, FILE *f, const void *buf, size_
memcpy(efile->buf + f->pos, buf, insize);
- RT->set_variable(efile->name, &efile->vendor, efile->attributes,
- efile->size ? efile->size : 1, efile->buf);
+ efiret = RT->set_variable(efile->name, &efile->vendor,
+ efile->attributes,
+ efile->size ? efile->size : 1, efile->buf);
+ if (EFI_ERROR(efiret))
+ return -efi_errno(efiret);
return insize;
}
@@ -286,12 +290,16 @@ static int efivarfs_write(struct device_d *_dev, FILE *f, const void *buf, size_
static int efivarfs_truncate(struct device_d *dev, FILE *f, ulong size)
{
struct efivars_file *efile = f->priv;
+ efi_status_t efiret;
efile->size = size;
efile->buf = realloc(efile->buf, efile->size + sizeof(uint32_t));
- RT->set_variable(efile->name, &efile->vendor, efile->attributes,
- efile->size ? efile->size : 1, efile->buf);
+ efiret = RT->set_variable(efile->name, &efile->vendor,
+ efile->attributes,
+ efile->size ? efile->size : 1, efile->buf);
+ if (EFI_ERROR(efiret))
+ return -efi_errno(efiret);
f->size = efile->size;