CC: [email protected] In-Reply-To: <[email protected]> References: <[email protected]> TO: Amir Goldstein <[email protected]> TO: Jan Kara <[email protected]> CC: [email protected]
Hi Amir, I love your patch! Perhaps something to improve: [auto build test WARNING on ext3/fsnotify] [also build test WARNING on nfsd/nfsd-next driver-core/driver-core-testing linus/master v5.7 next-20200613] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Amir-Goldstein/Prep-work-for-fanotify-named-events/20200612-173701 base: https://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs.git fsnotify :::::: branch date: 2 days ago :::::: commit date: 2 days ago config: i386-randconfig-m021-20200614 (attached as .config) compiler: gcc-9 (Debian 9.3.0-13) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> smatch warnings: fs/notify/fanotify/fanotify_user.c:1179 do_fanotify_mark() error: we previously assumed 'mnt' could be null (see line 1167) # https://github.com/0day-ci/linux/commit/06767da3f04a60d4e363490b79aa7fae78a9837d git remote add linux-review https://github.com/0day-ci/linux git remote update linux-review git checkout 06767da3f04a60d4e363490b79aa7fae78a9837d vim +/mnt +1179 fs/notify/fanotify/fanotify_user.c 0b3b094ac9a7bb Jan Kara 2019-05-15 1034 183caa3c8668e9 Dominik Brodowski 2018-03-17 1035 static int do_fanotify_mark(int fanotify_fd, unsigned int flags, __u64 mask, 183caa3c8668e9 Dominik Brodowski 2018-03-17 1036 int dfd, const char __user *pathname) bbaa4168b2d2d8 Eric Paris 2009-12-17 1037 { 0ff21db9fcc390 Eric Paris 2009-12-17 1038 struct inode *inode = NULL; 0ff21db9fcc390 Eric Paris 2009-12-17 1039 struct vfsmount *mnt = NULL; 2a3edf86040a7e Eric Paris 2009-12-17 1040 struct fsnotify_group *group; 2903ff019b346a Al Viro 2012-08-28 1041 struct fd f; 2a3edf86040a7e Eric Paris 2009-12-17 1042 struct path path; 73072283a249c7 Amir Goldstein 2019-01-10 1043 __kernel_fsid_t __fsid, *fsid = NULL; bdd5a46fe30653 Amir Goldstein 2018-10-04 1044 u32 valid_mask = FANOTIFY_EVENTS | FANOTIFY_EVENT_FLAGS; 23c9deeb3285d3 Amir Goldstein 2018-10-04 1045 unsigned int mark_type = flags & FANOTIFY_MARK_TYPE_BITS; 665d648612813d Amir Goldstein 2020-06-12 1046 bool ignored = flags & FAN_MARK_IGNORED_MASK; cdb4ff81ebb4f2 Amir Goldstein 2020-06-12 1047 unsigned int obj_type, fid_mode; 06767da3f04a60 Amir Goldstein 2020-06-12 1048 u32 umask = 0; 2903ff019b346a Al Viro 2012-08-28 1049 int ret; 2a3edf86040a7e Eric Paris 2009-12-17 1050 2a3edf86040a7e Eric Paris 2009-12-17 1051 pr_debug("%s: fanotify_fd=%d flags=%x dfd=%d pathname=%p mask=%llx\n", 2a3edf86040a7e Eric Paris 2009-12-17 1052 __func__, fanotify_fd, flags, dfd, pathname, mask); 2a3edf86040a7e Eric Paris 2009-12-17 1053 2a3edf86040a7e Eric Paris 2009-12-17 1054 /* we only use the lower 32 bits as of right now. */ 2a3edf86040a7e Eric Paris 2009-12-17 1055 if (mask & ((__u64)0xffffffff << 32)) 2a3edf86040a7e Eric Paris 2009-12-17 1056 return -EINVAL; 2a3edf86040a7e Eric Paris 2009-12-17 1057 23c9deeb3285d3 Amir Goldstein 2018-10-04 1058 if (flags & ~FANOTIFY_MARK_FLAGS) 88380fe66e0ac2 Andreas Gruenbacher 2009-12-17 1059 return -EINVAL; d54f4fba889b20 Amir Goldstein 2018-09-01 1060 d54f4fba889b20 Amir Goldstein 2018-09-01 1061 switch (mark_type) { d54f4fba889b20 Amir Goldstein 2018-09-01 1062 case FAN_MARK_INODE: ac5656d8a4cdd9 Aaron Goidel 2019-08-12 1063 obj_type = FSNOTIFY_OBJ_TYPE_INODE; ac5656d8a4cdd9 Aaron Goidel 2019-08-12 1064 break; d54f4fba889b20 Amir Goldstein 2018-09-01 1065 case FAN_MARK_MOUNT: ac5656d8a4cdd9 Aaron Goidel 2019-08-12 1066 obj_type = FSNOTIFY_OBJ_TYPE_VFSMOUNT; ac5656d8a4cdd9 Aaron Goidel 2019-08-12 1067 break; d54f4fba889b20 Amir Goldstein 2018-09-01 1068 case FAN_MARK_FILESYSTEM: ac5656d8a4cdd9 Aaron Goidel 2019-08-12 1069 obj_type = FSNOTIFY_OBJ_TYPE_SB; d54f4fba889b20 Amir Goldstein 2018-09-01 1070 break; d54f4fba889b20 Amir Goldstein 2018-09-01 1071 default: d54f4fba889b20 Amir Goldstein 2018-09-01 1072 return -EINVAL; d54f4fba889b20 Amir Goldstein 2018-09-01 1073 } d54f4fba889b20 Amir Goldstein 2018-09-01 1074 4d92604cc90aa1 Eric Paris 2009-12-17 1075 switch (flags & (FAN_MARK_ADD | FAN_MARK_REMOVE | FAN_MARK_FLUSH)) { 1734dee4e3a296 Lino Sanfilippo 2010-11-22 1076 case FAN_MARK_ADD: /* fallthrough */ 88380fe66e0ac2 Andreas Gruenbacher 2009-12-17 1077 case FAN_MARK_REMOVE: 1734dee4e3a296 Lino Sanfilippo 2010-11-22 1078 if (!mask) 1734dee4e3a296 Lino Sanfilippo 2010-11-22 1079 return -EINVAL; cc299a98eb13a9 Heinrich Schuchardt 2014-06-04 1080 break; 4d92604cc90aa1 Eric Paris 2009-12-17 1081 case FAN_MARK_FLUSH: 23c9deeb3285d3 Amir Goldstein 2018-10-04 1082 if (flags & ~(FANOTIFY_MARK_TYPE_BITS | FAN_MARK_FLUSH)) cc299a98eb13a9 Heinrich Schuchardt 2014-06-04 1083 return -EINVAL; 88380fe66e0ac2 Andreas Gruenbacher 2009-12-17 1084 break; 88380fe66e0ac2 Andreas Gruenbacher 2009-12-17 1085 default: 88380fe66e0ac2 Andreas Gruenbacher 2009-12-17 1086 return -EINVAL; 88380fe66e0ac2 Andreas Gruenbacher 2009-12-17 1087 } 8fcd65280abc46 Eric Paris 2010-10-28 1088 6685df31255493 Miklos Szeredi 2017-10-30 1089 if (IS_ENABLED(CONFIG_FANOTIFY_ACCESS_PERMISSIONS)) 23c9deeb3285d3 Amir Goldstein 2018-10-04 1090 valid_mask |= FANOTIFY_PERM_EVENTS; 6685df31255493 Miklos Szeredi 2017-10-30 1091 6685df31255493 Miklos Szeredi 2017-10-30 1092 if (mask & ~valid_mask) 2a3edf86040a7e Eric Paris 2009-12-17 1093 return -EINVAL; 2a3edf86040a7e Eric Paris 2009-12-17 1094 665d648612813d Amir Goldstein 2020-06-12 1095 /* Event flags (ONDIR, ON_CHILD) are meaningless in ignored mask */ 665d648612813d Amir Goldstein 2020-06-12 1096 if (ignored) 665d648612813d Amir Goldstein 2020-06-12 1097 mask &= ~FANOTIFY_EVENT_FLAGS; 665d648612813d Amir Goldstein 2020-06-12 1098 2903ff019b346a Al Viro 2012-08-28 1099 f = fdget(fanotify_fd); 2903ff019b346a Al Viro 2012-08-28 1100 if (unlikely(!f.file)) 2a3edf86040a7e Eric Paris 2009-12-17 1101 return -EBADF; 2a3edf86040a7e Eric Paris 2009-12-17 1102 2a3edf86040a7e Eric Paris 2009-12-17 1103 /* verify that this is indeed an fanotify instance */ 2a3edf86040a7e Eric Paris 2009-12-17 1104 ret = -EINVAL; 2903ff019b346a Al Viro 2012-08-28 1105 if (unlikely(f.file->f_op != &fanotify_fops)) 2a3edf86040a7e Eric Paris 2009-12-17 1106 goto fput_and_out; 2903ff019b346a Al Viro 2012-08-28 1107 group = f.file->private_data; 4231a23530a30e Eric Paris 2010-10-28 1108 4231a23530a30e Eric Paris 2010-10-28 1109 /* 4231a23530a30e Eric Paris 2010-10-28 1110 * group->priority == FS_PRIO_0 == FAN_CLASS_NOTIF. These are not 4231a23530a30e Eric Paris 2010-10-28 1111 * allowed to set permissions events. 4231a23530a30e Eric Paris 2010-10-28 1112 */ 4231a23530a30e Eric Paris 2010-10-28 1113 ret = -EINVAL; 23c9deeb3285d3 Amir Goldstein 2018-10-04 1114 if (mask & FANOTIFY_PERM_EVENTS && 4231a23530a30e Eric Paris 2010-10-28 1115 group->priority == FS_PRIO_0) 4231a23530a30e Eric Paris 2010-10-28 1116 goto fput_and_out; 2a3edf86040a7e Eric Paris 2009-12-17 1117 235328d1fa4251 Amir Goldstein 2019-01-10 1118 /* 235328d1fa4251 Amir Goldstein 2019-01-10 1119 * Events with data type inode do not carry enough information to report 235328d1fa4251 Amir Goldstein 2019-01-10 1120 * event->fd, so we do not allow setting a mask for inode events unless 235328d1fa4251 Amir Goldstein 2019-01-10 1121 * group supports reporting fid. 235328d1fa4251 Amir Goldstein 2019-01-10 1122 * inode events are not supported on a mount mark, because they do not 235328d1fa4251 Amir Goldstein 2019-01-10 1123 * carry enough information (i.e. path) to be filtered by mount point. 235328d1fa4251 Amir Goldstein 2019-01-10 1124 */ cdb4ff81ebb4f2 Amir Goldstein 2020-06-12 1125 fid_mode = FAN_GROUP_FLAG(group, FANOTIFY_FID_BITS); 235328d1fa4251 Amir Goldstein 2019-01-10 1126 if (mask & FANOTIFY_INODE_EVENTS && cdb4ff81ebb4f2 Amir Goldstein 2020-06-12 1127 (!fid_mode || mark_type == FAN_MARK_MOUNT)) 235328d1fa4251 Amir Goldstein 2019-01-10 1128 goto fput_and_out; 235328d1fa4251 Amir Goldstein 2019-01-10 1129 0a8dd2db579f7a Heinrich Schuchardt 2014-06-04 1130 if (flags & FAN_MARK_FLUSH) { 0a8dd2db579f7a Heinrich Schuchardt 2014-06-04 1131 ret = 0; d54f4fba889b20 Amir Goldstein 2018-09-01 1132 if (mark_type == FAN_MARK_MOUNT) 0a8dd2db579f7a Heinrich Schuchardt 2014-06-04 1133 fsnotify_clear_vfsmount_marks_by_group(group); d54f4fba889b20 Amir Goldstein 2018-09-01 1134 else if (mark_type == FAN_MARK_FILESYSTEM) d54f4fba889b20 Amir Goldstein 2018-09-01 1135 fsnotify_clear_sb_marks_by_group(group); 0a8dd2db579f7a Heinrich Schuchardt 2014-06-04 1136 else 0a8dd2db579f7a Heinrich Schuchardt 2014-06-04 1137 fsnotify_clear_inode_marks_by_group(group); 0a8dd2db579f7a Heinrich Schuchardt 2014-06-04 1138 goto fput_and_out; 0a8dd2db579f7a Heinrich Schuchardt 2014-06-04 1139 } 0a8dd2db579f7a Heinrich Schuchardt 2014-06-04 1140 ac5656d8a4cdd9 Aaron Goidel 2019-08-12 1141 ret = fanotify_find_path(dfd, pathname, &path, flags, ac5656d8a4cdd9 Aaron Goidel 2019-08-12 1142 (mask & ALL_FSNOTIFY_EVENTS), obj_type); 2a3edf86040a7e Eric Paris 2009-12-17 1143 if (ret) 2a3edf86040a7e Eric Paris 2009-12-17 1144 goto fput_and_out; 2a3edf86040a7e Eric Paris 2009-12-17 1145 0b3b094ac9a7bb Jan Kara 2019-05-15 1146 if (flags & FAN_MARK_ADD) { 0b3b094ac9a7bb Jan Kara 2019-05-15 1147 ret = fanotify_events_supported(&path, mask); 0b3b094ac9a7bb Jan Kara 2019-05-15 1148 if (ret) 0b3b094ac9a7bb Jan Kara 2019-05-15 1149 goto path_put_and_out; 0b3b094ac9a7bb Jan Kara 2019-05-15 1150 } 0b3b094ac9a7bb Jan Kara 2019-05-15 1151 cdb4ff81ebb4f2 Amir Goldstein 2020-06-12 1152 if (fid_mode) { 73072283a249c7 Amir Goldstein 2019-01-10 1153 ret = fanotify_test_fid(&path, &__fsid); a8b13aa20afb69 Amir Goldstein 2019-01-10 1154 if (ret) a8b13aa20afb69 Amir Goldstein 2019-01-10 1155 goto path_put_and_out; 77115225acc67d Amir Goldstein 2019-01-10 1156 73072283a249c7 Amir Goldstein 2019-01-10 1157 fsid = &__fsid; a8b13aa20afb69 Amir Goldstein 2019-01-10 1158 } a8b13aa20afb69 Amir Goldstein 2019-01-10 1159 2a3edf86040a7e Eric Paris 2009-12-17 1160 /* inode held in place by reference to path; group by fget on fd */ d54f4fba889b20 Amir Goldstein 2018-09-01 1161 if (mark_type == FAN_MARK_INODE) 2a3edf86040a7e Eric Paris 2009-12-17 1162 inode = path.dentry->d_inode; 0ff21db9fcc390 Eric Paris 2009-12-17 1163 else 0ff21db9fcc390 Eric Paris 2009-12-17 1164 mnt = path.mnt; 2a3edf86040a7e Eric Paris 2009-12-17 1165 06767da3f04a60 Amir Goldstein 2020-06-12 1166 /* Mask out FAN_EVENT_ON_CHILD flag for sb/mount/non-dir marks */ 06767da3f04a60 Amir Goldstein 2020-06-12 @1167 if (mnt || !S_ISDIR(inode->i_mode)) { 06767da3f04a60 Amir Goldstein 2020-06-12 1168 mask &= ~FAN_EVENT_ON_CHILD; 06767da3f04a60 Amir Goldstein 2020-06-12 1169 umask = FAN_EVENT_ON_CHILD; 06767da3f04a60 Amir Goldstein 2020-06-12 1170 } 06767da3f04a60 Amir Goldstein 2020-06-12 1171 2a3edf86040a7e Eric Paris 2009-12-17 1172 /* create/update an inode mark */ 0a8dd2db579f7a Heinrich Schuchardt 2014-06-04 1173 switch (flags & (FAN_MARK_ADD | FAN_MARK_REMOVE)) { c6223f464927ca Andreas Gruenbacher 2009-12-17 1174 case FAN_MARK_ADD: d54f4fba889b20 Amir Goldstein 2018-09-01 1175 if (mark_type == FAN_MARK_MOUNT) 77115225acc67d Amir Goldstein 2019-01-10 1176 ret = fanotify_add_vfsmount_mark(group, mnt, mask, 77115225acc67d Amir Goldstein 2019-01-10 1177 flags, fsid); d54f4fba889b20 Amir Goldstein 2018-09-01 1178 else if (mark_type == FAN_MARK_FILESYSTEM) 77115225acc67d Amir Goldstein 2019-01-10 @1179 ret = fanotify_add_sb_mark(group, mnt->mnt_sb, mask, 77115225acc67d Amir Goldstein 2019-01-10 1180 flags, fsid); 0ff21db9fcc390 Eric Paris 2009-12-17 1181 else 77115225acc67d Amir Goldstein 2019-01-10 1182 ret = fanotify_add_inode_mark(group, inode, mask, 77115225acc67d Amir Goldstein 2019-01-10 1183 flags, fsid); c6223f464927ca Andreas Gruenbacher 2009-12-17 1184 break; c6223f464927ca Andreas Gruenbacher 2009-12-17 1185 case FAN_MARK_REMOVE: d54f4fba889b20 Amir Goldstein 2018-09-01 1186 if (mark_type == FAN_MARK_MOUNT) 77115225acc67d Amir Goldstein 2019-01-10 1187 ret = fanotify_remove_vfsmount_mark(group, mnt, mask, 06767da3f04a60 Amir Goldstein 2020-06-12 1188 flags, umask); d54f4fba889b20 Amir Goldstein 2018-09-01 1189 else if (mark_type == FAN_MARK_FILESYSTEM) 77115225acc67d Amir Goldstein 2019-01-10 1190 ret = fanotify_remove_sb_mark(group, mnt->mnt_sb, mask, 06767da3f04a60 Amir Goldstein 2020-06-12 1191 flags, umask); f3640192c0a177 Andreas Gruenbacher 2009-12-17 1192 else 77115225acc67d Amir Goldstein 2019-01-10 1193 ret = fanotify_remove_inode_mark(group, inode, mask, 06767da3f04a60 Amir Goldstein 2020-06-12 1194 flags, umask); c6223f464927ca Andreas Gruenbacher 2009-12-17 1195 break; c6223f464927ca Andreas Gruenbacher 2009-12-17 1196 default: c6223f464927ca Andreas Gruenbacher 2009-12-17 1197 ret = -EINVAL; c6223f464927ca Andreas Gruenbacher 2009-12-17 1198 } 2a3edf86040a7e Eric Paris 2009-12-17 1199 a8b13aa20afb69 Amir Goldstein 2019-01-10 1200 path_put_and_out: 2a3edf86040a7e Eric Paris 2009-12-17 1201 path_put(&path); 2a3edf86040a7e Eric Paris 2009-12-17 1202 fput_and_out: 2903ff019b346a Al Viro 2012-08-28 1203 fdput(f); 2a3edf86040a7e Eric Paris 2009-12-17 1204 return ret; 2a3edf86040a7e Eric Paris 2009-12-17 1205 } 2a3edf86040a7e Eric Paris 2009-12-17 1206 :::::: The code at line 1179 was first introduced by commit :::::: 77115225acc67d9ac4b15f04dd138006b9cd1ef2 fanotify: cache fsid in fsnotify_mark_connector :::::: TO: Amir Goldstein <[email protected]> :::::: CC: Jan Kara <[email protected]> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
