linux-modules.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Question: a module for wiping userspace RAM before shutdown/reboot/halt
@ 2025-05-15 13:30 Danill Klimuk
  2025-05-17 17:25 ` Christophe Leroy
  2025-08-21 12:13 ` Kamil Aronowski
  0 siblings, 2 replies; 6+ messages in thread
From: Danill Klimuk @ 2025-05-15 13:30 UTC (permalink / raw)
  To: linux-modules

Hello everyone. I have received a request to write a Linux kernel module 
that will wipe any processes leftovers from userspace RAM during/before 
Linux kernel shutdown/reboot/halt sequences. The reason I am going to do 
it inside a module is to do it in a more deterministic way that does not 
depend on any processes. AFAIK Linux kernel does not have any other 
functionalities to wipe leftovers from RAM apart from the command line 
arguments "init_on_free" and "init_on_alloc" that results in memory 
poisoning only during memory allocation and memory deallocation. These 
arguments cause the kernel to clean processes memory several times 
during runtime, that is not deterministic because of processes 
non-deterministic behavior. Hence, I want to bring the memory wiping 
mechanism in one place and make it more deterministic. The question is:

Maybe the Linux kernel already have such functionalities implemented?

Currently I am planning to implement the wiping process to be triggered 
by "reboot_notifier_callback", so to wipe RAM after PID 1 process 
finishes and no other processes are executing. I am looking forward to 
merging the module into Linux kernel upstream too.

Best regards, Daniil.
3mdeb Zarhus team leader.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Question: a module for wiping userspace RAM before shutdown/reboot/halt
  2025-05-15 13:30 Question: a module for wiping userspace RAM before shutdown/reboot/halt Danill Klimuk
@ 2025-05-17 17:25 ` Christophe Leroy
  2025-05-19  7:26   ` Danill Klimuk
  2025-08-21 12:13 ` Kamil Aronowski
  1 sibling, 1 reply; 6+ messages in thread
From: Christophe Leroy @ 2025-05-17 17:25 UTC (permalink / raw)
  To: Danill Klimuk, linux-modules, linux-mm@kvack.org



Le 15/05/2025 à 15:30, Danill Klimuk a écrit :

> Hello everyone. I have received a request to write a Linux kernel module
> that will wipe any processes leftovers from userspace RAM during/before
> Linux kernel shutdown/reboot/halt sequences. The reason I am going to do
> it inside a module is to do it in a more deterministic way that does not
> depend on any processes. AFAIK Linux kernel does not have any other
> functionalities to wipe leftovers from RAM apart from the command line
> arguments "init_on_free" and "init_on_alloc" that results in memory
> poisoning only during memory allocation and memory deallocation. These
> arguments cause the kernel to clean processes memory several times
> during runtime, that is not deterministic because of processes
> non-deterministic behavior. Hence, I want to bring the memory wiping
> mechanism in one place and make it more deterministic. The question is:
> 
> Maybe the Linux kernel already have such functionalities implemented?

Linux memory management topics should be sent to linux-mm@kvack.org

> 
> Currently I am planning to implement the wiping process to be triggered
> by "reboot_notifier_callback", so to wipe RAM after PID 1 process
> finishes and no other processes are executing. I am looking forward to
> merging the module into Linux kernel upstream too.

What do you mean by 'wiping', do you mean 'clearing' ?

Can you explain the reason this is needed ?

Christophe


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Question: a module for wiping userspace RAM before shutdown/reboot/halt
  2025-05-17 17:25 ` Christophe Leroy
@ 2025-05-19  7:26   ` Danill Klimuk
  2025-05-19  7:43     ` David Hildenbrand
  0 siblings, 1 reply; 6+ messages in thread
From: Danill Klimuk @ 2025-05-19  7:26 UTC (permalink / raw)
  To: Christophe Leroy, linux-modules, linux-mm@kvack.org

Hi Christophe, thank you for the answer.

 > What do you mean by 'wiping', do you mean 'clearing' ?

Yes, by 'wiping' I mean 'clearing'.

 > Can you explain the reason this is needed?

Some of our clients want to clear user space RAM during 
shutdown/reboot/halt sequences of Linux kernel, so the process data or 
any other leftovers do not leak outside current Linux kernel session 
(that is to firmware, or the next boot software, etc.). The reason for 
it to be a module that will execute in a specific moment of the 
sequences is to make it more predictable.

I thought that if the clients want to use it, maybe it will be useful 
for others too :).

