diff options
-rw-r--r-- | include/ouroboros/sockets.h | 5 | ||||
-rw-r--r-- | src/irmd/main.c | 10 | ||||
-rw-r--r-- | src/lib/irm.c | 4 | ||||
-rw-r--r-- | src/lib/sockets.c | 70 |
4 files changed, 64 insertions, 25 deletions
diff --git a/include/ouroboros/sockets.h b/include/ouroboros/sockets.h index ad9bd408..fe7ddb28 100644 --- a/include/ouroboros/sockets.h +++ b/include/ouroboros/sockets.h @@ -20,6 +20,9 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#ifndef OUROBOROS_SOCKETS_H +#define OUROBOROS_SOCKETS_H + #define IRM_SOCK_PATH "/tmp/irm_sock" enum irm_msg_code { @@ -47,3 +50,5 @@ int server_socket_open(char * file_name); buffer_t * serialize_irm_msg(struct irm_msg * msg); struct irm_msg * deserialize_irm_msg(buffer_t * data); + +#endif diff --git a/src/irmd/main.c b/src/irmd/main.c index d2aa6cd9..137b2b61 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -29,6 +29,7 @@ #include <sys/socket.h> #include <sys/un.h> #include <stdlib.h> +#include <errno.h> #define BUF_SIZE 256 @@ -55,10 +56,10 @@ int main() if (sockfd < 0) return -1; - buf = malloc(sizeof(buf) * BUF_SIZE); - if (!buf) { + buf = malloc(sizeof(*buf) * BUF_SIZE); + if (buf == NULL) { LOG_ERR("Cannot allocate memory"); - return -1; + return -ENOMEM; } while (true) { @@ -70,6 +71,7 @@ int main() cli_sockfd = accept(sockfd, 0, 0); if (cli_sockfd < 0) { LOG_ERR("Cannot accept new connection"); + continue; } count = read(cli_sockfd, buf, BUF_SIZE); @@ -77,7 +79,7 @@ int main() buffer.size = count; buffer.data = buf; msg = deserialize_irm_msg(&buffer); - if (!msg) + if (msg == NULL) continue; LOG_DBG("Got message code %d", msg->code); diff --git a/src/lib/irm.c b/src/lib/irm.c index 1af8ed2c..2c9b530c 100644 --- a/src/lib/irm.c +++ b/src/lib/irm.c @@ -34,7 +34,7 @@ int irm_create_ipcp(rina_name_t name, struct irm_msg msg; buffer_t * buf; - if (!ipcp_type) + if (ipcp_type == NULL) return -1; sockfd = client_socket_open(IRM_SOCK_PATH); @@ -46,7 +46,7 @@ int irm_create_ipcp(rina_name_t name, msg.msgs.create_ipcp.ipcp_type = ipcp_type; buf = serialize_irm_msg(&msg); - if (!buf) + if (buf == NULL) return -1; write(sockfd, buf->data, buf->size); diff --git a/src/lib/sockets.c b/src/lib/sockets.c index 9985cd56..095c9e5c 100644 --- a/src/lib/sockets.c +++ b/src/lib/sockets.c @@ -103,7 +103,7 @@ static int serialized_string_len(uint8_t * data) while (*seek != '\0') seek++; - return seek - data + 1; + return (seek - data) + 1; } static void ser_copy_value(size_t flen, @@ -124,15 +124,18 @@ static void deser_copy_value(size_t flen, *offset += flen; } -static void deser_copy_string(uint8_t * data, - char ** dst, - int * offset) +static int deser_copy_string(uint8_t * data, + char ** dst, + int * offset) { size_t flen; flen = serialized_string_len(data + *offset); - *dst = malloc(flen + 1); + *dst = malloc(sizeof(**dst) * (flen + 1)); + if (*dst == NULL) + return -1; deser_copy_value(flen, *dst, data, offset); + return 0; } static void deser_copy_int(uint8_t * data, @@ -159,8 +162,16 @@ buffer_t * serialize_irm_msg(struct irm_msg * msg) int i; char buffer[BUFFER_SIZE]; - buf = malloc(sizeof(buf)); + buf = malloc(sizeof(*buf)); + if (buf == NULL) + return NULL; + buf->data = malloc(BUFFER_SIZE); + if (buf->data == NULL) { + free(buf); + return NULL; + } + data = buf->data; ser_copy_value(sizeof(enum irm_msg_code), @@ -230,7 +241,8 @@ struct irm_msg * deserialize_irm_msg(buffer_t * data) int i; int offset = 0; - if (!data || !data->data) { + if (data == NULL || + data->data == NULL) { LOG_ERR("Got a null pointer"); return NULL; } @@ -242,8 +254,8 @@ struct irm_msg * deserialize_irm_msg(buffer_t * data) } LOG_DBGF("Got buffer %s", buffer); - msg = malloc(sizeof(msg)); - if (!msg) { + msg = malloc(sizeof(*msg)); + if (msg == NULL) { LOG_ERR("Failed to allocate memory"); return NULL; } @@ -255,27 +267,47 @@ struct irm_msg * deserialize_irm_msg(buffer_t * data) switch (msg->code) { case IRM_CREATE_IPCP: msg->msgs.create_ipcp.name = - malloc(sizeof(msg->msgs.create_ipcp.name)); + malloc(sizeof(*(msg->msgs.create_ipcp.name))); + if (!msg->msgs.create_ipcp.name) { + LOG_ERR("Failed to alloc memory"); + free(msg); + return NULL; + } - deser_copy_string(data->data, - &msg->msgs.create_ipcp.name->ap_name, - &offset); + if (deser_copy_string(data->data, + &msg->msgs.create_ipcp.name->ap_name, + &offset)) { + free(msg->msgs.create_ipcp.name); + free(msg); + return NULL; + } deser_copy_int(data->data, &msg->msgs.create_ipcp.name->api_id, &offset); - deser_copy_string(data->data, - &msg->msgs.create_ipcp.name->ae_name, - &offset); + if (deser_copy_string(data->data, + &msg->msgs.create_ipcp.name->ae_name, + &offset)) { + free(msg->msgs.create_ipcp.name->ap_name); + free(msg->msgs.create_ipcp.name); + free(msg); + return NULL; + } deser_copy_int(data->data, &msg->msgs.create_ipcp.name->aei_id, &offset); - deser_copy_string(data->data, - &msg->msgs.create_ipcp.ipcp_type, - &offset); + if (deser_copy_string(data->data, + &msg->msgs.create_ipcp.ipcp_type, + &offset)) { + free(msg->msgs.create_ipcp.name->ae_name); + free(msg->msgs.create_ipcp.name->ap_name); + free(msg->msgs.create_ipcp.name); + free(msg); + return NULL; + } break; default: LOG_ERR("Don't know that code"); |