diff options
Diffstat (limited to 'target/linux/brcm63xx/patches-3.7/005-MIPS-BCM63XX-fix-nvram-checksum-calculation.patch')
-rw-r--r-- | target/linux/brcm63xx/patches-3.7/005-MIPS-BCM63XX-fix-nvram-checksum-calculation.patch | 66 |
1 files changed, 0 insertions, 66 deletions
diff --git a/target/linux/brcm63xx/patches-3.7/005-MIPS-BCM63XX-fix-nvram-checksum-calculation.patch b/target/linux/brcm63xx/patches-3.7/005-MIPS-BCM63XX-fix-nvram-checksum-calculation.patch deleted file mode 100644 index cbe0b96bf..000000000 --- a/target/linux/brcm63xx/patches-3.7/005-MIPS-BCM63XX-fix-nvram-checksum-calculation.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 7180de9a27ce433efc15bc1982b9a9e4ba3c48dc Mon Sep 17 00:00:00 2001 -From: Jonas Gorski <jonas.gorski@gmail.com> -Date: Sat, 10 Nov 2012 02:04:58 +0100 -Subject: [PATCH] MIPS: BCM63XX: fix nvram checksum calculation - -The current checksum calculation code does nothing except checking that -the first byte of nvram is 0 without actually checking the checksum. - -Implement the correct checksum calculation by calculating the crc32 with -the checksum field set to 0. - -Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com> ---- - -This patch depends on the previous nvram patch ("move nvram functions -into their own file"). - - arch/mips/bcm63xx/nvram.c | 23 +++++++++++++---------- - 1 files changed, 13 insertions(+), 10 deletions(-) - ---- a/arch/mips/bcm63xx/nvram.c -+++ b/arch/mips/bcm63xx/nvram.c -@@ -11,6 +11,7 @@ - #define pr_fmt(fmt) "bcm63xx_nvram: " fmt - - #include <linux/init.h> -+#include <linux/crc32.h> - #include <linux/export.h> - #include <linux/kernel.h> - #include <linux/if_ether.h> -@@ -40,23 +41,25 @@ static int mac_addr_used; - int __init bcm63xx_nvram_init(void *addr) - { - unsigned int check_len; -- u8 *p; -- u32 val; -+ u32 crc, expected_crc; - - /* extract nvram data */ - memcpy(&nvram, addr, sizeof(nvram)); - - /* check checksum before using data */ -- if (nvram.version <= 4) -- check_len = offsetof(struct bcm963xx_nvram, checksum_old); -- else -+ if (nvram.version <= 4) { -+ check_len = offsetof(struct bcm963xx_nvram, reserved3); -+ expected_crc = nvram.checksum_old; -+ nvram.checksum_old = 0; -+ } else { - check_len = sizeof(nvram); -- val = 0; -- p = (u8 *)&nvram; -+ expected_crc = nvram.checksum_high; -+ nvram.checksum_high = 0; -+ } - -- while (check_len--) -- val += *p; -- if (val) -+ crc = crc32_le(~0, (u8 *)&nvram, check_len); -+ -+ if (crc != expected_crc) - return -EINVAL; - - return 0; |