x86 fixes
Subsystems (2)
Linus,
Please pull the latest x86/urgent Git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-urgent-2025-03-08
# HEAD: 058a6bec37c6c3b826158f6d26b75de43816a880 x86/microcode/AMD: Add some forgotten models to the SHA check
( Merge note: these commits are a bit fresher than usual,
but I didn't want to delay the x86 microcode fixes to after -rc6. )
Misc x86 fixes:
- Add more model IDs to the AMD microcode version check, more people are hitting these checks
- Fix a Xen guest boot warning related to AMD northbridge setup
- Fix SEV guest bugs related to a recent changes in its locking logic
- Fix a missing definition of PTRS_PER_PMD that assembly builds can hit
Thanks,
Ingo
------------------>
Alexey Kardashevskiy (1):
virt: sev-guest: Move SNP Guest Request data pages handling under snp_cmd_mutex
Andrew Cooper (1):
x86/amd_nb: Use rdmsr_safe() in amd_get_mmconfig_range()
Borislav Petkov (AMD) (1):
x86/microcode/AMD: Add some forgotten models to the SHA check
Ingo Molnar (1):
x86/mm: Define PTRS_PER_PMD for assembly code too
Nikunj A Dadhania (1):
virt: sev-guest: Allocate request data dynamically
arch/x86/coco/sev/core.c | 23 ++++-------- arch/x86/include/asm/pgtable-2level_types.h | 8 ++-- arch/x86/include/asm/sev.h | 6 +-- arch/x86/kernel/amd_nb.c | 9 ++--- arch/x86/kernel/cpu/microcode/amd.c | 6 +++ drivers/virt/coco/sev-guest/sev-guest.c | 58 +++++++++++++++++++++-------- 6 files changed, 67 insertions(+), 43 deletions(-)
arch/x86/coco/sev/core.c +8 -15
@@ -2853,19 +2853,8 @@ struct snp_msg_desc *snp_msg_alloc(void)if (!mdesc->response) goto e_free_request; - mdesc->certs_data =alloc_shared_pages (SEV_FW_BLOB_MAX_SIZE ); -if (!mdesc->certs_data) - goto e_free_response; - -/* initial the input address for guest request */ - mdesc->input.req_gpa =__pa (mdesc->request); - mdesc->input.resp_gpa =__pa (mdesc->response); - mdesc->input.data_gpa =__pa (mdesc->certs_data); -return mdesc; -e_free_response: -free_shared_pages (mdesc->response,sizeof (struct snp_guest_msg )); e_free_request:free_shared_pages (mdesc->request,sizeof (struct snp_guest_msg )); e_unmap:
@@ -2885,7 +2874,6 @@ void snp_msg_free(struct snp_msg_desc *mdesc)kfree (mdesc->ctx);free_shared_pages (mdesc->response,sizeof (struct snp_guest_msg ));free_shared_pages (mdesc->request,sizeof (struct snp_guest_msg )); -free_shared_pages (mdesc->certs_data,SEV_FW_BLOB_MAX_SIZE );iounmap ((__force void __iomem *)mdesc->secrets);memset (mdesc,0 ,sizeof (*mdesc));
@@ -3054,7 +3042,7 @@ static int __handle_guest_request(struct snp_msg_desc *mdesc, struct snp_guest_r* sequence number must be incremented or the VMPCK must be deleted to * prevent reuse of the IV. */ - rc =snp_issue_guest_request (req, &mdesc->input, rio); + rc =snp_issue_guest_request (req, &req->input, rio);switch (rc) {case -ENOSPC :/*
@@ -3064,7 +3052,7 @@ static int __handle_guest_request(struct snp_msg_desc *mdesc, struct snp_guest_r* order to increment the sequence number and thus avoid * IV reuse. */ - override_npages = mdesc->input.data_npages; + override_npages = req->input.data_npages; req->exit_code =SVM_VMGEXIT_GUEST_REQUEST ;/*
@@ -3120,7 +3108,7 @@ static int __handle_guest_request(struct snp_msg_desc *mdesc, struct snp_guest_r }if (override_npages) - mdesc->input.data_npages = override_npages; + req->input.data_npages = override_npages;return rc; }
@@ -3158,6 +3146,11 @@ int snp_send_guest_request(struct snp_msg_desc *mdesc, struct snp_guest_req *req*/ memcpy (mdesc->request, &mdesc->secret_request,sizeof (mdesc->secret_request)); +/* Initialize the input address for guest request */ + req->input.req_gpa =__pa (mdesc->request); + req->input.resp_gpa =__pa (mdesc->response); + req->input.data_gpa = req->certs_data ?__pa (req->certs_data) :0 ; + rc =__handle_guest_request (mdesc, req, rio);if (rc) { if (rc == -EIO &&
arch/x86/include/asm/pgtable-2level_types.h +4 -4
@@ -23,17 +23,17 @@ typedef union {#define ARCH_PAGE_TABLE_SYNC_MASK PGTBL_PMD_MODIFIED/* -* traditional i386 two-level paging structure: +* Traditional i386 two-level paging structure: */ #define PGDIR_SHIFT 22#define PTRS_PER_PGD 1024 -/* -* the i386 is two-level, so we don't really have any -* PMD directory physically. +* The i386 is two-level, so we don't really have any +* PMD directory physically: */ +#define PTRS_PER_PMD 1#define PTRS_PER_PTE 1024
arch/x86/include/asm/sev.h +3 -3
@@ -203,6 +203,9 @@ struct snp_guest_req {unsigned int vmpck_id;u8 msg_version;u8 msg_type; + +struct snp_req_data input; +void *certs_data; };/*
@@ -263,9 +266,6 @@ struct snp_msg_desc {struct snp_guest_msg secret_request, secret_response;struct snp_secrets_page *secrets; -struct snp_req_data input; - -void *certs_data;struct aesgcm_ctx *ctx;
arch/x86/kernel/amd_nb.c +3 -6
@@ -143,7 +143,6 @@ bool __init early_is_amd_nb(u32 device)struct resource *amd_get_mmconfig_range (struct resource *res) { -u32 address;u64 base, msr;unsigned int segn_busn_bits;
@@ -151,13 +150,11 @@ struct resource *amd_get_mmconfig_range(struct resource *res) boot_cpu_data.x86_vendor != X86_VENDOR_HYGON)return NULL ; -/* assume all cpus from fam10h have mmconfig */ -if (boot_cpu_data.x86 <0x10 ) +/* Assume CPUs from Fam10h have mmconfig, although not all VMs do */ +if (boot_cpu_data.x86 <0x10 || +rdmsrl_safe (MSR_FAM10H_MMIO_CONF_BASE , &msr))return NULL ; - address =MSR_FAM10H_MMIO_CONF_BASE ; -rdmsrl (address, msr); -/* mmconfig is not enabled */ if (!(msr &FAM10H_MMIO_CONF_ENABLE ))return NULL ;
arch/x86/kernel/cpu/microcode/amd.c +6 -0
@@ -175,23 +175,29 @@ static bool need_sha_check(u32 cur_rev) {switch (cur_rev >>8 ) {case 0x80012 :return cur_rev <=0x800126f ;break ; +case 0x80082 :return cur_rev <=0x800820f ;break ;case 0x83010 :return cur_rev <=0x830107c ;break ;case 0x86001 :return cur_rev <=0x860010e ;break ;case 0x86081 :return cur_rev <=0x8608108 ;break ;case 0x87010 :return cur_rev <=0x8701034 ;break ;case 0x8a000 :return cur_rev <=0x8a0000a ;break ; +case 0xa0010 :return cur_rev <=0xa00107a ;break ;case 0xa0011 :return cur_rev <=0xa0011da ;break ;case 0xa0012 :return cur_rev <=0xa001243 ;break ; +case 0xa0082 :return cur_rev <=0xa00820e ;break ;case 0xa1011 :return cur_rev <=0xa101153 ;break ;case 0xa1012 :return cur_rev <=0xa10124e ;break ;case 0xa1081 :return cur_rev <=0xa108109 ;break ;case 0xa2010 :return cur_rev <=0xa20102f ;break ;case 0xa2012 :return cur_rev <=0xa201212 ;break ; +case 0xa4041 :return cur_rev <=0xa404109 ;break ; +case 0xa5000 :return cur_rev <=0xa500013 ;break ;case 0xa6012 :return cur_rev <=0xa60120a ;break ;case 0xa7041 :return cur_rev <=0xa704109 ;break ;case 0xa7052 :return cur_rev <=0xa705208 ;break ;case 0xa7080 :return cur_rev <=0xa708009 ;break ;case 0xa70c0 :return cur_rev <=0xa70C009 ;break ; +case 0xaa001 :return cur_rev <=0xaa00116 ;break ;case 0xaa002 :return cur_rev <=0xaa00218 ;break ;default :break ; }
drivers/virt/coco/sev-guest/sev-guest.c +43 -15
135 lines not on this page · raw message
The pull request you sent on Sat, 8 Mar 2025 20:21:04 +0100:
The pull request you sent on Sat, 8 Mar 2025 20:21:04 +0100:
Quoted 1 line
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.gitx86-urgent-2025-03-08
has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/b7c90e3e717abff6fe06445b98be306b732bbd2b
Thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/prtracker.html