Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp383733pxf; Wed, 24 Mar 2021 07:15:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzi3rLu3WiCrmLG3US28WzTo0YRRvnRnkk9h4gtpGIAG46HEmf2zjKYVti1yLWGCGRzQEFZ X-Received: by 2002:a05:6402:10c9:: with SMTP id p9mr3733957edu.268.1616595358049; Wed, 24 Mar 2021 07:15:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616595358; cv=none; d=google.com; s=arc-20160816; b=qBhCWiyDC5WBKgajBwzmQVmCZfwM3gF3LjXVsSnXWp6t1DcvIisbw2M4Y9xEbM5U0A wET0U9muelHrUdzP+ThazHz0NqC/kzVisz4dSpvkGmgyJi7N8qrTlkmC7s1xyIJ9yTbs 5d14qF+XoCYww25gQWKs2DpmFjIYt5aIxS8Nj1knXPZeXZzWZx0NZKt3xhPMXOFNirlH 28M+1+7FlDvXpHYi6fOOKf53I2NP0GJYLHdTZmW7HdlpIfqu3LcDb4zCwnrbzmpabEkC 0r0F/3MXpGpa0kNozpPLKwqRQmhMgUy2z5u4c5GfC08h6d9PVXlX2tDg40ewuA0WsAbz R9oA== 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=1XohPHX9rWTqjJvRyYcCWXA2q1vwA5OihINXfd2z/zo=; b=Rd8Eyhb/FNsZtvUP7X4LQ76tz5lAsdbOnYXHe//cLJOn4QXk0LGDb87RShU5Fvod+f 0aL+PT9qIIphst1Gcv2dpsFNztTKadOgFQZ00r5cATt3ATAfLUpRVMILepf2YvN2Ca/4 eeKfH/CkReB+jKQF9Xw4PZJqckxosa6HSLfcSPJdzOh2pJ6HtQDheq8UMAUm8d2d6ubS RA8Ng85ELASF43NkSKywa0xvZ2OUclZTAz8BO69f8TYrEMew7yXTJxG9lIFBnpAH0Tl3 tfsSdy6ZwMiB6hk9yFUA7gzfZrmLjrWTv0DAJpzFMxWtLELag5TSHUCb2dcMohdlevTU 3vqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=AuieUtcn; 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 z14si1922303edq.36.2021.03.24.07.15.02; Wed, 24 Mar 2021 07:15:58 -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=AuieUtcn; 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 S236062AbhCXON0 (ORCPT + 99 others); Wed, 24 Mar 2021 10:13:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46390 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236110AbhCXONI (ORCPT ); Wed, 24 Mar 2021 10:13:08 -0400 Received: from mail-qt1-x836.google.com (mail-qt1-x836.google.com [IPv6:2607:f8b0:4864:20::836]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A5F9CC0613DF for ; Wed, 24 Mar 2021 07:13:08 -0700 (PDT) Received: by mail-qt1-x836.google.com with SMTP id g24so17599193qts.6 for ; Wed, 24 Mar 2021 07:13:08 -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=1XohPHX9rWTqjJvRyYcCWXA2q1vwA5OihINXfd2z/zo=; b=AuieUtcnBKgIlZBHY2MKXvJautp8rnH0/Zc3JfbrCzf4TZ/rkCzaCA+R+RmUvrIH1m E4S/ubhyqRRoc1wlHeic5TQS6wicvYaXwOjwAcwbynBZ8V/eh7b8OnJI4JjrQ3gp/auj zVni+ROSpwREgwKdrkLXequdeu3ax3xYqlF4ZdOTk9qAwTMz9EbW9WjZ3aYk4B+y1Mm7 zOJGAqkEWaoy5cTjKaEKmogGG1iuc60Kh4iioFap/Xz//fJLQwHzk2XUc/vrYgOMIWcb JvNS96i/uzRwWCSWr3Q0/EGYKggxIJxNvHGEfid0i7V+xW3/NXdVqs5frh7Vyz20oGVI 43Xg== 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=1XohPHX9rWTqjJvRyYcCWXA2q1vwA5OihINXfd2z/zo=; b=qHHf6vgjZ6c17QfTJ0aihiPh0c75nlmVbfMHnqlyPtteB1/3hV01IvGuqu00NkSoBq tgwT4h/zYa7ApJ1hupeCJjEUKS++2dX2NFUE8ZlJc3m3G7D0NmC1WkSUu0CeOuW2eeso ooinqAv+993XFl6/d0g8EcTWVghlQcedAMOkaBKJvcvPMpyTXWkV1bDZMzrKokPChE0V gm5GrWLWMGw7hEJMzH0UAm9uvsX6JQSTVrJe4q9wDerO6pOd3zOFqB6e3fKYLTyFsPHe GgN6TG9IEDHsr1hNieYkmFyDTkx6foW5QUp0daAQo6Go7Ex826JvvjsC0TzS1aKnhE7E DF2g== X-Gm-Message-State: AOAM533VSRulapujF3jU5MOPyVemPw2MIk+r8BF2rAcp7uGUNcmoIQGw uvvuvWbGKMEGZMIQxf7Plk0sfAMvnYADDS41Oa9j5A== X-Received: by 2002:ac8:6696:: with SMTP id d22mr3164170qtp.67.1616595187453; Wed, 24 Mar 2021 07:13:07 -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:12:56 +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:05 PM Marco Elver 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. > > --- 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;