diff options
author | Michael Olbrich <m.olbrich@pengutronix.de> | 2015-07-17 21:22:47 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2015-07-27 07:23:20 +0200 |
commit | af53ba46c08ed7475a2910884b5b6dd1196102e8 (patch) | |
tree | b26d270ed3ee813c79f642f928b9482dccece039 /fs | |
parent | 430ac98b7fdf4e94839ce03dedd6b890e58b91a7 (diff) | |
download | barebox-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.c | 16 |
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; |