[PATCH] ARM: mm: fix size rounding-down of arm_add_memory()

Ard Biesheuvel ard.biesheuvel at linaro.org
Thu Nov 27 02:50:12 PST 2014


On 27 November 2014 at 11:36, Geert Uytterhoeven <geert at linux-m68k.org> wrote:
> Any chance we can get this fix applied?
>
> On Wed, Aug 20, 2014 at 5:08 PM, Geert Uytterhoeven
> <geert at linux-m68k.org> wrote:
>> Hi Yamada-san,
>>
>> On Fri, Aug 1, 2014 at 2:37 PM, Masahiro Yamada
>> <yamada.m at jp.panasonic.com> wrote:
>>> Any comments for this patch?
>>
>> Thanks for your patch!
>>
>> I had a slightly different fix for the same issue, but apparently it got stuck
>> on the freshly installed machine that didn't have email set up yet ;-(
>>
>> Acked-by: Geert Uytterhoeven <geert at linux-m68k.org>
>>
>> early_init_dt_add_memory_arch() has the same bug, I'll resend my (also stuck)
>> fix for that.
>>
>>> Thanks
>>>
>>> Best Regards
>>> Masahiro Yamada
>>>
>>>
>>>
>>> On Fri,  6 Jun 2014 12:32:47 +0900
>>> Masahiro Yamada <yamada.m at jp.panasonic.com> wrote:
>>>
>>>> The current rounding of "size" is wrong.
>>>>
>>>>     size -= start & ~PAGE_MASK;
>>>>
>>>> should be
>>>>
>>>>     size -= PAGE_SIZE - (start & ~PAGE_MASK);
>>>>
>>>> Or more simply
>>>>
>>>>     size -= aligned_start - start;
>>>>
>>>> Signed-off-by: Masahiro Yamada <yamada.m at jp.panasonic.com>
>>>> ---
>>>>  arch/arm/kernel/setup.c | 2 +-
>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>
>>>> diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
>>>> index 50e198c..84508c0 100644
>>>> --- a/arch/arm/kernel/setup.c
>>>> +++ b/arch/arm/kernel/setup.c
>>>> @@ -641,8 +641,8 @@ int __init arm_add_memory(u64 start, u64 size)
>>>>        * Ensure that start/size are aligned to a page boundary.
>>>>        * Size is appropriately rounded down, start is rounded up.
>>>>        */
>>>> -     size -= start & ~PAGE_MASK;
>>>>       aligned_start = PAGE_ALIGN(start);
>>>> +     size -= aligned_start - start;

Beware that if size if sufficiently small, (i.e., smaller than the
unaligned leading fraction @ start), this wraps around and produces a
bogus value.

-- 
Ard.


>>>>
>>>>  #ifndef CONFIG_ARCH_PHYS_ADDR_T_64BIT
>>>>       if (aligned_start > ULONG_MAX) {
>>>> --
>>>> 1.9.1
>
> Gr{oetje,eeting}s,
>
>                         Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at linux-m68k.org
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                 -- Linus Torvalds
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel



More information about the linux-arm-kernel mailing list