powerpc/nvram: Fix endian issue when using the partition length
authorCedric Le Goater <clg@fr.ibm.com>
Wed, 30 Oct 2013 13:47:08 +0000 (14:47 +0100)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 31 Oct 2013 01:37:28 +0000 (12:37 +1100)
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: Cedric Le Goater <clg@fr.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/nvram_64.c

index 8213ee1eb05abc39e8da6502ec565b4a38180e7e..fd82c289ab1c1c76c52c9fe147503d277870874c 100644 (file)
@@ -223,9 +223,13 @@ static int __init nvram_write_header(struct nvram_partition * part)
 {
        loff_t tmp_index;
        int rc;
-       
+       struct nvram_header phead;
+
+       memcpy(&phead, &part->header, NVRAM_HEADER_LEN);
+       phead.length = cpu_to_be16(phead.length);
+
        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;
 }
@@ -505,6 +509,8 @@ int __init nvram_scan_partitions(void)
 
                memcpy(&phead, header, NVRAM_HEADER_LEN);
 
+               phead.length = be16_to_cpu(phead.length);
+
                err = 0;
                c_sum = nvram_checksum(&phead);
                if (c_sum != phead.checksum) {