diff options
author | Matt Fleming <matt.fleming@intel.com> | 2013-04-29 23:08:02 +0400 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2013-04-30 19:03:10 +0400 |
commit | 8a415b8c05f261a52f45f2271b6c4731376fd5b5 (patch) | |
tree | de233c9382c3f4a08fcdd1b26be38810fdf2ce25 /drivers/firmware/efi/efi-pstore.c | |
parent | 12abcfde1ad3ee9bed726d25fdd4eeb31026b187 (diff) | |
download | linux-8a415b8c05f261a52f45f2271b6c4731376fd5b5.tar.xz |
efi, pstore: Read data from variable store before memcpy()
Seiji reported getting empty dmesg-* files, because the data was never
actually read in efi_pstore_read_func(), and so the memcpy() was copying
garbage data.
This patch necessitated adding __efivar_entry_get() which is callable
between efivar_entry_iter_{begin,end}(). We can also delete
__efivar_entry_size() because efi_pstore_read_func() was the only
caller.
Reported-by: Seiji Aguchi <seiji.aguchi@hds.com>
Tested-by: Seiji Aguchi <seiji.aguchi@hds.com>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Matthew Garrett <matthew.garrett@nebula.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Diffstat (limited to 'drivers/firmware/efi/efi-pstore.c')
-rw-r--r-- | drivers/firmware/efi/efi-pstore.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/firmware/efi/efi-pstore.c b/drivers/firmware/efi/efi-pstore.c index af45c42086e1..67615d6d038d 100644 --- a/drivers/firmware/efi/efi-pstore.c +++ b/drivers/firmware/efi/efi-pstore.c @@ -73,7 +73,11 @@ static int efi_pstore_read_func(struct efivar_entry *entry, void *data) } else return 0; - __efivar_entry_size(entry, &size); + entry->var.DataSize = 1024; + __efivar_entry_get(entry, &entry->var.Attributes, + &entry->var.DataSize, entry->var.Data); + size = entry->var.DataSize; + *cb_data->buf = kmalloc(size, GFP_KERNEL); if (*cb_data->buf == NULL) return -ENOMEM; |