From 00afa6a41460388b96c9626d2764dfd19b544739 Mon Sep 17 00:00:00 2001 From: Jaeyun Date: Mon, 4 Jul 2022 17:02:08 +0900 Subject: [PATCH] [Edge] validate command Prevent receive failure, update source to validate edge command. Signed-off-by: Jaeyun --- .../nnstreamer-edge-internal.c | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/libnnstreamer-edge/nnstreamer-edge-internal.c b/src/libnnstreamer-edge/nnstreamer-edge-internal.c index 119e4d7..bba4f6d 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-internal.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-internal.c @@ -34,6 +34,7 @@ typedef enum */ typedef struct { + unsigned int magic; nns_edge_cmd_e cmd; int64_t client_id; @@ -209,6 +210,7 @@ _nns_edge_cmd_init (nns_edge_cmd_s * cmd, nns_edge_cmd_e c, int64_t cid) return; memset (cmd, 0, sizeof (nns_edge_cmd_s)); + cmd->info.magic = NNS_EDGE_MAGIC; cmd->info.cmd = c; cmd->info.client_id = cid; } @@ -224,6 +226,8 @@ _nns_edge_cmd_clear (nns_edge_cmd_s * cmd) if (!cmd) return; + cmd->info.magic = NNS_EDGE_MAGIC_DEAD; + for (i = 0; i < cmd->info.num; i++) { if (cmd->mem[i]) free (cmd->mem[i]); @@ -231,6 +235,27 @@ _nns_edge_cmd_clear (nns_edge_cmd_s * cmd) } } +/** + * @brief Validate edge command. + */ +static bool +_nns_edge_cmd_is_valid (nns_edge_cmd_s * cmd) +{ + int command; + + if (!cmd) + return false; + + command = (int) cmd->info.cmd; + + if (!NNS_EDGE_MAGIC_IS_VALID (&cmd->info) || + (command < 0 || command >= _NNS_EDGE_CMD_END)) { + return false; + } + + return true; +} + /** * @brief Send edge command to connected device. */ @@ -242,6 +267,11 @@ _nns_edge_cmd_send (nns_edge_conn_s * conn, nns_edge_cmd_s * cmd) if (!conn || !cmd) return NNS_EDGE_ERROR_INVALID_PARAMETER; + if (!_nns_edge_cmd_is_valid (cmd)) { + nns_edge_loge ("Failed to send command, invalid command."); + return NNS_EDGE_ERROR_INVALID_PARAMETER; + } + if (!_send_raw_data (conn->socket, &cmd->info, sizeof (nns_edge_cmd_info_s), conn->cancellable)) { nns_edge_loge ("Failed to send command to socket."); @@ -277,6 +307,11 @@ _nns_edge_cmd_receive (nns_edge_conn_s * conn, nns_edge_cmd_s * cmd) return NNS_EDGE_ERROR_IO; } + if (!_nns_edge_cmd_is_valid (cmd)) { + nns_edge_loge ("Failed to receive command, invalid command."); + return NNS_EDGE_ERROR_IO; + } + nns_edge_logd ("Received command:%d (num:%u)", cmd->info.cmd, cmd->info.num); for (n = 0; n < cmd->info.num; n++) { -- 2.34.1