[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH RFC v1 02/12] mm/usercopy.c: Prepare check_page_span() for PG_reserved changes



On Wed, Oct 23, 2019 at 10:20:14AM +0200, David Hildenbrand wrote:
> On 22.10.19 19:12, David Hildenbrand wrote:
> > Right now, ZONE_DEVICE memory is always set PG_reserved. We want to
> > change that.
> > 
> > Let's make sure that the logic in the function won't change. Once we no
> > longer set these pages to reserved, we can rework this function to
> > perform separate checks for ZONE_DEVICE (split from PG_reserved checks).
> > 
> > Cc: Kees Cook <keescook@xxxxxxxxxxxx>
> > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> > Cc: Kate Stewart <kstewart@xxxxxxxxxxxxxxxxxxx>
> > Cc: Allison Randal <allison@xxxxxxxxxxx>
> > Cc: "Isaac J. Manjarres" <isaacm@xxxxxxxxxxxxxx>
> > Cc: Qian Cai <cai@xxxxxx>
> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> > Signed-off-by: David Hildenbrand <david@xxxxxxxxxx>
> > ---
> >   mm/usercopy.c | 5 +++--
> >   1 file changed, 3 insertions(+), 2 deletions(-)
> > 
> > diff --git a/mm/usercopy.c b/mm/usercopy.c
> > index 660717a1ea5c..a3ac4be35cde 100644
> > --- a/mm/usercopy.c
> > +++ b/mm/usercopy.c
> > @@ -203,14 +203,15 @@ static inline void check_page_span(const void *ptr, 
> > unsigned long n,
> >      * device memory), or CMA. Otherwise, reject since the object spans
> >      * several independently allocated pages.
> >      */
> > -   is_reserved = PageReserved(page);
> > +   is_reserved = PageReserved(page) || is_zone_device_page(page);
> >     is_cma = is_migrate_cma_page(page);
> >     if (!is_reserved && !is_cma)
> >             usercopy_abort("spans multiple pages", NULL, to_user, 0, n);
> >     for (ptr += PAGE_SIZE; ptr <= end; ptr += PAGE_SIZE) {
> >             page = virt_to_head_page(ptr);
> > -           if (is_reserved && !PageReserved(page))
> > +           if (is_reserved && !(PageReserved(page) ||
> > +                                is_zone_device_page(page)))
> >                     usercopy_abort("spans Reserved and non-Reserved pages",
> >                                    NULL, to_user, 0, n);
> >             if (is_cma && !is_migrate_cma_page(page))
> > 
> 
> @Kees, would it be okay to stop checking against ZONE_DEVICE pages here or
> is there a good rationale behind this?
> 
> (I would turn this patch into a simple update of the comment if we agree
> that we don't care)

There has been work to actually remove the page span checks entirely,
but there wasn't consensus on what the right way forward was. I continue
to leaning toward just dropping it entirely, but Matthew Wilcox has some
alternative ideas that could use some further thought/testing.

-- 
Kees Cook

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.