@@ -844,6 +844,7 @@ struct uprobe_cpu_buffer {
844844};
845845static  struct  uprobe_cpu_buffer  __percpu  * uprobe_cpu_buffer ;
846846static  int  uprobe_buffer_refcnt ;
847+ #define  MAX_UCB_BUFFER_SIZE  PAGE_SIZE
847848
848849static  int  uprobe_buffer_init (void )
849850{
@@ -944,9 +945,6 @@ static void __uprobe_trace_func(struct trace_uprobe *tu,
944945
945946	WARN_ON (call  !=  trace_file -> event_call );
946947
947- 	if  (WARN_ON_ONCE (tu -> tp .size  +  dsize  >  PAGE_SIZE ))
948- 		return ;
949- 
950948	if  (trace_trigger_soft_disabled (trace_file ))
951949		return ;
952950
@@ -1483,6 +1481,11 @@ static int uprobe_dispatcher(struct uprobe_consumer *con, struct pt_regs *regs)
14831481	esize  =  SIZEOF_TRACE_ENTRY (is_ret_probe (tu ));
14841482
14851483	ucb  =  uprobe_buffer_get ();
1484+ 
1485+ 	if  (WARN_ON_ONCE (tu -> tp .size  +  dsize  >  MAX_UCB_BUFFER_SIZE )) {
1486+ 		dsize  =  MAX_UCB_BUFFER_SIZE  -  tu -> tp .size ;
1487+ 	}
1488+ 
14861489	store_trace_args (ucb -> buf , & tu -> tp , regs , esize , dsize );
14871490
14881491	if  (trace_probe_test_flag (& tu -> tp , TP_FLAG_TRACE ))
@@ -1518,6 +1521,11 @@ static int uretprobe_dispatcher(struct uprobe_consumer *con,
15181521	esize  =  SIZEOF_TRACE_ENTRY (is_ret_probe (tu ));
15191522
15201523	ucb  =  uprobe_buffer_get ();
1524+ 
1525+ 	if  (WARN_ON_ONCE (tu -> tp .size  +  dsize  >  MAX_UCB_BUFFER_SIZE )) {
1526+ 		dsize  =  MAX_UCB_BUFFER_SIZE  -  tu -> tp .size ;
1527+ 	}
1528+ 
15211529	store_trace_args (ucb -> buf , & tu -> tp , regs , esize , dsize );
15221530
15231531	if  (trace_probe_test_flag (& tu -> tp , TP_FLAG_TRACE ))
0 commit comments