Thread (1 message) 1 message, 1 author, 2016-08-18
DORMANTno replies

[PATCH perftest 11/23] raw_ethernet_resources: fix possible NULL math

From: Jarod Wilson <hidden>
Date: 2016-08-18 17:32:06
Subsystem: the rest · Maintainer: Linus Torvalds

While unlikely to happen in reality, there are code paths that could be
taken, where we have the case of X = NULL, then X = X + 1;. Fix 'em.

Error: FORWARD_NULL (CWE-476): [#def39]
perftest-3.0/src/raw_ethernet_resources.c:404: assign_zero: Assigning: "header_buff" = "NULL".
perftest-3.0/src/raw_ethernet_resources.c:419: alias_transfer: Assigning: "header_buff" = "header_buff + 20UL".
perftest-3.0/src/raw_ethernet_resources.c:421: var_deref_model: Passing null pointer "header_buff" to "gen_tcp_header", which dereferences it.
perftest-3.0/src/raw_ethernet_resources.c:173:2: deref_parm_in_call: Function "memcpy" dereferences "TCP_header_buffer". [Note: The source code implementation of the function has been overridden by a builtin model.]
 #  419|   		header_buff = header_buff + sizeof(struct IP_V4_header);
 #  420|   		if (user_param->tcp)
 #  421|-> 			gen_tcp_header(header_buff, my_dest_info->port + flows_offset,
 #  422|   				       rem_dest_info->port + flows_offset);
 #  423|   		else

Error: FORWARD_NULL (CWE-476): [#def40]
perftest-3.0/src/raw_ethernet_resources.c:404: assign_zero: Assigning: "header_buff" = "NULL".
perftest-3.0/src/raw_ethernet_resources.c:419: alias_transfer: Assigning: "header_buff" = "header_buff + 20UL".
perftest-3.0/src/raw_ethernet_resources.c:424: var_deref_model: Passing null pointer "header_buff" to "gen_udp_header", which dereferences it.
perftest-3.0/src/raw_ethernet_resources.c:156:2: deref_parm_in_call: Function "memcpy" dereferences "UDP_header_buffer". [Note: The source code implementation of the function has been overridden by a builtin model.]
 #  422|   				       rem_dest_info->port + flows_offset);
 #  423|   		else
 #  424|-> 			gen_udp_header(header_buff, my_dest_info->port + flows_offset,
 #  425|   				       rem_dest_info->port+ flows_offset, pkt_size);
 #  426|

CC: Gil Rockah <gilr-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Signed-off-by: Jarod Wilson <redacted>
---
 src/raw_ethernet_resources.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/raw_ethernet_resources.c b/src/raw_ethernet_resources.c
index 3b1516e..d087cab 100755
--- a/src/raw_ethernet_resources.c
+++ b/src/raw_ethernet_resources.c
@@ -406,11 +406,11 @@ void build_pkt_on_buffer(struct ETH_header* eth_header,
 	int is_udp_or_tcp = user_param->is_client_port && user_param->is_server_port;
 
 	gen_eth_header(eth_header, my_dest_info->mac, rem_dest_info->mac, eth_type);
+	header_buff = (void*)eth_header + sizeof(struct ETH_header);
 
 	if(have_ip_header) {
 		int offset = is_udp_or_tcp ? 0 : flows_offset;
 
-		header_buff = (void*)eth_header + sizeof(struct ETH_header);
 		gen_ip_header(header_buff, &my_dest_info->ip, &rem_dest_info->ip,
 			      ip_next_protocol, pkt_size, user_param->tos, offset);
 	}
-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help