Commit c81095a4 authored by Cedric Le Goater's avatar Cedric Le Goater Committed by Benjamin Herrenschmidt

powerpc/nvram: Fix endian issue when using the partition length

When reading partitions, the length has to be translated from
big endian to the endian order of the host. Similarly, when writing
partitions, the length needs to be in big endian order.

The userspace tool 'nvram' needs a similar fix as it is reading
and writing partitions through /dev/nram :

    http://sourceforge.net/p/powerpc-utils/mailman/message/31571277/Signed-off-by: default avatarCedric Le Goater <clg@fr.ibm.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 563c5d8a
...@@ -223,9 +223,13 @@ static int __init nvram_write_header(struct nvram_partition * part) ...@@ -223,9 +223,13 @@ static int __init nvram_write_header(struct nvram_partition * part)
{ {
loff_t tmp_index; loff_t tmp_index;
int rc; int rc;
struct nvram_header phead;
memcpy(&phead, &part->header, NVRAM_HEADER_LEN);
phead.length = cpu_to_be16(phead.length);
tmp_index = part->index; tmp_index = part->index;
rc = ppc_md.nvram_write((char *)&part->header, NVRAM_HEADER_LEN, &tmp_index); rc = ppc_md.nvram_write((char *)&phead, NVRAM_HEADER_LEN, &tmp_index);
return rc; return rc;
} }
...@@ -505,6 +509,8 @@ int __init nvram_scan_partitions(void) ...@@ -505,6 +509,8 @@ int __init nvram_scan_partitions(void)
memcpy(&phead, header, NVRAM_HEADER_LEN); memcpy(&phead, header, NVRAM_HEADER_LEN);
phead.length = be16_to_cpu(phead.length);
err = 0; err = 0;
c_sum = nvram_checksum(&phead); c_sum = nvram_checksum(&phead);
if (c_sum != phead.checksum) { if (c_sum != phead.checksum) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment