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