summaryrefslogtreecommitdiff
path: root/src/daemon/dlt_daemon_connection_types.h
diff options
context:
space:
mode:
authorFrederic Berat <fberat@de.adit-jv.com>2017-01-17 11:37:27 +0100
committerChristoph Lipka <clipka@jp.adit-jv.com>2017-02-01 12:14:55 +0900
commit0ce6e68d8835b13aa6be52ffdf2d81e1170a3834 (patch)
treea61dd79be59d2346be0c3614ed1f062f1ca147e2 /src/daemon/dlt_daemon_connection_types.h
parent03dce720baf91ff67eb82431f8d6ad24b4f4d657 (diff)
downloadDLT-daemon-0ce6e68d8835b13aa6be52ffdf2d81e1170a3834.tar.gz
dlt-daemon: Fix use after free potential issue
In dlt_daemon_send_all_multiple, if the connection was broken, we closed it before getting the next available connection. This must be avoided by having a temporary next pointer. The same kind of problem is valid for pointers coming from the epoll interface. The kernel can provide back connection pointer that are not valid any longer. Therefore, we need to use an ID instead of the pointer value to retrieve the connections. Signed-off-by: Frederic Berat <fberat@de.adit-jv.com> Signed-off-by: Christoph Lipka <clipka@jp.adit-jv.com>
Diffstat (limited to 'src/daemon/dlt_daemon_connection_types.h')
-rw-r--r--src/daemon/dlt_daemon_connection_types.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/daemon/dlt_daemon_connection_types.h b/src/daemon/dlt_daemon_connection_types.h
index 1e1186b..8774378 100644
--- a/src/daemon/dlt_daemon_connection_types.h
+++ b/src/daemon/dlt_daemon_connection_types.h
@@ -67,10 +67,13 @@ typedef enum {
#define DLT_CON_MASK_GATEWAY_TIMER (1 << DLT_CONNECTION_GATEWAY_TIMER)
#define DLT_CON_MASK_ALL (0xffff)
+typedef unsigned int DltConnectionId;
+
/* TODO: squash the DltReceiver structure in there
* and remove any other duplicates of FDs
*/
typedef struct DltConnection {
+ DltConnectionId id;
DltReceiver *receiver; /**< Receiver structure for this connection */
DltConnectionType type; /**< Represents what type of handle is this (like FIFO, serial, client, server) */
DltConnectionStatus status; /**< Status of connection */