Merge branch 'android-msm-pixel-4.14-rvc-security' into android-msm-pixel-4.14-rvc-qpr3
Jul 2021.1
Bug: 186701861
Change-Id: I77b0e32ed4494a18e5e5cea2e27a13793994767d
diff --git a/drivers/crypto/msm/ice.c b/drivers/crypto/msm/ice.c
index 90238a5..eaab689 100644
--- a/drivers/crypto/msm/ice.c
+++ b/drivers/crypto/msm/ice.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2014-2020,2021 The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -67,6 +67,8 @@
#define ICE_CRYPTO_CXT_FDE 1
#define ICE_CRYPTO_CXT_FBE 2
+#define ICE_FDE_KEY_INDEX 31
+
static int ice_fde_flag;
struct ice_clk_info {
@@ -160,6 +162,11 @@
setting->encr_bypass = true;
setting->decr_bypass = true;
}
+ /* Qseecom now sets the FDE key to slot 31 by default, instead
+ * of slot 0, so use the same slot here during read/write
+ */
+ if (cxt == ICE_CRYPTO_CXT_FDE)
+ setting->crypto_data.key_index = ICE_FDE_KEY_INDEX;
}
return 0;
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 6bd8211..e1451fd 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2019, 2021 The Linux Foundation. All rights reserved.
* Copyright (C) 2013 Red Hat
* Author: Rob Clark <robdclark@gmail.com>
*
@@ -1542,24 +1542,27 @@
* calls add to client list and return.
*/
count = msm_event_client_count(dev, req_event, false);
- /* Add current client to list */
- spin_lock_irqsave(&dev->event_lock, flag);
- list_add_tail(&client->base.link, &priv->client_event_list);
- spin_unlock_irqrestore(&dev->event_lock, flag);
-
- if (count)
+ if (count) {
+ /* Add current client to list */
+ spin_lock_irqsave(&dev->event_lock, flag);
+ list_add_tail(&client->base.link, &priv->client_event_list);
+ spin_unlock_irqrestore(&dev->event_lock, flag);
return 0;
+ }
ret = msm_register_event(dev, req_event, file, true);
if (ret) {
DRM_ERROR("failed to enable event %x object %x object id %d\n",
req_event->event, req_event->object_type,
req_event->object_id);
- spin_lock_irqsave(&dev->event_lock, flag);
- list_del(&client->base.link);
- spin_unlock_irqrestore(&dev->event_lock, flag);
kfree(client);
+ } else {
+ /* Add current client to list */
+ spin_lock_irqsave(&dev->event_lock, flag);
+ list_add_tail(&client->base.link, &priv->client_event_list);
+ spin_unlock_irqrestore(&dev->event_lock, flag);
}
+
return ret;
}
diff --git a/drivers/media/platform/msm/npu/npu_mgr.c b/drivers/media/platform/msm/npu/npu_mgr.c
index 539cf84..74d0282 100644
--- a/drivers/media/platform/msm/npu/npu_mgr.c
+++ b/drivers/media/platform/msm/npu/npu_mgr.c
@@ -1642,7 +1642,7 @@
int32_t npu_host_unload_network(struct npu_client *client,
struct msm_npu_unload_network_ioctl *unload)
{
- int ret = 0;
+ int ret = 0, retry_cnt = 1;
struct npu_device *npu_dev = client->npu_dev;
struct ipc_cmd_unload_pkt unload_packet;
struct npu_network *network;
@@ -1678,6 +1678,7 @@
unload_packet.header.flags = 0;
unload_packet.network_hdl = (uint32_t)network->network_hdl;
+retry:
/* NPU_IPC_CMD_UNLOAD will go onto IPC_QUEUE_APPS_EXEC */
reinit_completion(&network->cmd_done);
ret = npu_send_network_cmd(npu_dev, network, &unload_packet, false);
@@ -1686,13 +1687,15 @@
pr_err("NPU_IPC_CMD_UNLOAD sent failed: %d\n", ret);
/*
* If another command is running on this network,
- * don't free_network now.
+ * retry after 500ms.
*/
- if (ret == -EBUSY) {
+ if ((ret == -EBUSY) && (retry_cnt > 0)) {
pr_err("Network is running, retry later\n");
- network_put(network);
mutex_unlock(&host_ctx->lock);
- return ret;
+ retry_cnt--;
+ msleep(500);
+ mutex_lock(&host_ctx->lock);
+ goto retry;
}
goto free_network;
}
diff --git a/drivers/misc/qseecom.c b/drivers/misc/qseecom.c
index ba3a465..e7cb3ad 100644
--- a/drivers/misc/qseecom.c
+++ b/drivers/misc/qseecom.c
@@ -1,7 +1,7 @@
/*
* QTI Secure Execution Environment Communicator (QSEECOM) driver
*
- * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -95,7 +95,7 @@
#define TWO 2
#define QSEECOM_UFS_ICE_CE_NUM 10
#define QSEECOM_SDCC_ICE_CE_NUM 20
-#define QSEECOM_ICE_FDE_KEY_INDEX 0
+#define QSEECOM_ICE_FDE_KEY_INDEX 31
#define PHY_ADDR_4G (1ULL<<32)