diff --git a/sys/net/link_layer/net_if/net_if.c b/sys/net/link_layer/net_if/net_if.c index 8314407c54..9eb26b60a7 100644 --- a/sys/net/link_layer/net_if/net_if.c +++ b/sys/net/link_layer/net_if/net_if.c @@ -142,7 +142,7 @@ int net_if_add_address(int if_id, net_if_addr_t *addr) return 0; } - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Address addition: No interface initialized with ID %d.\n", if_id); return 0; } @@ -166,7 +166,7 @@ int net_if_del_address(int if_id, net_if_addr_t *addr) return 0; } - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Address deletion: No interface initialized with ID %d.\n", if_id); return 0; } @@ -183,7 +183,7 @@ int net_if_del_address(int if_id, net_if_addr_t *addr) net_if_addr_t *net_if_iter_addresses(int if_id, net_if_addr_t **addr) { - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Address iteration: No interface initialized with ID %d.\n", if_id); return NULL; } @@ -206,7 +206,7 @@ net_if_l3p_t net_if_get_l3p_types(int if_id) { net_if_l3p_t protocols; - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Get L3 protocols: No interface initialized with ID %d.\n", if_id); return NET_IF_L3P_FAILURE; } @@ -222,7 +222,7 @@ net_if_l3p_t net_if_get_l3p_types(int if_id) int net_if_add_l3p_types(int if_id, net_if_l3p_t protocols) { - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Add L3 protocols: No interface initialized with ID %d.\n", if_id); return 0; } @@ -236,7 +236,7 @@ int net_if_del_l3p_types(int if_id, net_if_l3p_t protocols) { net_if_addr_t *addr_ptr = NULL; - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Remove L3 protocols: No interface initialized with ID %d.\n", if_id); return 0; } @@ -315,7 +315,7 @@ int net_if_send_packet(int if_id, uint16_t target, const void *payload, "payload_len = %d\n", if_id, target, payload, payload_len); uint32_t response; - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Send packet: No interface initialized with ID %d.\n", if_id); return -1; } @@ -360,7 +360,7 @@ int net_if_send_packet_long(int if_id, net_if_eui64_t *target, payload_len); uint32_t response; - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Send packet: No interface initialized with ID %d.\n", if_id); return -1; } @@ -398,7 +398,7 @@ int net_if_send_packet_long(int if_id, net_if_eui64_t *target, int net_if_register(int if_id, kernel_pid_t pid) { - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Register thread: No interface initialized with ID %d.\n", if_id); return 0; } @@ -410,7 +410,7 @@ int net_if_get_eui64(net_if_eui64_t *eui64, int if_id, int force_generation) { uint64_t tmp; - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Get EUI-64: No interface initialized with ID %d.\n", if_id); return 0; } @@ -461,7 +461,7 @@ int net_if_set_eui64(int if_id, net_if_eui64_t *eui64) uint64_t tmp = NTOHLL(eui64->uint64); - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Set EUI-64: No interface initialized with ID %d.\n", if_id); return 0; } @@ -475,7 +475,7 @@ uint16_t net_if_get_hardware_address(int if_id) { uint16_t addr; - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Get hardware address: No interface initialized with ID %d.\n", if_id); return 0; } @@ -486,7 +486,7 @@ uint16_t net_if_get_hardware_address(int if_id) uint16_t net_if_set_hardware_address(int if_id, uint16_t addr) { - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Set hardware address: No interface initialized with ID %d.\n", if_id); return 0; } @@ -499,7 +499,7 @@ int32_t net_if_get_channel(int if_id) { int32_t channel; - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Get channel: No interface initialized with ID %d.\n", if_id); return -1; } @@ -510,7 +510,7 @@ int32_t net_if_get_channel(int if_id) int32_t net_if_set_channel(int if_id, uint16_t channel) { - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Set channel: No interface initialized with ID %d.\n", if_id); return -1; } @@ -523,7 +523,7 @@ int32_t net_if_get_pan_id(int if_id) { int32_t pan_id; - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Get PAN ID: No interface initialized with ID %d.\n", if_id); return -1; } @@ -540,7 +540,7 @@ int32_t net_if_get_pan_id(int if_id) int32_t net_if_set_pan_id(int if_id, uint16_t pan_id) { - if (if_id < 0 || if_id > NET_IF_MAX || !interfaces[if_id].initialized) { + if (if_id < 0 || if_id >= NET_IF_MAX || !interfaces[if_id].initialized) { DEBUG("Set PAN ID: No interface initialized with ID %d.\n", if_id); return -1; } diff --git a/sys/net/network_layer/sixlowpan/ip.c b/sys/net/network_layer/sixlowpan/ip.c index 060b19462c..afb7920581 100644 --- a/sys/net/network_layer/sixlowpan/ip.c +++ b/sys/net/network_layer/sixlowpan/ip.c @@ -658,7 +658,9 @@ void ipv6_addr_init_prefix(ipv6_addr_t *out, const ipv6_addr_t *prefix, } memcpy(out, prefix, bytes); - out->uint8[bytes] = prefix->uint8[bytes] & mask; + if (bytes < 16) { + out->uint8[bytes] = prefix->uint8[bytes] & mask; + } memset(&(out[bytes + 1]), 0, 15 - bytes); } diff --git a/sys/net/network_layer/sixlowpan/lowpan.c b/sys/net/network_layer/sixlowpan/lowpan.c index 6e85a3514c..e79d5b1e25 100644 --- a/sys/net/network_layer/sixlowpan/lowpan.c +++ b/sys/net/network_layer/sixlowpan/lowpan.c @@ -486,6 +486,7 @@ lowpan_reas_buf_t *new_packet_buffer(uint16_t datagram_size, return new_buf; } else { + free(new_buf); return NULL; } } @@ -1352,7 +1353,7 @@ void lowpan_iphc_decoding(uint8_t *data, uint8_t length, net_if_eui64_t *s_addr, case (0x03): { /* 0-bits */ memcpy(&(ipv6_buf->srcaddr.uint8[0]), &ll_prefix[0], 2); - memset(&(ipv6_buf->srcaddr.uint8[2]), 0, 20); + memset(&(ipv6_buf->srcaddr.uint8[2]), 0, 6); memcpy(&(ipv6_buf->srcaddr.uint8[8]), &s_addr->uint8[0], 8); break; } @@ -1561,9 +1562,10 @@ void lowpan_context_remove(uint8_t num) abr_remove_context(num); - for (j = i; j < NDP_6LOWPAN_CONTEXT_MAX; j++) { + for (j = i; j < (NDP_6LOWPAN_CONTEXT_MAX - 1); j++) { contexts[j] = contexts[j + 1]; } + memset(&contexts[NDP_6LOWPAN_CONTEXT_MAX - 1], 0, sizeof(lowpan_context_t)); } lowpan_context_t *lowpan_context_update(uint8_t num, const ipv6_addr_t *prefix, diff --git a/sys/net/transport_layer/socket_base/socket.c b/sys/net/transport_layer/socket_base/socket.c index cd826d0340..6d3cf2ceee 100644 --- a/sys/net/transport_layer/socket_base/socket.c +++ b/sys/net/transport_layer/socket_base/socket.c @@ -245,25 +245,25 @@ uint16_t socket_base_get_free_source_port(uint8_t protocol) int socket_base_socket(int domain, int type, int protocol) { - int i = 1; + int i = 0; while (socket_base_get_socket(i) != NULL) { i++; } - if (i > MAX_SOCKETS + 1) { + if (i > MAX_SOCKETS) { return -1; } else { - socket_t *current_socket = &socket_base_sockets[i - 1].socket_values; - socket_base_sockets[i - 1].socket_id = i; + socket_t *current_socket = &socket_base_sockets[i].socket_values; + socket_base_sockets[i].socket_id = i + 1; current_socket->domain = domain; current_socket->type = type; current_socket->protocol = protocol; #ifdef MODULE_TCP current_socket->tcp_control.state = 0; #endif - return socket_base_sockets[i - 1].socket_id; + return socket_base_sockets[i].socket_id; } }