]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - kernel/kexec_core.c
vhost: Fix Spectre V1 vulnerability
[mirror_ubuntu-bionic-kernel.git] / kernel / kexec_core.c
index 1ae7c41c33c19c54e4b08d33c0c59da78244efba..20fef1a38602d9d0ed6fdb5d359d5604fbafc3dd 100644 (file)
@@ -301,7 +301,7 @@ static struct page *kimage_alloc_pages(gfp_t gfp_mask, unsigned int order)
 {
        struct page *pages;
 
-       pages = alloc_pages(gfp_mask, order);
+       pages = alloc_pages(gfp_mask & ~__GFP_ZERO, order);
        if (pages) {
                unsigned int count, i;
 
@@ -310,6 +310,13 @@ static struct page *kimage_alloc_pages(gfp_t gfp_mask, unsigned int order)
                count = 1 << order;
                for (i = 0; i < count; i++)
                        SetPageReserved(pages + i);
+
+               arch_kexec_post_alloc_pages(page_address(pages), count,
+                                           gfp_mask);
+
+               if (gfp_mask & __GFP_ZERO)
+                       for (i = 0; i < count; i++)
+                               clear_highpage(pages + i);
        }
 
        return pages;
@@ -321,6 +328,9 @@ static void kimage_free_pages(struct page *page)
 
        order = page_private(page);
        count = 1 << order;
+
+       arch_kexec_pre_free_pages(page_address(page), count);
+
        for (i = 0; i < count; i++)
                ClearPageReserved(page + i);
        __free_pages(page, order);