On 5/17/25 7:25 PM, Christophe Leroy wrote:
>
>
> Le 15/05/2025 à 15:30, Danill Klimuk a écrit :
>
>> Hello everyone. I have received a request to write a Linux kernel module
>> that will wipe any processes leftovers from userspace RAM during/before
>> Linux kernel shutdown/reboot/halt sequences. The reason I am going to do
>> it inside a module is to do it in a more deterministic way that does not
>> depend on any processes. AFAIK Linux kernel does not have any other
>> functionalities to wipe leftovers from RAM apart from the command line
>> arguments "init_on_free" and "init_on_alloc" that results in memory
>> poisoning only during memory allocation and memory deallocation. These
>> arguments cause the kernel to clean processes memory several times
>> during runtime, that is not deterministic because of processes
>> non-deterministic behavior. Hence, I want to bring the memory wiping
>> mechanism in one place and make it more deterministic. The question is:
>>
>> Maybe the Linux kernel already have such functionalities implemented?
>
> Linux memory management topics should be sent to linux-mm@kvack.org
>
>>
>> Currently I am planning to implement the wiping process to be triggered
>> by "reboot_notifier_callback", so to wipe RAM after PID 1 process
>> finishes and no other processes are executing. I am looking forward to
>> merging the module into Linux kernel upstream too.
>
> What do you mean by 'wiping', do you mean 'clearing' ?
>
> Can you explain the reason this is needed ?
>
> Christophe
>
>
-- 
Best regards, Daniil.
3mdeb Zarhus team leader.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Question: a module for wiping userspace RAM before shutdown/reboot/halt
  2025-05-19  7:26   ` Danill Klimuk
@ 2025-05-19  7:43     ` David Hildenbrand
  0 siblings, 0 replies; 6+ messages in thread
From: David Hildenbrand @ 2025-05-19  7:43 UTC (permalink / raw)
  To: Danill Klimuk, Christophe Leroy, linux-modules,
	linux-mm@kvack.org

On 19.05.25 09:26, Danill Klimuk wrote:
> Hi Christophe, thank you for the answer.
> 
>   > What do you mean by 'wiping', do you mean 'clearing' ?
> 
> Yes, by 'wiping' I mean 'clearing'.
> 
>   > Can you explain the reason this is needed?
> 
> Some of our clients want to clear user space RAM during
> shutdown/reboot/halt sequences of Linux kernel, so the process data or
> any other leftovers do not leak outside current Linux kernel session
> (that is to firmware, or the next boot software, etc.). The reason for
> it to be a module that will execute in a specific moment of the
> sequences is to make it more predictable.
> 
> I thought that if the clients want to use it, maybe it will be useful
> for others too :).

We do have the init_on_free=1 boot option, whereby any pages freed back 
to the page allocator will get immediately zeroed.

