diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-28 14:27:57 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-11-28 14:27:57 -0500 |
| commit | cb3599926e3e7b3678583195effa61a03026ab0e (patch) | |
| tree | 775419d69e8732ba3f4933d3b7a07e98ae555458 /drivers/firmware | |
| parent | 4244cb482e8eab18142162a27c8829a04585863a (diff) | |
| parent | f6f8285132907757ef84ef8dae0a1244b8cde6ac (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux:
pstore: pass allocated memory region back to caller
Diffstat (limited to 'drivers/firmware')
| -rw-r--r-- | drivers/firmware/efivars.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c index 8370f72d87ff..a54a6b972ced 100644 --- a/drivers/firmware/efivars.c +++ b/drivers/firmware/efivars.c | |||
| @@ -457,7 +457,8 @@ static int efi_pstore_close(struct pstore_info *psi) | |||
| 457 | } | 457 | } |
| 458 | 458 | ||
| 459 | static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, | 459 | static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, |
| 460 | struct timespec *timespec, struct pstore_info *psi) | 460 | struct timespec *timespec, |
| 461 | char **buf, struct pstore_info *psi) | ||
| 461 | { | 462 | { |
| 462 | efi_guid_t vendor = LINUX_EFI_CRASH_GUID; | 463 | efi_guid_t vendor = LINUX_EFI_CRASH_GUID; |
| 463 | struct efivars *efivars = psi->data; | 464 | struct efivars *efivars = psi->data; |
| @@ -478,7 +479,11 @@ static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type, | |||
| 478 | timespec->tv_nsec = 0; | 479 | timespec->tv_nsec = 0; |
| 479 | get_var_data_locked(efivars, &efivars->walk_entry->var); | 480 | get_var_data_locked(efivars, &efivars->walk_entry->var); |
| 480 | size = efivars->walk_entry->var.DataSize; | 481 | size = efivars->walk_entry->var.DataSize; |
| 481 | memcpy(psi->buf, efivars->walk_entry->var.Data, size); | 482 | *buf = kmalloc(size, GFP_KERNEL); |
| 483 | if (*buf == NULL) | ||
| 484 | return -ENOMEM; | ||
| 485 | memcpy(*buf, efivars->walk_entry->var.Data, | ||
| 486 | size); | ||
| 482 | efivars->walk_entry = list_entry(efivars->walk_entry->list.next, | 487 | efivars->walk_entry = list_entry(efivars->walk_entry->list.next, |
| 483 | struct efivar_entry, list); | 488 | struct efivar_entry, list); |
| 484 | return size; | 489 | return size; |
