Skip to content

Commit

Permalink
powerpc/pseries: Add backward compatibilty to read old kernel oops-log
Browse files Browse the repository at this point in the history
Older kernels has just length information in their header. Handle it
while reading old kernel oops log from pstore.

Applies on top of powerpc/pseries: Fix buffer overflow when reading from pstore

Signed-off-by: Aruna Balakrishnaiah <aruna@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
  • Loading branch information
Aruna Balakrishnaiah authored and Benjamin Herrenschmidt committed Aug 9, 2013
1 parent 7e76f34 commit 156c9eb
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions arch/powerpc/platforms/pseries/nvram.c
Original file line number Diff line number Diff line change
Expand Up @@ -720,15 +720,25 @@ static ssize_t nvram_pstore_read(u64 *id, enum pstore_type_id *type,

if (nvram_type_ids[read_type] == PSTORE_TYPE_DMESG) {
int length, unzipped_len;
size_t hdr_size;

oops_hdr = (struct oops_log_info *)buff;
length = oops_hdr->report_length;
if (oops_hdr->version < OOPS_HDR_VERSION) {
/* Old format oops header had 2-byte record size */
hdr_size = sizeof(u16);
length = oops_hdr->version;
time->tv_sec = 0;
time->tv_nsec = 0;
} else {
hdr_size = sizeof(*oops_hdr);
length = oops_hdr->report_length;
time->tv_sec = oops_hdr->timestamp;
time->tv_nsec = 0;
}
*buf = kmalloc(length, GFP_KERNEL);
if (*buf == NULL)
return -ENOMEM;
memcpy(*buf, buff + sizeof(*oops_hdr), length);
time->tv_sec = oops_hdr->timestamp;
time->tv_nsec = 0;
memcpy(*buf, buff + hdr_size, length);
kfree(buff);

if (err_type == ERR_TYPE_KERNEL_PANIC_GZ) {
Expand Down

0 comments on commit 156c9eb

Please sign in to comment.