This also makes sure that if you quit a process and then 
shutdown/reboot, that the page content was already cleared. (otherwise, 
it would simply be free memory in the allocator and no longer "userspace 
RAM")

-- 
Cheers,

David / dhildenb


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Question: a module for wiping userspace RAM before shutdown/reboot/halt
  2025-05-15 13:30 Question: a module for wiping userspace RAM before shutdown/reboot/halt Danill Klimuk
  2025-05-17 17:25 ` Christophe Leroy
@ 2025-08-21 12:13 ` Kamil Aronowski
  2025-09-04  7:14   ` Christophe Leroy
  1 sibling, 1 reply; 6+ messages in thread
From: Kamil Aronowski @ 2025-08-21 12:13 UTC (permalink / raw)
  To: Danill Klimuk, linux-modules


[-- Attachment #1.1.1: Type: text/plain, Size: 2373 bytes --]

Recently, we evaluated the effectiveness of the `init_on_free`
mechanism, particularly in the context of preserving privacy by
clearing RAM for individuals with high operational security
requirements.

As mentioned
(https://lore.kernel.org/all/e71bd62c-5ba7-4363-9af1-d9c9de394a54@3mdeb.com/),
we'd like to ensure that our clients do not have their confidential
data leaked after their session has ended with a shutdown/reboot/halt.

In short, `init_on_free` appears to wipe the LUKS secret key
successfully, but some non-kernel space snippets remain in memory.
Some tests have been performed by dumping memory after booting Debian
13 (with `init_on_free` enabled) and then rebooting to our custom EFI
memory dumping application.  For instance, the mentions of
`apparmor_parser`, XKB, udev, or systemd units have been found in the
memory dump:

```
audit: type=1400 audit(1755156467.556:2): apparmor="STATUS" 
operation="profile_load" profile="unconfined" name="Discord" pid=967 
comm="apparmor_parser"r"
[...]

partial alphanumeric_keys
xkb_symbols "tib_asciinum" {
     include "cn(tib)"
     name[Group1]= "Tibetan (with ASCII numerals)";
     key <AE01> { [ 1, 0x1000f21, 0x1000f04, 0x1000f76 ] }; # 1
[...]

I:10114000
E:ID_MM_CANDIDATE=1
S:disk/by-id/dm-uuid-CRYPT-LUKS2-00b4b79c209a4dcfadf37e310778f583-sda3_crypt
[...]

[Unit]
Description=Switch Root
AssertPathExists=/etc/initrd-release
DefaultDependencies=no
Wants=initrd-switch-root.service
Before=initrd-switch-root.service
AllowIsolate=yes
Wants=initrd-udevadm-cleanup-db.service initrd-root-fs.target 
initrd-fs.target systemd-journald.service initrd-cleanup.service
After=initrd-udevadm-cleanup-db.service initrd-root-fs.target 
initrd-fs.target emergency.service emergency.target initrd-cleanup.service
[...]
```

Is this the expected behavior, a bug, or a misconfiguration on our
end?

If it is indeed a bug, we'd be happy to cooperate on improving the
`init_on_free` mechanism. If it is expected behavior than we will
consider wiping userspace memory some other way, e.g. by implementing
a separate Linux Kernel module as described in the previous email
(https://lore.kernel.org/all/e71bd62c-5ba7-4363-9af1-d9c9de394a54@3mdeb.com/).

-- 
Kamil Aronowski
Junior Embedded Firmware Engineer
GPG: 3510148A5CD67908
https://3mdeb.com | @3mdeb_com

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 5529 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Question: a module for wiping userspace RAM before shutdown/reboot/halt
  2025-08-21 12:13 ` Kamil Aronowski
@ 2025-09-04  7:14   ` Christophe Leroy
  0 siblings, 0 replies; 6+ messages in thread
From: Christophe Leroy @ 2025-09-04  7:14 UTC (permalink / raw)
  To: Kamil Aronowski, Danill Klimuk, linux-modules, linux-mm@kvack.org

+mm list

Hi Kamil,

Le 21/08/2025 à 14:13, Kamil Aronowski a écrit :
> Recently, we evaluated the effectiveness of the `init_on_free`
> mechanism, particularly in the context of preserving privacy by
> clearing RAM for individuals with high operational security
> requirements.
> 
> As mentioned
> (https://lore.kernel.org/all/e71bd62c-5ba7-4363-9af1- 
> d9c9de394a54@3mdeb.com/),
> we'd like to ensure that our clients do not have their confidential
> data leaked after their session has ended with a shutdown/reboot/halt.
> 
> In short, `init_on_free` appears to wipe the LUKS secret key
> successfully, but some non-kernel space snippets remain in memory.
> Some tests have been performed by dumping memory after booting Debian
> 13 (with `init_on_free` enabled) and then rebooting to our custom EFI
> memory dumping application.  For instance, the mentions of
> `apparmor_parser`, XKB, udev, or systemd units have been found in the
> memory dump:
> 
> ```
> audit: type=1400 audit(1755156467.556:2): apparmor="STATUS" 
> operation="profile_load" profile="unconfined" name="Discord" pid=967 
> comm="apparmor_parser"r"
> [...]
> 
> partial alphanumeric_keys
> xkb_symbols "tib_asciinum" {
>      include "cn(tib)"
>      name[Group1]= "Tibetan (with ASCII numerals)";
>      key <AE01> { [ 1, 0x1000f21, 0x1000f04, 0x1000f76 ] }; # 1
> [...]
> 
> I:10114000
> E:ID_MM_CANDIDATE=1
> S:disk/by-id/dm-uuid-CRYPT-LUKS2-00b4b79c209a4dcfadf37e310778f583- 
> sda3_crypt
> [...]
> 
> [Unit]
> Description=Switch Root
> AssertPathExists=/etc/initrd-release
> DefaultDependencies=no
> Wants=initrd-switch-root.service
> Before=initrd-switch-root.service
> AllowIsolate=yes
> Wants=initrd-udevadm-cleanup-db.service initrd-root-fs.target initrd- 
> fs.target systemd-journald.service initrd-cleanup.service
> After=initrd-udevadm-cleanup-db.service initrd-root-fs.target initrd- 
> fs.target emergency.service emergency.target initrd-cleanup.service
> [...]
> ```
> 
> Is this the expected behavior, a bug, or a misconfiguration on our
> end?
> 
> If it is indeed a bug, we'd be happy to cooperate on improving the
> `init_on_free` mechanism. If it is expected behavior than we will
> consider wiping userspace memory some other way, e.g. by implementing
> a separate Linux Kernel module as described in the previous email
> (https://lore.kernel.org/all/e71bd62c-5ba7-4363-9af1- 
> d9c9de394a54@3mdeb.com/).
> 

This topic seems to be a memory management topic, not a modules topic.

As I mentionned already in this thread, Linux memory management topics 
should be addressed to linux-mm@kvack.org

Christophe

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-09-04  7:20 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-15 13:30 Question: a module for wiping userspace RAM before shutdown/reboot/halt Danill Klimuk
2025-05-17 17:25 ` Christophe Leroy
2025-05-19  7:26   ` Danill Klimuk
2025-05-19  7:43     ` David Hildenbrand
2025-08-21 12:13 ` Kamil Aronowski
2025-09-04  7:14   ` Christophe Leroy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).