CC: l...@lists.linux.dev CC: kbuild-...@lists.01.org BCC: l...@intel.com In-Reply-To: <20220309102215.891001-2-petko.mano...@konsulko.com> References: <20220309102215.891001-2-petko.mano...@konsulko.com> TO: Petko Manolov <petko.mano...@konsulko.com> TO: linux-me...@vger.kernel.org CC: sakari.ai...@iki.fi CC: devicet...@vger.kernel.org CC: Petko Manolov <petko.mano...@konsulko.com>
Hi Petko, I love your patch! Perhaps something to improve: [auto build test WARNING on 2b891d3980f6c255459d0e1c29ce2152ec7cf678] url: https://github.com/0day-ci/linux/commits/Petko-Manolov/media-ovm6211-Adds-support-for-OVM6211/20220309-182333 base: 2b891d3980f6c255459d0e1c29ce2152ec7cf678 :::::: branch date: 3 days ago :::::: commit date: 3 days ago config: arm-randconfig-c002-20220310 (https://download.01.org/0day-ci/archive/20220312/202203121400.4urovnpu-...@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 276ca87382b8f16a65bddac700202924228982f6) 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 # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://github.com/0day-ci/linux/commit/4894c38df725fcab9dc9ac03d8cffa97971279b7 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Petko-Manolov/media-ovm6211-Adds-support-for-OVM6211/20220309-182333 git checkout 4894c38df725fcab9dc9ac03d8cffa97971279b7 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> clang-analyzer warnings: (new ones prefixed by >>) ^~~~~~~~~~~~~~~~~~~~~~~ include/net/net_namespace.h:361:9: note: Access to field 'net' results in a dereference of a null pointer (loaded from variable 'pnet') return pnet->net; ^~~~ net/core/dev.c:880:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(name, dev->name); ^~~~~~ net/core/dev.c:880:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(name, dev->name); ^~~~~~ net/core/dev.c:7151:19: warning: Access to field 'lower_level' results in a dereference of a null pointer (loaded from variable 'dev') [clang-analyzer-core.NullDereference] dev->lower_level = __netdev_lower_depth(dev) + 1; ^ net/core/dev.c:7610:33: note: Passing value via 2nd parameter 'upper_dev' __netdev_upper_dev_unlink(dev, upper_dev, &priv); ^~~~~~~~~ net/core/dev.c:7610:2: note: Calling '__netdev_upper_dev_unlink' __netdev_upper_dev_unlink(dev, upper_dev, &priv); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/core/dev.c:7574:2: note: Assuming the condition is false ASSERT_RTNL(); ^ include/linux/rtnetlink.h:110:12: note: expanded from macro 'ASSERT_RTNL' WARN_ONCE(!rtnl_is_locked(), \ ^~~~~~~~~~~~~~~~~ include/asm-generic/bug.h:150:18: note: expanded from macro 'WARN_ONCE' DO_ONCE_LITE_IF(condition, WARN, 1, format) ^~~~~~~~~ include/linux/once_lite.h:15:27: note: expanded from macro 'DO_ONCE_LITE_IF' bool __ret_do_once = !!(condition); \ ^~~~~~~~~ net/core/dev.c:7574:2: note: '__ret_do_once' is false ASSERT_RTNL(); ^ include/linux/rtnetlink.h:110:2: note: expanded from macro 'ASSERT_RTNL' WARN_ONCE(!rtnl_is_locked(), \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/asm-generic/bug.h:150:2: note: expanded from macro 'WARN_ONCE' DO_ONCE_LITE_IF(condition, WARN, 1, format) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/once_lite.h:17:16: note: expanded from macro 'DO_ONCE_LITE_IF' if (unlikely(__ret_do_once && !__already_done)) { \ ^~~~~~~~~~~~~ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ net/core/dev.c:7574:2: note: Left side of '&&' is false ASSERT_RTNL(); ^ include/linux/rtnetlink.h:110:2: note: expanded from macro 'ASSERT_RTNL' WARN_ONCE(!rtnl_is_locked(), \ ^ include/asm-generic/bug.h:150:2: note: expanded from macro 'WARN_ONCE' DO_ONCE_LITE_IF(condition, WARN, 1, format) ^ include/linux/once_lite.h:17:30: note: expanded from macro 'DO_ONCE_LITE_IF' if (unlikely(__ret_do_once && !__already_done)) { \ ^ net/core/dev.c:7574:2: note: Taking false branch ASSERT_RTNL(); ^ include/linux/rtnetlink.h:110:2: note: expanded from macro 'ASSERT_RTNL' WARN_ONCE(!rtnl_is_locked(), \ ^ include/asm-generic/bug.h:150:2: note: expanded from macro 'WARN_ONCE' DO_ONCE_LITE_IF(condition, WARN, 1, format) ^ include/linux/once_lite.h:17:3: note: expanded from macro 'DO_ONCE_LITE_IF' if (unlikely(__ret_do_once && !__already_done)) { \ ^ net/core/dev.c:7576:28: note: Assuming pointer value is null changeupper_info.master = netdev_master_upper_dev_get(dev) == upper_dev; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/core/dev.c:7589:30: note: Passing null pointer value via 1st parameter 'dev' __netdev_update_lower_level(upper_dev, priv); ^~~~~~~~~ net/core/dev.c:7589:2: note: Calling '__netdev_update_lower_level' __netdev_update_lower_level(upper_dev, priv); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/core/dev.c:7151:19: note: Access to field 'lower_level' results in a dereference of a null pointer (loaded from variable 'dev') dev->lower_level = __netdev_lower_depth(dev) + 1; ~~~ ^ net/core/dev.c:10228:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(dev->name, name); ^~~~~~ net/core/dev.c:10228:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(dev->name, name); ^~~~~~ Suppressed 11 warnings (10 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 11 warnings generated. drivers/media/i2c/ov5695.c:1134:3: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = ov5695_write_reg(ov5695->client, OV5695_REG_DIGI_GAIN_L, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/i2c/ov5695.c:1134:3: note: Value stored to 'ret' is never read ret = ov5695_write_reg(ov5695->client, OV5695_REG_DIGI_GAIN_L, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 10 warnings (9 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 11 warnings generated. >> drivers/media/i2c/ovm6211.c:624:29: warning: Value stored to 'fmt' during >> its initialization is never read [clang-analyzer-deadcode.DeadStores] struct v4l2_mbus_framefmt *fmt = &format->format; ^~~ ~~~~~~~~~~~~~~~ drivers/media/i2c/ovm6211.c:624:29: note: Value stored to 'fmt' during its initialization is never read struct v4l2_mbus_framefmt *fmt = &format->format; ^~~ ~~~~~~~~~~~~~~~ Suppressed 10 warnings (9 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 10 warnings generated. Suppressed 10 warnings (9 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 10 warnings generated. Suppressed 10 warnings (9 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 10 warnings generated. Suppressed 10 warnings (9 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. Suppressed 3 warnings (3 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 10 warnings generated. drivers/soundwire/stream.c:1015:8: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] if (s_rt->slave != slave) ^ drivers/soundwire/stream.c:1362:7: note: 'm_rt' is non-null if (!m_rt) { ^~~~ drivers/soundwire/stream.c:1362:2: note: Taking false branch if (!m_rt) { ^ drivers/soundwire/stream.c:1371:7: note: 's_rt' is non-null if (!s_rt) { ^~~~ drivers/soundwire/stream.c:1371:2: note: Taking false branch if (!s_rt) { ^ drivers/soundwire/stream.c:1380:6: note: 'ret' is 0 if (ret) { ^~~ drivers/soundwire/stream.c:1380:2: note: Taking false branch if (ret) { ^ drivers/soundwire/stream.c:1394:6: note: 'ret' is -22 if (ret) ^~~ drivers/soundwire/stream.c:1394:2: note: Taking true branch if (ret) ^ drivers/soundwire/stream.c:1395:3: note: Control jumps to line 1411 goto stream_error; ^ drivers/soundwire/stream.c:1411:2: note: Calling 'sdw_release_master_stream' sdw_release_master_stream(m_rt, stream); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/soundwire/stream.c:1070:2: note: Loop condition is true. Entering loop body list_for_each_entry_safe(s_rt, _s_rt, &m_rt->slave_rt_list, m_rt_node) { ^ include/linux/list.h:725:2: note: expanded from macro 'list_for_each_entry_safe' for (pos = list_first_entry(head, typeof(*pos), member), \ ^ drivers/soundwire/stream.c:1072:3: note: Calling 'sdw_release_slave_stream' sdw_release_slave_stream(s_rt->slave, stream); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/soundwire/stream.c:1041:2: note: Loop condition is true. Entering loop body list_for_each_entry(m_rt, &stream->master_list, stream_node) { ^ include/linux/list.h:638:2: note: expanded from macro 'list_for_each_entry' for (pos = list_first_entry(head, typeof(*pos), member); \ ^ drivers/soundwire/stream.c:1043:3: note: Loop condition is true. Entering loop body list_for_each_entry_safe(s_rt, _s_rt, ^ include/linux/list.h:725:2: note: expanded from macro 'list_for_each_entry_safe' for (pos = list_first_entry(head, typeof(*pos), member), \ ^ drivers/soundwire/stream.c:1045:8: note: Assuming 'slave' is equal to field 'slave' if (s_rt->slave == slave) { ^~~~~~~~~~~~~~~~~~~~ drivers/soundwire/stream.c:1045:4: note: Taking true branch if (s_rt->slave == slave) { ^ drivers/soundwire/stream.c:1047:5: note: Memory is released kfree(s_rt); ^~~~~~~~~~~ drivers/soundwire/stream.c:1072:3: note: Returning; memory was released sdw_release_slave_stream(s_rt->slave, stream); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/soundwire/stream.c:1070:2: note: Loop condition is true. Entering loop body list_for_each_entry_safe(s_rt, _s_rt, &m_rt->slave_rt_list, m_rt_node) { ^ include/linux/list.h:725:2: note: expanded from macro 'list_for_each_entry_safe' for (pos = list_first_entry(head, typeof(*pos), member), \ ^ drivers/soundwire/stream.c:1071:3: note: Calling 'sdw_slave_port_release' sdw_slave_port_release(s_rt->slave->bus, s_rt->slave, stream); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/soundwire/stream.c:1013:2: note: Loop condition is true. Entering loop body list_for_each_entry(m_rt, &stream->master_list, stream_node) { ^ include/linux/list.h:638:2: note: expanded from macro 'list_for_each_entry' for (pos = list_first_entry(head, typeof(*pos), member); \ vim +/fmt +624 drivers/media/i2c/ovm6211.c 4894c38df725fc Petko Manolov 2022-03-09 618 4894c38df725fc Petko Manolov 2022-03-09 619 static int ovm6211_set_fmt(struct v4l2_subdev *sd, 4894c38df725fc Petko Manolov 2022-03-09 620 struct v4l2_subdev_state *state, 4894c38df725fc Petko Manolov 2022-03-09 621 struct v4l2_subdev_format *format) 4894c38df725fc Petko Manolov 2022-03-09 622 { 4894c38df725fc Petko Manolov 2022-03-09 623 struct ovm6211_dev *sensor = to_ovm6211_dev(sd); 4894c38df725fc Petko Manolov 2022-03-09 @624 struct v4l2_mbus_framefmt *fmt = &format->format; 4894c38df725fc Petko Manolov 2022-03-09 625 struct ovm6211_mode_info *mode; 4894c38df725fc Petko Manolov 2022-03-09 626 4894c38df725fc Petko Manolov 2022-03-09 627 mutex_lock(&sensor->lock); 4894c38df725fc Petko Manolov 2022-03-09 628 4894c38df725fc Petko Manolov 2022-03-09 629 if (sensor->streaming) 4894c38df725fc Petko Manolov 2022-03-09 630 return -EBUSY; 4894c38df725fc Petko Manolov 2022-03-09 631 4894c38df725fc Petko Manolov 2022-03-09 632 /* these are hardcoded as we don't support anything else */ 4894c38df725fc Petko Manolov 2022-03-09 633 format->format.colorspace = V4L2_COLORSPACE_RAW; 4894c38df725fc Petko Manolov 2022-03-09 634 format->format.field = V4L2_FIELD_NONE; 4894c38df725fc Petko Manolov 2022-03-09 635 format->format.code = MEDIA_BUS_FMT_Y8_1X8; 4894c38df725fc Petko Manolov 2022-03-09 636 mode = ovm6211_find_mode(format->format.width, format->format.height); 4894c38df725fc Petko Manolov 2022-03-09 637 format->format.width = mode->width; 4894c38df725fc Petko Manolov 2022-03-09 638 format->format.height = mode->height; 4894c38df725fc Petko Manolov 2022-03-09 639 4894c38df725fc Petko Manolov 2022-03-09 640 if (format->which == V4L2_SUBDEV_FORMAT_TRY) { 4894c38df725fc Petko Manolov 2022-03-09 641 fmt = v4l2_subdev_get_try_format(&sensor->sd, state, format->pad); 4894c38df725fc Petko Manolov 2022-03-09 642 *fmt = format->format; 4894c38df725fc Petko Manolov 2022-03-09 643 goto out; 4894c38df725fc Petko Manolov 2022-03-09 644 } 4894c38df725fc Petko Manolov 2022-03-09 645 sensor->cur_mode = mode; 4894c38df725fc Petko Manolov 2022-03-09 646 out: 4894c38df725fc Petko Manolov 2022-03-09 647 mutex_unlock(&sensor->lock); 4894c38df725fc Petko Manolov 2022-03-09 648 4894c38df725fc Petko Manolov 2022-03-09 649 return 0; 4894c38df725fc Petko Manolov 2022-03-09 650 } 4894c38df725fc Petko Manolov 2022-03-09 651 --- 0-DAY CI Kernel Test Service https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org _______________________________________________ kbuild mailing list -- kbuild@lists.01.org To unsubscribe send an email to kbuild-le...@lists.01.org