2019-09-09 15:09:37

by Walter Wu

[permalink] [raw]
Subject: [PATCH v2 1/2] mm/page_ext: support to record the last stack of page

KASAN will record last stack of page in order to help programmer
to see memory corruption caused by page.

What is difference between page_owner and our patch?
page_owner records alloc stack of page, but our patch is to record
last stack(it may be alloc or free stack of page).

Signed-off-by: Walter Wu <[email protected]>
---
mm/page_ext.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/mm/page_ext.c b/mm/page_ext.c
index 5f5769c7db3b..7ca33dcd9ffa 100644
--- a/mm/page_ext.c
+++ b/mm/page_ext.c
@@ -65,6 +65,9 @@ static struct page_ext_operations *page_ext_ops[] = {
#if defined(CONFIG_IDLE_PAGE_TRACKING) && !defined(CONFIG_64BIT)
&page_idle_ops,
#endif
+#ifdef CONFIG_KASAN
+ &page_stack_ops,
+#endif
};

static unsigned long total_usage;
--
2.18.0


2019-09-09 22:55:11

by David Hildenbrand

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] mm/page_ext: support to record the last stack of page

On 09.09.19 10:53, Walter Wu wrote:
> KASAN will record last stack of page in order to help programmer
> to see memory corruption caused by page.
>
> What is difference between page_owner and our patch?
> page_owner records alloc stack of page, but our patch is to record
> last stack(it may be alloc or free stack of page).
>
> Signed-off-by: Walter Wu <[email protected]>
> ---
> mm/page_ext.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/mm/page_ext.c b/mm/page_ext.c
> index 5f5769c7db3b..7ca33dcd9ffa 100644
> --- a/mm/page_ext.c
> +++ b/mm/page_ext.c
> @@ -65,6 +65,9 @@ static struct page_ext_operations *page_ext_ops[] = {
> #if defined(CONFIG_IDLE_PAGE_TRACKING) && !defined(CONFIG_64BIT)
> &page_idle_ops,
> #endif
> +#ifdef CONFIG_KASAN
> + &page_stack_ops,
> +#endif
> };
>
> static unsigned long total_usage;
>

Are you sure this patch compiles?

t460s: ~/git/linux virtio-mem $ git grep page_stack_ops
t460s: ~/git/linux virtio-mem $

--

Thanks,

David / dhildenb

2019-09-10 12:07:59

by Kirill A. Shutemov

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] mm/page_ext: support to record the last stack of page

On Tue, Sep 10, 2019 at 09:07:49AM +0800, Walter Wu wrote:
> On Mon, 2019-09-09 at 12:57 +0200, David Hildenbrand wrote:
> > On 09.09.19 10:53, Walter Wu wrote:
> > > KASAN will record last stack of page in order to help programmer
> > > to see memory corruption caused by page.
> > >
> > > What is difference between page_owner and our patch?
> > > page_owner records alloc stack of page, but our patch is to record
> > > last stack(it may be alloc or free stack of page).
> > >
> > > Signed-off-by: Walter Wu <[email protected]>
> > > ---
> > > mm/page_ext.c | 3 +++
> > > 1 file changed, 3 insertions(+)
> > >
> > > diff --git a/mm/page_ext.c b/mm/page_ext.c
> > > index 5f5769c7db3b..7ca33dcd9ffa 100644
> > > --- a/mm/page_ext.c
> > > +++ b/mm/page_ext.c
> > > @@ -65,6 +65,9 @@ static struct page_ext_operations *page_ext_ops[] = {
> > > #if defined(CONFIG_IDLE_PAGE_TRACKING) && !defined(CONFIG_64BIT)
> > > &page_idle_ops,
> > > #endif
> > > +#ifdef CONFIG_KASAN
> > > + &page_stack_ops,
> > > +#endif
> > > };
> > >
> > > static unsigned long total_usage;
> > >
> >
> > Are you sure this patch compiles?
> >
> This is patchsets, it need another patch2.
> We have verified it by running KASAN UT on Qemu.

Any patchset must be bisectable: do not break anything in the middle of
patchset.

--
Kirill A. Shutemov

2019-09-10 18:45:36

by Walter Wu

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] mm/page_ext: support to record the last stack of page

