From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752458AbbF3RgT (ORCPT ); Tue, 30 Jun 2015 13:36:19 -0400 Received: from mga01.intel.com ([192.55.52.88]:11198 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753141AbbF3RgL (ORCPT ); Tue, 30 Jun 2015 13:36:11 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,379,1432623600"; d="scan'208";a="516704727" Subject: [PATCH] inotify: actually check for invalid bits in sys_inotify_add_watch() To: dave@sr71.net Cc: dave.hansen@linux.intel.com, john@johnmccutchan.com, rlove@rlove.org, eparis@parisplace.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org From: Dave Hansen Date: Tue, 30 Jun 2015 10:36:03 -0700 Message-Id: <20150630173603.D986EDB7@viggo.jf.intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dave Hansen The comment here says that it is checking for invalid bits. But, the mask is *actually* checking to ensure that _any_ valid bit is set, which is quite different. Add the actual check which was intended. Retain the existing check because it actually does something useful: ensure that some inotify bits are being added to the watch. Plus, this is existing behavior which would be nice to preserve. I did a quick sniff test that inotify functions and that my 'inotify-tools' package passes 'make check'. Signed-off-by: Dave Hansen Cc: John McCutchan (maintainer:INOTIFY) Cc: Robert Love (maintainer:INOTIFY) Cc: Eric Paris (maintainer:INOTIFY) Cc: linux-kernel@vger.kernel.org (open list) Cc: stable@vger.kernel.org --- b/fs/notify/inotify/inotify_user.c | 3 +++ 1 file changed, 3 insertions(+) diff -puN fs/notify/inotify/inotify_user.c~inotify-EINVAL-on-invalid-bit fs/notify/inotify/inotify_user.c --- a/fs/notify/inotify/inotify_user.c~inotify-EINVAL-on-invalid-bit 2015-06-26 13:33:30.277219285 -0700 +++ b/fs/notify/inotify/inotify_user.c 2015-06-26 13:35:19.026122033 -0700 @@ -707,6 +707,9 @@ SYSCALL_DEFINE3(inotify_add_watch, int, unsigned flags = 0; /* don't allow invalid bits: we don't want flags set */ + if (unlikely(mask & ~ALL_INOTIFY_BITS)) + return -EINVAL; + /* require at least one valid bit set in the mask */ if (unlikely(!(mask & ALL_INOTIFY_BITS))) return -EINVAL; _