2018-05-22 10:09:08

by David Hildenbrand

[permalink] [raw]
Subject: [PATCH v2 0/2] kasan: fix memory notifier handling

If onlining of pages fails (is canceled), we don't properly free up memory.
Also, the memory hotplug notifier is not registered early enough, still
failing on certain setups where memory is detected, added and onlined
early.

v1 -> v2:
- s/MEM_CANCEL_OFFLINE/MEM_CANCEL_ONLINE

David Hildenbrand (2):
kasan: free allocated shadow memory on MEM_CANCEL_ONLINE
kasan: fix memory hotplug during boot

mm/kasan/kasan.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

--
2.17.0



2018-05-22 10:15:02

by David Hildenbrand

[permalink] [raw]
Subject: [PATCH v2 2/2] kasan: fix memory hotplug during boot

Using module_init() is wrong. E.g. ACPI adds and onlines memory before
our memory notifier gets registered.

This makes sure that ACPI memory detected during boot up will not
result in a kernel crash.

Easily reproducable with QEMU, just specify a DIMM when starting up.

Signed-off-by: David Hildenbrand <[email protected]>
---
mm/kasan/kasan.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/kasan/kasan.c b/mm/kasan/kasan.c
index 53564229674b..a8b85706e2d6 100644
--- a/mm/kasan/kasan.c
+++ b/mm/kasan/kasan.c
@@ -892,5 +892,5 @@ static int __init kasan_memhotplug_init(void)
return 0;
}

-module_init(kasan_memhotplug_init);
+core_initcall(kasan_memhotplug_init);
#endif
--
2.17.0


2018-05-22 10:15:29

by David Hildenbrand

[permalink] [raw]
Subject: [PATCH v2 1/2] kasan: free allocated shadow memory on MEM_CANCEL_ONLINE

We have to free memory again when we cancel onlining, otherwise a later
onlining attempt will fail.

Signed-off-by: David Hildenbrand <[email protected]>
---
mm/kasan/kasan.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/mm/kasan/kasan.c b/mm/kasan/kasan.c
index 135ce2838c89..53564229674b 100644
--- a/mm/kasan/kasan.c
+++ b/mm/kasan/kasan.c
@@ -867,6 +867,7 @@ static int __meminit kasan_mem_notifier(struct notifier_block *nb,
kmemleak_ignore(ret);
return NOTIFY_OK;
}
+ case MEM_CANCEL_ONLINE:
case MEM_OFFLINE: {
struct vm_struct *vm;

--
2.17.0


2018-05-22 16:26:25

by Andrey Ryabinin

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] kasan: fix memory hotplug during boot



On 05/22/2018 01:07 PM, David Hildenbrand wrote:
> Using module_init() is wrong. E.g. ACPI adds and onlines memory before
> our memory notifier gets registered.
>
> This makes sure that ACPI memory detected during boot up will not
> result in a kernel crash.
>
> Easily reproducable with QEMU, just specify a DIMM when starting up.

reproducible
>
> Signed-off-by: David Hildenbrand <[email protected]>
> ---

Fixes: fa69b5989bb0 ("mm/kasan: add support for memory hotplug")
Acked-by: Andrey Ryabinin <[email protected]>
Cc: <[email protected]>

> mm/kasan/kasan.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/mm/kasan/kasan.c b/mm/kasan/kasan.c
> index 53564229674b..a8b85706e2d6 100644
> --- a/mm/kasan/kasan.c
> +++ b/mm/kasan/kasan.c
> @@ -892,5 +892,5 @@ static int __init kasan_memhotplug_init(void)
> return 0;
> }
>
> -module_init(kasan_memhotplug_init);
> +core_initcall(kasan_memhotplug_init);
> #endif
>

2018-05-22 16:27:25

by Andrey Ryabinin

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] kasan: free allocated shadow memory on MEM_CANCEL_ONLINE



On 05/22/2018 01:07 PM, David Hildenbrand wrote:
> We have to free memory again when we cancel onlining, otherwise a later
> onlining attempt will fail.
>
> Signed-off-by: David Hildenbrand <[email protected]>
> ---