On Mon, 2019-09-09 at 12:57 +0200, David Hildenbrand wrote:
> On 09.09.19 10:53, Walter Wu wrote:
> > KASAN will record last stack of page in order to help programmer
> > to see memory corruption caused by page.
> >
> > What is difference between page_owner and our patch?
> > page_owner records alloc stack of page, but our patch is to record
> > last stack(it may be alloc or free stack of page).
> >
> > Signed-off-by: Walter Wu <[email protected]>
> > ---
> > mm/page_ext.c | 3 +++
> > 1 file changed, 3 insertions(+)
> >
> > diff --git a/mm/page_ext.c b/mm/page_ext.c
> > index 5f5769c7db3b..7ca33dcd9ffa 100644
> > --- a/mm/page_ext.c
> > +++ b/mm/page_ext.c
> > @@ -65,6 +65,9 @@ static struct page_ext_operations *page_ext_ops[] = {
> > #if defined(CONFIG_IDLE_PAGE_TRACKING) && !defined(CONFIG_64BIT)
> > &page_idle_ops,
> > #endif
> > +#ifdef CONFIG_KASAN
> > + &page_stack_ops,
> > +#endif
> > };
> >
> > static unsigned long total_usage;
> >
>
> Are you sure this patch compiles?
>
This is patchsets, it need another patch2.
We have verified it by running KASAN UT on Qemu.



2019-09-10 18:53:44

by Walter Wu

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] mm/page_ext: support to record the last stack of page

On Tue, 2019-09-10 at 12:31 +0300, Kirill A. Shutemov wrote:
> On Tue, Sep 10, 2019 at 09:07:49AM +0800, Walter Wu wrote:
> > On Mon, 2019-09-09 at 12:57 +0200, David Hildenbrand wrote:
> > > On 09.09.19 10:53, Walter Wu wrote:
> > > > KASAN will record last stack of page in order to help programmer
> > > > to see memory corruption caused by page.
> > > >
> > > > What is difference between page_owner and our patch?
> > > > page_owner records alloc stack of page, but our patch is to record
> > > > last stack(it may be alloc or free stack of page).
> > > >
> > > > Signed-off-by: Walter Wu <[email protected]>
> > > > ---
> > > > mm/page_ext.c | 3 +++
> > > > 1 file changed, 3 insertions(+)
> > > >
> > > > diff --git a/mm/page_ext.c b/mm/page_ext.c
> > > > index 5f5769c7db3b..7ca33dcd9ffa 100644
> > > > --- a/mm/page_ext.c
> > > > +++ b/mm/page_ext.c
> > > > @@ -65,6 +65,9 @@ static struct page_ext_operations *page_ext_ops[] = {
> > > > #if defined(CONFIG_IDLE_PAGE_TRACKING) && !defined(CONFIG_64BIT)
> > > > &page_idle_ops,
> > > > #endif
> > > > +#ifdef CONFIG_KASAN
> > > > + &page_stack_ops,
> > > > +#endif
> > > > };
> > > >
> > > > static unsigned long total_usage;
> > > >
> > >
> > > Are you sure this patch compiles?
> > >
> > This is patchsets, it need another patch2.
> > We have verified it by running KASAN UT on Qemu.
>
> Any patchset must be bisectable: do not break anything in the middle of
> patchset.
>

Thanks your reminder.
I should explain complete message at commit log.
Our patchsets is below:
https://lkml.org/lkml/2019/9/9/104
https://lkml.org/lkml/2019/9/9/123


2019-09-10 20:10:18

by Vlastimil Babka

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] mm/page_ext: support to record the last stack of page

On 9/9/19 10:53 AM, Walter Wu wrote:
> KASAN will record last stack of page in order to help programmer
> to see memory corruption caused by page.
>
> What is difference between page_owner and our patch?
> page_owner records alloc stack of page, but our patch is to record
> last stack(it may be alloc or free stack of page).
>
> Signed-off-by: Walter Wu <[email protected]>

There's no point in separating this from patch 2 (and as David pointed
out, doesn't compile).

> ---
> mm/page_ext.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/mm/page_ext.c b/mm/page_ext.c
> index 5f5769c7db3b..7ca33dcd9ffa 100644
> --- a/mm/page_ext.c
> +++ b/mm/page_ext.c
> @@ -65,6 +65,9 @@ static struct page_ext_operations *page_ext_ops[] = {
> #if defined(CONFIG_IDLE_PAGE_TRACKING) && !defined(CONFIG_64BIT)
> &page_idle_ops,
> #endif
> +#ifdef CONFIG_KASAN
> + &page_stack_ops,
> +#endif
> };
>
> static unsigned long total_usage;
>