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] [thread-next>] [day] [month] [year] [list]
Date:   Thu, 3 Dec 2020 07:58:16 +0800
From:   kernel test robot <lkp@...el.com>
To:     Nick Terrell <nickrterrell@...il.com>,
        Herbert Xu <herbert@...dor.apana.org.au>
Cc:     kbuild-all@...ts.01.org, linux-crypto@...r.kernel.org,
        linux-btrfs@...r.kernel.org, squashfs-devel@...ts.sourceforge.net,
        linux-f2fs-devel@...ts.sourceforge.net,
        linux-kernel@...r.kernel.org, Kernel Team <Kernel-team@...com>,
        Nick Terrell <nickrterrell@...il.com>,
        Chris Mason <chris.mason@...ionio.com>,
        Petr Malat <oss@...at.biz>
Subject: Re: [PATCH v6 3/3] lib: zstd: Upgrade to latest upstream zstd
 version 1.4.6

Hi Nick,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on cryptodev/master]
[also build test WARNING on kdave/for-next f2fs/dev-test kees/for-next/pstore linus/master v5.10-rc6]
[cannot apply to crypto/master squashfs/master next-20201201]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Nick-Terrell/Update-to-zstd-1-4-6/20201203-043418
base:   https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git master
config: parisc-allyesconfig (attached as .config)
compiler: hppa-linux-gcc (GCC) 9.3.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://github.com/0day-ci/linux/commit/1ae5d159649a18815c67be65c370f7fd90e59e9f
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Nick-Terrell/Update-to-zstd-1-4-6/20201203-043418
        git checkout 1ae5d159649a18815c67be65c370f7fd90e59e9f
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=parisc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@...el.com>

All warnings (new ones prefixed by >>):

   lib/zstd/compress/zstd_double_fast.c: In function 'ZSTD_compressBlock_doubleFast_extDict_generic':
>> lib/zstd/compress/zstd_double_fast.c:501:1: warning: the frame size of 3724 bytes is larger than 1280 bytes [-Wframe-larger-than=]
     501 | }
         | ^
   lib/zstd/compress/zstd_double_fast.c: In function 'ZSTD_compressBlock_doubleFast':
   lib/zstd/compress/zstd_double_fast.c:336:1: warning: the frame size of 3792 bytes is larger than 1280 bytes [-Wframe-larger-than=]
     336 | }
         | ^
   lib/zstd/compress/zstd_double_fast.c: In function 'ZSTD_compressBlock_doubleFast_dictMatchState':
   lib/zstd/compress/zstd_double_fast.c:356:1: warning: the frame size of 3808 bytes is larger than 1280 bytes [-Wframe-larger-than=]
     356 | }
         | ^
--
   lib/zstd/compress/zstd_fast.c: In function 'ZSTD_compressBlock_fast_extDict_generic':
>> lib/zstd/compress/zstd_fast.c:476:1: warning: the frame size of 2736 bytes is larger than 1280 bytes [-Wframe-larger-than=]
     476 | }
         | ^
   lib/zstd/compress/zstd_fast.c: In function 'ZSTD_compressBlock_fast':
   lib/zstd/compress/zstd_fast.c:204:1: warning: the frame size of 1508 bytes is larger than 1280 bytes [-Wframe-larger-than=]
     204 | }
         | ^
   lib/zstd/compress/zstd_fast.c: In function 'ZSTD_compressBlock_fast_dictMatchState':
   lib/zstd/compress/zstd_fast.c:372:1: warning: the frame size of 1540 bytes is larger than 1280 bytes [-Wframe-larger-than=]
     372 | }
         | ^