Fixes: fa69b5989bb0 ("mm/kasan: add support for memory hotplug")
Acked-by: Andrey Ryabinin <[email protected]>
Cc: <[email protected]>

> mm/kasan/kasan.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/mm/kasan/kasan.c b/mm/kasan/kasan.c
> index 135ce2838c89..53564229674b 100644
> --- a/mm/kasan/kasan.c
> +++ b/mm/kasan/kasan.c
> @@ -867,6 +867,7 @@ static int __meminit kasan_mem_notifier(struct notifier_block *nb,
> kmemleak_ignore(ret);
> return NOTIFY_OK;
> }
> + case MEM_CANCEL_ONLINE:
> case MEM_OFFLINE: {
> struct vm_struct *vm;
>
>

2018-05-22 16:37:59

by David Hildenbrand

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] kasan: fix memory hotplug during boot

On 22.05.2018 18:26, Andrey Ryabinin wrote:
>
>
> On 05/22/2018 01:07 PM, David Hildenbrand wrote:
>> Using module_init() is wrong. E.g. ACPI adds and onlines memory before
>> our memory notifier gets registered.
>>
>> This makes sure that ACPI memory detected during boot up will not
>> result in a kernel crash.
>>
>> Easily reproducable with QEMU, just specify a DIMM when starting up.
>
> reproducible
>>
>> Signed-off-by: David Hildenbrand <[email protected]>
>> ---
>
> Fixes: fa69b5989bb0 ("mm/kasan: add support for memory hotplug")
> Acked-by: Andrey Ryabinin <[email protected]>
> Cc: <[email protected]>

Think this even dates back to:

786a8959912e ("kasan: disable memory hotplug")


>
>> mm/kasan/kasan.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/mm/kasan/kasan.c b/mm/kasan/kasan.c
>> index 53564229674b..a8b85706e2d6 100644
>> --- a/mm/kasan/kasan.c
>> +++ b/mm/kasan/kasan.c
>> @@ -892,5 +892,5 @@ static int __init kasan_memhotplug_init(void)
>> return 0;
>> }
>>
>> -module_init(kasan_memhotplug_init);
>> +core_initcall(kasan_memhotplug_init);
>> #endif
>>


--

Thanks,

David / dhildenb

2018-05-22 19:51:57

by Andrey Ryabinin

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] kasan: fix memory hotplug during boot



On 05/22/2018 07:36 PM, David Hildenbrand wrote:
> On 22.05.2018 18:26, Andrey Ryabinin wrote:
>>
>>
>> On 05/22/2018 01:07 PM, David Hildenbrand wrote:
>>> Using module_init() is wrong. E.g. ACPI adds and onlines memory before
>>> our memory notifier gets registered.
>>>
>>> This makes sure that ACPI memory detected during boot up will not
>>> result in a kernel crash.
>>>
>>> Easily reproducable with QEMU, just specify a DIMM when starting up.
>>
>> reproducible
>>>
>>> Signed-off-by: David Hildenbrand <[email protected]>
>>> ---
>>
>> Fixes: fa69b5989bb0 ("mm/kasan: add support for memory hotplug")
>> Acked-by: Andrey Ryabinin <[email protected]>
>> Cc: <[email protected]>
>
> Think this even dates back to:
>
> 786a8959912e ("kasan: disable memory hotplug")
>

Indeed.

2018-05-22 21:09:20

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] kasan: fix memory hotplug during boot

On Tue, 22 May 2018 22:50:12 +0300 Andrey Ryabinin <[email protected]> wrote:

>
>
> On 05/22/2018 07:36 PM, David Hildenbrand wrote:
> > On 22.05.2018 18:26, Andrey Ryabinin wrote:
> >>
> >>
> >> On 05/22/2018 01:07 PM, David Hildenbrand wrote:
> >>> Using module_init() is wrong. E.g. ACPI adds and onlines memory before
> >>> our memory notifier gets registered.
> >>>
> >>> This makes sure that ACPI memory detected during boot up will not
> >>> result in a kernel crash.
> >>>
> >>> Easily reproducable with QEMU, just specify a DIMM when starting up.
> >>
> >> reproducible
> >>>
> >>> Signed-off-by: David Hildenbrand <[email protected]>
> >>> ---
> >>
> >> Fixes: fa69b5989bb0 ("mm/kasan: add support for memory hotplug")
> >> Acked-by: Andrey Ryabinin <[email protected]>
> >> Cc: <[email protected]>
> >
> > Think this even dates back to:
> >
> > 786a8959912e ("kasan: disable memory hotplug")
> >
>
> Indeed.

