On Thu, Aug 20, 2026 at 04:00:30PM +0100, Steven Price wrote:
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 6f5811aae59c..a055837832bc 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -213,16 +213,18 @@ static gfp_t gfp_flags_quirk; static struct page *its_alloc_pages_node(int node, gfp_t gfp, unsigned int order) {
- bool want_zero = gfp & __GFP_ZERO; struct page *page; int ret = 0;
- page = alloc_pages_node(node, gfp | gfp_flags_quirk, order);
- page = alloc_pages_node(node, (gfp & ~__GFP_ZERO) | gfp_flags_quirk,
order);
I don't think pKVM does any scrubbing on set_memory_decrypted(), so it potentially exposes confidential guest data before it reaches clear_pages() below.
if (!page) return NULL; ret = set_memory_decrypted((unsigned long)page_address(page),
1 << order);
/*BIT(order));
- If set_memory_decrypted() fails then we don't know what state the
- page is in, so we can't free it. Instead we leak it.
@@ -231,6 +233,9 @@ static struct page *its_alloc_pages_node(int node, gfp_t gfp, if (ret) return NULL;
- if (want_zero)
clear_pages(page_address(page), BIT(order));- return page;
} -- 2.43.0