mm: option to _always_ scrub freed domheap pages

Give the administrator further control on when to scrub domheap pages by adding
an option to always scrub. This is a safety feature that, when enabled,
prevents a (buggy) domain from leaking secrets if it accidentally frees a page
without proper scrubbing.

Signed-off-by: Eslam Elnikety <elnikety@amazon.com>
Acked-by: George Dunlap <george.dunlap@citrix.com>
This commit is contained in:
Eslam Elnikety authored and Jan Beulich committed 2019-05-13 09:58:08 +02:00
1 parent 0ca7624d06
commit 24f1a58d19
2 files changed
+15 -2

No files matched your search

+8
View File
@@ -1779,6 +1779,14 @@ sockets, &c. This will reduce performance somewhat, particularly on
systems with hyperthreading enabled, but should reduce power by
enabling more sockets and cores to go into deeper sleep states.
### scrub-domheap
> `= <boolean>`
> Default: `false`
Scrub domains' freed pages. This is a safety net against a (buggy) domain
accidentally leaking secrets by releasing pages without proper sanitization.
### serial_tx_buffer
> `= <size>`
+7 -2
View File
@@ -214,6 +214,10 @@ custom_param("bootscrub", parse_bootscrub_param);
static unsigned long __initdata opt_bootscrub_chunk = MB(128);
size_param("bootscrub_chunk", opt_bootscrub_chunk);
/* scrub-domheap -> Domheap pages are scrubbed when freed */
static bool __read_mostly opt_scrub_domheap;
boolean_param("scrub-domheap", opt_scrub_domheap);
#ifdef CONFIG_SCRUB_DEBUG
static bool __read_mostly scrub_debug;
#else
@@ -2378,9 +2382,10 @@ void free_domheap_pages(struct page_info *pg, unsigned int order)
/*
* Normally we expect a domain to clear pages before freeing them,
* if it cares about the secrecy of their contents. However, after
* a domain has died we assume responsibility for erasure.
* a domain has died we assume responsibility for erasure. We do
* scrub regardless if option scrub_domheap is set.
*/
scrub = d->is_dying || scrub_debug;
scrub = d->is_dying || scrub_debug || opt_scrub_domheap;
}
else
{
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.