Received: by 2002:a25:ef43:0:0:0:0:0 with SMTP id w3csp111244ybm; Wed, 27 May 2020 21:07:36 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwBl7X/wgqyiGZXzBkj74DcHVIWSSJNOa7uDcJWjdpFACEG3lTJ1YJSFSlfnrBg2o6e2b3E X-Received: by 2002:a17:906:4e57:: with SMTP id g23mr1254547ejw.522.1590638856634; Wed, 27 May 2020 21:07:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590638856; cv=none; d=google.com; s=arc-20160816; b=GIe8rKNKpFP55z3OBvZoNFNjSQf43Qs2VoC5Wb33AEIIogqjbZ1ivdIzEMVkTaw9FB ZtmJpd6RaauSe4+bLtkfuCs8/7IEqxwWXYrnAKIeLieQObABA/PqC3Wcn9BdefWmui74 izYkAlfdhuk9X0lM/tqWyVAshsoK63T/QB9m2lSO1LAbt3k0WDMHIpgcpRhnpio7z9kB BBhRXXL0ir3m7SWMjdHb/ANlFgo+Y2tUNFtlGMhsSblyotAcVg6W7r4+jqnSdd1XZ7Vo B+/HLtNbw4OZYIuQvkONruBSyiAHmIE/feiAbLOCoiZY1T1eJHqdwen9YjPNElco3Zxm dIYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=ofjEiXNaaliQL8FtDdVTaAf3B86SXT30nWNXfVlq1sE=; b=f85Kmt4ZmbhniSR+WrCUFYu+VcrpWuORloYSivNL0Zg2JufJ5bwcK4qP4i9Xuj0AdA 3K01jSyadvVqvUXXjuJW0xiQlNMhMfOfUIbmxVlrge3F5joBE5XqUipJC6hl9iinz2sx nVyNBMcxwRmI9xRJ3nSBG6Sp4h6Neu3EL8XfhZJkUooYcXuXRdxIJeIwJeHpYRbK+LpA 6VxbOxq2x4JyyyY79TIe/evKy9XIEpubYFLE/AwcS7Q6dFfKMO+EUsSK8wQaTPvqPyWN 5AoIWlgS8BZ3DbSIT3koOtlJdqT7zCe5MVkwqdtvsyHGKccThV+vVAs+wZinJaPxEYMe DYEg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=ZAQkusrP; 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 sb15si3171200ejb.478.2020.05.27.21.07.13; Wed, 27 May 2020 21:07:36 -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=ZAQkusrP; 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 S1725994AbgE1EFT (ORCPT + 99 others); Thu, 28 May 2020 00:05:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58160 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725764AbgE1EFT (ORCPT ); Thu, 28 May 2020 00:05:19 -0400 Received: from mail-lj1-x241.google.com (mail-lj1-x241.google.com [IPv6:2a00:1450:4864:20::241]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C5FCDC05BD1E for ; Wed, 27 May 2020 21:05:17 -0700 (PDT) Received: by mail-lj1-x241.google.com with SMTP id k5so31573911lji.11 for ; Wed, 27 May 2020 21:05:17 -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=ofjEiXNaaliQL8FtDdVTaAf3B86SXT30nWNXfVlq1sE=; b=ZAQkusrPK4WHGMyLu35qH5ersSTeIx5Nq8zLio92SD11BIusqFHCk3ikv48B2IaiWC wsd1Dmz1v6f/5LR2XWvaz27QeXzzsr5vxV9NaOKv5NP14ILfm6kTBN/A7fyTX2Pt47Xh 7LBSVEBvzEagiaTrbowNQFyXmToHbr4Q2foEq9FR7BOzfzWU0sd5DZ0QzT/LIUlBwJKD 9LrnvJtBfMQcx75F230eUE1ENcperAkMMYhhSUmUellqMN1+j4HxMJBT52OgHrSx4v41 21x/GvcP0aWijJVLzW01beXoEiecdCxJSsJ9CoIsujGvOjPsAbQAOJ1N+u5Ed1cad3/3 FVJQ== 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=ofjEiXNaaliQL8FtDdVTaAf3B86SXT30nWNXfVlq1sE=; b=bTbQ3UkqfymUxVYTBbXixyJqQpxB5PcmVaZEn8AUI8tRhJEeeUziJqVKHzuycR5sOf npLQcWPrH30+2AvsDD/3M7Axs6gX4DNfRymXSlLhXu2LMzcDLMggsih1i4H1WvuV9lM9 1Xilm/1AAYi7UWbWI1D1kmmdpIUvCZpw8lWaYoDbcjT62q1zDkbjVKz47RiCN5RtW6cc gk4Mub6PlVWy0i/XVcwq/OZ7U6aU3SuhP7H27Os4Nku5izb0nvpUjpQYyTMv/1Wescr0 c2Wd+l2aaMcQ8T0uAARwZsOp0F1R4/NmJ96ZFqERF1uZaN36V7deKvOsiDuXFyx3dfRe pvow== X-Gm-Message-State: AOAM532fXOZ6XmjEXM5KnQbzeeOj9N2qs+2l447U6FQxrIIpfNL28J+r NVV6ZmvvUvFeKASXbHVPmDg2iq//PUCjLxkVpMMAaA== X-Received: by 2002:a05:651c:3c6:: with SMTP id f6mr419657ljp.138.1590638715432; Wed, 27 May 2020 21:05:15 -0700 (PDT) MIME-Version: 1.0 References: <20200527111902.163213-1-christian.brauner@ubuntu.com> In-Reply-To: <20200527111902.163213-1-christian.brauner@ubuntu.com> From: Jann Horn Date: Thu, 28 May 2020 06:04:48 +0200 Message-ID: Subject: Re: [PATCH 1/2] seccomp: notify user trap about unused filter To: Christian Brauner Cc: kernel list , Kees Cook , Andy Lutomirski , Tycho Andersen , Matt Denton , Sargun Dhillon , Chris Palmer , Aleksa Sarai , Robert Sesek , Jeffrey Vander Stoep , Linux Containers Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, May 27, 2020 at 1:19 PM Christian Brauner wrote: > We've been making heavy use of the seccomp notifier to intercept and > handle certain syscalls for containers. This patch allows a syscall > supervisor listening on a given notifier to be notified when a seccomp > filter has become unused. [...] > To fix this, we introduce a new "live" reference counter that tracks the > live tasks making use of a given filter and when a notifier is > registered waiting tasks will be notified that the filter is now empty > by receiving a (E)POLLHUP event. > The concept in this patch introduces is the same as for signal_struct, > i.e. reference counting for life-cycle management is decoupled from > reference counting live taks using the object. [...] > + * @live: tasks that actually use this filter, only to be altered > + * during fork(), exit()/free_task(), and filter installation This comment is a bit off. Actually, @live counts the number of tasks that use the filter directly plus the number of dependent filters that have non-zero @live. [...] > +void seccomp_filter_notify(const struct task_struct *tsk) > +{ > + struct seccomp_filter *orig = tsk->seccomp.filter; > + > + while (orig && refcount_dec_and_test(&orig->live)) { > + if (waitqueue_active(&orig->wqh)) > + wake_up_poll(&orig->wqh, EPOLLHUP); > + orig = orig->prev; > + } > +} /me fetches the paint bucket Maybe name this seccomp_filter_unuse() or seccomp_filter_unuse_notify() or something like that? The current name isn't very descriptive.