Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3747241imm; Mon, 18 Jun 2018 03:26:30 -0700 (PDT) X-Google-Smtp-Source: ADUXVKInnQWrvVtbZWtdDar3Xrr2H521zVbEUGaQaQ08DZQ5hS3nf6kO6MC5gqRbOFwfDYGYf1Yl X-Received: by 2002:a63:6ec8:: with SMTP id j191-v6mr10624225pgc.232.1529317590198; Mon, 18 Jun 2018 03:26:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529317590; cv=none; d=google.com; s=arc-20160816; b=nCqy+SLiDLI+rX+j0IEEyGE/doIYBUjTQYNBAyG1cy19Pn3VoP2lNXOMSoR2aiBqKt 0Y0rs0p8p5wzy6Kadd4ny14jFqmSJhcmC1QdfzwPF6hzW5qROEGu4JYlq8EylvrAFhWW roNlMX2HLCDZekZgWP5ubP7mg47c0en/sCzneU3lS/N6T/onqI3Nrl1QL92Os2QEvdSk gPVPnJSas7vT2JZrLw0mnrq85BebflxHH9pfnra95XWtWV6WYDmZ+HN17f41i7JGn1eU hCFfQD7rpjNog9YwlGoFvew+537kW2YsQnD/vjTlcGS50HhOqYi8sU/i/eRCZ9QP9Zcm OL8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=/cd2uP2y01GnykoaSnYK4KP9xdo5NWXJkWVvjapWXQI=; b=Q+U+4hyILuc3hGNGrGxHOFysiNJQJY9Z1dxKbrHKukojA0aSDwfq0fSQSVBDUwj0Zg vnCkT/23BBrrke4i0zFdvBe0FCzEOePcxdnzOc52HeX928a2rogakpq/I5BMCsmD9TGN GC9Wm9ooKJ2Dgar+g2QSXOSDnbccE+IUOFlQDvu67iaLJfxgt56mgYMm/aHuV1Ev0x7y zj4SsJkJ7eDGX7VfxNoUr+ectOexXcYmoSKGnvSpPY0HEohXajgdXy9Q6pHyK1hHeh+T fRAMbDZBM2pYD5QNvvXWv3NS26ocLnE2kbKR4cxJ08OLAGC7/noFmGpHnDXK9AX39DRR AprQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n6-v6si4340686pgs.205.2018.06.18.03.26.16; Mon, 18 Jun 2018 03:26:30 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933557AbeFRIPP (ORCPT + 99 others); Mon, 18 Jun 2018 04:15:15 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:52724 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933118AbeFRIPN (ORCPT ); Mon, 18 Jun 2018 04:15:13 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 42338C74; Mon, 18 Jun 2018 08:15:12 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Amir Goldstein , Jan Kara , Sasha Levin Subject: [PATCH 4.16 012/279] fsnotify: fix ignore mask logic in send_to_group() Date: Mon, 18 Jun 2018 10:09:57 +0200 Message-Id: <20180618080609.329833289@linuxfoundation.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180618080608.851973560@linuxfoundation.org> References: <20180618080608.851973560@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 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 4.16-stable review patch. If anyone has any objections, please let me know. ------------------ From: Amir Goldstein [ Upstream commit 92183a42898dc400b89da35685d1814ac6acd3d8 ] The ignore mask logic in send_to_group() does not match the logic in fanotify_should_send_event(). In the latter, a vfsmount mark ignore mask precedes an inode mark mask and in the former, it does not. That difference may cause events to be sent to fanotify backend for no reason. Fix the logic in send_to_group() to match that of fanotify_should_send_event(). Signed-off-by: Amir Goldstein Signed-off-by: Jan Kara Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- fs/notify/fsnotify.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) --- a/fs/notify/fsnotify.c +++ b/fs/notify/fsnotify.c @@ -192,8 +192,9 @@ static int send_to_group(struct inode *t struct fsnotify_iter_info *iter_info) { struct fsnotify_group *group = NULL; - __u32 inode_test_mask = 0; - __u32 vfsmount_test_mask = 0; + __u32 test_mask = (mask & ~FS_EVENT_ON_CHILD); + __u32 marks_mask = 0; + __u32 marks_ignored_mask = 0; if (unlikely(!inode_mark && !vfsmount_mark)) { BUG(); @@ -213,29 +214,25 @@ static int send_to_group(struct inode *t /* does the inode mark tell us to do something? */ if (inode_mark) { group = inode_mark->group; - inode_test_mask = (mask & ~FS_EVENT_ON_CHILD); - inode_test_mask &= inode_mark->mask; - inode_test_mask &= ~inode_mark->ignored_mask; + marks_mask |= inode_mark->mask; + marks_ignored_mask |= inode_mark->ignored_mask; } /* does the vfsmount_mark tell us to do something? */ if (vfsmount_mark) { - vfsmount_test_mask = (mask & ~FS_EVENT_ON_CHILD); group = vfsmount_mark->group; - vfsmount_test_mask &= vfsmount_mark->mask; - vfsmount_test_mask &= ~vfsmount_mark->ignored_mask; - if (inode_mark) - vfsmount_test_mask &= ~inode_mark->ignored_mask; + marks_mask |= vfsmount_mark->mask; + marks_ignored_mask |= vfsmount_mark->ignored_mask; } pr_debug("%s: group=%p to_tell=%p mask=%x inode_mark=%p" - " inode_test_mask=%x vfsmount_mark=%p vfsmount_test_mask=%x" + " vfsmount_mark=%p marks_mask=%x marks_ignored_mask=%x" " data=%p data_is=%d cookie=%d\n", - __func__, group, to_tell, mask, inode_mark, - inode_test_mask, vfsmount_mark, vfsmount_test_mask, data, + __func__, group, to_tell, mask, inode_mark, vfsmount_mark, + marks_mask, marks_ignored_mask, data, data_is, cookie); - if (!inode_test_mask && !vfsmount_test_mask) + if (!(test_mask & marks_mask & ~marks_ignored_mask)) return 0; return group->ops->handle_event(group, to_tell, inode_mark,