diff mbox series

[5.13,191/223] selftest: use mmap instead of posix_memalign to allocate memory

Message ID 20210726153852.445207631@linuxfoundation.org
State Superseded
Headers show
Series None | expand

Commit Message

Greg KH July 26, 2021, 3:39 p.m. UTC
From: Peter Collingbourne <pcc@google.com>

commit 0db282ba2c12c1515d490d14a1ff696643ab0f1b upstream.

This test passes pointers obtained from anon_allocate_area to the
userfaultfd and mremap APIs.  This causes a problem if the system
allocator returns tagged pointers because with the tagged address ABI
the kernel rejects tagged addresses passed to these APIs, which would
end up causing the test to fail.  To make this test compatible with such
system allocators, stop using the system allocator to allocate memory in
anon_allocate_area, and instead just use mmap.

Link: https://lkml.kernel.org/r/20210714195437.118982-3-pcc@google.com
Link: https://linux-review.googlesource.com/id/Icac91064fcd923f77a83e8e133f8631c5b8fc241
Fixes: c47174fc362a ("userfaultfd: selftest")
Co-developed-by: Lokesh Gidra <lokeshgidra@google.com>
Signed-off-by: Lokesh Gidra <lokeshgidra@google.com>
Signed-off-by: Peter Collingbourne <pcc@google.com>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
Cc: Dave Martin <Dave.Martin@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Alistair Delva <adelva@google.com>
Cc: William McVicker <willmcvicker@google.com>
Cc: Evgenii Stepanov <eugenis@google.com>
Cc: Mitch Phillips <mitchp@google.com>
Cc: Andrey Konovalov <andreyknvl@gmail.com>
Cc: <stable@vger.kernel.org>	[5.4]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 tools/testing/selftests/vm/userfaultfd.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Peter Collingbourne July 29, 2021, 5:58 p.m. UTC | #1
On Mon, Jul 26, 2021 at 9:16 AM Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>

> From: Peter Collingbourne <pcc@google.com>

>

> commit 0db282ba2c12c1515d490d14a1ff696643ab0f1b upstream.

>

> This test passes pointers obtained from anon_allocate_area to the

> userfaultfd and mremap APIs.  This causes a problem if the system

> allocator returns tagged pointers because with the tagged address ABI

> the kernel rejects tagged addresses passed to these APIs, which would

> end up causing the test to fail.  To make this test compatible with such

> system allocators, stop using the system allocator to allocate memory in

> anon_allocate_area, and instead just use mmap.

>

> Link: https://lkml.kernel.org/r/20210714195437.118982-3-pcc@google.com

> Link: https://linux-review.googlesource.com/id/Icac91064fcd923f77a83e8e133f8631c5b8fc241

> Fixes: c47174fc362a ("userfaultfd: selftest")

> Co-developed-by: Lokesh Gidra <lokeshgidra@google.com>

> Signed-off-by: Lokesh Gidra <lokeshgidra@google.com>

> Signed-off-by: Peter Collingbourne <pcc@google.com>

> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>

> Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>

> Cc: Dave Martin <Dave.Martin@arm.com>

> Cc: Will Deacon <will@kernel.org>

> Cc: Andrea Arcangeli <aarcange@redhat.com>

> Cc: Alistair Delva <adelva@google.com>

> Cc: William McVicker <willmcvicker@google.com>

> Cc: Evgenii Stepanov <eugenis@google.com>

> Cc: Mitch Phillips <mitchp@google.com>

> Cc: Andrey Konovalov <andreyknvl@gmail.com>

> Cc: <stable@vger.kernel.org>    [5.4]

> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

> ---

>  tools/testing/selftests/vm/userfaultfd.c |    6 ++++--

>  1 file changed, 4 insertions(+), 2 deletions(-)

>

> --- a/tools/testing/selftests/vm/userfaultfd.c

> +++ b/tools/testing/selftests/vm/userfaultfd.c

