Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp36620pxf; Wed, 24 Mar 2021 20:09:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwUmY1994+FKWjT7cjhxeCm69PKq2UBsocKCQMjLHK03o94pnQti1EyMKuhrBV1v0tFZ4vc X-Received: by 2002:a17:906:d8c6:: with SMTP id re6mr6762226ejb.311.1616641793299; Wed, 24 Mar 2021 20:09:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616641793; cv=none; d=google.com; s=arc-20160816; b=lVn/M5OT+y0icoyjsw+sYJlW0RnNdaBqLb2mvmH0074KRPK3aw4Aw3Wee8Jy1Jpc73 l28SjJyWb6sSMu+MItXN2y57mn05xhVKsm2SZZMpAq1iZ+gDk/rgj/eEkn8o3cERXWCM MAQNXJ6/CDXU3f3xQ7ga9EVn5WfZud+YIRq3EsvyBeb4408LvQ4vZPmeRTIW+kpP1jMU P0p3HBq49II0Hes3wAcGpqiciHzUp8C3Pao2jlrrXP8+TCCidA6X+d3EueyiiBLfQcIN 4/292cGQ8VbI0ftNWf3HcFpfASLjFs+W9EVPlTHiJECBMeDJqvTRMSp2jPoWibd1TzKr q8WQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=GZvbm9pmWdatUwvODu4QKBbBncw4Nm+3D4c7UW8iDYU=; b=RSyyZjbdrGciWroFTI78X/1IU3toxhz0tXrEtmYx71Ntjc2IgNT94Z0B5qZDL9pUXQ LDvYcdVAxn862/dT+qsT4iF+WADn9Pt565cfEdnfojoIvymW+E5rd8Y26pMQ2SwJLlPR R8PnE7C62gLvUbmDy1GkfTTbrWfVu2Wg0I4dfpFhRg7sZpwwlj3Ilr7p2fdKKkHaX8l2 bT0Q6qqf29vWlnZUJve/j0MIS5Yw+S3318mp+lr4c6qxe7ketFEF1745WTYsGWIttaGt Nzor6LOjNa20DoZlWdpfZmxWruefKQc8Lrj4PB7S+SS94VQ2Tx641qu9jEj5hJn/Kpll TiGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=qR67sYL0; 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 hr29si2893603ejc.532.2021.03.24.20.09.31; Wed, 24 Mar 2021 20:09:53 -0700 (PDT) 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=qR67sYL0; 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 S236007AbhCXOPi (ORCPT + 99 others); Wed, 24 Mar 2021 10:15:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46890 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235721AbhCXOP1 (ORCPT ); Wed, 24 Mar 2021 10:15:27 -0400 Received: from mail-qv1-xf34.google.com (mail-qv1-xf34.google.com [IPv6:2607:f8b0:4864:20::f34]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F241CC0613DE for ; Wed, 24 Mar 2021 07:15:26 -0700 (PDT) Received: by mail-qv1-xf34.google.com with SMTP id by2so12300238qvb.11 for ; Wed, 24 Mar 2021 07:15:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=GZvbm9pmWdatUwvODu4QKBbBncw4Nm+3D4c7UW8iDYU=; b=qR67sYL0JjlICyPA8xRM7pna0dwh1lfO92PYIMGHLz16ttLPb2V+L8eydysv+fu774 riRxCpmrfWrVN4XppJAqgxMOTJCQ8tVRvyGiT6CJ29+X2cxM+SZWrMeqc7gd+SbBhvYG ii25BkrEoJJffnP648Jsh6e9fiSiFCeg8Q87i9bWVVgyIOcMrmBisFDnn6+GwHrSxH6z y7BfxjzlK2phJO7aypGbKI2a3mKcTGyFK/pemU2+PcWiKR8ZoLMEYdABkdQNmvDfjE8a 7rL3BLU8+v4iUGIHfikBOv8eL/I9EC7ltNHHeYbB7mLq3dF7hmH5FhWEz2lay2CTg4BS cYYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=GZvbm9pmWdatUwvODu4QKBbBncw4Nm+3D4c7UW8iDYU=; b=dis7xG9PdOcxU3gluas9Ixv78ofJCkwwFjpbT4F1JMoNDZ1Ag7JuTW18P17zgWNSP2 k3BtJ/eiJc2AWNMgDRaWM05rFtro9mB02QRCpQTWIVche0ap3TSa5YSyXk68P9rYUuIV laL5zL2MkMG5UA5gdSKLNzzNrrOfwnj1v066WE1LCH9ieeXu1BTaa7ttAiUt2UoD2PMm mB81x1v1A4c8cIYg0y+JejSez2I6Bkl1RB7zoiac0484N047nENm0hz4hEK9OyX2O1wA pT4bemN6zI5nhlHinMSilERfQImOjgbdbPZgTojPytXjSyyU4j71ojqFqO+xkKm877Gd xbSg== X-Gm-Message-State: AOAM530+QjolSfww0WSf9u8qFMpYVC3I+MnXIaJUNrNfgMrdoxPrrSrM sbRGZ1R/GI1XVRXJTmsvGypfutla1K+a6bSidcbTDA== X-Received: by 2002:ad4:50d0:: with SMTP id e16mr3524290qvq.37.1616595325859; Wed, 24 Mar 2021 07:15:25 -0700 (PDT) MIME-Version: 1.0 References: <20210324112503.623833-1-elver@google.com> <20210324112503.623833-8-elver@google.com> In-Reply-To: From: Dmitry Vyukov Date: Wed, 24 Mar 2021 15:15:14 +0100 Message-ID: Subject: Re: [PATCH v3 07/11] perf: Add breakpoint information to siginfo on SIGTRAP To: Marco Elver Cc: Peter Zijlstra , Alexander Shishkin , Arnaldo Carvalho de Melo , Ingo Molnar , Jiri Olsa , Mark Rutland , Namhyung Kim , Thomas Gleixner , Alexander Potapenko , Al Viro , Arnd Bergmann , Christian Brauner , Jann Horn , Jens Axboe , Matt Morehouse , Peter Collingbourne , Ian Rogers , kasan-dev , linux-arch , linux-fsdevel , LKML , "the arch/x86 maintainers" , "open list:KERNEL SELFTEST FRAMEWORK" Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Mar 24, 2021 at 3:12 PM Dmitry Vyukov wrote: > > On Wed, 24 Mar 2021 at 15:01, Peter Zijlstra wrote: > > > > > > One last try, I'll leave it alone now, I promise :-) > > > > This looks like it does what you suggested, thanks! :-) > > > > I'll still need to think about it, because of the potential problem > > with modify-signal-races and what the user's synchronization story > > would look like then. > > I agree that this looks inherently racy. The attr can't be allocated > on stack, user synchronization may be tricky and expensive. The API > may provoke bugs and some users may not even realize the race problem. > > One potential alternative is use of an opaque u64 context (if we could > shove it into the attr). A user can pass a pointer to the attr in > there (makes it equivalent to this proposal), or bit-pack size/type > (as we want), pass some sequence number or whatever. Just to clarify what I was thinking about, but did not really state: perf_event_attr_t includes u64 ctx, and we return it back to the user in siginfo_t. Kernel does not treat it in any way. This is a pretty common API pattern in general. > > > --- a/include/linux/perf_event.h > > > +++ b/include/linux/perf_event.h > > > @@ -778,6 +778,9 @@ struct perf_event { > > > void *security; > > > #endif > > > struct list_head sb_list; > > > + > > > + unsigned long si_uattr; > > > + unsigned long si_data; > > > #endif /* CONFIG_PERF_EVENTS */ > > > }; > > > > > > --- a/kernel/events/core.c > > > +++ b/kernel/events/core.c > > > @@ -5652,13 +5652,17 @@ static long _perf_ioctl(struct perf_even > > > return perf_event_query_prog_array(event, (void __user *)arg); > > > > > > case PERF_EVENT_IOC_MODIFY_ATTRIBUTES: { > > > + struct perf_event_attr __user *uattr; > > > struct perf_event_attr new_attr; > > > - int err = perf_copy_attr((struct perf_event_attr __user *)arg, > > > - &new_attr); > > > + int err; > > > > > > + uattr = (struct perf_event_attr __user *)arg; > > > + err = perf_copy_attr(uattr, &new_attr); > > > if (err) > > > return err; > > > > > > + event->si_uattr = (unsigned long)uattr; > > > + > > > return perf_event_modify_attr(event, &new_attr); > > > } > > > default: > > > @@ -6399,7 +6403,12 @@ static void perf_sigtrap(struct perf_eve > > > clear_siginfo(&info); > > > info.si_signo = SIGTRAP; > > > info.si_code = TRAP_PERF; > > > - info.si_errno = event->attr.type; > > > + info.si_addr = (void *)event->si_data; > > > + > > > + info.si_perf = event->si_uattr; > > > + if (event->parent) > > > + info.si_perf = event->parent->si_uattr; > > > + > > > force_sig_info(&info); > > > } > > > > > > @@ -6414,8 +6423,8 @@ static void perf_pending_event_disable(s > > > WRITE_ONCE(event->pending_disable, -1); > > > > > > if (event->attr.sigtrap) { > > > - atomic_set(&event->event_limit, 1); /* rearm event */ > > > perf_sigtrap(event); > > > + atomic_set_release(&event->event_limit, 1); /* rearm event */ > > > return; > > > } > > > > > > @@ -9121,6 +9130,7 @@ static int __perf_event_overflow(struct > > > if (events && atomic_dec_and_test(&event->event_limit)) { > > > ret = 1; > > > event->pending_kill = POLL_HUP; > > > + event->si_data = data->addr; > > > > > > perf_event_disable_inatomic(event); > > > } > > > @@ -12011,6 +12021,8 @@ SYSCALL_DEFINE5(perf_event_open, > > > goto err_task; > > > } > > > > > > + event->si_uattr = (unsigned long)attr_uptr; > > > + > > > if (is_sampling_event(event)) { > > > if (event->pmu->capabilities & PERF_PMU_CAP_NO_INTERRUPT) { > > > err = -EOPNOTSUPP;