[PATCH 1/2] ARM: mm: fix set_memory_*() bounds checks
Dave Gerlach
d-gerlach at ti.com
Fri Jan 6 08:29:43 PST 2017
Russell,
On 11/29/2016 11:59 AM, Russell King - ARM Linux wrote:
> On Tue, Nov 29, 2016 at 09:25:19AM -0600, Dave Gerlach wrote:
>> Hi,
>> On 11/21/2016 10:08 AM, Russell King wrote:
>>> +static bool in_range(unsigned long start, unsigned long size,
>>> + unsigned long range_start, unsigned long range_end)
>>> +{
>>> + return start >= range_start && start < range_end &&
>>> + size <= range_end - start;
>>> +}
>>> +
>>> static int change_memory_common(unsigned long addr, int numpages,
>>> pgprot_t set_mask, pgprot_t clear_mask)
>>> {
>>> - unsigned long start = addr;
>>> - unsigned long size = PAGE_SIZE*numpages;
>>> - unsigned long end = start + size;
>>> + unsigned long start = addr & PAGE_SIZE;
>>
>> This doesn't work as is, I believe 'start' should be set to
>> PAGE_ALIGN(addr), addr & PAGE_SIZE as it is doesn't make sense. If I make
>> this change this code works ok.
>
> You're right, but we want to round 'addr' _down_, not up as PAGE_ALIGN()
> will do. So that should've been PAGE_MASK.
>
Do you plan to send an updated version of this patch? I'd be happy to
update it and resend.
Regards,
Dave
More information about the linux-arm-kernel
mailing list