2023-10-18 16:36:25

by kernel test robot

[permalink] [raw]
Subject: 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

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/[email protected]/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/[email protected]/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 <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

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);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


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


2023-10-26 15:52:13

by Jeff LaBundy

[permalink] [raw]
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/[email protected]/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/[email protected]/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 <[email protected]>
> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
>
> 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