Skip to content

Commit e8daf7c

Browse files
committed
more fix of memory access
1 parent 5f907e3 commit e8daf7c

File tree

6 files changed

+22
-6
lines changed

6 files changed

+22
-6
lines changed

Diff for: client.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,11 @@ int client_on_raw_recv(conn_info_t &conn_info) //called when raw fd received a p
485485
{
486486
return -1;
487487
}
488+
if(data_len>=max_data_len+1)
489+
{
490+
mylog(log_debug,"data_len=%d >= max_data_len+1,ignored",data_len);
491+
return -1;
492+
}
488493
if(!recv_info.new_src_ip.equal(send_info.new_dst_ip)||recv_info.src_port!=send_info.dst_port)
489494
{
490495
mylog(log_debug,"unexpected adress %s %s %d %d\n",recv_info.new_src_ip.get_str1(),send_info.new_dst_ip.get_str2(),recv_info.src_port,send_info.dst_port);

Diff for: connection.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,13 @@ int recv_bare(raw_info_t &raw_info,char* & data,int & len)//recv function with e
416416
//printf("recv_raw_fail in recv bare\n");
417417
return -1;
418418
}
419+
420+
if(len>=max_data_len+1)
421+
{
422+
mylog(log_debug,"data_len=%d >= max_data_len+1,ignored",len);
423+
return -1;
424+
}
425+
419426
mylog(log_trace,"data len=%d\n",len);
420427
if ((raw_mode == mode_faketcp && (recv_info.syn == 1 || recv_info.ack != 1)))
421428
{
@@ -615,7 +622,7 @@ int reserved_parse_safer(conn_info_t &conn_info,const char * input,int input_len
615622
}
616623

617624

618-
if(after_recv_raw0(conn_info.raw_info)!=0) return -1;
625+
if(after_recv_raw0(conn_info.raw_info)!=0) return -1; //TODO might need to move this function to somewhere else after --fix-gro is introduced
619626

620627
return 0;
621628
}

Diff for: makefile

+1-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ PCAP="-lpcap"
1919
MP="-DUDP2RAW_MP"
2020

2121

22-
2322
NAME=udp2raw
2423

2524
TARGETS=amd64 arm amd64_hw_aes arm_asm_aes mips24kc_be mips24kc_be_asm_aes x86 x86_asm_aes mips24kc_le mips24kc_le_asm_aes
@@ -59,7 +58,7 @@ debug: git_version
5958
${cc_local} -o ${NAME} -I. ${SOURCES} ${FLAGS} -lrt -Wformat-nonliteral -D MY_DEBUG
6059
debug2: git_version
6160
rm -f ${NAME}
62-
${cc_local} -o ${NAME} -I. ${SOURCES} ${FLAGS} -lrt -Wformat-nonliteral -ggdb
61+
${cc_local} -o ${NAME} -I. ${SOURCES} ${FLAGS} -lrt -Wformat-nonliteral -ggdb -fsanitize=address
6362

6463
#targets only for 'make release'
6564

Diff for: network.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1441,7 +1441,7 @@ int pre_recv_raw_packet()
14411441
}
14421442
}
14431443

1444-
if(g_packet_buf_len> max_data_len+1)
1444+
if(g_packet_buf_len>= max_data_len+1)
14451445
{
14461446
if(g_fix_gro==0)
14471447
{

Diff for: pcap_wrapper.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99

1010
struct bpf_program
1111
{
12-
char a[2000];
12+
char a[4096];
1313
};
1414

1515
struct pcap_t
1616
{
17-
char a[2000];
17+
char a[4096];
1818
};
1919

2020
typedef unsigned int bpf_u_int32;

Diff for: server.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,11 @@ int server_on_raw_recv_multi() //called when server received an raw packet
460460
{
461461
return 0;
462462
}
463+
if(data_len>=max_data_len+1)
464+
{
465+
mylog(log_debug,"data_len=%d >= max_data_len+1,ignored",data_len);
466+
return -1;
467+
}
463468
if(use_tcp_dummy_socket!=0)
464469
return 0;
465470
raw_info_t &raw_info=tmp_raw_info;

0 commit comments

Comments
 (0)