[PATCH 1/2] ARM: mm: fix set_memory_*() bounds checks
Russell King - ARM Linux
linux at armlinux.org.uk
Tue Nov 29 09:59:20 PST 2016
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.
--
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.
More information about the linux-arm-kernel
mailing list