vim +501 lib/zstd/compress/zstd_double_fast.c

   357	
   358	
   359	static size_t ZSTD_compressBlock_doubleFast_extDict_generic(
   360	        ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
   361	        void const* src, size_t srcSize,
   362	        U32 const mls /* template */)
   363	{
   364	    ZSTD_compressionParameters const* cParams = &ms->cParams;
   365	    U32* const hashLong = ms->hashTable;
   366	    U32  const hBitsL = cParams->hashLog;
   367	    U32* const hashSmall = ms->chainTable;
   368	    U32  const hBitsS = cParams->chainLog;
   369	    const BYTE* const istart = (const BYTE*)src;
   370	    const BYTE* ip = istart;
   371	    const BYTE* anchor = istart;
   372	    const BYTE* const iend = istart + srcSize;
   373	    const BYTE* const ilimit = iend - 8;
   374	    const BYTE* const base = ms->window.base;
   375	    const U32   endIndex = (U32)((size_t)(istart - base) + srcSize);
   376	    const U32   lowLimit = ZSTD_getLowestMatchIndex(ms, endIndex, cParams->windowLog);
   377	    const U32   dictStartIndex = lowLimit;
   378	    const U32   dictLimit = ms->window.dictLimit;
   379	    const U32   prefixStartIndex = (dictLimit > lowLimit) ? dictLimit : lowLimit;
   380	    const BYTE* const prefixStart = base + prefixStartIndex;
   381	    const BYTE* const dictBase = ms->window.dictBase;
   382	    const BYTE* const dictStart = dictBase + dictStartIndex;
   383	    const BYTE* const dictEnd = dictBase + prefixStartIndex;
   384	    U32 offset_1=rep[0], offset_2=rep[1];
   385	
   386	    DEBUGLOG(5, "ZSTD_compressBlock_doubleFast_extDict_generic (srcSize=%zu)", srcSize);
   387	
   388	    /* if extDict is invalidated due to maxDistance, switch to "regular" variant */
   389	    if (prefixStartIndex == dictStartIndex)
   390	        return ZSTD_compressBlock_doubleFast_generic(ms, seqStore, rep, src, srcSize, mls, ZSTD_noDict);
   391	
   392	    /* Search Loop */
   393	    while (ip < ilimit) {  /* < instead of <=, because (ip+1) */
   394	        const size_t hSmall = ZSTD_hashPtr(ip, hBitsS, mls);
   395	        const U32 matchIndex = hashSmall[hSmall];
   396	        const BYTE* const matchBase = matchIndex < prefixStartIndex ? dictBase : base;
   397	        const BYTE* match = matchBase + matchIndex;
   398	
   399	        const size_t hLong = ZSTD_hashPtr(ip, hBitsL, 8);
   400	        const U32 matchLongIndex = hashLong[hLong];
   401	        const BYTE* const matchLongBase = matchLongIndex < prefixStartIndex ? dictBase : base;
   402	        const BYTE* matchLong = matchLongBase + matchLongIndex;
   403	
   404	        const U32 curr = (U32)(ip-base);
   405	        const U32 repIndex = curr + 1 - offset_1;   /* offset_1 expected <= curr +1 */
   406	        const BYTE* const repBase = repIndex < prefixStartIndex ? dictBase : base;
   407	        const BYTE* const repMatch = repBase + repIndex;
   408	        size_t mLength;
   409	        hashSmall[hSmall] = hashLong[hLong] = curr;   /* update hash table */
   410	
   411	        if ((((U32)((prefixStartIndex-1) - repIndex) >= 3) /* intentional underflow : ensure repIndex doesn't overlap dict + prefix */
   412	            & (repIndex > dictStartIndex))
   413	          && (MEM_read32(repMatch) == MEM_read32(ip+1)) ) {
   414	            const BYTE* repMatchEnd = repIndex < prefixStartIndex ? dictEnd : iend;
   415	            mLength = ZSTD_count_2segments(ip+1+4, repMatch+4, iend, repMatchEnd, prefixStart) + 4;
   416	            ip++;
   417	            ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, 0, mLength-MINMATCH);
   418	        } else {
   419	            if ((matchLongIndex > dictStartIndex) && (MEM_read64(matchLong) == MEM_read64(ip))) {
   420	                const BYTE* const matchEnd = matchLongIndex < prefixStartIndex ? dictEnd : iend;
   421	                const BYTE* const lowMatchPtr = matchLongIndex < prefixStartIndex ? dictStart : prefixStart;
   422	                U32 offset;
   423	                mLength = ZSTD_count_2segments(ip+8, matchLong+8, iend, matchEnd, prefixStart) + 8;
   424	                offset = curr - matchLongIndex;
   425	                while (((ip>anchor) & (matchLong>lowMatchPtr)) && (ip[-1] == matchLong[-1])) { ip--; matchLong--; mLength++; }   /* catch up */
   426	                offset_2 = offset_1;
   427	                offset_1 = offset;
   428	                ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, offset + ZSTD_REP_MOVE, mLength-MINMATCH);
   429	
   430	            } else if ((matchIndex > dictStartIndex) && (MEM_read32(match) == MEM_read32(ip))) {
   431	                size_t const h3 = ZSTD_hashPtr(ip+1, hBitsL, 8);
   432	                U32 const matchIndex3 = hashLong[h3];
   433	                const BYTE* const match3Base = matchIndex3 < prefixStartIndex ? dictBase : base;
   434	                const BYTE* match3 = match3Base + matchIndex3;
   435	                U32 offset;
   436	                hashLong[h3] = curr + 1;
   437	                if ( (matchIndex3 > dictStartIndex) && (MEM_read64(match3) == MEM_read64(ip+1)) ) {
   438	                    const BYTE* const matchEnd = matchIndex3 < prefixStartIndex ? dictEnd : iend;
   439	                    const BYTE* const lowMatchPtr = matchIndex3 < prefixStartIndex ? dictStart : prefixStart;
   440	                    mLength = ZSTD_count_2segments(ip+9, match3+8, iend, matchEnd, prefixStart) + 8;
   441	                    ip++;
   442	                    offset = curr+1 - matchIndex3;
   443	                    while (((ip>anchor) & (match3>lowMatchPtr)) && (ip[-1] == match3[-1])) { ip--; match3--; mLength++; } /* catch up */
   444	                } else {
   445	                    const BYTE* const matchEnd = matchIndex < prefixStartIndex ? dictEnd : iend;
   446	                    const BYTE* const lowMatchPtr = matchIndex < prefixStartIndex ? dictStart : prefixStart;
   447	                    mLength = ZSTD_count_2segments(ip+4, match+4, iend, matchEnd, prefixStart) + 4;
   448	                    offset = curr - matchIndex;
   449	                    while (((ip>anchor) & (match>lowMatchPtr)) && (ip[-1] == match[-1])) { ip--; match--; mLength++; }   /* catch up */
   450	                }
   451	                offset_2 = offset_1;
   452	                offset_1 = offset;
   453	                ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, offset + ZSTD_REP_MOVE, mLength-MINMATCH);
   454	
   455	            } else {
   456	                ip += ((ip-anchor) >> kSearchStrength) + 1;
   457	                continue;
   458	        }   }
   459	
   460	        /* move to next sequence start */
   461	        ip += mLength;
   462	        anchor = ip;
   463	
   464	        if (ip <= ilimit) {
   465	            /* Complementary insertion */
   466	            /* done after iLimit test, as candidates could be > iend-8 */
   467	            {   U32 const indexToInsert = curr+2;
   468	                hashLong[ZSTD_hashPtr(base+indexToInsert, hBitsL, 8)] = indexToInsert;
   469	                hashLong[ZSTD_hashPtr(ip-2, hBitsL, 8)] = (U32)(ip-2-base);
   470	                hashSmall[ZSTD_hashPtr(base+indexToInsert, hBitsS, mls)] = indexToInsert;
   471	                hashSmall[ZSTD_hashPtr(ip-1, hBitsS, mls)] = (U32)(ip-1-base);
   472	            }
   473	
   474	            /* check immediate repcode */
   475	            while (ip <= ilimit) {
   476	                U32 const current2 = (U32)(ip-base);
   477	                U32 const repIndex2 = current2 - offset_2;
   478	                const BYTE* repMatch2 = repIndex2 < prefixStartIndex ? dictBase + repIndex2 : base + repIndex2;
   479	                if ( (((U32)((prefixStartIndex-1) - repIndex2) >= 3)   /* intentional overflow : ensure repIndex2 doesn't overlap dict + prefix */
   480	                    & (repIndex2 > dictStartIndex))
   481	                  && (MEM_read32(repMatch2) == MEM_read32(ip)) ) {
   482	                    const BYTE* const repEnd2 = repIndex2 < prefixStartIndex ? dictEnd : iend;
   483	                    size_t const repLength2 = ZSTD_count_2segments(ip+4, repMatch2+4, iend, repEnd2, prefixStart) + 4;
   484	                    U32 const tmpOffset = offset_2; offset_2 = offset_1; offset_1 = tmpOffset;   /* swap offset_2 <=> offset_1 */
   485	                    ZSTD_storeSeq(seqStore, 0, anchor, iend, 0, repLength2-MINMATCH);
   486	                    hashSmall[ZSTD_hashPtr(ip, hBitsS, mls)] = current2;
   487	                    hashLong[ZSTD_hashPtr(ip, hBitsL, 8)] = current2;
   488	                    ip += repLength2;
   489	                    anchor = ip;
   490	                    continue;
   491	                }
   492	                break;
   493	    }   }   }
   494	
   495	    /* save reps for next block */
   496	    rep[0] = offset_1;
   497	    rep[1] = offset_2;
   498	
   499	    /* Return the last literals size */
   500	    return (size_t)(iend - anchor);
 > 501	}
   502	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

Download attachment ".config.gz" of type "application/gzip" (67360 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