2020-05-15 00:49:23

by Jarkko Sakkinen

[permalink] [raw]
Subject: [PATCH v30 09/20] mm: Introduce vm_ops->may_mprotect()

From: Sean Christopherson <[email protected]>

Add vm_ops()->may_mprotect() to check additional constrains set by a
subsystem for a mprotect() call.

Signed-off-by: Sean Christopherson <[email protected]>
Acked-by: Jethro Beekman <[email protected]>
Signed-off-by: Jarkko Sakkinen <[email protected]>
---
include/linux/mm.h | 2 ++
mm/mprotect.c | 14 +++++++++++---
2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/include/linux/mm.h b/include/linux/mm.h
index 5a323422d783..dbcc2846b3b8 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -546,6 +546,8 @@ struct vm_operations_struct {
void (*close)(struct vm_area_struct * area);
int (*split)(struct vm_area_struct * area, unsigned long addr);
int (*mremap)(struct vm_area_struct * area);
+ int (*may_mprotect)(struct vm_area_struct *vma, unsigned long start,
+ unsigned long end, unsigned long prot);
vm_fault_t (*fault)(struct vm_fault *vmf);
vm_fault_t (*huge_fault)(struct vm_fault *vmf,
enum page_entry_size pe_size);
diff --git a/mm/mprotect.c b/mm/mprotect.c
index 494192ca954b..079ba92df377 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -603,13 +603,21 @@ static int do_mprotect_pkey(unsigned long start, size_t len,
goto out;
}

+ tmp = vma->vm_end;
+ if (tmp > end)
+ tmp = end;
+
+ if (vma->vm_ops && vma->vm_ops->may_mprotect) {
+ error = vma->vm_ops->may_mprotect(vma, nstart, tmp,
+ prot);
+ if (error)
+ goto out;
+ }
+
error = security_file_mprotect(vma, reqprot, prot);
if (error)
goto out;

- tmp = vma->vm_end;
- if (tmp > end)
- tmp = end;
error = mprotect_fixup(vma, &prev, nstart, tmp, newflags);
if (error)
goto out;
--
2.25.1


2020-05-29 12:14:07

by Borislav Petkov

[permalink] [raw]
Subject: Re: [PATCH v30 09/20] mm: Introduce vm_ops->may_mprotect()

On Fri, May 15, 2020 at 03:43:59AM +0300, Jarkko Sakkinen wrote:
> From: Sean Christopherson <[email protected]>
>
> Add vm_ops()->may_mprotect() to check additional constrains set by a

"constraints"

> subsystem for a mprotect() call.
>
> Signed-off-by: Sean Christopherson <[email protected]>
> Acked-by: Jethro Beekman <[email protected]>
> Signed-off-by: Jarkko Sakkinen <[email protected]>
> ---
> include/linux/mm.h | 2 ++
> mm/mprotect.c | 14 +++++++++++---
> 2 files changed, 13 insertions(+), 3 deletions(-)

This needs an ACK from an mm person.

--
Regards/Gruss,
Boris.

https://people.kernel.org/tglx/notes-about-netiquette

2020-05-29 18:20:38

by Jarkko Sakkinen

[permalink] [raw]
Subject: Re: [PATCH v30 09/20] mm: Introduce vm_ops->may_mprotect()

On Fri, May 29, 2020 at 02:10:38PM +0200, Borislav Petkov wrote:
> On Fri, May 15, 2020 at 03:43:59AM +0300, Jarkko Sakkinen wrote:
> > From: Sean Christopherson <[email protected]>
> >
> > Add vm_ops()->may_mprotect() to check additional constrains set by a
>
> "constraints"
>
> > subsystem for a mprotect() call.
> >
> > Signed-off-by: Sean Christopherson <[email protected]>
> > Acked-by: Jethro Beekman <[email protected]>
> > Signed-off-by: Jarkko Sakkinen <[email protected]>
> > ---
> > include/linux/mm.h | 2 ++
> > mm/mprotect.c | 14 +++++++++++---
> > 2 files changed, 13 insertions(+), 3 deletions(-)
>
> This needs an ACK from an mm person.

Good point. I'll add the needed cc's.

/Jarkko

2020-05-29 18:33:54

by Dave Hansen

[permalink] [raw]
Subject: Re: [PATCH v30 09/20] mm: Introduce vm_ops->may_mprotect()

On 5/14/20 5:43 PM, Jarkko Sakkinen wrote:
> From: Sean Christopherson <[email protected]>
>
> Add vm_ops()->may_mprotect() to check additional constrains set by a
> subsystem for a mprotect() call.

This changelog needs some more detail about why this is needed. It
would also be nice to include thought about what else it could get used
for and what subsystems can expect by doing this and what the mm core is
expected to do.



2020-05-31 23:16:27

by Jarkko Sakkinen

[permalink] [raw]
Subject: Re: [PATCH v30 09/20] mm: Introduce vm_ops->may_mprotect()

On Fri, May 29, 2020 at 11:28:56AM -0700, Dave Hansen wrote:
> On 5/14/20 5:43 PM, Jarkko Sakkinen wrote:
> > From: Sean Christopherson <[email protected]>
> >
> > Add vm_ops()->may_mprotect() to check additional constrains set by a
> > subsystem for a mprotect() call.
>
> This changelog needs some more detail about why this is needed. It
> would also be nice to include thought about what else it could get used
> for and what subsystems can expect by doing this and what the mm core is
> expected to do.

Point taken. I added a description on how it is used.

/Jarkko