[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