Merge branch 'for-v5.13-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace
Pull siginfo fix from Eric Biederman:
"During the merge window an issue with si_perf and the siginfo ABI came
up. The alpha and sparc siginfo structure layout had changed with the
addition of SIGTRAP TRAP_PERF and the new field si_perf.
The reason only alpha and sparc were affected is that they are the
only architectures that use si_trapno.
Looking deeper it was discovered that si_trapno is used for only a few
select signals on alpha and sparc, and that none of the other
_sigfault fields past si_addr are used at all. Which means technically
no regression on alpha and sparc.
While the alignment concerns might be dismissed the abuse of si_errno
by SIGTRAP TRAP_PERF does have the potential to cause regressions in
existing userspace.
While we still have time before userspace starts using and depending
on the new definition siginfo for SIGTRAP TRAP_PERF this set of
changes cleans up siginfo_t.
- The si_trapno field is demoted from magic alpha and sparc status
and made an ordinary union member of the _sigfault member of
siginfo_t. Without moving it of course.
- si_perf is replaced with si_perf_data and si_perf_type ending the
abuse of si_errno.
- Unnecessary additions to signalfd_siginfo are removed"
* 'for-v5.13-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace:
signalfd: Remove SIL_PERF_EVENT fields from signalfd_siginfo
signal: Deliver all of the siginfo perf data in _perf
signal: Factor force_sig_perf out of perf_sigtrap
signal: Implement SIL_FAULT_TRAPNO
siginfo: Move si_trapno inside the union inside _si_fault
This commit is contained in:
@@ -43,7 +43,7 @@ static struct {
|
||||
siginfo_t first_siginfo; /* First observed siginfo_t. */
|
||||
} ctx;
|
||||
|
||||
/* Unique value to check si_perf is correctly set from perf_event_attr::sig_data. */
|
||||
/* Unique value to check si_perf_data is correctly set from perf_event_attr::sig_data. */
|
||||
#define TEST_SIG_DATA(addr) (~(unsigned long)(addr))
|
||||
|
||||
static struct perf_event_attr make_event_attr(bool enabled, volatile void *addr)
|
||||
@@ -164,8 +164,8 @@ TEST_F(sigtrap_threads, enable_event)
|
||||
EXPECT_EQ(ctx.signal_count, NUM_THREADS);
|
||||
EXPECT_EQ(ctx.tids_want_signal, 0);
|
||||
EXPECT_EQ(ctx.first_siginfo.si_addr, &ctx.iterate_on);
|
||||
EXPECT_EQ(ctx.first_siginfo.si_errno, PERF_TYPE_BREAKPOINT);
|
||||
EXPECT_EQ(ctx.first_siginfo.si_perf, TEST_SIG_DATA(&ctx.iterate_on));
|
||||
EXPECT_EQ(ctx.first_siginfo.si_perf_type, PERF_TYPE_BREAKPOINT);
|
||||
EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on));
|
||||
|
||||
/* Check enabled for parent. */
|
||||
ctx.iterate_on = 0;
|
||||
@@ -183,8 +183,8 @@ TEST_F(sigtrap_threads, modify_and_enable_event)
|
||||
EXPECT_EQ(ctx.signal_count, NUM_THREADS);
|
||||
EXPECT_EQ(ctx.tids_want_signal, 0);
|
||||
EXPECT_EQ(ctx.first_siginfo.si_addr, &ctx.iterate_on);
|
||||
EXPECT_EQ(ctx.first_siginfo.si_errno, PERF_TYPE_BREAKPOINT);
|
||||
EXPECT_EQ(ctx.first_siginfo.si_perf, TEST_SIG_DATA(&ctx.iterate_on));
|
||||
EXPECT_EQ(ctx.first_siginfo.si_perf_type, PERF_TYPE_BREAKPOINT);
|
||||
EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on));
|
||||
|
||||
/* Check enabled for parent. */
|
||||
ctx.iterate_on = 0;
|
||||
@@ -203,8 +203,8 @@ TEST_F(sigtrap_threads, signal_stress)
|
||||
EXPECT_EQ(ctx.signal_count, NUM_THREADS * ctx.iterate_on);
|
||||
EXPECT_EQ(ctx.tids_want_signal, 0);
|
||||
EXPECT_EQ(ctx.first_siginfo.si_addr, &ctx.iterate_on);
|
||||
EXPECT_EQ(ctx.first_siginfo.si_errno, PERF_TYPE_BREAKPOINT);
|
||||
EXPECT_EQ(ctx.first_siginfo.si_perf, TEST_SIG_DATA(&ctx.iterate_on));
|
||||
EXPECT_EQ(ctx.first_siginfo.si_perf_type, PERF_TYPE_BREAKPOINT);
|
||||
EXPECT_EQ(ctx.first_siginfo.si_perf_data, TEST_SIG_DATA(&ctx.iterate_on));
|
||||
}
|
||||
|
||||
TEST_HARNESS_MAIN
|
||||
|
||||
Reference in New Issue
Block a user