@@ -702,6 +702,7 @@ struct uprobe_cpu_buffer {
702702};
703703static struct uprobe_cpu_buffer __percpu * uprobe_cpu_buffer ;
704704static int uprobe_buffer_refcnt ;
705+ #define MAX_UCB_BUFFER_SIZE PAGE_SIZE
705706
706707static int uprobe_buffer_init (void )
707708{
@@ -802,9 +803,6 @@ static void __uprobe_trace_func(struct trace_uprobe *tu,
802803
803804 WARN_ON (call != trace_file -> event_call );
804805
805- if (WARN_ON_ONCE (tu -> tp .size + dsize > PAGE_SIZE ))
806- return ;
807-
808806 if (trace_trigger_soft_disabled (trace_file ))
809807 return ;
810808
@@ -1246,6 +1244,11 @@ static int uprobe_dispatcher(struct uprobe_consumer *con, struct pt_regs *regs)
12461244 esize = SIZEOF_TRACE_ENTRY (is_ret_probe (tu ));
12471245
12481246 ucb = uprobe_buffer_get ();
1247+
1248+ if (WARN_ON_ONCE (tu -> tp .size + dsize > MAX_UCB_BUFFER_SIZE )) {
1249+ dsize = MAX_UCB_BUFFER_SIZE - tu -> tp .size ;
1250+ }
1251+
12491252 store_trace_args (esize , & tu -> tp , regs , ucb -> buf , dsize );
12501253
12511254 if (tu -> tp .flags & TP_FLAG_TRACE )
@@ -1281,6 +1284,11 @@ static int uretprobe_dispatcher(struct uprobe_consumer *con,
12811284 esize = SIZEOF_TRACE_ENTRY (is_ret_probe (tu ));
12821285
12831286 ucb = uprobe_buffer_get ();
1287+
1288+ if (WARN_ON_ONCE (tu -> tp .size + dsize > MAX_UCB_BUFFER_SIZE )) {
1289+ dsize = MAX_UCB_BUFFER_SIZE - tu -> tp .size ;
1290+ }
1291+
12841292 store_trace_args (esize , & tu -> tp , regs , ucb -> buf , dsize );
12851293
12861294 if (tu -> tp .flags & TP_FLAG_TRACE )
0 commit comments