fs/notify/fanotify/fanotify_user.c:296:24: sparse: sparse: incorrect type in argument 1 (different address spaces)

From: kernel test robot
Date: Mon Aug 10 2020 - 17:08:17 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: fc80c51fd4b23ec007e88d4c688f2cac1b8648e7
commit: 670d0a4b10704667765f7d18f7592993d02783aa sparse: use identifiers to define address spaces
date: 8 weeks ago
config: m68k-randconfig-s031-20200811 (attached as .config)
compiler: m68k-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.2-141-g19506bc2-dirty
git checkout 670d0a4b10704667765f7d18f7592993d02783aa
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=m68k

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


sparse warnings: (new ones prefixed by >>)

fs/notify/fanotify/fanotify_user.c:135:63: sparse: sparse: restricted fmode_t degrades to integer
>> fs/notify/fanotify/fanotify_user.c:296:24: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *to @@ got char [noderef] __user *[assigned] buf @@
fs/notify/fanotify/fanotify_user.c:296:24: sparse: expected void *to
fs/notify/fanotify/fanotify_user.c:296:24: sparse: got char [noderef] __user *[assigned] buf
fs/notify/fanotify/fanotify_user.c:877:28: sparse: sparse: restricted fmode_t degrades to integer

vim +296 fs/notify/fanotify/fanotify_user.c

