tree: https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git devel/hardening head: 4b677c85590798c3141758109cc5be7ba068a3ff commit: b8ff84101ad3b4f8f48a8db4604b72f08c222be2 [52/69] overflow: Introduce overflows_type() and castable_to_type() config: i386-defconfig compiler: gcc-11 (Debian 11.3.0-5) 11.3.0 reproduce (this is a W=1 build): # https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git/commit/?id=b8ff84101ad3b4f8f48a8db4604b72f08c222be2 git remote add kees https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git git fetch --no-tags kees devel/hardening git checkout b8ff84101ad3b4f8f48a8db4604b72f08c222be2 # save the config file mkdir build_dir && cp config build_dir/.config make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot All errors (new ones prefixed by >>): include/linux/overflow.h:134:34: note: in expansion of macro 'type_max' 134 | (x) < 0 || (x) > type_max(typeof(T)) ? 1 : 0 \ | ^~~~~~~~ include/linux/overflow.h:159:31: note: in expansion of macro '__overflows_type_constexpr' 159 | __overflows_type_constexpr(n, T), \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/i915_user_extensions.c:54:21: note: in expansion of macro 'overflows_type' 54 | overflows_type(next, ext)) | ^~~~~~~~~~~~~~ include/linux/overflow.h:33:40: error: invalid operands to binary << (have 'struct i915_user_extension *' and 'unsigned int') 33 | #define __type_half_max(type) ((type)1 << (8*sizeof(type) - 1 - is_signed_type(type))) | ^~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | unsigned int include/linux/overflow.h:34:53: note: in expansion of macro '__type_half_max' 34 | #define type_max(T) ((T)((__type_half_max(T) - 1) + __type_half_max(T))) | ^~~~~~~~~~~~~~~ include/linux/overflow.h:134:34: note: in expansion of macro 'type_max' 134 | (x) < 0 || (x) > type_max(typeof(T)) ? 1 : 0 \ | ^~~~~~~~ include/linux/overflow.h:159:31: note: in expansion of macro '__overflows_type_constexpr' 159 | __overflows_type_constexpr(n, T), \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/i915_user_extensions.c:54:21: note: in expansion of macro 'overflows_type' 54 | overflows_type(next, ext)) | ^~~~~~~~~~~~~~ include/linux/overflow.h:33:40: error: invalid operands to binary << (have 'struct i915_user_extension *' and 'unsigned int') 33 | #define __type_half_max(type) ((type)1 << (8*sizeof(type) - 1 - is_signed_type(type))) | ^~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | unsigned int include/linux/overflow.h:34:27: note: in expansion of macro '__type_half_max' 34 | #define type_max(T) ((T)((__type_half_max(T) - 1) + __type_half_max(T))) | ^~~~~~~~~~~~~~~ include/linux/overflow.h:35:30: note: in expansion of macro 'type_max' 35 | #define type_min(T) ((T)((T)-type_max(T)-(T)1)) | ^~~~~~~~ include/linux/overflow.h:135:25: note: in expansion of macro 'type_min' 135 | : (x) < type_min(typeof(T)) || \ | ^~~~~~~~ include/linux/overflow.h:159:31: note: in expansion of macro '__overflows_type_constexpr' 159 | __overflows_type_constexpr(n, T), \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/i915_user_extensions.c:54:21: note: in expansion of macro 'overflows_type' 54 | overflows_type(next, ext)) | ^~~~~~~~~~~~~~ include/linux/overflow.h:33:40: error: invalid operands to binary << (have 'struct i915_user_extension *' and 'unsigned int') 33 | #define __type_half_max(type) ((type)1 << (8*sizeof(type) - 1 - is_signed_type(type))) | ^~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | unsigned int include/linux/overflow.h:34:53: note: in expansion of macro '__type_half_max' 34 | #define type_max(T) ((T)((__type_half_max(T) - 1) + __type_half_max(T))) | ^~~~~~~~~~~~~~~ include/linux/overflow.h:35:30: note: in expansion of macro 'type_max' 35 | #define type_min(T) ((T)((T)-type_max(T)-(T)1)) | ^~~~~~~~ include/linux/overflow.h:135:25: note: in expansion of macro 'type_min' 135 | : (x) < type_min(typeof(T)) || \ | ^~~~~~~~ include/linux/overflow.h:159:31: note: in expansion of macro '__overflows_type_constexpr' 159 | __overflows_type_constexpr(n, T), \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/i915_user_extensions.c:54:21: note: in expansion of macro 'overflows_type' 54 | overflows_type(next, ext)) | ^~~~~~~~~~~~~~ include/linux/overflow.h:33:40: error: invalid operands to binary << (have 'struct i915_user_extension *' and 'unsigned int') 33 | #define __type_half_max(type) ((type)1 << (8*sizeof(type) - 1 - is_signed_type(type))) | ^~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | unsigned int include/linux/overflow.h:34:27: note: in expansion of macro '__type_half_max' 34 | #define type_max(T) ((T)((__type_half_max(T) - 1) + __type_half_max(T))) | ^~~~~~~~~~~~~~~ include/linux/overflow.h:136:25: note: in expansion of macro 'type_max' 136 | (x) > type_max(typeof(T)) ? 1 : 0) | ^~~~~~~~ include/linux/overflow.h:159:31: note: in expansion of macro '__overflows_type_constexpr' 159 | __overflows_type_constexpr(n, T), \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/i915_user_extensions.c:54:21: note: in expansion of macro 'overflows_type' 54 | overflows_type(next, ext)) | ^~~~~~~~~~~~~~ include/linux/overflow.h:33:40: error: invalid operands to binary << (have 'struct i915_user_extension *' and 'unsigned int') 33 | #define __type_half_max(type) ((type)1 << (8*sizeof(type) - 1 - is_signed_type(type))) | ^~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | unsigned int include/linux/overflow.h:34:53: note: in expansion of macro '__type_half_max' 34 | #define type_max(T) ((T)((__type_half_max(T) - 1) + __type_half_max(T))) | ^~~~~~~~~~~~~~~ include/linux/overflow.h:136:25: note: in expansion of macro 'type_max' 136 | (x) > type_max(typeof(T)) ? 1 : 0) | ^~~~~~~~ include/linux/overflow.h:159:31: note: in expansion of macro '__overflows_type_constexpr' 159 | __overflows_type_constexpr(n, T), \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/i915/i915_user_extensions.c:54:21: note: in expansion of macro 'overflows_type' 54 | overflows_type(next, ext)) | ^~~~~~~~~~~~~~ >> drivers/gpu/drm/i915/i915_user_extensions.c:54:21: error: argument 2 in call to function '__builtin_add_overflow' does not have integral type vim +/__builtin_add_overflow +54 drivers/gpu/drm/i915/i915_user_extensions.c 9d1305ef80b95d Chris Wilson 2019-03-22 15 9d1305ef80b95d Chris Wilson 2019-03-22 16 int i915_user_extensions(struct i915_user_extension __user *ext, 9d1305ef80b95d Chris Wilson 2019-03-22 17 const i915_user_extension_fn *tbl, 9d1305ef80b95d Chris Wilson 2019-03-22 18 unsigned int count, 9d1305ef80b95d Chris Wilson 2019-03-22 19 void *data) 9d1305ef80b95d Chris Wilson 2019-03-22 20 { 9d1305ef80b95d Chris Wilson 2019-03-22 21 unsigned int stackdepth = 512; 9d1305ef80b95d Chris Wilson 2019-03-22 22 9d1305ef80b95d Chris Wilson 2019-03-22 23 while (ext) { 9d1305ef80b95d Chris Wilson 2019-03-22 24 int i, err; 9d1305ef80b95d Chris Wilson 2019-03-22 25 u32 name; 9d1305ef80b95d Chris Wilson 2019-03-22 26 u64 next; 9d1305ef80b95d Chris Wilson 2019-03-22 27 9d1305ef80b95d Chris Wilson 2019-03-22 28 if (!stackdepth--) /* recursion vs useful flexibility */ 9d1305ef80b95d Chris Wilson 2019-03-22 29 return -E2BIG; 9d1305ef80b95d Chris Wilson 2019-03-22 30 9d1305ef80b95d Chris Wilson 2019-03-22 31 err = check_user_mbz(&ext->flags); 9d1305ef80b95d Chris Wilson 2019-03-22 32 if (err) 9d1305ef80b95d Chris Wilson 2019-03-22 33 return err; 9d1305ef80b95d Chris Wilson 2019-03-22 34 9d1305ef80b95d Chris Wilson 2019-03-22 35 for (i = 0; i < ARRAY_SIZE(ext->rsvd); i++) { 9d1305ef80b95d Chris Wilson 2019-03-22 36 err = check_user_mbz(&ext->rsvd[i]); 9d1305ef80b95d Chris Wilson 2019-03-22 37 if (err) 9d1305ef80b95d Chris Wilson 2019-03-22 38 return err; 9d1305ef80b95d Chris Wilson 2019-03-22 39 } 9d1305ef80b95d Chris Wilson 2019-03-22 40 9d1305ef80b95d Chris Wilson 2019-03-22 41 if (get_user(name, &ext->name)) 9d1305ef80b95d Chris Wilson 2019-03-22 42 return -EFAULT; 9d1305ef80b95d Chris Wilson 2019-03-22 43 9d1305ef80b95d Chris Wilson 2019-03-22 44 err = -EINVAL; 9d1305ef80b95d Chris Wilson 2019-03-22 45 if (name < count) { 9d1305ef80b95d Chris Wilson 2019-03-22 46 name = array_index_nospec(name, count); 9d1305ef80b95d Chris Wilson 2019-03-22 47 if (tbl[name]) 9d1305ef80b95d Chris Wilson 2019-03-22 48 err = tbl[name](ext, data); 9d1305ef80b95d Chris Wilson 2019-03-22 49 } 9d1305ef80b95d Chris Wilson 2019-03-22 50 if (err) 9d1305ef80b95d Chris Wilson 2019-03-22 51 return err; 9d1305ef80b95d Chris Wilson 2019-03-22 52 9d1305ef80b95d Chris Wilson 2019-03-22 53 if (get_user(next, &ext->next_extension) || 9d1305ef80b95d Chris Wilson 2019-03-22 @54 overflows_type(next, ext)) :::::: The code at line 54 was first introduced by commit :::::: 9d1305ef80b95dde0337106ed8b826604e2155ad drm/i915: Introduce the i915_user_extension_method :::::: TO: Chris Wilson :::::: CC: Chris Wilson -- 0-DAY CI Kernel Test Service https://01.org/lkp