From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <kevin.laatz@intel.com> Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id B480A1B3A5 for <dev@dpdk.org>; Tue, 23 Oct 2018 10:43:03 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Oct 2018 01:43:02 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,415,1534834800"; d="scan'208";a="243582217" Received: from klaatz-mobl.ger.corp.intel.com (HELO [10.237.220.107]) ([10.237.220.107]) by orsmga004.jf.intel.com with ESMTP; 23 Oct 2018 01:43:00 -0700 To: =?UTF-8?Q?Mattias_R=c3=b6nnblom?= <mattias.ronnblom@ericsson.com>, dev@dpdk.org Cc: harry.van.haaren@intel.com, stephen@networkplumber.org, gaetan.rivet@6wind.com, shreyansh.jain@nxp.com, thomas@monjalon.net, bruce.richardson@intel.com, Ciara Power <ciara.power@intel.com>, Brian Archbold <brian.archbold@intel.com> References: <20181016155802.2067-1-kevin.laatz@intel.com> <20181022110014.82153-1-kevin.laatz@intel.com> <20181022110014.82153-6-kevin.laatz@intel.com> <b448b9fc-fdff-ccba-a0d6-608de070389f@ericsson.com> From: "Laatz, Kevin" <kevin.laatz@intel.com> Message-ID: <bdb0c989-70bc-a740-728d-ce57134400ca@intel.com> Date: Tue, 23 Oct 2018 09:42:58 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <b448b9fc-fdff-ccba-a0d6-608de070389f@ericsson.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Subject: Re: [dpdk-dev] [PATCH v6 05/13] telemetry: add client feature and sockets X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions <dev.dpdk.org> List-Unsubscribe: <https://mails.dpdk.org/options/dev>, <mailto:dev-request@dpdk.org?subject=unsubscribe> List-Archive: <http://mails.dpdk.org/archives/dev/> List-Post: <mailto:dev@dpdk.org> List-Help: <mailto:dev-request@dpdk.org?subject=help> List-Subscribe: <https://mails.dpdk.org/listinfo/dev>, <mailto:dev-request@dpdk.org?subject=subscribe> X-List-Received-Date: Tue, 23 Oct 2018 08:43:04 -0000 Thanks for the review Mattias. Will address the comments both here and in the 4/13 review. Best regards, Kevin On 22/10/2018 15:05, Mattias Rönnblom wrote: > On 2018-10-22 13:00, Kevin Laatz wrote: >> >> @@ -131,6 +217,38 @@ rte_telemetry_initial_accept(struct >> telemetry_impl *telemetry) >> } >> static int32_t >> +rte_telemetry_read_client(struct telemetry_impl *telemetry) >> +{ >> + char buf[BUF_SIZE]; >> + int ret, buffer_read = 0; > > No need to set it to zero. > >> + >> + buffer_read = read(telemetry->accept_fd, buf, BUF_SIZE-1); >> + >> + if (buffer_read == -1) { >> + TELEMETRY_LOG_ERR("Read error"); >> + return -1; >> + } else if (buffer_read == 0) { >> + goto close_socket; >> + } else { > > I would have moved the 'ret' variable to this scope. > >> >> +static int32_t >> +rte_telemetry_read_client_sockets(struct telemetry_impl *telemetry) >> +{ >> + telemetry_client *client; >> + char client_buf[BUF_SIZE]; >> + int bytes; >> + >> + TAILQ_FOREACH(client, &telemetry->client_list_head, client_list) { >> + bytes = read(client->fd, client_buf, BUF_SIZE-1); >> + client_buf[bytes] = '\0'; > > read() might return -1, and you'll be writing out-of-bounds. > >> >> +int32_t >> +rte_telemetry_parse_client_message(struct telemetry_impl *telemetry, >> char *buf) >> +{ >> + int ret, action_int; >> + json_error_t error; >> + json_t *root = json_loads(buf, 0, &error); >> + >> + if (root == NULL) { >> + TELEMETRY_LOG_WARN("Could not load JSON object from data >> passed in : %s", >> + error.text); >> + goto fail; >> + } else if (!json_is_object(root)) { >> + TELEMETRY_LOG_WARN("JSON Request is not a JSON object"); >> + json_decref(root); >> + goto fail; >> + } >> + >> + json_t *action = json_object_get(root, "action"); >> + if (action == NULL) { >> + TELEMETRY_LOG_WARN("Request does not have action field"); >> + goto fail; >> + } else if (!json_is_integer(action)) { >> + TELEMETRY_LOG_WARN("Action value is not an integer"); >> + goto fail; >> + } >> + >> + json_t *command = json_object_get(root, "command"); >> + if (command == NULL) { >> + TELEMETRY_LOG_WARN("Request does not have command field"); >> + goto fail; >> + } else if (!json_is_string(command)) { >> + TELEMETRY_LOG_WARN("Command value is not a string"); >> + goto fail; >> + } >> + >> + action_int = json_integer_value(action); >> + if (action_int != ACTION_POST) { >> + TELEMETRY_LOG_WARN("Invalid action code"); >> + goto fail; >> + } >> + >> + if (strcmp(json_string_value(command), "clients") != 0) { >> + TELEMETRY_LOG_WARN("Invalid command"); >> + goto fail; >> + } >> + >> + json_t *data = json_object_get(root, "data"); >> + if (data == NULL) { >> + TELEMETRY_LOG_WARN("Request does not have data field"); >> + goto fail; >> + } >> + >> + json_t *client_path = json_object_get(data, "client_path"); >> + if (client_path == NULL) { >> + TELEMETRY_LOG_WARN("Request does not have client_path field"); >> + goto fail; >> + } >> + >> + if (!json_is_string(client_path)) { >> + TELEMETRY_LOG_WARN("Client_path value is not a string"); >> + goto fail; >> + } >> + >> + ret = rte_telemetry_register_client(telemetry, >> + json_string_value(client_path)); >> + if (ret < 0) { >> + TELEMETRY_LOG_ERR("Could not register client"); >> + telemetry->register_fail_count++; >> + goto fail; >> + } >> + > > You're leaking the root object here, but maybe that's fixed in > subsequent patches. > >> + return 0; >> + >> +fail: >> + TELEMETRY_LOG_WARN("Client attempted to register with invalid >> message"); >> + return -1; >> +} >> +