@@ -857,6 +857,7 @@ struct uprobe_cpu_buffer {
857
857
};
858
858
static struct uprobe_cpu_buffer __percpu * uprobe_cpu_buffer ;
859
859
static int uprobe_buffer_refcnt ;
860
+ #define MAX_UCB_BUFFER_SIZE PAGE_SIZE
860
861
861
862
static int uprobe_buffer_init (void )
862
863
{
@@ -957,9 +958,6 @@ static void __uprobe_trace_func(struct trace_uprobe *tu,
957
958
958
959
WARN_ON (call != trace_file -> event_call );
959
960
960
- if (WARN_ON_ONCE (tu -> tp .size + dsize > PAGE_SIZE ))
961
- return ;
962
-
963
961
if (trace_trigger_soft_disabled (trace_file ))
964
962
return ;
965
963
@@ -1502,6 +1500,11 @@ static int uprobe_dispatcher(struct uprobe_consumer *con, struct pt_regs *regs)
1502
1500
esize = SIZEOF_TRACE_ENTRY (is_ret_probe (tu ));
1503
1501
1504
1502
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
+
1505
1508
store_trace_args (ucb -> buf , & tu -> tp , regs , esize , dsize );
1506
1509
1507
1510
if (trace_probe_test_flag (& tu -> tp , TP_FLAG_TRACE ))
@@ -1537,6 +1540,11 @@ static int uretprobe_dispatcher(struct uprobe_consumer *con,
1537
1540
esize = SIZEOF_TRACE_ENTRY (is_ret_probe (tu ));
1538
1541
1539
1542
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
+
1540
1548
store_trace_args (ucb -> buf , & tu -> tp , regs , esize , dsize );
1541
1549
1542
1550
if (trace_probe_test_flag (& tu -> tp , TP_FLAG_TRACE ))
0 commit comments