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
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
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
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
>
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;
>
>
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
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.
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?
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.
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