of: Use proper types for checking memory overflow
Commit a67a6ed155
(of: Check for phys_addr_t overflows in early_init_dt_add_memory_arch)
corrected early_init_dt_add_memory_arch to account for overflows
but did so in an unclean way using ULONG_MAX. There is no
guarantee that sizeof(unsigned long) == sizeof(phys_addr_t).
Check against phys_addr_t instead.
Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
Tested-by: Geert Uytterhoeven <geert@linux-m68k.org>
Acked-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: Grant Likely <grant.likely@linaro.org>
This commit is contained in:
Родитель
ae9304c9d3
Коммит
3069f0c07f
|
@ -875,24 +875,24 @@ int __init early_init_dt_scan_chosen(unsigned long node, const char *uname,
|
|||
}
|
||||
|
||||
#ifdef CONFIG_HAVE_MEMBLOCK
|
||||
#define MAX_PHYS_ADDR ((phys_addr_t)~0)
|
||||
|
||||
void __init __weak early_init_dt_add_memory_arch(u64 base, u64 size)
|
||||
{
|
||||
const u64 phys_offset = __pa(PAGE_OFFSET);
|
||||
base &= PAGE_MASK;
|
||||
size &= PAGE_MASK;
|
||||
|
||||
if (sizeof(phys_addr_t) < sizeof(u64)) {
|
||||
if (base > ULONG_MAX) {
|
||||
pr_warning("Ignoring memory block 0x%llx - 0x%llx\n",
|
||||
base, base + size);
|
||||
return;
|
||||
}
|
||||
if (base > MAX_PHYS_ADDR) {
|
||||
pr_warning("Ignoring memory block 0x%llx - 0x%llx\n",
|
||||
base, base + size);
|
||||
return;
|
||||
}
|
||||
|
||||
if (base + size > ULONG_MAX) {
|
||||
pr_warning("Ignoring memory range 0x%lx - 0x%llx\n",
|
||||
ULONG_MAX, base + size);
|
||||
size = ULONG_MAX - base;
|
||||
}
|
||||
if (base + size > MAX_PHYS_ADDR) {
|
||||
pr_warning("Ignoring memory range 0x%lx - 0x%llx\n",
|
||||
ULONG_MAX, base + size);
|
||||
size = MAX_PHYS_ADDR - base;
|
||||
}
|
||||
|
||||
if (base + size < phys_offset) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче