[gustavoars:testing/fsfa3 17/17] lib/zstd/decompress/huf_decompress.c:1122:5: warning: 'HUF_fillDTableX2' accessing 624 bytes in a region of size 52

From: kernel test robot
Date: Fri Mar 24 2023 - 18:45:43 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/gustavoars/linux.git testing/fsfa3
head: 2226ddb6a576f7f89a8a06a3f89b68f5109ded53
commit: 2226ddb6a576f7f89a8a06a3f89b68f5109ded53 [17/17] Makefile: Enable -Wstringop-overflow and -Warray-bounds
config: m68k-defconfig (https://download.01.org/0day-ci/archive/20230325/202303250602.DR5hZJXz-lkp@xxxxxxxxx/config)
compiler: m68k-linux-gcc (GCC) 12.1.0
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
# https://git.kernel.org/pub/scm/linux/kernel/git/gustavoars/linux.git/commit/?id=2226ddb6a576f7f89a8a06a3f89b68f5109ded53
git remote add gustavoars https://git.kernel.org/pub/scm/linux/kernel/git/gustavoars/linux.git
git fetch --no-tags gustavoars testing/fsfa3
git checkout 2226ddb6a576f7f89a8a06a3f89b68f5109ded53
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k SHELL=/bin/bash lib/zstd/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Link: https://lore.kernel.org/oe-kbuild-all/202303250602.DR5hZJXz-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

lib/zstd/decompress/huf_decompress.c: In function 'HUF_readDTableX2_wksp_bmi2':
>> lib/zstd/decompress/huf_decompress.c:1122:5: warning: 'HUF_fillDTableX2' accessing 624 bytes in a region of size 52 [-Wstringop-overflow=]
1122 | HUF_fillDTableX2(dt, maxTableLog,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1123 | wksp->sortedSymbol,
| ~~~~~~~~~~~~~~~~~~~
1124 | wksp->rankStart0, wksp->rankVal, maxW,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1125 | tableLog+1);
| ~~~~~~~~~~~
lib/zstd/decompress/huf_decompress.c:1122:5: note: referencing argument 5 of type 'U32[12][13]' {aka 'unsigned int[12][13]'}
lib/zstd/decompress/huf_decompress.c:986:13: note: in a call to function 'HUF_fillDTableX2'
986 | static void HUF_fillDTableX2(HUF_DEltX2* DTable, const U32 targetLog,
| ^~~~~~~~~~~~~~~~
>> lib/zstd/decompress/huf_decompress.c:1122:5: warning: 'HUF_fillDTableX2' accessing 624 bytes in a region of size 52 [-Wstringop-overflow=]
1122 | HUF_fillDTableX2(dt, maxTableLog,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1123 | wksp->sortedSymbol,
| ~~~~~~~~~~~~~~~~~~~
1124 | wksp->rankStart0, wksp->rankVal, maxW,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1125 | tableLog+1);
| ~~~~~~~~~~~
lib/zstd/decompress/huf_decompress.c:1122:5: note: referencing argument 5 of type 'U32[12][13]' {aka 'unsigned int[12][13]'}
lib/zstd/decompress/huf_decompress.c:986:13: note: in a call to function 'HUF_fillDTableX2'
986 | static void HUF_fillDTableX2(HUF_DEltX2* DTable, const U32 targetLog,
| ^~~~~~~~~~~~~~~~


vim +/HUF_fillDTableX2 +1122 lib/zstd/decompress/huf_decompress.c

2aa14b1ab2c41a Nick Terrell 2022-10-17 1047
2aa14b1ab2c41a Nick Terrell 2022-10-17 1048 size_t HUF_readDTableX2_wksp_bmi2(HUF_DTable* DTable,
2aa14b1ab2c41a Nick Terrell 2022-10-17 1049 const void* src, size_t srcSize,
2aa14b1ab2c41a Nick Terrell 2022-10-17 1050 void* workSpace, size_t wkspSize, int bmi2)
2aa14b1ab2c41a Nick Terrell 2022-10-17 1051 {
2aa14b1ab2c41a Nick Terrell 2022-10-17 1052 U32 tableLog, maxW, nbSymbols;
e0c1b49f5b674c Nick Terrell 2020-09-11 1053 DTableDesc dtd = HUF_getDTableDesc(DTable);
2aa14b1ab2c41a Nick Terrell 2022-10-17 1054 U32 maxTableLog = dtd.maxTableLog;
e0c1b49f5b674c Nick Terrell 2020-09-11 1055 size_t iSize;
e0c1b49f5b674c Nick Terrell 2020-09-11 1056 void* dtPtr = DTable+1; /* force compiler to avoid strict-aliasing */
e0c1b49f5b674c Nick Terrell 2020-09-11 1057 HUF_DEltX2* const dt = (HUF_DEltX2*)dtPtr;
e0c1b49f5b674c Nick Terrell 2020-09-11 1058 U32 *rankStart;
e0c1b49f5b674c Nick Terrell 2020-09-11 1059
e0c1b49f5b674c Nick Terrell 2020-09-11 1060 HUF_ReadDTableX2_Workspace* const wksp = (HUF_ReadDTableX2_Workspace*)workSpace;
e0c1b49f5b674c Nick Terrell 2020-09-11 1061
e0c1b49f5b674c Nick Terrell 2020-09-11 1062 if (sizeof(*wksp) > wkspSize) return ERROR(GENERIC);
e0c1b49f5b674c Nick Terrell 2020-09-11 1063
e0c1b49f5b674c Nick Terrell 2020-09-11 1064 rankStart = wksp->rankStart0 + 1;
e0c1b49f5b674c Nick Terrell 2020-09-11 1065 ZSTD_memset(wksp->rankStats, 0, sizeof(wksp->rankStats));
e0c1b49f5b674c Nick Terrell 2020-09-11 1066 ZSTD_memset(wksp->rankStart0, 0, sizeof(wksp->rankStart0));
e0c1b49f5b674c Nick Terrell 2020-09-11 1067
e0c1b49f5b674c Nick Terrell 2020-09-11 1068 DEBUG_STATIC_ASSERT(sizeof(HUF_DEltX2) == sizeof(HUF_DTable)); /* if compiler fails here, assertion is wrong */
e0c1b49f5b674c Nick Terrell 2020-09-11 1069 if (maxTableLog > HUF_TABLELOG_MAX) return ERROR(tableLog_tooLarge);
e0c1b49f5b674c Nick Terrell 2020-09-11 1070 /* ZSTD_memset(weightList, 0, sizeof(weightList)); */ /* is not necessary, even though some analyzer complain ... */
e0c1b49f5b674c Nick Terrell 2020-09-11 1071
2aa14b1ab2c41a Nick Terrell 2022-10-17 1072 iSize = HUF_readStats_wksp(wksp->weightList, HUF_SYMBOLVALUE_MAX + 1, wksp->rankStats, &nbSymbols, &tableLog, src, srcSize, wksp->calleeWksp, sizeof(wksp->calleeWksp), bmi2);
e0c1b49f5b674c Nick Terrell 2020-09-11 1073 if (HUF_isError(iSize)) return iSize;
e0c1b49f5b674c Nick Terrell 2020-09-11 1074
e0c1b49f5b674c Nick Terrell 2020-09-11 1075 /* check result */
e0c1b49f5b674c Nick Terrell 2020-09-11 1076 if (tableLog > maxTableLog) return ERROR(tableLog_tooLarge); /* DTable can't fit code depth */
2aa14b1ab2c41a Nick Terrell 2022-10-17 1077 if (tableLog <= HUF_DECODER_FAST_TABLELOG && maxTableLog > HUF_DECODER_FAST_TABLELOG) maxTableLog = HUF_DECODER_FAST_TABLELOG;
e0c1b49f5b674c Nick Terrell 2020-09-11 1078
e0c1b49f5b674c Nick Terrell 2020-09-11 1079 /* find maxWeight */
e0c1b49f5b674c Nick Terrell 2020-09-11 1080 for (maxW = tableLog; wksp->rankStats[maxW]==0; maxW--) {} /* necessarily finds a solution before 0 */
e0c1b49f5b674c Nick Terrell 2020-09-11 1081
e0c1b49f5b674c Nick Terrell 2020-09-11 1082 /* Get start index of each weight */
e0c1b49f5b674c Nick Terrell 2020-09-11 1083 { U32 w, nextRankStart = 0;
e0c1b49f5b674c Nick Terrell 2020-09-11 1084 for (w=1; w<maxW+1; w++) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1085 U32 curr = nextRankStart;
e0c1b49f5b674c Nick Terrell 2020-09-11 1086 nextRankStart += wksp->rankStats[w];
e0c1b49f5b674c Nick Terrell 2020-09-11 1087 rankStart[w] = curr;
e0c1b49f5b674c Nick Terrell 2020-09-11 1088 }
e0c1b49f5b674c Nick Terrell 2020-09-11 1089 rankStart[0] = nextRankStart; /* put all 0w symbols at the end of sorted list*/
2aa14b1ab2c41a Nick Terrell 2022-10-17 1090 rankStart[maxW+1] = nextRankStart;
e0c1b49f5b674c Nick Terrell 2020-09-11 1091 }
e0c1b49f5b674c Nick Terrell 2020-09-11 1092
e0c1b49f5b674c Nick Terrell 2020-09-11 1093 /* sort symbols by weight */
e0c1b49f5b674c Nick Terrell 2020-09-11 1094 { U32 s;
e0c1b49f5b674c Nick Terrell 2020-09-11 1095 for (s=0; s<nbSymbols; s++) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1096 U32 const w = wksp->weightList[s];
e0c1b49f5b674c Nick Terrell 2020-09-11 1097 U32 const r = rankStart[w]++;
e0c1b49f5b674c Nick Terrell 2020-09-11 1098 wksp->sortedSymbol[r].symbol = (BYTE)s;
e0c1b49f5b674c Nick Terrell 2020-09-11 1099 }
e0c1b49f5b674c Nick Terrell 2020-09-11 1100 rankStart[0] = 0; /* forget 0w symbols; this is beginning of weight(1) */
e0c1b49f5b674c Nick Terrell 2020-09-11 1101 }
e0c1b49f5b674c Nick Terrell 2020-09-11 1102
e0c1b49f5b674c Nick Terrell 2020-09-11 1103 /* Build rankVal */
e0c1b49f5b674c Nick Terrell 2020-09-11 1104 { U32* const rankVal0 = wksp->rankVal[0];
e0c1b49f5b674c Nick Terrell 2020-09-11 1105 { int const rescale = (maxTableLog-tableLog) - 1; /* tableLog <= maxTableLog */
e0c1b49f5b674c Nick Terrell 2020-09-11 1106 U32 nextRankVal = 0;
e0c1b49f5b674c Nick Terrell 2020-09-11 1107 U32 w;
e0c1b49f5b674c Nick Terrell 2020-09-11 1108 for (w=1; w<maxW+1; w++) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1109 U32 curr = nextRankVal;
e0c1b49f5b674c Nick Terrell 2020-09-11 1110 nextRankVal += wksp->rankStats[w] << (w+rescale);
e0c1b49f5b674c Nick Terrell 2020-09-11 1111 rankVal0[w] = curr;
e0c1b49f5b674c Nick Terrell 2020-09-11 1112 } }
e0c1b49f5b674c Nick Terrell 2020-09-11 1113 { U32 const minBits = tableLog+1 - maxW;
e0c1b49f5b674c Nick Terrell 2020-09-11 1114 U32 consumed;
e0c1b49f5b674c Nick Terrell 2020-09-11 1115 for (consumed = minBits; consumed < maxTableLog - minBits + 1; consumed++) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1116 U32* const rankValPtr = wksp->rankVal[consumed];
e0c1b49f5b674c Nick Terrell 2020-09-11 1117 U32 w;
e0c1b49f5b674c Nick Terrell 2020-09-11 1118 for (w = 1; w < maxW+1; w++) {
e0c1b49f5b674c Nick Terrell 2020-09-11 1119 rankValPtr[w] = rankVal0[w] >> consumed;
e0c1b49f5b674c Nick Terrell 2020-09-11 1120 } } } }
e0c1b49f5b674c Nick Terrell 2020-09-11 1121
e0c1b49f5b674c Nick Terrell 2020-09-11 @1122 HUF_fillDTableX2(dt, maxTableLog,
2aa14b1ab2c41a Nick Terrell 2022-10-17 1123 wksp->sortedSymbol,
e0c1b49f5b674c Nick Terrell 2020-09-11 1124 wksp->rankStart0, wksp->rankVal, maxW,
2aa14b1ab2c41a Nick Terrell 2022-10-17 1125 tableLog+1);
e0c1b49f5b674c Nick Terrell 2020-09-11 1126
e0c1b49f5b674c Nick Terrell 2020-09-11 1127 dtd.tableLog = (BYTE)maxTableLog;
e0c1b49f5b674c Nick Terrell 2020-09-11 1128 dtd.tableType = 1;
e0c1b49f5b674c Nick Terrell 2020-09-11 1129 ZSTD_memcpy(DTable, &dtd, sizeof(dtd));
e0c1b49f5b674c Nick Terrell 2020-09-11 1130 return iSize;
e0c1b49f5b674c Nick Terrell 2020-09-11 1131 }
e0c1b49f5b674c Nick Terrell 2020-09-11 1132

:::::: The code at line 1122 was first introduced by commit
:::::: e0c1b49f5b674cca7b10549c53b3791d0bbc90a8 lib: zstd: Upgrade to latest upstream zstd version 1.4.10

:::::: TO: Nick Terrell <terrelln@xxxxxx>
:::::: CC: Nick Terrell <terrelln@xxxxxx>

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests