Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2426001pxb; Tue, 23 Feb 2021 06:52:47 -0800 (PST) X-Google-Smtp-Source: ABdhPJyL0nxGZnM9gC+3bZtOSn6U1hqBvTGdCj72fi3scwZpxHxUCFAtYP4/rcYrOhxDf35LXkmY X-Received: by 2002:a17:907:d86:: with SMTP id go6mr25511133ejc.337.1614091966972; Tue, 23 Feb 2021 06:52:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614091966; cv=none; d=google.com; s=arc-20160816; b=g+G7frsMighmtdGp6UYpPER/52CQRZ9+ETMUQCfcX42p7LcJV9OYoPDREs/mIKBlMw vhd1T5dqnAyEzMDqNuzWh5asJZTgQxOfNdDPlR7Uk2v+/ACpDwuoNjWXxTve2kq9FmYw YkDh2QFfYp7831jYUjz9nkcoJRsaxLv+81cSwSamUt50ouM9TMUHrMx+72PZyL9UsUlB cECjX8pzaqEHW39ORH3hSCdCzcn2WquI6Z2EyVRtlIagX87ocXTwnEi7/iDNCBj39rIh hkO/HhHCFzKpRKUScwAuQFsx7b0/4w6CnA1NCm7N52NTtAEZcCOwDosFVXuXI4qgh818 kmMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:sender:dkim-signature; bh=c07W/N7UYuxP8d3WxqLOZLQNcQmHUhhwBq0FOrgMOE0=; b=ULu3dRqHdTIZcHBym1OyKMTtiHuSeDkUaQidqlGaod4J91Iiliqr3EyfFhs/8MSlI/ ocu+RvvMd/2D04a5VUx1HefFOKCK36Qj277L+/6BjZSxJFoQ8ZSQSb/cOrkXcWR1EoEj NuGPK8dsGgIHiBzAKC0SV3pAOch+A1TpypvU/huYrUY1n9QdPcJ+SlOWmU78WQrlz5Qv 1ciYzvusoxVHZd+BuZX/YM/RCyDhQ5IK151twdnEThwLLhVVjPXThO9bqGidlPBCIZH+ S7Mg25JO7hrg4yEAMxtBXDW8y0k9Ckd+RWLgcLf4EqqHAQSNJneBkMmzBc0xnKDH5NOJ 7fGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=AOwWMdBQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h3si6499127edr.235.2021.02.23.06.52.22; Tue, 23 Feb 2021 06:52:46 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=AOwWMdBQ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233122AbhBWOgP (ORCPT + 99 others); Tue, 23 Feb 2021 09:36:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58638 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233102AbhBWOgG (ORCPT ); Tue, 23 Feb 2021 09:36:06 -0500 Received: from mail-qv1-xf4a.google.com (mail-qv1-xf4a.google.com [IPv6:2607:f8b0:4864:20::f4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 77EE2C0617A7 for ; Tue, 23 Feb 2021 06:34:50 -0800 (PST) Received: by mail-qv1-xf4a.google.com with SMTP id bx8so10089435qvb.10 for ; Tue, 23 Feb 2021 06:34:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:date:in-reply-to:message-id:mime-version:references:subject :from:to:cc; bh=c07W/N7UYuxP8d3WxqLOZLQNcQmHUhhwBq0FOrgMOE0=; b=AOwWMdBQh3O2nADUEPWhdjBQR+thd/MA9JaG0ameiA/QxjjxfNle0mRXhO6GyQq7Rm AyM2gYSzCB9XikOKOyAfe8HwcPVnBeHFb8Pe6KNISX1GNADIb0xdd4tQ2s8AF+Jid7+Z XuokChUgaaJKeNp9p0/ST2a7penJYipZoOObwPMaGHfnKdSoVSHG6FDD6PZP5tj6C9n8 85899MGBkhd3rKwMOSzMQzfFuLJ98X5/4fsCWRViADkNBgQin5wrdxuN430A1rclrkk5 x6W2BI3+cbWA2ZdupC9dPO62KBnR2czeiWq6Xv4qs1y8HoaoEwOTciArhvKHq5Sd5wBG +GUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=c07W/N7UYuxP8d3WxqLOZLQNcQmHUhhwBq0FOrgMOE0=; b=myPQ/cC8UPY5VDmED3Z/8SS99Mh8BBcywc2VnCJUwc82sosyHVRObZtVohSjEDF3+3 TNoPGND5gED5LMMBN4xLZ+Pe3FL9NMidUMTN1mrFfU1UbSEd0TlQoXIVSa8xB38lw8+8 Y6X5iD79Am1JQHWb3uKRBJvxNAFpFFPel9E+L5iXphCmyI85Ua8DIeFlbX9Pfb8aiIs0 A5v25OIocyF/1xsuCc+P9ChQUqkSX6vQSO26DutmXkxDLG7/fhQTKtmzeh9M/A+pYC4P /AuZh+WeF49tUWok2F5HLa3H4Fjkzu8wSNTXsTGXOYlMyS96T/KiLQ5NRo5YXIgSIQI9 5Eig== X-Gm-Message-State: AOAM530sIKsCtYULlPwDroMYi9yQwI8zZvzSXLZgs3t4WH5Nm6SbN1SS wnhXmpEfaW4wt5o25ZVR7ok/4YlJzQ== Sender: "elver via sendgmr" X-Received: from elver.muc.corp.google.com ([2a00:79e0:15:13:855b:f924:6e71:3d5d]) (user=elver job=sendgmr) by 2002:ad4:47ca:: with SMTP id p10mr2137828qvw.32.1614090889585; Tue, 23 Feb 2021 06:34:49 -0800 (PST) Date: Tue, 23 Feb 2021 15:34:24 +0100 In-Reply-To: <20210223143426.2412737-1-elver@google.com> Message-Id: <20210223143426.2412737-3-elver@google.com> Mime-Version: 1.0 References: <20210223143426.2412737-1-elver@google.com> X-Mailer: git-send-email 2.30.0.617.g56c4b15f3c-goog Subject: [PATCH RFC 2/4] signal: Introduce TRAP_PERF si_code and si_perf to siginfo From: Marco Elver To: elver@google.com, peterz@infradead.org, alexander.shishkin@linux.intel.com, acme@kernel.org, mingo@redhat.com, jolsa@redhat.com, mark.rutland@arm.com, namhyung@kernel.org, tglx@linutronix.de Cc: glider@google.com, viro@zeniv.linux.org.uk, arnd@arndb.de, christian@brauner.io, dvyukov@google.com, jannh@google.com, axboe@kernel.dk, mascasa@google.com, pcc@google.com, irogers@google.com, kasan-dev@googlegroups.com, linux-arch@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org, x86@kernel.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Introduces the TRAP_PERF si_code, and associated siginfo_t field si_perf. These will be used by the perf event subsystem to send signals (if requested) to the task where an event occurred. Signed-off-by: Marco Elver --- arch/m68k/kernel/signal.c | 3 +++ arch/x86/kernel/signal_compat.c | 5 ++++- fs/signalfd.c | 4 ++++ include/linux/compat.h | 2 ++ include/linux/signal.h | 1 + include/uapi/asm-generic/siginfo.h | 6 +++++- include/uapi/linux/signalfd.h | 4 +++- kernel/signal.c | 11 +++++++++++ 8 files changed, 33 insertions(+), 3 deletions(-) diff --git a/arch/m68k/kernel/signal.c b/arch/m68k/kernel/signal.c index 349570f16a78..a4b7ee1df211 100644 --- a/arch/m68k/kernel/signal.c +++ b/arch/m68k/kernel/signal.c @@ -622,6 +622,9 @@ static inline void siginfo_build_tests(void) /* _sigfault._addr_pkey */ BUILD_BUG_ON(offsetof(siginfo_t, si_pkey) != 0x12); + /* _sigfault._perf */ + BUILD_BUG_ON(offsetof(siginfo_t, si_perf) != 0x10); + /* _sigpoll */ BUILD_BUG_ON(offsetof(siginfo_t, si_band) != 0x0c); BUILD_BUG_ON(offsetof(siginfo_t, si_fd) != 0x10); diff --git a/arch/x86/kernel/signal_compat.c b/arch/x86/kernel/signal_compat.c index a5330ff498f0..0e5d0a7e203b 100644 --- a/arch/x86/kernel/signal_compat.c +++ b/arch/x86/kernel/signal_compat.c @@ -29,7 +29,7 @@ static inline void signal_compat_build_tests(void) BUILD_BUG_ON(NSIGFPE != 15); BUILD_BUG_ON(NSIGSEGV != 9); BUILD_BUG_ON(NSIGBUS != 5); - BUILD_BUG_ON(NSIGTRAP != 5); + BUILD_BUG_ON(NSIGTRAP != 6); BUILD_BUG_ON(NSIGCHLD != 6); BUILD_BUG_ON(NSIGSYS != 2); @@ -138,6 +138,9 @@ static inline void signal_compat_build_tests(void) BUILD_BUG_ON(offsetof(siginfo_t, si_pkey) != 0x20); BUILD_BUG_ON(offsetof(compat_siginfo_t, si_pkey) != 0x14); + BUILD_BUG_ON(offsetof(siginfo_t, si_perf) != 0x18); + BUILD_BUG_ON(offsetof(compat_siginfo_t, si_perf) != 0x10); + CHECK_CSI_OFFSET(_sigpoll); CHECK_CSI_SIZE (_sigpoll, 2*sizeof(int)); CHECK_SI_SIZE (_sigpoll, 4*sizeof(int)); diff --git a/fs/signalfd.c b/fs/signalfd.c index 456046e15873..040a1142915f 100644 --- a/fs/signalfd.c +++ b/fs/signalfd.c @@ -134,6 +134,10 @@ static int signalfd_copyinfo(struct signalfd_siginfo __user *uinfo, #endif new.ssi_addr_lsb = (short) kinfo->si_addr_lsb; break; + case SIL_PERF_EVENT: + new.ssi_addr = (long) kinfo->si_addr; + new.ssi_perf = kinfo->si_perf; + break; case SIL_CHLD: new.ssi_pid = kinfo->si_pid; new.ssi_uid = kinfo->si_uid; diff --git a/include/linux/compat.h b/include/linux/compat.h index 6e65be753603..c8821d966812 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h @@ -236,6 +236,8 @@ typedef struct compat_siginfo { char _dummy_pkey[__COMPAT_ADDR_BND_PKEY_PAD]; u32 _pkey; } _addr_pkey; + /* used when si_code=TRAP_PERF */ + compat_u64 _perf; }; } _sigfault; diff --git a/include/linux/signal.h b/include/linux/signal.h index 205526c4003a..1e98548d7cf6 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h @@ -43,6 +43,7 @@ enum siginfo_layout { SIL_FAULT_MCEERR, SIL_FAULT_BNDERR, SIL_FAULT_PKUERR, + SIL_PERF_EVENT, SIL_CHLD, SIL_RT, SIL_SYS, diff --git a/include/uapi/asm-generic/siginfo.h b/include/uapi/asm-generic/siginfo.h index d2597000407a..d0bb9125c853 100644 --- a/include/uapi/asm-generic/siginfo.h +++ b/include/uapi/asm-generic/siginfo.h @@ -91,6 +91,8 @@ union __sifields { char _dummy_pkey[__ADDR_BND_PKEY_PAD]; __u32 _pkey; } _addr_pkey; + /* used when si_code=TRAP_PERF */ + __u64 _perf; }; } _sigfault; @@ -155,6 +157,7 @@ typedef struct siginfo { #define si_lower _sifields._sigfault._addr_bnd._lower #define si_upper _sifields._sigfault._addr_bnd._upper #define si_pkey _sifields._sigfault._addr_pkey._pkey +#define si_perf _sifields._sigfault._perf #define si_band _sifields._sigpoll._band #define si_fd _sifields._sigpoll._fd #define si_call_addr _sifields._sigsys._call_addr @@ -253,7 +256,8 @@ typedef struct siginfo { #define TRAP_BRANCH 3 /* process taken branch trap */ #define TRAP_HWBKPT 4 /* hardware breakpoint/watchpoint */ #define TRAP_UNK 5 /* undiagnosed trap */ -#define NSIGTRAP 5 +#define TRAP_PERF 6 /* perf event with sigtrap=1 */ +#define NSIGTRAP 6 /* * There is an additional set of SIGTRAP si_codes used by ptrace diff --git a/include/uapi/linux/signalfd.h b/include/uapi/linux/signalfd.h index 83429a05b698..7e333042c7e3 100644 --- a/include/uapi/linux/signalfd.h +++ b/include/uapi/linux/signalfd.h @@ -39,6 +39,8 @@ struct signalfd_siginfo { __s32 ssi_syscall; __u64 ssi_call_addr; __u32 ssi_arch; + __u32 __pad3; + __u64 ssi_perf; /* * Pad strcture to 128 bytes. Remember to update the @@ -49,7 +51,7 @@ struct signalfd_siginfo { * comes out of a read(2) and we really don't want to have * a compat on read(2). */ - __u8 __pad[28]; + __u8 __pad[16]; }; diff --git a/kernel/signal.c b/kernel/signal.c index 5ad8566534e7..943c98782634 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -1199,6 +1199,7 @@ static inline bool has_si_pid_and_uid(struct kernel_siginfo *info) case SIL_FAULT_MCEERR: case SIL_FAULT_BNDERR: case SIL_FAULT_PKUERR: + case SIL_PERF_EVENT: case SIL_SYS: ret = false; break; @@ -2531,6 +2532,7 @@ static void hide_si_addr_tag_bits(struct ksignal *ksig) case SIL_FAULT_MCEERR: case SIL_FAULT_BNDERR: case SIL_FAULT_PKUERR: + case SIL_PERF_EVENT: ksig->info.si_addr = arch_untagged_si_addr( ksig->info.si_addr, ksig->sig, ksig->info.si_code); break; @@ -3333,6 +3335,10 @@ void copy_siginfo_to_external32(struct compat_siginfo *to, #endif to->si_pkey = from->si_pkey; break; + case SIL_PERF_EVENT: + to->si_addr = ptr_to_compat(from->si_addr); + to->si_perf = from->si_perf; + break; case SIL_CHLD: to->si_pid = from->si_pid; to->si_uid = from->si_uid; @@ -3413,6 +3419,10 @@ static int post_copy_siginfo_from_user32(kernel_siginfo_t *to, #endif to->si_pkey = from->si_pkey; break; + case SIL_PERF_EVENT: + to->si_addr = compat_ptr(from->si_addr); + to->si_perf = from->si_perf; + break; case SIL_CHLD: to->si_pid = from->si_pid; to->si_uid = from->si_uid; @@ -4593,6 +4603,7 @@ static inline void siginfo_buildtime_checks(void) CHECK_OFFSET(si_lower); CHECK_OFFSET(si_upper); CHECK_OFFSET(si_pkey); + CHECK_OFFSET(si_perf); /* sigpoll */ CHECK_OFFSET(si_band); -- 2.30.0.617.g56c4b15f3c-goog