b2d879096ac7997 Eric Paris 2009-12-17 219
44d705b0370b1d5 Amir Goldstein 2020-03-19 220 static int copy_info_to_user(__kernel_fsid_t *fsid, struct fanotify_fh *fh,
44d705b0370b1d5 Amir Goldstein 2020-03-19 221 const char *name, size_t name_len,
44d705b0370b1d5 Amir Goldstein 2020-03-19 222 char __user *buf, size_t count)
5e469c830fdb5a1 Amir Goldstein 2019-01-10 223 {
5e469c830fdb5a1 Amir Goldstein 2019-01-10 224 struct fanotify_event_info_fid info = { };
5e469c830fdb5a1 Amir Goldstein 2019-01-10 225 struct file_handle handle = { };
afc894c784c84cb Jan Kara 2020-03-24 226 unsigned char bounce[FANOTIFY_INLINE_FH_LEN], *fh_buf;
cacfb956d46edc5 Amir Goldstein 2020-03-19 227 size_t fh_len = fh ? fh->len : 0;
44d705b0370b1d5 Amir Goldstein 2020-03-19 228 size_t info_len = fanotify_fid_info_len(fh_len, name_len);
44d705b0370b1d5 Amir Goldstein 2020-03-19 229 size_t len = info_len;
5e469c830fdb5a1 Amir Goldstein 2019-01-10 230
44d705b0370b1d5 Amir Goldstein 2020-03-19 231 pr_debug("%s: fh_len=%zu name_len=%zu, info_len=%zu, count=%zu\n",
44d705b0370b1d5 Amir Goldstein 2020-03-19 232 __func__, fh_len, name_len, info_len, count);
44d705b0370b1d5 Amir Goldstein 2020-03-19 233
44d705b0370b1d5 Amir Goldstein 2020-03-19 234 if (!fh_len || (name && !name_len))
5e469c830fdb5a1 Amir Goldstein 2019-01-10 235 return 0;
5e469c830fdb5a1 Amir Goldstein 2019-01-10 236
44d705b0370b1d5 Amir Goldstein 2020-03-19 237 if (WARN_ON_ONCE(len < sizeof(info) || len > count))
5e469c830fdb5a1 Amir Goldstein 2019-01-10 238 return -EFAULT;
5e469c830fdb5a1 Amir Goldstein 2019-01-10 239
44d705b0370b1d5 Amir Goldstein 2020-03-19 240 /*
44d705b0370b1d5 Amir Goldstein 2020-03-19 241 * Copy event info fid header followed by variable sized file handle
44d705b0370b1d5 Amir Goldstein 2020-03-19 242 * and optionally followed by variable sized filename.
44d705b0370b1d5 Amir Goldstein 2020-03-19 243 */
44d705b0370b1d5 Amir Goldstein 2020-03-19 244 info.hdr.info_type = name_len ? FAN_EVENT_INFO_TYPE_DFID_NAME :
44d705b0370b1d5 Amir Goldstein 2020-03-19 245 FAN_EVENT_INFO_TYPE_FID;
5e469c830fdb5a1 Amir Goldstein 2019-01-10 246 info.hdr.len = len;
d766b553615ce67 Amir Goldstein 2020-03-19 247 info.fsid = *fsid;
5e469c830fdb5a1 Amir Goldstein 2019-01-10 248 if (copy_to_user(buf, &info, sizeof(info)))
5e469c830fdb5a1 Amir Goldstein 2019-01-10 249 return -EFAULT;
5e469c830fdb5a1 Amir Goldstein 2019-01-10 250
5e469c830fdb5a1 Amir Goldstein 2019-01-10 251 buf += sizeof(info);
5e469c830fdb5a1 Amir Goldstein 2019-01-10 252 len -= sizeof(info);
44d705b0370b1d5 Amir Goldstein 2020-03-19 253 if (WARN_ON_ONCE(len < sizeof(handle)))
44d705b0370b1d5 Amir Goldstein 2020-03-19 254 return -EFAULT;
44d705b0370b1d5 Amir Goldstein 2020-03-19 255
afc894c784c84cb Jan Kara 2020-03-24 256 handle.handle_type = fh->type;
5e469c830fdb5a1 Amir Goldstein 2019-01-10 257 handle.handle_bytes = fh_len;
5e469c830fdb5a1 Amir Goldstein 2019-01-10 258 if (copy_to_user(buf, &handle, sizeof(handle)))
5e469c830fdb5a1 Amir Goldstein 2019-01-10 259 return -EFAULT;
5e469c830fdb5a1 Amir Goldstein 2019-01-10 260
5e469c830fdb5a1 Amir Goldstein 2019-01-10 261 buf += sizeof(handle);
5e469c830fdb5a1 Amir Goldstein 2019-01-10 262 len -= sizeof(handle);
44d705b0370b1d5 Amir Goldstein 2020-03-19 263 if (WARN_ON_ONCE(len < fh_len))
44d705b0370b1d5 Amir Goldstein 2020-03-19 264 return -EFAULT;
44d705b0370b1d5 Amir Goldstein 2020-03-19 265
b2d22b6bb33aac1 Jan Kara 2019-03-12 266 /*
44d705b0370b1d5 Amir Goldstein 2020-03-19 267 * For an inline fh and inline file name, copy through stack to exclude
44d705b0370b1d5 Amir Goldstein 2020-03-19 268 * the copy from usercopy hardening protections.
b2d22b6bb33aac1 Jan Kara 2019-03-12 269 */
afc894c784c84cb Jan Kara 2020-03-24 270 fh_buf = fanotify_fh_buf(fh);
b2d22b6bb33aac1 Jan Kara 2019-03-12 271 if (fh_len <= FANOTIFY_INLINE_FH_LEN) {
afc894c784c84cb Jan Kara 2020-03-24 272 memcpy(bounce, fh_buf, fh_len);
afc894c784c84cb Jan Kara 2020-03-24 273 fh_buf = bounce;
b2d22b6bb33aac1 Jan Kara 2019-03-12 274 }
afc894c784c84cb Jan Kara 2020-03-24 275 if (copy_to_user(buf, fh_buf, fh_len))
5e469c830fdb5a1 Amir Goldstein 2019-01-10 276 return -EFAULT;
5e469c830fdb5a1 Amir Goldstein 2019-01-10 277
5e469c830fdb5a1 Amir Goldstein 2019-01-10 278 buf += fh_len;
5e469c830fdb5a1 Amir Goldstein 2019-01-10 279 len -= fh_len;
44d705b0370b1d5 Amir Goldstein 2020-03-19 280
44d705b0370b1d5 Amir Goldstein 2020-03-19 281 if (name_len) {
44d705b0370b1d5 Amir Goldstein 2020-03-19 282 /* Copy the filename with terminating null */
44d705b0370b1d5 Amir Goldstein 2020-03-19 283 name_len++;
44d705b0370b1d5 Amir Goldstein 2020-03-19 284 if (WARN_ON_ONCE(len < name_len))
44d705b0370b1d5 Amir Goldstein 2020-03-19 285 return -EFAULT;
44d705b0370b1d5 Amir Goldstein 2020-03-19 286
44d705b0370b1d5 Amir Goldstein 2020-03-19 287 if (copy_to_user(buf, name, name_len))
44d705b0370b1d5 Amir Goldstein 2020-03-19 288 return -EFAULT;
44d705b0370b1d5 Amir Goldstein 2020-03-19 289
44d705b0370b1d5 Amir Goldstein 2020-03-19 290 buf += name_len;
44d705b0370b1d5 Amir Goldstein 2020-03-19 291 len -= name_len;
44d705b0370b1d5 Amir Goldstein 2020-03-19 292 }
44d705b0370b1d5 Amir Goldstein 2020-03-19 293
44d705b0370b1d5 Amir Goldstein 2020-03-19 294 /* Pad with 0's */
5e469c830fdb5a1 Amir Goldstein 2019-01-10 295 WARN_ON_ONCE(len < 0 || len >= FANOTIFY_EVENT_ALIGN);
5e469c830fdb5a1 Amir Goldstein 2019-01-10 @296 if (len > 0 && clear_user(buf, len))
5e469c830fdb5a1 Amir Goldstein 2019-01-10 297 return -EFAULT;
5e469c830fdb5a1 Amir Goldstein 2019-01-10 298
44d705b0370b1d5 Amir Goldstein 2020-03-19 299 return info_len;
5e469c830fdb5a1 Amir Goldstein 2019-01-10 300 }
5e469c830fdb5a1 Amir Goldstein 2019-01-10 301

:::::: The code at line 296 was first introduced by commit
:::::: 5e469c830fdb5a1ebaa69b375b87f583326fd296 fanotify: copy event fid info to user

:::::: TO: Amir Goldstein <amir73il@xxxxxxxxx>
:::::: CC: Jan Kara <jack@xxxxxxx>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip