aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0034-crypto-ccp-add-check-to-get-PSP-master-only-when-PSP.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0034-crypto-ccp-add-check-to-get-PSP-master-only-when-PSP.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0034-crypto-ccp-add-check-to-get-PSP-master-only-when-PSP.patch72
1 files changed, 72 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0034-crypto-ccp-add-check-to-get-PSP-master-only-when-PSP.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0034-crypto-ccp-add-check-to-get-PSP-master-only-when-PSP.patch
new file mode 100644
index 00000000..bdb37f1c
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0034-crypto-ccp-add-check-to-get-PSP-master-only-when-PSP.patch
@@ -0,0 +1,72 @@
+From 45bca3e63fe71fb04abfbf0d6a1416f79e0acf01 Mon Sep 17 00:00:00 2001
+From: Brijesh Singh <brijesh.singh@amd.com>
+Date: Wed, 21 Feb 2018 08:41:39 -0600
+Subject: [PATCH 34/95] crypto: ccp - add check to get PSP master only when PSP
+ is detected
+
+Paulian reported the below kernel crash on Ryzen 5 system:
+
+BUG: unable to handle kernel NULL pointer dereference at 0000000000000073
+RIP: 0010:.LC0+0x41f/0xa00
+RSP: 0018:ffffa9968003bdd0 EFLAGS: 00010002
+RAX: ffffffffb113b130 RBX: 0000000000000000 RCX: 00000000000005a7
+RDX: 00000000000000ff RSI: ffff8b46dee651a0 RDI: ffffffffb1bd617c
+RBP: 0000000000000246 R08: 00000000000251a0 R09: 0000000000000000
+R10: ffffd81f11a38200 R11: ffff8b52e8e0a161 R12: ffffffffb19db220
+R13: 0000000000000007 R14: ffffffffb17e4888 R15: 5dccd7affc30a31e
+FS: 0000000000000000(0000) GS:ffff8b46dee40000(0000) knlGS:0000000000000000
+CR2: 0000000000000073 CR3: 000080128120a000 CR4: 00000000003406e0
+Call Trace:
+ ? sp_get_psp_master_device+0x56/0x80
+ ? map_properties+0x540/0x540
+ ? psp_pci_init+0x20/0xe0
+ ? map_properties+0x540/0x540
+ ? sp_mod_init+0x16/0x1a
+ ? do_one_initcall+0x4b/0x190
+ ? kernel_init_freeable+0x19b/0x23c
+ ? rest_init+0xb0/0xb0
+ ? kernel_init+0xa/0x100
+ ? ret_from_fork+0x22/0x40
+
+Since Ryzen does not support PSP/SEV firmware hence i->psp_data will
+NULL in all sp instances. In those cases, 'i' will point to the
+list head after list_for_each_entry(). Dereferencing the head will
+cause kernel crash.
+
+Add check to call get master device only when PSP/SEV is detected.
+
+Reported-by: Paulian Bogdan Marinca <paulian@marinca.net>
+Cc: Borislav Petkov <bp@suse.de>
+Cc: Tom Lendacky <thomas.lendacky@amd.com>
+CC: Gary R Hook <gary.hook@amd.com>
+Cc: linux-kernel@vger.kernel.org
+Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
+Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com>
+---
+ drivers/crypto/ccp/sp-dev.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/crypto/ccp/sp-dev.c b/drivers/crypto/ccp/sp-dev.c
+index eb0da65..e045900 100644
+--- a/drivers/crypto/ccp/sp-dev.c
++++ b/drivers/crypto/ccp/sp-dev.c
+@@ -252,12 +252,12 @@ struct sp_device *sp_get_psp_master_device(void)
+ goto unlock;
+
+ list_for_each_entry(i, &sp_units, entry) {
+- if (i->psp_data)
++ if (i->psp_data && i->get_psp_master_device) {
++ ret = i->get_psp_master_device();
+ break;
++ }
+ }
+
+- if (i->get_psp_master_device)
+- ret = i->get_psp_master_device();
+ unlock:
+ write_unlock_irqrestore(&sp_unit_lock, flags);
+ return ret;
+--
+2.7.4
+