@@ -857,6 +857,7 @@ struct uprobe_cpu_buffer {
857857};
858858static  struct  uprobe_cpu_buffer  __percpu  * uprobe_cpu_buffer ;
859859static  int  uprobe_buffer_refcnt ;
860+ #define  MAX_UCB_BUFFER_SIZE  PAGE_SIZE
860861
861862static  int  uprobe_buffer_init (void )
862863{
@@ -957,9 +958,6 @@ static void __uprobe_trace_func(struct trace_uprobe *tu,
957958
958959	WARN_ON (call  !=  trace_file -> event_call );
959960
960- 	if  (WARN_ON_ONCE (tu -> tp .size  +  dsize  >  PAGE_SIZE ))
961- 		return ;
962- 
963961	if  (trace_trigger_soft_disabled (trace_file ))
964962		return ;
965963
@@ -1502,6 +1500,11 @@ static int uprobe_dispatcher(struct uprobe_consumer *con, struct pt_regs *regs)
15021500	esize  =  SIZEOF_TRACE_ENTRY (is_ret_probe (tu ));
15031501
15041502	ucb  =  uprobe_buffer_get ();
1503+ 
1504+ 	if  (WARN_ON_ONCE (tu -> tp .size  +  dsize  >  MAX_UCB_BUFFER_SIZE )) {
1505+ 		dsize  =  MAX_UCB_BUFFER_SIZE  -  tu -> tp .size ;
1506+ 	}
1507+ 
15051508	store_trace_args (ucb -> buf , & tu -> tp , regs , esize , dsize );
15061509
15071510	if  (trace_probe_test_flag (& tu -> tp , TP_FLAG_TRACE ))
@@ -1537,6 +1540,11 @@ static int uretprobe_dispatcher(struct uprobe_consumer *con,
15371540	esize  =  SIZEOF_TRACE_ENTRY (is_ret_probe (tu ));
15381541
15391542	ucb  =  uprobe_buffer_get ();
1543+ 
1544+ 	if  (WARN_ON_ONCE (tu -> tp .size  +  dsize  >  MAX_UCB_BUFFER_SIZE )) {
1545+ 		dsize  =  MAX_UCB_BUFFER_SIZE  -  tu -> tp .size ;
1546+ 	}
1547+ 
15401548	store_trace_args (ucb -> buf , & tu -> tp , regs , esize , dsize );
15411549
15421550	if  (trace_probe_test_flag (& tu -> tp , TP_FLAG_TRACE ))
0 commit comments