Changeset 14382


Ignore:
Timestamp:
2009-02-03T08:26:31+01:00 (9 years ago)
Author:
juhosg
Message:

[ar71xx] fix handling of invalid arguments passed by some bootloaders (thanks to Jeff Hansen and to Jonas)

Location:
trunk/target/linux/ar71xx
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files-2.6.28/arch/mips/include/asm/mach-ar71xx/ar71xx.h

    r14208 r14382  
    6060#define AR91XX_WMAC_SIZE        0x30000 
    6161 
     62#define AR71XX_MEM_SIZE_MIN     0x0200000 
     63#define AR71XX_MEM_SIZE_MAX     0x8000000 
     64 
    6265#define AR71XX_CPU_IRQ_BASE     0 
    6366#define AR71XX_MISC_IRQ_BASE    8 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/prom.c

    r14208 r14382  
    7474}; 
    7575 
     76static inline int is_valid_ram_addr(void *addr) 
     77{ 
     78        if (((u32) addr > KSEG0) && 
     79            ((u32) addr < (KSEG0 + AR71XX_MEM_SIZE_MAX))) 
     80                return 1; 
     81 
     82        if (((u32) addr > KSEG1) && 
     83            ((u32) addr < (KSEG1 + AR71XX_MEM_SIZE_MAX))) 
     84                return 1; 
     85 
     86        return 0; 
     87} 
     88 
    7689static __init char *ar71xx_prom_getargv(const char *name) 
    7790{ 
     
    7992        int i; 
    8093 
    81         if (!ar71xx_prom_argv) 
     94        if (!is_valid_ram_addr(ar71xx_prom_argv)) 
    8295                return NULL; 
    8396 
     
    8598                char *argv = ar71xx_prom_argv[i]; 
    8699 
    87                 if (!argv) 
     100                if (!is_valid_ram_addr(argv)) 
    88101                        continue; 
    89102 
     
    100113        char **env; 
    101114 
    102         if (!ar71xx_prom_envp) 
     115        if (!is_valid_ram_addr(ar71xx_prom_envp)) 
    103116                return NULL; 
    104117 
    105         for (env = ar71xx_prom_envp; *env != NULL; env++) 
     118        for (env = ar71xx_prom_envp; is_valid_ram_addr(*env); env++) 
    106119                if (strncmp(envname, *env, len) == 0 && (*env)[len] == '=') 
    107120                        return *env + len + 1; 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/setup.c

    r14338 r14382  
    22 *  Atheros AR71xx SoC specific setup 
    33 * 
    4  *  Copyright (C) 2008 Gabor Juhos <juhosg@openwrt.org> 
     4 *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org> 
    55 *  Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> 
    66 * 
     
    3434#define AR91XX_BASE_FREQ        5000000 
    3535 
    36 #define AR71XX_MEM_SIZE_MIN     0x0200000 
    37 #define AR71XX_MEM_SIZE_MAX     0x8000000 
    38  
    3936unsigned long ar71xx_mach_type; 
    4037 
  • trunk/target/linux/ar71xx/files/include/asm-mips/mach-ar71xx/ar71xx.h

    r14208 r14382  
    6060#define AR91XX_WMAC_SIZE        0x30000 
    6161 
     62#define AR71XX_MEM_SIZE_MIN     0x0200000 
     63#define AR71XX_MEM_SIZE_MAX     0x8000000 
     64 
    6265#define AR71XX_CPU_IRQ_BASE     0 
    6366#define AR71XX_MISC_IRQ_BASE    8 
Note: See TracChangeset for help on using the changeset viewer.