From patchwork Mon Mar 13 13:20:23 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 9620833 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A374C60244 for ; Mon, 13 Mar 2017 13:21:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 96AAF2848E for ; Mon, 13 Mar 2017 13:21:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8B81E2849C; Mon, 13 Mar 2017 13:21:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 23B632848E for ; Mon, 13 Mar 2017 13:21:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751759AbdCMNVK (ORCPT ); Mon, 13 Mar 2017 09:21:10 -0400 Received: from mail-wr0-f193.google.com ([209.85.128.193]:33661 "EHLO mail-wr0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751793AbdCMNVF (ORCPT ); Mon, 13 Mar 2017 09:21:05 -0400 Received: by mail-wr0-f193.google.com with SMTP id g10so20056977wrg.0 for ; Mon, 13 Mar 2017 06:20:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=d0PUPySlLIBC67v5ixlNA+Tx5z9y+fqfjvpXVBYycgI=; b=STHfvy6rwyhNXUig0h/jdEcQvUm/JclpG2jq3TqiWoKlclPZ2rpgWAS5gAKxwKpvp1 YrBxvB4/OViOQcS6/StMmqBbc2wePuojnrsSva1OMce5cn76yWQIbNhlu9VpM51q1UsA 8c6sASr8ux/ZMVe431PPx3+3BTotmB45jWQejXFYd4cr3GAwZ3Xtcqetn8RhTmSydWxV qP1vCJ8aggtI9v5nnHgCtavI46PM1QtfAXh8U+XB3CW427szDN2BTZwIHwLB9dsR4rrn 0G4NHY7bGz+9i9ZkNsUJi8WEho8UzFOHXmXFPjOiRRXq8RYZzd2DZaFnfvi39hKG2+YU T78w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=d0PUPySlLIBC67v5ixlNA+Tx5z9y+fqfjvpXVBYycgI=; b=RbUt+f++mxrHjlytW5l5SBLFVy0X/8xpSzV+6noCy9hYqOuAqnu+lcb2qJbmiMc69E iBkA+frWkbiPIoCPWdHVTMOekO0TW7/GGcOAoalejqxEyShS9mcqPqJr+0dcHJom1169 4b2fYylAN7SQrC23xUN59Bb9xxGDfIvAUftGifooyhcgoQHYHfDxz2l6DaEfvb4JFfm5 M4WPWyW1h6k0+3KKB/hMR3jclcb70M8Ela9EwNwm56XgEOpPU34Ky965NYhudImNfw86 7+3qxX03rjWNl1/yJMzwFqGgb2v7su9XqLBn2z9VpG+SAEU+gXrwqXztpkrzeQtXxWjG PS5A== X-Gm-Message-State: AMke39nuhKByMMmKgFXsIPu6BfV+vR17pTiJdG85Mut8Q2JurHVepwPjBJaEnhH3bRj0RA== X-Received: by 10.223.160.231 with SMTP id n36mr31865454wrn.167.1489411232049; Mon, 13 Mar 2017 06:20:32 -0700 (PDT) Received: from amir-VirtualBox.ctera.local (bzq-166-168-31-246.red.bezeqint.net. [31.168.166.246]) by smtp.gmail.com with ESMTPSA id f48sm24885857wrf.17.2017.03.13.06.20.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 13 Mar 2017 06:20:31 -0700 (PDT) From: Amir Goldstein To: Jan Kara Cc: Eric Paris , Marko Rauhamaa , linux-fsdevel@vger.kernel.org Subject: [RFC][PATCH 6/6] fanotify: filter events by root mark mount point Date: Mon, 13 Mar 2017 15:20:23 +0200 Message-Id: <1489411223-12081-7-git-send-email-amir73il@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1489411223-12081-1-git-send-email-amir73il@gmail.com> References: <1489411223-12081-1-git-send-email-amir73il@gmail.com> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP When adding a super block root watch from a mount point that is not mounted on the root of the file system, filter out events on file system objects that happen outside this mount point directory (on non decendant objects). This is not like FAN_MARK_MOUNT which filters only events that happened on the mount of the mark. All events on file system objects are reported as long as these objects are accessible from the mark mount point. Signed-off-by: Amir Goldstein --- fs/notify/fanotify/fanotify.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/fs/notify/fanotify/fanotify.c b/fs/notify/fanotify/fanotify.c index 4b74e56..e016ade 100644 --- a/fs/notify/fanotify/fanotify.c +++ b/fs/notify/fanotify/fanotify.c @@ -96,11 +96,12 @@ static bool fanotify_should_send_event(struct fsnotify_mark *inode_mark, { __u32 marks_mask, marks_ignored_mask; const struct path *path = data; + struct vfsmount *mark_mnt = inode_mark ? inode_mark->mnt : NULL; struct dentry *dentry = path->dentry; - pr_debug("%s: inode_mark=%p vfsmnt_mark=%p mask=%x" + pr_debug("%s: inode_mark=%p vfsmnt_mark=%p mark_mnt=%p mask=%x" " data_type=%d\n", __func__, inode_mark, vfsmnt_mark, - event_mask, data_type); + mark_mnt, event_mask, data_type); /* if we don't have enough info to send an event to userspace say no */ if (data_type != FSNOTIFY_EVENT_PATH && @@ -145,6 +146,14 @@ static bool fanotify_should_send_event(struct fsnotify_mark *inode_mark, ~marks_ignored_mask)) return false; + /* + * Only interesetd in dentry events visible from the mount + * from which the root watch was added + */ + if (mark_mnt && mark_mnt->mnt_root != dentry && + d_ancestor(mark_mnt->mnt_root, dentry) == NULL) + return false; + return true; }