[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <ZTqK37deBniFVnWT@nixie71>
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