Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp3081586imm; Sun, 1 Jul 2018 11:51:02 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcNnNNnWYhS+jYc0oMWdmPRmcUGi+lmTsER9hRKKdSlrjM74e9jjxXJqbiE06GOpNdV8VHk X-Received: by 2002:a62:90d4:: with SMTP id q81-v6mr13704468pfk.37.1530471062782; Sun, 01 Jul 2018 11:51:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530471062; cv=none; d=google.com; s=arc-20160816; b=kiPfAJ+/w1Q1JhWPLRoj7lseQBL8moszVwACL9kusYZZK7DENz9f/JQGyHntHUkZRy P7kPuJ/4f5uOGck6E8jgYI0k9/05SkR/C2d0rVCk3GPpGmzZWvvvgzOtnRlRLHIwHZUh qDFchwl+a+7NOpnMia9ToRRpdSaU+yzYhJuk0ZH/37duKV0dhaZpMDBY7UXAIKiaxzTe 9mP/rz/RCqUYCvZUr74DjCkfeaZbqB1HOKlo0DlcHrnaw+Iu6yf54goVunFjtr8QHvFo C1xOdY4LulHMO/GXTojXsOUlI6++EOvI+BgIojQtR9zTO5QdRn4rPxCSlwXeZZGUZ4dI fqBQ== 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=TJuONAC1XEgj0nUXYXDrPXCJ0v956I4dfXyjOR33JSg=; b=exXTBMRMTeV0tB9yrJ9aLdpc9Z8Tizk5pJmvfLKZQpmWM582FPiKGodluqtk2O41MN RQvPjzxpZ22YpGnh4xeNmVC3KHJzRKUQ5Ykx1oWNgGdR/ZWFzoKDGlOfOv6AAK1jOjiP JBlj4KFn8A0sUjmgZSX0enqETfkvlO/4WtPoi2Y0Gh5mKqBQcFQmKXfirc0O6faNmbz3 nM64dvHoNjm1sPWdDp7VI9hWhWKQmF1qwya2leOb3l0RiZLqa1X+GWmrZdEFbWs9zdo2 hCQTEFeWUb34NagEMct9RK1lFqShXhloo17eg6OBNyIAAagNuv6fLNyPxzGrjBqBPU7H RZ+A== 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 8-v6si1205602pgs.324.2018.07.01.11.50.48; Sun, 01 Jul 2018 11:51:02 -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 S1752625AbeGAQL3 (ORCPT + 99 others); Sun, 1 Jul 2018 12:11:29 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:59704 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752607AbeGAQLY (ORCPT ); Sun, 1 Jul 2018 12:11:24 -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 57826AEF; Sun, 1 Jul 2018 16:11:23 +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 3.18 04/85] fsnotify: fix ignore mask logic in send_to_group() Date: Sun, 1 Jul 2018 18:01:22 +0200 Message-Id: <20180701153122.540490240@linuxfoundation.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180701153122.365061142@linuxfoundation.org> References: <20180701153122.365061142@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 3.18-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 @@ -135,8 +135,9 @@ static int send_to_group(struct inode *t const unsigned char *file_name) { 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(); @@ -156,29 +157,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,