lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Thu, 26 Oct 2023 10:50:55 -0500
From:   Jeff LaBundy <jeff@...undy.com>
To:     kernel test robot <lkp@...el.com>
Cc:     oe-kbuild-all@...ts.linux.dev, linux-kernel@...r.kernel.org,
        Dmitry Torokhov <dmitry.torokhov@...il.com>
Subject: Re: drivers/input/misc/iqs626a.c:780:61: warning: '%d' directive
 output may be truncated writing between 1 and 10 bytes into a region of size
 2

Perhaps the list can let me know if I am missing anything...

On Thu, Oct 19, 2023 at 12:34:52AM +0800, kernel test robot wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head:   06dc10eae55b5ceabfef287a7e5f16ceea204aa0
> commit: 4d3d2694e168c542b088eef5059d31498f679020 Input: iqs626a - drop unused device node references
> date:   9 months ago
> config: x86_64-randconfig-r015-20230901 (https://download.01.org/0day-ci/archive/20231019/202310190041.28bxUK0W-lkp@intel.com/config)
> compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231019/202310190041.28bxUK0W-lkp@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@...el.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202310190041.28bxUK0W-lkp@intel.com/
> 
> All warnings (new ones prefixed by >>):
> 
>    drivers/input/misc/iqs626a.c: In function 'iqs626_parse_trackpad':
> >> drivers/input/misc/iqs626a.c:780:61: warning: '%d' directive output may be truncated writing between 1 and 10 bytes into a region of size 2 [-Wformat-truncation=]
>      780 |                 snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
>          |                                                             ^~
>    drivers/input/misc/iqs626a.c:780:52: note: directive argument in the range [0, 2147483646]
>      780 |                 snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
>          |                                                    ^~~~~~~~~~~~
>    drivers/input/misc/iqs626a.c:780:17: note: 'snprintf' output between 10 and 19 bytes into a destination of size 10
>      780 |                 snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
>          |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This cannot actually happen during runtime; 'i' is limited to at most 8. The
warning seems bogus.

> 
> 
> vim +780 drivers/input/misc/iqs626a.c
> 
>    712	
>    713	static int iqs626_parse_trackpad(struct iqs626_private *iqs626,
>    714					 struct fwnode_handle *ch_node,
>    715					 enum iqs626_ch_id ch_id)
>    716	{
>    717		struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg;
>    718		struct i2c_client *client = iqs626->client;
>    719		u8 *hyst = &sys_reg->tp_grp_reg.hyst;
>    720		int error, count, i;
>    721		unsigned int val;
>    722	
>    723		if (!fwnode_property_read_u32(ch_node, "azoteq,lta-update", &val)) {
>    724			if (val > IQS626_MISC_A_TPx_LTA_UPDATE_MAX) {
>    725				dev_err(&client->dev,
>    726					"Invalid %s channel update rate: %u\n",
>    727					fwnode_get_name(ch_node), val);
>    728				return -EINVAL;
>    729			}
>    730	
>    731			sys_reg->misc_a &= ~IQS626_MISC_A_TPx_LTA_UPDATE_MASK;
>    732			sys_reg->misc_a |= (val << IQS626_MISC_A_TPx_LTA_UPDATE_SHIFT);
>    733		}
>    734	
>    735		if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-trackpad",
>    736					      &val)) {
>    737			if (val > IQS626_FILT_STR_MAX) {
>    738				dev_err(&client->dev,
>    739					"Invalid %s channel filter strength: %u\n",
>    740					fwnode_get_name(ch_node), val);
>    741				return -EINVAL;
>    742			}
>    743	
>    744			sys_reg->misc_b &= ~IQS626_MISC_B_FILT_STR_TPx;
>    745			sys_reg->misc_b |= val;
>    746		}
>    747	
>    748		if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-np-cnt",
>    749					      &val)) {
>    750			if (val > IQS626_FILT_STR_MAX) {
>    751				dev_err(&client->dev,
>    752					"Invalid %s channel filter strength: %u\n",
>    753					fwnode_get_name(ch_node), val);
>    754				return -EINVAL;
>    755			}
>    756	
>    757			*hyst &= ~IQS626_FILT_STR_NP_TPx_MASK;
>    758			*hyst |= (val << IQS626_FILT_STR_NP_TPx_SHIFT);
>    759		}
>    760	
>    761		if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-lp-cnt",
>    762					      &val)) {
>    763			if (val > IQS626_FILT_STR_MAX) {
>    764				dev_err(&client->dev,
>    765					"Invalid %s channel filter strength: %u\n",
>    766					fwnode_get_name(ch_node), val);
>    767				return -EINVAL;
>    768			}
>    769	
>    770			*hyst &= ~IQS626_FILT_STR_LP_TPx_MASK;
>    771			*hyst |= (val << IQS626_FILT_STR_LP_TPx_SHIFT);
>    772		}
>    773	
>    774		for (i = 0; i < iqs626_channels[ch_id].num_ch; i++) {
>    775			u8 *ati_base = &sys_reg->tp_grp_reg.ch_reg_tp[i].ati_base;
>    776			u8 *thresh = &sys_reg->tp_grp_reg.ch_reg_tp[i].thresh;
>    777			struct fwnode_handle *tc_node;
>    778			char tc_name[10];
>    779	
>  > 780			snprintf(tc_name, sizeof(tc_name), "channel-%d", i);
>    781	
>    782			tc_node = fwnode_get_named_child_node(ch_node, tc_name);
>    783			if (!tc_node)
>    784				continue;
>    785	
>    786			if (!fwnode_property_read_u32(tc_node, "azoteq,ati-base",
>    787						      &val)) {
>    788				if (val < IQS626_TPx_ATI_BASE_MIN ||
>    789				    val > IQS626_TPx_ATI_BASE_MAX) {
>    790					dev_err(&client->dev,
>    791						"Invalid %s %s ATI base: %u\n",
>    792						fwnode_get_name(ch_node), tc_name, val);
>    793					fwnode_handle_put(tc_node);
>    794					return -EINVAL;
>    795				}
>    796	
>    797				*ati_base = val - IQS626_TPx_ATI_BASE_MIN;
>    798			}
>    799	
>    800			if (!fwnode_property_read_u32(tc_node, "azoteq,thresh",
>    801						      &val)) {
>    802				if (val > IQS626_CHx_THRESH_MAX) {
>    803					dev_err(&client->dev,
>    804						"Invalid %s %s threshold: %u\n",
>    805						fwnode_get_name(ch_node), tc_name, val);
>    806					fwnode_handle_put(tc_node);
>    807					return -EINVAL;
>    808				}
>    809	
>    810				*thresh = val;
>    811			}
>    812	
>    813			fwnode_handle_put(tc_node);
>    814		}
>    815	
>    816		if (!fwnode_property_present(ch_node, "linux,keycodes"))
>    817			return 0;
>    818	
>    819		count = fwnode_property_count_u32(ch_node, "linux,keycodes");
>    820		if (count > IQS626_NUM_GESTURES) {
>    821			dev_err(&client->dev, "Too many keycodes present\n");
>    822			return -EINVAL;
>    823		} else if (count < 0) {
>    824			dev_err(&client->dev, "Failed to count keycodes: %d\n", count);
>    825			return count;
>    826		}
>    827	
>    828		error = fwnode_property_read_u32_array(ch_node, "linux,keycodes",
>    829						       iqs626->tp_code, count);
>    830		if (error) {
>    831			dev_err(&client->dev, "Failed to read keycodes: %d\n", error);
>    832			return error;
>    833		}
>    834	
>    835		sys_reg->misc_b &= ~IQS626_MISC_B_TPx_SWIPE;
>    836		if (fwnode_property_present(ch_node, "azoteq,gesture-swipe"))
>    837			sys_reg->misc_b |= IQS626_MISC_B_TPx_SWIPE;
>    838	
>    839		if (!fwnode_property_read_u32(ch_node, "azoteq,timeout-tap-ms",
>    840					      &val)) {
>    841			if (val > IQS626_TIMEOUT_TAP_MS_MAX) {
>    842				dev_err(&client->dev,
>    843					"Invalid %s channel timeout: %u\n",
>    844					fwnode_get_name(ch_node), val);
>    845				return -EINVAL;
>    846			}
>    847	
>    848			sys_reg->timeout_tap = val / 16;
>    849		}
>    850	
>    851		if (!fwnode_property_read_u32(ch_node, "azoteq,timeout-swipe-ms",
>    852					      &val)) {
>    853			if (val > IQS626_TIMEOUT_SWIPE_MS_MAX) {
>    854				dev_err(&client->dev,
>    855					"Invalid %s channel timeout: %u\n",
>    856					fwnode_get_name(ch_node), val);
>    857				return -EINVAL;
>    858			}
>    859	
>    860			sys_reg->timeout_swipe = val / 16;
>    861		}
>    862	
>    863		if (!fwnode_property_read_u32(ch_node, "azoteq,thresh-swipe",
>    864					      &val)) {
>    865			if (val > IQS626_THRESH_SWIPE_MAX) {
>    866				dev_err(&client->dev,
>    867					"Invalid %s channel threshold: %u\n",
>    868					fwnode_get_name(ch_node), val);
>    869				return -EINVAL;
>    870			}
>    871	
>    872			sys_reg->thresh_swipe = val;
>    873		}
>    874	
>    875		sys_reg->event_mask &= ~IQS626_EVENT_MASK_GESTURE;
>    876	
>    877		return 0;
>    878	}
>    879	
> 
> -- 
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki

Kind regards,
Jeff LaBundy

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