summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2022-09-21 07:11:34 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2022-09-21 07:11:34 -0700
commit67887f6ac3f11fd5ee1639e18d854e6071e58c51 (patch)
treed58bd6b881ad3582f2d31b38158a75c98cde7032
parente41c0da23b38b2458c3b3f3e7d22b13e440d4719 (diff)
parente1085d1ef39b48a2bbef4e19ee7182a5c15421b0 (diff)
Merge "diag: Ensure dci entry is valid before sending the packet"
-rw-r--r--drivers/char/diag/diag_dci.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/char/diag/diag_dci.c b/drivers/char/diag/diag_dci.c
index 20c9a0ecb68f..836b622fb017 100644
--- a/drivers/char/diag/diag_dci.c
+++ b/drivers/char/diag/diag_dci.c
@@ -1,4 +1,5 @@
-/* Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. 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
@@ -1615,7 +1616,6 @@ static int diag_send_dci_pkt(struct diag_cmd_reg_t *entry,
return -EIO;
}
- mutex_lock(&driver->dci_mutex);
/* prepare DCI packet */
header.start = CONTROL_CHAR;
header.version = 1;
@@ -1634,7 +1634,6 @@ static int diag_send_dci_pkt(struct diag_cmd_reg_t *entry,
diag_update_pkt_buffer(driver->apps_dci_buf, write_len,
DCI_PKT_TYPE);
diag_update_sleeping_process(entry->pid, DCI_PKT_TYPE);
- mutex_unlock(&driver->dci_mutex);
return DIAG_DCI_NO_ERROR;
}
@@ -1654,7 +1653,6 @@ static int diag_send_dci_pkt(struct diag_cmd_reg_t *entry,
entry->proc);
status = DIAG_DCI_SEND_DATA_FAIL;
}
- mutex_unlock(&driver->dci_mutex);
return status;
}
@@ -2124,8 +2122,11 @@ static int diag_process_dci_pkt_rsp(unsigned char *buf, int len)
if (temp_entry) {
reg_item = container_of(temp_entry, struct diag_cmd_reg_t,
entry);
- ret = diag_send_dci_pkt(reg_item, req_buf, req_len,
+ mutex_lock(&driver->dci_mutex);
+ if (req_entry)
+ ret = diag_send_dci_pkt(reg_item, req_buf, req_len,
req_entry->tag);
+ mutex_unlock(&driver->dci_mutex);
} else {
DIAG_LOG(DIAG_DEBUG_DCI, "Command not found: %02x %02x %02x\n",
reg_entry.cmd_code, reg_entry.subsys_id,