summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Drozdov <denys.drozdov@toradex.com>2022-01-11 12:01:17 +0200
committerDenys Drozdov <denys.drozdov@toradex.com>2022-01-12 11:54:16 +0200
commit0156d956a951c70743d2338132662b29aeb8847d (patch)
treed092452bebc70059ffa9f913a1daea74d656300e
parentfdd91487f014d6f66a7db03f135056ada3552f27 (diff)
crypto: caam: fix pointer dereference
Downstream kernel should not use priv->ctrl as not initialized for the crypto module. It should be referenced as priv->jr[0] to avoid the following kernel panic during module initialization: [ 1.979082] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.4.161-07927-g8b26c73bbdaf #415 [ 1.987018] Hardware name: Toradex Colibri iMX8QXP on Colibri Evaluation Board V3 (DT) [ 1.994949] pstate: 60000005 (nZCv daif -PAN -UAO) [ 1.999757] pc : caam_pkc_init+0x10c/0x168 [ 2.003862] lr : caam_jr_probe+0x3d0/0x4e0 [ 2.007962] sp : ffff80001003bb20 [ 2.011283] x29: ffff80001003bb20 x28: 00000000ffffffff [ 2.016608] x27: ffff00005a9e64a8 x26: ffff8000118d9490 [ 2.021933] x25: ffff8000118d9000 x24: ffff8000118d9440 [ 2.027259] x23: ffff8000118d9000 x22: ffff8000118d94d8 [ 2.032584] x21: ffff00005a9e6480 x20: ffff00005a172c10 [ 2.037910] x19: ffff00005a172c10 x18: 0000000000000010 [ 2.043226] x17: 00000000e3469f18 x16: 00000000e0764a4d [ 2.048552] x15: ffff0000100b0470 x14: 0000000000000000 [ 2.053877] x13: 0132c5f77cb952ce x12: 0000000000000001 [ 2.059202] x11: 0000000000000000 x10: 00000000000009c0 [ 2.064528] x9 : ffff80001003b8e0 x8 : ffff0000100b0a20 [ 2.069853] x7 : ffff00007fb91540 x6 : 0000000000000002 [ 2.075179] x5 : 0000000000000001 x4 : ffff00007fb946c0 [ 2.080504] x3 : 0000000000000009 x2 : 0000000000000001 [ 2.085830] x1 : ffff800013100ff4 x0 : ffff00005a9e6a80 [ 2.091158] Call trace: [ 2.093606] caam_pkc_init+0x10c/0x168 [ 2.097360] caam_jr_probe+0x3d0/0x4e0 [ 2.101116] platform_drv_probe+0x50/0xa0 [ 2.105137] really_probe+0xd4/0x318 [ 2.108724] driver_probe_device+0x54/0xe8 [ 2.112832] device_driver_attach+0x6c/0x78 [ 2.117030] __driver_attach+0x54/0xd0 [ 2.120792] bus_for_each_dev+0x6c/0xc0 [ 2.124640] driver_attach+0x20/0x28 [ 2.128227] bus_add_driver+0x140/0x1e8 [ 2.132068] driver_register+0x60/0x110 [ 2.135917] __platform_driver_register+0x44/0x50 [ 2.140637] jr_driver_init+0x30/0x38 [ 2.144309] do_one_initcall+0x50/0x1a8 [ 2.148149] kernel_init_freeable+0x1a0/0x248 [ 2.152519] kernel_init+0x10/0x100 [ 2.156020] ret_from_fork+0x10/0x1c Fixes: d4cd7a167c87 ("crypto: caam - disable pkc for non-E SoCs") Signed-off-by: Denys Drozdov <denys.drozdov@toradex.com>
-rw-r--r--drivers/crypto/caam/caampkc.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/crypto/caam/caampkc.c b/drivers/crypto/caam/caampkc.c
index 3cecb3f4600c..067ce5970985 100644
--- a/drivers/crypto/caam/caampkc.c
+++ b/drivers/crypto/caam/caampkc.c
@@ -1158,10 +1158,10 @@ int caam_pkc_init(struct device *ctrldev)
/* Determine public key hardware accelerator presence. */
if (priv->era < 10) {
- pk_inst = (rd_reg32(&priv->ctrl->perfmon.cha_num_ls) &
+ pk_inst = (rd_reg32(&priv->jr[0]->perfmon.cha_num_ls) &
CHA_ID_LS_PK_MASK) >> CHA_ID_LS_PK_SHIFT;
} else {
- pkha = rd_reg32(&priv->ctrl->vreg.pkha);
+ pkha = rd_reg32(&priv->jr[0]->vreg.pkha);
pk_inst = pkha & CHA_VER_NUM_MASK;
/*