Skip to content

Commit 94ca286

Browse files
committed
Fix kernel panic when tracing signals that use SEND_SIG_NOINFO
1 parent ee6b0c5 commit 94ca286

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

driver/main.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1598,9 +1598,6 @@ static int record_event_consumer(struct ppm_consumer_t *consumer,
15981598
ASSERT(event_datap->event_info.context_data.sched_next != NULL);
15991599
ring_info->n_context_switches++;
16001600
}
1601-
} else if (event_datap->category == PPMC_SIGNAL) {
1602-
if (event_type == PPME_SIGNALDELIVER_E)
1603-
ASSERT(event_datap->event_info.signal_data.info != NULL);
16041601
}
16051602

16061603
/*
@@ -1737,8 +1734,9 @@ static int record_event_consumer(struct ppm_consumer_t *consumer,
17371734

17381735
if (event_datap->category == PPMC_SIGNAL) {
17391736
args.signo = event_datap->event_info.signal_data.sig;
1740-
1741-
if (args.signo == SIGKILL) {
1737+
if (event_datap->event_info.signal_data.info == NULL) {
1738+
args.spid = (__kernel_pid_t) 0;
1739+
} else if (args.signo == SIGKILL) {
17421740
args.spid = event_datap->event_info.signal_data.info->_sifields._kill._pid;
17431741
} else if (args.signo == SIGTERM || args.signo == SIGHUP || args.signo == SIGINT ||
17441742
args.signo == SIGTSTP || args.signo == SIGQUIT) {
@@ -2095,7 +2093,10 @@ TRACEPOINT_PROBE(signal_deliver_probe, int sig, struct siginfo *info, struct k_s
20952093

20962094
event_data.category = PPMC_SIGNAL;
20972095
event_data.event_info.signal_data.sig = sig;
2098-
event_data.event_info.signal_data.info = info;
2096+
if (info == SEND_SIG_NOINFO || info == SEND_SIG_PRIV)
2097+
event_data.event_info.signal_data.info = NULL;
2098+
else
2099+
event_data.event_info.signal_data.info = info;
20992100
event_data.event_info.signal_data.ka = ka;
21002101

21012102
record_event_all_consumers(PPME_SIGNALDELIVER_E, UF_USED | UF_ALWAYS_DROP, &event_data);

0 commit comments

Comments
 (0)