Re: [PATCH v2 13/16] fanotify: report name info for FAN_DIR_MODIFY event
From: kbuild test robot <hidden>
Date: 2020-02-19 09:44:01
Also in:
linux-fsdevel, oe-kbuild-all
Hi Amir, I love your patch! Perhaps something to improve: [auto build test WARNING on 11a48a5a18c63fd7621bb050228cebf13566e4d8] url: https://github.com/0day-ci/linux/commits/Amir-Goldstein/Fanotify-event-with-name-info/20200219-160517 base: 11a48a5a18c63fd7621bb050228cebf13566e4d8 config: c6x-randconfig-a001-20200219 (attached as .config) compiler: c6x-elf-gcc (GCC) 7.5.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree GCC_VERSION=7.5.0 make.cross ARCH=c6x If you fix the issue, kindly add following tag Reported-by: kbuild test robot <redacted> All warnings (new ones prefixed by >>): In file included from include/linux/kernel.h:15:0, from include/linux/list.h:9, from include/linux/preempt.h:11, from include/linux/spinlock.h:51, from include/linux/seqlock.h:36, from include/linux/time.h:6, from include/linux/stat.h:19, from include/linux/fcntl.h:5, from fs/notify/fanotify/fanotify_user.c:3: fs/notify/fanotify/fanotify_user.c: In function 'copy_info_to_user':
quoted
fs/notify/fanotify/fanotify_user.c:238:11: warning: format '%lu' expects argument of type 'long unsigned int', but argument 4 has type 'size_t {aka unsigned int}' [-Wformat=]
pr_debug("%s: fh_len=%lu name_len=%lu, info_len=%lu, count=%lu\n",
^
include/linux/printk.h:288:21: note: in definition of macro 'pr_fmt'
#define pr_fmt(fmt) fmt
^~~
include/linux/dynamic_debug.h:143:2: note: in expansion of macro '__dynamic_func_call'
__dynamic_func_call(__UNIQUE_ID(ddebug), fmt, func, ##__VA_ARGS__)
^~~~~~~~~~~~~~~~~~~
include/linux/dynamic_debug.h:153:2: note: in expansion of macro '_dynamic_func_call'
_dynamic_func_call(fmt, __dynamic_pr_debug, \
^~~~~~~~~~~~~~~~~~
include/linux/printk.h:335:2: note: in expansion of macro 'dynamic_pr_debug'
dynamic_pr_debug(fmt, ##__VA_ARGS__)
^~~~~~~~~~~~~~~~
fs/notify/fanotify/fanotify_user.c:238:2: note: in expansion of macro 'pr_debug'
pr_debug("%s: fh_len=%lu name_len=%lu, info_len=%lu, count=%lu\n",
^~~~~~~~
fs/notify/fanotify/fanotify_user.c:238:11: warning: format '%lu' expects argument of type 'long unsigned int', but argument 5 has type 'size_t {aka unsigned int}' [-Wformat=]
pr_debug("%s: fh_len=%lu name_len=%lu, info_len=%lu, count=%lu\n",
^
include/linux/printk.h:288:21: note: in definition of macro 'pr_fmt'
#define pr_fmt(fmt) fmt
^~~
include/linux/dynamic_debug.h:143:2: note: in expansion of macro '__dynamic_func_call'
__dynamic_func_call(__UNIQUE_ID(ddebug), fmt, func, ##__VA_ARGS__)
^~~~~~~~~~~~~~~~~~~
include/linux/dynamic_debug.h:153:2: note: in expansion of macro '_dynamic_func_call'
_dynamic_func_call(fmt, __dynamic_pr_debug, \
^~~~~~~~~~~~~~~~~~
include/linux/printk.h:335:2: note: in expansion of macro 'dynamic_pr_debug'
dynamic_pr_debug(fmt, ##__VA_ARGS__)
^~~~~~~~~~~~~~~~
fs/notify/fanotify/fanotify_user.c:238:2: note: in expansion of macro 'pr_debug'
pr_debug("%s: fh_len=%lu name_len=%lu, info_len=%lu, count=%lu\n",
^~~~~~~~
fs/notify/fanotify/fanotify_user.c:238:11: warning: format '%lu' expects argument of type 'long unsigned int', but argument 6 has type 'size_t {aka unsigned int}' [-Wformat=]
pr_debug("%s: fh_len=%lu name_len=%lu, info_len=%lu, count=%lu\n",
^
include/linux/printk.h:288:21: note: in definition of macro 'pr_fmt'
#define pr_fmt(fmt) fmt
^~~
include/linux/dynamic_debug.h:143:2: note: in expansion of macro '__dynamic_func_call'
__dynamic_func_call(__UNIQUE_ID(ddebug), fmt, func, ##__VA_ARGS__)
^~~~~~~~~~~~~~~~~~~
include/linux/dynamic_debug.h:153:2: note: in expansion of macro '_dynamic_func_call'
_dynamic_func_call(fmt, __dynamic_pr_debug, \
^~~~~~~~~~~~~~~~~~
include/linux/printk.h:335:2: note: in expansion of macro 'dynamic_pr_debug'
dynamic_pr_debug(fmt, ##__VA_ARGS__)
^~~~~~~~~~~~~~~~
fs/notify/fanotify/fanotify_user.c:238:2: note: in expansion of macro 'pr_debug'
pr_debug("%s: fh_len=%lu name_len=%lu, info_len=%lu, count=%lu\n",
^~~~~~~~
fs/notify/fanotify/fanotify_user.c:238:11: warning: format '%lu' expects argument of type 'long unsigned int', but argument 7 has type 'size_t {aka unsigned int}' [-Wformat=]
pr_debug("%s: fh_len=%lu name_len=%lu, info_len=%lu, count=%lu\n",
^
include/linux/printk.h:288:21: note: in definition of macro 'pr_fmt'
#define pr_fmt(fmt) fmt
^~~
include/linux/dynamic_debug.h:143:2: note: in expansion of macro '__dynamic_func_call'
__dynamic_func_call(__UNIQUE_ID(ddebug), fmt, func, ##__VA_ARGS__)
^~~~~~~~~~~~~~~~~~~
include/linux/dynamic_debug.h:153:2: note: in expansion of macro '_dynamic_func_call'
_dynamic_func_call(fmt, __dynamic_pr_debug, \
^~~~~~~~~~~~~~~~~~
include/linux/printk.h:335:2: note: in expansion of macro 'dynamic_pr_debug'
dynamic_pr_debug(fmt, ##__VA_ARGS__)
^~~~~~~~~~~~~~~~
fs/notify/fanotify/fanotify_user.c:238:2: note: in expansion of macro 'pr_debug'
pr_debug("%s: fh_len=%lu name_len=%lu, info_len=%lu, count=%lu\n",
^~~~~~~~
vim +238 fs/notify/fanotify/fanotify_user.c
224
225 static int copy_info_to_user(__kernel_fsid_t *fsid, struct fanotify_fid_hdr *fh,
226 struct fanotify_fid *fid, const struct qstr *name,
227 char __user *buf, size_t count)
228 {
229 struct fanotify_event_info_fid info = { };
230 struct file_handle handle = { };
231 unsigned char bounce[max(FANOTIFY_INLINE_FH_LEN, DNAME_INLINE_LEN)];
232 const unsigned char *data;
233 size_t fh_len = fh->len;
234 size_t name_len = name ? name->len : 0;
235 size_t info_len = fanotify_fid_info_len(fh_len, name_len);
236 size_t len = info_len;
237
> 238 pr_debug("%s: fh_len=%lu name_len=%lu, info_len=%lu, count=%lu\n",
239 __func__, fh_len, name_len, info_len, count);
240
241 if (!fh_len || (name && !name_len))
242 return 0;
243
244 if (WARN_ON_ONCE(len < sizeof(info) || len > count))
245 return -EFAULT;
246
247 /*
248 * Copy event info fid header followed by vaiable sized file handle
249 * and optionally followed by vaiable sized filename.
250 */
251 info.hdr.info_type = name_len ? FAN_EVENT_INFO_TYPE_DFID_NAME :
252 FAN_EVENT_INFO_TYPE_FID;
253 info.hdr.len = len;
254 info.fsid = *fsid;
255 if (copy_to_user(buf, &info, sizeof(info)))
256 return -EFAULT;
257
258 buf += sizeof(info);
259 len -= sizeof(info);
260 if (WARN_ON_ONCE(len < sizeof(handle)))
261 return -EFAULT;
262
263 handle.handle_type = fh->type;
264 handle.handle_bytes = fh_len;
265 if (copy_to_user(buf, &handle, sizeof(handle)))
266 return -EFAULT;
267
268 buf += sizeof(handle);
269 len -= sizeof(handle);
270 if (WARN_ON_ONCE(len < fh_len))
271 return -EFAULT;
272
273 /*
274 * For an inline fh and inline file name, copy through stack to exclude
275 * the copy from usercopy hardening protections.
276 */
277 data = fanotify_fid_fh(fid, fh_len);
278 if (fh_len <= FANOTIFY_INLINE_FH_LEN) {
279 memcpy(bounce, data, fh_len);
280 data = bounce;
281 }
282 if (copy_to_user(buf, data, fh_len))
283 return -EFAULT;
284
285 buf += fh_len;
286 len -= fh_len;
287
288 if (name_len) {
289 /* Copy the filename with terminating null */
290 name_len++;
291 if (WARN_ON_ONCE(len < name_len))
292 return -EFAULT;
293
294 data = name->name;
295 if (name_len <= DNAME_INLINE_LEN) {
296 memcpy(bounce, data, name_len);
297 data = bounce;
298 }
299 if (copy_to_user(buf, data, name_len))
300 return -EFAULT;
301
302 buf += name_len;
303 len -= name_len;
304 }
305
306 /* Pad with 0's */
307 WARN_ON_ONCE(len < 0 || len >= FANOTIFY_EVENT_ALIGN);
308 if (len > 0 && clear_user(buf, len))
309 return -EFAULT;
310
311 return info_len;
312 }
313
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Attachments
- .config.gz [application/gzip] 28991 bytes