> @@ -197,8 +197,10 @@ static int anon_release_pages(char *rel_

>

>  static void anon_allocate_area(void **alloc_area)

>  {

> -       if (posix_memalign(alloc_area, page_size, nr_pages * page_size)) {

> -               fprintf(stderr, "out of memory\n");

> +       *alloc_area = mmap(NULL, nr_pages * page_size, PROT_READ | PROT_WRITE,

> +                          MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);

> +       if (*alloc_area == MAP_FAILED)


Hi Greg,

It looks like your backport of this patch (and the backports to stable
kernels) are missing a left brace here.

Peter

> +               fprintf(stderr, "mmap of anonymous memory failed");

>                 *alloc_area = NULL;

>         }

>  }

>

>
Greg KH July 30, 2021, 4:38 a.m. UTC | #2
On Thu, Jul 29, 2021 at 10:58:11AM -0700, Peter Collingbourne wrote:
> On Mon, Jul 26, 2021 at 9:16 AM Greg Kroah-Hartman

> <gregkh@linuxfoundation.org> wrote:

> >

> > From: Peter Collingbourne <pcc@google.com>

> >

> > commit 0db282ba2c12c1515d490d14a1ff696643ab0f1b upstream.

> >

> > This test passes pointers obtained from anon_allocate_area to the

> > userfaultfd and mremap APIs.  This causes a problem if the system

> > allocator returns tagged pointers because with the tagged address ABI

> > the kernel rejects tagged addresses passed to these APIs, which would

> > end up causing the test to fail.  To make this test compatible with such

> > system allocators, stop using the system allocator to allocate memory in

> > anon_allocate_area, and instead just use mmap.

> >

> > Link: https://lkml.kernel.org/r/20210714195437.118982-3-pcc@google.com

> > Link: https://linux-review.googlesource.com/id/Icac91064fcd923f77a83e8e133f8631c5b8fc241

> > Fixes: c47174fc362a ("userfaultfd: selftest")

> > Co-developed-by: Lokesh Gidra <lokeshgidra@google.com>

> > Signed-off-by: Lokesh Gidra <lokeshgidra@google.com>

> > Signed-off-by: Peter Collingbourne <pcc@google.com>

> > Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>

> > Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>

> > Cc: Dave Martin <Dave.Martin@arm.com>

> > Cc: Will Deacon <will@kernel.org>

> > Cc: Andrea Arcangeli <aarcange@redhat.com>

> > Cc: Alistair Delva <adelva@google.com>

> > Cc: William McVicker <willmcvicker@google.com>

> > Cc: Evgenii Stepanov <eugenis@google.com>

> > Cc: Mitch Phillips <mitchp@google.com>

> > Cc: Andrey Konovalov <andreyknvl@gmail.com>

> > Cc: <stable@vger.kernel.org>    [5.4]

> > Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

> > Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

> > ---

> >  tools/testing/selftests/vm/userfaultfd.c |    6 ++++--

> >  1 file changed, 4 insertions(+), 2 deletions(-)

> >

> > --- a/tools/testing/selftests/vm/userfaultfd.c

> > +++ b/tools/testing/selftests/vm/userfaultfd.c

> > @@ -197,8 +197,10 @@ static int anon_release_pages(char *rel_

> >

> >  static void anon_allocate_area(void **alloc_area)

> >  {

> > -       if (posix_memalign(alloc_area, page_size, nr_pages * page_size)) {

> > -               fprintf(stderr, "out of memory\n");

> > +       *alloc_area = mmap(NULL, nr_pages * page_size, PROT_READ | PROT_WRITE,

> > +                          MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);

> > +       if (*alloc_area == MAP_FAILED)

> 

> Hi Greg,

> 

> It looks like your backport of this patch (and the backports to stable

> kernels) are missing a left brace here.


Already fixed up in the latest -rc releases, right?

thanks,

greg k-h
Peter Collingbourne Aug. 2, 2021, 8:10 p.m. UTC | #3
On Thu, Jul 29, 2021 at 9:38 PM Greg Kroah-Hartman
<gregkh@linuxfoundation.org> wrote:
>

> On Thu, Jul 29, 2021 at 10:58:11AM -0700, Peter Collingbourne wrote:

> > On Mon, Jul 26, 2021 at 9:16 AM Greg Kroah-Hartman

> > <gregkh@linuxfoundation.org> wrote:

> > >

> > > From: Peter Collingbourne <pcc@google.com>

> > >

> > > commit 0db282ba2c12c1515d490d14a1ff696643ab0f1b upstream.

> > >

> > > This test passes pointers obtained from anon_allocate_area to the

> > > userfaultfd and mremap APIs.  This causes a problem if the system

> > > allocator returns tagged pointers because with the tagged address ABI

> > > the kernel rejects tagged addresses passed to these APIs, which would

> > > end up causing the test to fail.  To make this test compatible with such

> > > system allocators, stop using the system allocator to allocate memory in

> > > anon_allocate_area, and instead just use mmap.

> > >

> > > Link: https://lkml.kernel.org/r/20210714195437.118982-3-pcc@google.com

> > > Link: https://linux-review.googlesource.com/id/Icac91064fcd923f77a83e8e133f8631c5b8fc241

> > > Fixes: c47174fc362a ("userfaultfd: selftest")

> > > Co-developed-by: Lokesh Gidra <lokeshgidra@google.com>

> > > Signed-off-by: Lokesh Gidra <lokeshgidra@google.com>

> > > Signed-off-by: Peter Collingbourne <pcc@google.com>

> > > Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>

> > > Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>

> > > Cc: Dave Martin <Dave.Martin@arm.com>

> > > Cc: Will Deacon <will@kernel.org>

> > > Cc: Andrea Arcangeli <aarcange@redhat.com>

> > > Cc: Alistair Delva <adelva@google.com>

> > > Cc: William McVicker <willmcvicker@google.com>

> > > Cc: Evgenii Stepanov <eugenis@google.com>

> > > Cc: Mitch Phillips <mitchp@google.com>

> > > Cc: Andrey Konovalov <andreyknvl@gmail.com>

> > > Cc: <stable@vger.kernel.org>    [5.4]

> > > Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

> > > Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

> > > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

> > > ---

> > >  tools/testing/selftests/vm/userfaultfd.c |    6 ++++--

> > >  1 file changed, 4 insertions(+), 2 deletions(-)

> > >

> > > --- a/tools/testing/selftests/vm/userfaultfd.c

> > > +++ b/tools/testing/selftests/vm/userfaultfd.c

> > > @@ -197,8 +197,10 @@ static int anon_release_pages(char *rel_

> > >

> > >  static void anon_allocate_area(void **alloc_area)

> > >  {

> > > -       if (posix_memalign(alloc_area, page_size, nr_pages * page_size)) {

> > > -               fprintf(stderr, "out of memory\n");

> > > +       *alloc_area = mmap(NULL, nr_pages * page_size, PROT_READ | PROT_WRITE,

> > > +                          MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);

> > > +       if (*alloc_area == MAP_FAILED)

> >

> > Hi Greg,

> >

> > It looks like your backport of this patch (and the backports to stable

> > kernels) are missing a left brace here.

>

> Already fixed up in the latest -rc releases, right?


It looks like you fixed it on linux-4.19.y and linux-5.4.y, but not
linux-4.14.y, linux-5.10.y or linux-5.13.y.

Peter
Greg KH Aug. 4, 2021, 10:04 a.m. UTC | #4
On Mon, Aug 02, 2021 at 01:10:47PM -0700, Peter Collingbourne wrote:
> On Thu, Jul 29, 2021 at 9:38 PM Greg Kroah-Hartman

> <gregkh@linuxfoundation.org> wrote:

> >

> > On Thu, Jul 29, 2021 at 10:58:11AM -0700, Peter Collingbourne wrote:

> > > On Mon, Jul 26, 2021 at 9:16 AM Greg Kroah-Hartman

> > > <gregkh@linuxfoundation.org> wrote:

> > > >

> > > > From: Peter Collingbourne <pcc@google.com>

> > > >

> > > > commit 0db282ba2c12c1515d490d14a1ff696643ab0f1b upstream.

> > > >

> > > > This test passes pointers obtained from anon_allocate_area to the

> > > > userfaultfd and mremap APIs.  This causes a problem if the system

> > > > allocator returns tagged pointers because with the tagged address ABI

> > > > the kernel rejects tagged addresses passed to these APIs, which would

> > > > end up causing the test to fail.  To make this test compatible with such

> > > > system allocators, stop using the system allocator to allocate memory in

> > > > anon_allocate_area, and instead just use mmap.

> > > >

> > > > Link: https://lkml.kernel.org/r/20210714195437.118982-3-pcc@google.com

> > > > Link: https://linux-review.googlesource.com/id/Icac91064fcd923f77a83e8e133f8631c5b8fc241

> > > > Fixes: c47174fc362a ("userfaultfd: selftest")

> > > > Co-developed-by: Lokesh Gidra <lokeshgidra@google.com>

> > > > Signed-off-by: Lokesh Gidra <lokeshgidra@google.com>

> > > > Signed-off-by: Peter Collingbourne <pcc@google.com>

> > > > Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>

> > > > Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>

> > > > Cc: Dave Martin <Dave.Martin@arm.com>

> > > > Cc: Will Deacon <will@kernel.org>

> > > > Cc: Andrea Arcangeli <aarcange@redhat.com>

> > > > Cc: Alistair Delva <adelva@google.com>

> > > > Cc: William McVicker <willmcvicker@google.com>

> > > > Cc: Evgenii Stepanov <eugenis@google.com>

> > > > Cc: Mitch Phillips <mitchp@google.com>

> > > > Cc: Andrey Konovalov <andreyknvl@gmail.com>

> > > > Cc: <stable@vger.kernel.org>    [5.4]

> > > > Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

> > > > Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

> > > > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

> > > > ---

> > > >  tools/testing/selftests/vm/userfaultfd.c |    6 ++++--

> > > >  1 file changed, 4 insertions(+), 2 deletions(-)

> > > >

> > > > --- a/tools/testing/selftests/vm/userfaultfd.c

> > > > +++ b/tools/testing/selftests/vm/userfaultfd.c

> > > > @@ -197,8 +197,10 @@ static int anon_release_pages(char *rel_

> > > >

> > > >  static void anon_allocate_area(void **alloc_area)

> > > >  {

> > > > -       if (posix_memalign(alloc_area, page_size, nr_pages * page_size)) {

> > > > -               fprintf(stderr, "out of memory\n");

> > > > +       *alloc_area = mmap(NULL, nr_pages * page_size, PROT_READ | PROT_WRITE,

> > > > +                          MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);

> > > > +       if (*alloc_area == MAP_FAILED)

> > >

> > > Hi Greg,

> > >

> > > It looks like your backport of this patch (and the backports to stable

> > > kernels) are missing a left brace here.

> >

> > Already fixed up in the latest -rc releases, right?

> 

> It looks like you fixed it on linux-4.19.y and linux-5.4.y, but not

> linux-4.14.y, linux-5.10.y or linux-5.13.y.


4.14 had not had a release with this in it yet (it is in the queue), I
missed that I also broke this on 5.10 and 5.13 so will go add it there
as well.

thanks!

greg k-h
diff mbox series

Patch

--- a/tools/testing/selftests/vm/userfaultfd.c
+++ b/tools/testing/selftests/vm/userfaultfd.c
@@ -197,8 +197,10 @@  static int anon_release_pages(char *rel_
 
 static void anon_allocate_area(void **alloc_area)
 {
-	if (posix_memalign(alloc_area, page_size, nr_pages * page_size)) {
-		fprintf(stderr, "out of memory\n");
+	*alloc_area = mmap(NULL, nr_pages * page_size, PROT_READ | PROT_WRITE,
+			   MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
+	if (*alloc_area == MAP_FAILED)
+		fprintf(stderr, "mmap of anonymous memory failed");
 		*alloc_area = NULL;
 	}
 }