Re: [PATCH 1/1] fs: inotify: Add full paths option to inotify

From: kernel test robot
Date: Tue Jun 07 2022 - 01:04:26 EST


Hi Oliver,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on jack-fs/fsnotify]
[also build test ERROR on linus/master v5.19-rc1 next-20220606]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url: https://github.com/intel-lab-lkp/linux/commits/Oliver-Ford/fs-inotify-Add-full-paths-option-to-inotify/20220607-064615
base: https://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs.git fsnotify
config: hexagon-randconfig-r018-20220607 (https://download.01.org/0day-ci/archive/20220607/202206071212.ER5BjGEI-lkp@xxxxxxxxx/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project b92436efcb7813fc481b30f2593a4907568d917a)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/67d0b1ab6f9129e4902f90506f2ab045ddbae43f
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Oliver-Ford/fs-inotify-Add-full-paths-option-to-inotify/20220607-064615
git checkout 67d0b1ab6f9129e4902f90506f2ab045ddbae43f
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash fs/notify/inotify/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All error/warnings (new ones prefixed by >>):

>> fs/notify/inotify/inotify_user.c:219:12: error: call to undeclared function 'inotify_idr_find'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
i_mark = inotify_idr_find(group, event->wd);
^
>> fs/notify/inotify/inotify_user.c:219:10: warning: incompatible integer to pointer conversion assigning to 'struct inotify_inode_mark *' from 'int' [-Wint-conversion]
i_mark = inotify_idr_find(group, event->wd);
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> fs/notify/inotify/inotify_user.c:451:35: error: static declaration of 'inotify_idr_find' follows non-static declaration
static struct inotify_inode_mark *inotify_idr_find(struct fsnotify_group *group,
^
fs/notify/inotify/inotify_user.c:219:12: note: previous implicit declaration is here
i_mark = inotify_idr_find(group, event->wd);
^
1 warning and 2 errors generated.


vim +/inotify_idr_find +219 fs/notify/inotify/inotify_user.c

194
195 /*
196 * Copy an event to user space, returning how much we copied.
197 *
198 * We already checked that the event size is smaller than the
199 * buffer we had in "get_one_event()" above.
200 */
201 static ssize_t copy_event_to_user(struct fsnotify_group *group,
202 struct fsnotify_event *fsn_event,
203 char __user *buf)
204 {
205 struct inotify_event inotify_event;
206 struct inotify_event_info *event;
207 struct path event_path;
208 struct inotify_inode_mark *i_mark;
209 size_t event_size = sizeof(struct inotify_event);
210 size_t name_len;
211 size_t pad_name_len;
212
213 pr_debug("%s: group=%p event=%p\n", __func__, group, fsn_event);
214
215 event = INOTIFY_E(fsn_event);
216 /* ensure caller has access to view the full path */
217 if (event->mask & IN_FULL_PATHS && event->mask & IN_MOVE_SELF &&
218 kern_path(event->name, 0, &event_path)) {
> 219 i_mark = inotify_idr_find(group, event->wd);
220 if (likely(i_mark)) {
221 fsnotify_destroy_mark(&i_mark->fsn_mark, group);
222 /* match ref taken by inotify_idr_find */
223 fsnotify_put_mark(&i_mark->fsn_mark);
224 }
225 return -EACCES;
226 }
227
228 name_len = event->name_len;
229 /*
230 * round up name length so it is a multiple of event_size
231 * plus an extra byte for the terminating '\0'.
232 */
233 pad_name_len = round_event_name_len(fsn_event);
234 inotify_event.len = pad_name_len;
235 inotify_event.mask = inotify_mask_to_arg(event->mask);
236 inotify_event.wd = event->wd;
237 inotify_event.cookie = event->sync_cookie;
238
239 /* send the main event */
240 if (copy_to_user(buf, &inotify_event, event_size))
241 return -EFAULT;
242
243 buf += event_size;
244
245 /*
246 * fsnotify only stores the pathname, so here we have to send the pathname
247 * and then pad that pathname out to a multiple of sizeof(inotify_event)
248 * with zeros.
249 */
250 if (pad_name_len) {
251 /* copy the path name */
252 if (copy_to_user(buf, event->name, name_len))
253 return -EFAULT;
254 buf += name_len;
255
256 /* fill userspace with 0's */
257 if (clear_user(buf, pad_name_len - name_len))
258 return -EFAULT;
259 event_size += pad_name_len;
260 }
261
262 return event_size;
263 }
264

--
0-DAY CI Kernel Test Service
https://01.org/lkp