Is a backport to -stable justified for either of these patches?

2018-05-23 10:00:30

by Andrey Ryabinin

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] kasan: fix memory hotplug during boot



On 05/23/2018 12:07 AM, Andrew Morton wrote:
> On Tue, 22 May 2018 22:50:12 +0300 Andrey Ryabinin <[email protected]> wrote:
>
>>
>>
>> On 05/22/2018 07:36 PM, David Hildenbrand wrote:
>>> On 22.05.2018 18:26, Andrey Ryabinin wrote:
>>>>
>>>>
>>>> On 05/22/2018 01:07 PM, David Hildenbrand wrote:
>>>>> Using module_init() is wrong. E.g. ACPI adds and onlines memory before
>>>>> our memory notifier gets registered.
>>>>>
>>>>> This makes sure that ACPI memory detected during boot up will not
>>>>> result in a kernel crash.
>>>>>
>>>>> Easily reproducable with QEMU, just specify a DIMM when starting up.
>>>>
>>>> reproducible
>>>>>
>>>>> Signed-off-by: David Hildenbrand <[email protected]>
>>>>> ---
>>>>
>>>> Fixes: fa69b5989bb0 ("mm/kasan: add support for memory hotplug")
>>>> Acked-by: Andrey Ryabinin <[email protected]>
>>>> Cc: <[email protected]>
>>>
>>> Think this even dates back to:
>>>
>>> 786a8959912e ("kasan: disable memory hotplug")
>>>
>>
>> Indeed.
>
> Is a backport to -stable justified for either of these patches?
>

I don't see any reasons to not backport these.
The first one fixes failure to online memory, why it shouldn't be fixed in -stable?
The second one is fixes boot crash, it's definitely stable material IMO.

2018-05-23 11:54:32

by David Hildenbrand

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] kasan: fix memory hotplug during boot

On 23.05.2018 11:59, Andrey Ryabinin wrote:
>
>
> On 05/23/2018 12:07 AM, Andrew Morton wrote:
>> On Tue, 22 May 2018 22:50:12 +0300 Andrey Ryabinin <[email protected]> wrote:
>>
>>>
>>>
>>> On 05/22/2018 07:36 PM, David Hildenbrand wrote:
>>>> On 22.05.2018 18:26, Andrey Ryabinin wrote:
>>>>>
>>>>>
>>>>> On 05/22/2018 01:07 PM, David Hildenbrand wrote:
>>>>>> Using module_init() is wrong. E.g. ACPI adds and onlines memory before
>>>>>> our memory notifier gets registered.
>>>>>>
>>>>>> This makes sure that ACPI memory detected during boot up will not
>>>>>> result in a kernel crash.
>>>>>>
>>>>>> Easily reproducable with QEMU, just specify a DIMM when starting up.
>>>>>
>>>>> reproducible
>>>>>>
>>>>>> Signed-off-by: David Hildenbrand <[email protected]>
>>>>>> ---
>>>>>
>>>>> Fixes: fa69b5989bb0 ("mm/kasan: add support for memory hotplug")
>>>>> Acked-by: Andrey Ryabinin <[email protected]>
>>>>> Cc: <[email protected]>
>>>>
>>>> Think this even dates back to:
>>>>
>>>> 786a8959912e ("kasan: disable memory hotplug")
>>>>
>>>
>>> Indeed.
>>
>> Is a backport to -stable justified for either of these patches?
>>
>
> I don't see any reasons to not backport these.
> The first one fixes failure to online memory, why it shouldn't be fixed in -stable?
> The second one is fixes boot crash, it's definitely stable material IMO.
>

Agreed, at least the second one should be cc stable, as I can reproduce
it with a simple QEMU command.

--

Thanks,

David / dhildenb