From 2f835d498d0abaa26750d8b6ca7fc290a1ce1a92 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Wed, 10 Apr 2024 14:13:04 +0200 Subject: [PATCH 1/4] msg-filter: rename misleading var `core` -> `path` --- src/lib/msg-filter.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lib/msg-filter.cc b/src/lib/msg-filter.cc index 3e84e13d..109fe2c5 100644 --- a/src/lib/msg-filter.cc +++ b/src/lib/msg-filter.cc @@ -275,7 +275,7 @@ std::string MsgFilter::filterPath(const std::string &origPath) const return path; std::string nvr (sm[/* NVR */ 1]); - std::string core(sm[/* core */ 2]); + path = sm[/* core */ 2]; // try to kill the multiple version strings in paths (kernel, OpenLDAP, ...) nvr.resize(nvr.size() - 1); @@ -289,15 +289,15 @@ std::string MsgFilter::filterPath(const std::string &origPath) const #endif const RE reKill(krnPattern); - core = boost::regex_replace(core, reKill, ""); + path = boost::regex_replace(path, reKill, ""); // quirk for Coverity inconsistency in handling bison-generated file names std::string suff(sm[/* Bison suffix */ 3]); if (!suff.empty()) - core += ".c"; + path += ".c"; #if DEBUG_SUBST - std::cerr << "filterPath: " << path << " -> " << core << "\n"; + std::cerr << "filterPath: " << origPath << " -> " << path << "\n"; #endif - return core; + return path; } From 3f10b25f31a5092b2d20f6e8773dd015b8847eb5 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Wed, 10 Apr 2024 14:37:00 +0200 Subject: [PATCH 2/4] msg-filter: ignore version-release in kernel scripts ... installed in `usr/src/kernels/...+debug/scripts` Related: https://issues.redhat.com/browse/OSH-563 --- src/lib/msg-filter.cc | 5 ++++ tests/csdiff/CMakeLists.txt | 1 + .../diff-misc/21-kernel-shell-code-add-z.err | 0 .../diff-misc/21-kernel-shell-code-add.err | 0 .../diff-misc/21-kernel-shell-code-fix-z.err | 0 .../diff-misc/21-kernel-shell-code-fix.err | 0 .../diff-misc/21-kernel-shell-code-new.err | 23 +++++++++++++++++++ .../diff-misc/21-kernel-shell-code-old.err | 23 +++++++++++++++++++ tests/csdiff/diff-misc/sync.sh | 5 ++-- 9 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 tests/csdiff/diff-misc/21-kernel-shell-code-add-z.err create mode 100644 tests/csdiff/diff-misc/21-kernel-shell-code-add.err create mode 100644 tests/csdiff/diff-misc/21-kernel-shell-code-fix-z.err create mode 100644 tests/csdiff/diff-misc/21-kernel-shell-code-fix.err create mode 100644 tests/csdiff/diff-misc/21-kernel-shell-code-new.err create mode 100644 tests/csdiff/diff-misc/21-kernel-shell-code-old.err diff --git a/src/lib/msg-filter.cc b/src/lib/msg-filter.cc index 109fe2c5..88326a65 100644 --- a/src/lib/msg-filter.cc +++ b/src/lib/msg-filter.cc @@ -263,6 +263,11 @@ std::string MsgFilter::filterPath(const std::string &origPath) const return tmpPath; } + // "/usr/src/kernels/4.18.0-552.el8.x86_64+debug/..." + // -> "/usr/src/kernels/VERSION-RELEASE+debug/..." + const RE reKrnUsrSrc("^(/usr/src/kernels/)[^/-]+-[^/-]+((?:\\+debug)?/.*)$"); + path = regexReplaceWrap(path, reKrnUsrSrc, "\\1VERSION-RELEASE\\2"); + boost::smatch sm; if (boost::regex_match(path, sm, d->rePyBuild)) { // %{_builddir}/build/lib/setuptools/glob.py -> diff --git a/tests/csdiff/CMakeLists.txt b/tests/csdiff/CMakeLists.txt index fe06e3b9..0335545e 100644 --- a/tests/csdiff/CMakeLists.txt +++ b/tests/csdiff/CMakeLists.txt @@ -84,6 +84,7 @@ test_csdiff(diff-misc 16-cov-parser-key-event) test_csdiff(diff-misc 17-cov-parser-key-event) test_csdiff(diff-misc 18-cov-parser-key-event) test_csdiff(diff-misc 19-cov-parser-key-event) +test_csdiff(diff-misc 21-kernel-shell-code) test_csdiff(diff-misc 23-cov-parser-key-event) add_subdirectory(filter-file) diff --git a/tests/csdiff/diff-misc/21-kernel-shell-code-add-z.err b/tests/csdiff/diff-misc/21-kernel-shell-code-add-z.err new file mode 100644 index 00000000..e69de29b diff --git a/tests/csdiff/diff-misc/21-kernel-shell-code-add.err b/tests/csdiff/diff-misc/21-kernel-shell-code-add.err new file mode 100644 index 00000000..e69de29b diff --git a/tests/csdiff/diff-misc/21-kernel-shell-code-fix-z.err b/tests/csdiff/diff-misc/21-kernel-shell-code-fix-z.err new file mode 100644 index 00000000..e69de29b diff --git a/tests/csdiff/diff-misc/21-kernel-shell-code-fix.err b/tests/csdiff/diff-misc/21-kernel-shell-code-fix.err new file mode 100644 index 00000000..e69de29b diff --git a/tests/csdiff/diff-misc/21-kernel-shell-code-new.err b/tests/csdiff/diff-misc/21-kernel-shell-code-new.err new file mode 100644 index 00000000..09920729 --- /dev/null +++ b/tests/csdiff/diff-misc/21-kernel-shell-code-new.err @@ -0,0 +1,23 @@ +Error: SHELLCHECK_WARNING (CWE-398): +/usr/libexec/kselftests/drivers/net/netdevsim/ethtool-common.sh:31:8: error[SC1073]: Couldn't parse this test expression. Fix to allow more checks. +# 29| [ -z "$exp_fail" ] && cop="-ne" || cop="-eq" +# 30| +# 31|-> if [ $code $cop 0 ]; then +# 32| ((num_errors++)) +# 33| return + +Error: SHELLCHECK_WARNING (CWE-398): +/usr/src/kernels/4.18.0-552.el8.x86_64+debug/scripts/decode_stacktrace.sh:116:6: error[SC1073]: Couldn't parse this test expression. Fix to allow more checks. +# 114| +# 115| # Format timestamps with tabs +# 116|-> if [[ ${words[$i]} == \[ && ${words[$i+1]} == *\] ]]; then +# 117| unset words[$i] +# 118| words[$i+1]=$(printf "[%13s\n" "${words[$i+1]}") + +Error: SHELLCHECK_WARNING (CWE-398): +/usr/src/kernels/4.18.0-552.el8.x86_64/scripts/decode_stacktrace.sh:116:6: error[SC1073]: Couldn't parse this test expression. Fix to allow more checks. +# 114| +# 115| # Format timestamps with tabs +# 116|-> if [[ ${words[$i]} == \[ && ${words[$i+1]} == *\] ]]; then +# 117| unset words[$i] +# 118| words[$i+1]=$(printf "[%13s\n" "${words[$i+1]}") diff --git a/tests/csdiff/diff-misc/21-kernel-shell-code-old.err b/tests/csdiff/diff-misc/21-kernel-shell-code-old.err new file mode 100644 index 00000000..47832d8d --- /dev/null +++ b/tests/csdiff/diff-misc/21-kernel-shell-code-old.err @@ -0,0 +1,23 @@ +Error: SHELLCHECK_WARNING (CWE-398): +/usr/libexec/kselftests/drivers/net/netdevsim/ethtool-common.sh:31:8: error[SC1073]: Couldn't parse this test expression. Fix to allow more checks. +# 29| [ -z "$exp_fail" ] && cop="-ne" || cop="-eq" +# 30| +# 31|-> if [ $code $cop 0 ]; then +# 32| ((num_errors++)) +# 33| return + +Error: SHELLCHECK_WARNING (CWE-398): +/usr/src/kernels/4.18.0-513.5.1.el8.x86_64+debug/scripts/decode_stacktrace.sh:116:6: error[SC1073]: Couldn't parse this test expression. Fix to allow more checks. +# 114| +# 115| # Format timestamps with tabs +# 116|-> if [[ ${words[$i]} == \[ && ${words[$i+1]} == *\] ]]; then +# 117| unset words[$i] +# 118| words[$i+1]=$(printf "[%13s\n" "${words[$i+1]}") + +Error: SHELLCHECK_WARNING (CWE-398): +/usr/src/kernels/4.18.0-513.5.1.el8.x86_64/scripts/decode_stacktrace.sh:116:6: error[SC1073]: Couldn't parse this test expression. Fix to allow more checks. +# 114| +# 115| # Format timestamps with tabs +# 116|-> if [[ ${words[$i]} == \[ && ${words[$i+1]} == *\] ]]; then +# 117| unset words[$i] +# 118| words[$i+1]=$(printf "[%13s\n" "${words[$i+1]}") diff --git a/tests/csdiff/diff-misc/sync.sh b/tests/csdiff/diff-misc/sync.sh index 9b3a15d8..2c394d2d 100755 --- a/tests/csdiff/diff-misc/sync.sh +++ b/tests/csdiff/diff-misc/sync.sh @@ -2,13 +2,14 @@ set -x csdiff=$(realpath ../../../csdiff_build/src/csdiff) +csgrep=$(realpath ../../../csdiff_build/src/csgrep) test -x "$csdiff" || exit $? for old in *-old.err; do test=${old%-old.err} new=${test}-new.err for args in "" "-z"; do - $csdiff $args $old $new | csgrep > ${test}-add${args}.err - $csdiff $args $new $old | csgrep > ${test}-fix${args}.err + $csdiff $args $old $new | $csgrep > ${test}-add${args}.err + $csdiff $args $new $old | $csgrep > ${test}-fix${args}.err done done From 920c047a288c4b691edaef26dda3dd32d75bba6b Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Tue, 16 Apr 2024 15:01:45 +0200 Subject: [PATCH 3/4] msg-filter: tweak a regex for cutting NVR ... so that we do not need to remove `/` from the matched group afterwards. No change in behavior intended with this commit. Related: https://issues.redhat.com/browse/OSH-563 --- src/lib/msg-filter.cc | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/lib/msg-filter.cc b/src/lib/msg-filter.cc index 88326a65..4450b74d 100644 --- a/src/lib/msg-filter.cc +++ b/src/lib/msg-filter.cc @@ -69,7 +69,7 @@ struct MsgFilter::Private { const RE reKrn = RE(strKrn); const RE reDir = RE("^([^:]*/)"); const RE reFile = RE("[^/]+$"); - const RE rePath = RE("^(?:/builddir/build/BUILD/)?([^/]+/)(.*)(\\.[ly])?$"); + const RE rePath = RE("^(?:/builddir/build/BUILD/)?([^/]+)/(.*)(\\.[ly])?$"); const RE rePyBuild = RE("^((?:/builddir/build/BUILD/)?[^/]+/)build/lib/(.*)$"); const RE reTmpPath = RE("^(/var)?/tmp/(.*)$"); const RE reTmpCleaner = RE("(.*)"); @@ -279,12 +279,11 @@ std::string MsgFilter::filterPath(const std::string &origPath) const // no match return path; - std::string nvr (sm[/* NVR */ 1]); + const std::string nvr = sm[/* NVR */ 1]; path = sm[/* core */ 2]; // try to kill the multiple version strings in paths (kernel, OpenLDAP, ...) - nvr.resize(nvr.size() - 1); - std::string ver(boost::regex_replace(nvr, d->reKrn, "")); + const std::string ver = boost::regex_replace(nvr, d->reKrn, ""); const std::string krnPattern = d->strKrn + ver + "[^/]*/"; #if DEBUG_SUBST > 2 From f05aa13b32404376f9c673604205c37693715469 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Tue, 16 Apr 2024 15:12:36 +0200 Subject: [PATCH 4/4] msg-filter: tweak kernel path fixup for z-stream releases The original rule was able to translate: `kernel-4.18.0-552.el8/linux-4.18.0-552.el8.x86_64/` -> `kernel-4.18.0-552.el8/` ... but it did not work for z-stream releases, where the paths are unnecessarily inconsistent (`el8_9` on the first level vs. `el8` on the second level): `kernel-4.18.0-513.5.1.el8_9/linux-4.18.0-513.5.1.el8.x86_64/` Related: https://issues.redhat.com/browse/OSH-563 Closes: https://github.com/csutils/csdiff/pull/171 --- src/lib/msg-filter.cc | 2 +- tests/csdiff/CMakeLists.txt | 1 + .../csdiff/diff-misc/22-kernel-zstream-path-add-z.err | 0 tests/csdiff/diff-misc/22-kernel-zstream-path-add.err | 0 .../csdiff/diff-misc/22-kernel-zstream-path-fix-z.err | 0 tests/csdiff/diff-misc/22-kernel-zstream-path-fix.err | 0 tests/csdiff/diff-misc/22-kernel-zstream-path-new.err | 11 +++++++++++ tests/csdiff/diff-misc/22-kernel-zstream-path-old.err | 11 +++++++++++ 8 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tests/csdiff/diff-misc/22-kernel-zstream-path-add-z.err create mode 100644 tests/csdiff/diff-misc/22-kernel-zstream-path-add.err create mode 100644 tests/csdiff/diff-misc/22-kernel-zstream-path-fix-z.err create mode 100644 tests/csdiff/diff-misc/22-kernel-zstream-path-fix.err create mode 100644 tests/csdiff/diff-misc/22-kernel-zstream-path-new.err create mode 100644 tests/csdiff/diff-misc/22-kernel-zstream-path-old.err diff --git a/src/lib/msg-filter.cc b/src/lib/msg-filter.cc index 4450b74d..c1fd57d8 100644 --- a/src/lib/msg-filter.cc +++ b/src/lib/msg-filter.cc @@ -66,7 +66,7 @@ struct MsgFilter::Private { TSubstMap fileSubsts; const std::string strKrn = "^[a-zA-Z+]+"; - const RE reKrn = RE(strKrn); + const RE reKrn = RE(strKrn + /* convert el8_9 -> el8 */ "|_[0-9]+$"); const RE reDir = RE("^([^:]*/)"); const RE reFile = RE("[^/]+$"); const RE rePath = RE("^(?:/builddir/build/BUILD/)?([^/]+)/(.*)(\\.[ly])?$"); diff --git a/tests/csdiff/CMakeLists.txt b/tests/csdiff/CMakeLists.txt index 0335545e..77b8cc2d 100644 --- a/tests/csdiff/CMakeLists.txt +++ b/tests/csdiff/CMakeLists.txt @@ -85,6 +85,7 @@ test_csdiff(diff-misc 17-cov-parser-key-event) test_csdiff(diff-misc 18-cov-parser-key-event) test_csdiff(diff-misc 19-cov-parser-key-event) test_csdiff(diff-misc 21-kernel-shell-code) +test_csdiff(diff-misc 22-kernel-zstream-path) test_csdiff(diff-misc 23-cov-parser-key-event) add_subdirectory(filter-file) diff --git a/tests/csdiff/diff-misc/22-kernel-zstream-path-add-z.err b/tests/csdiff/diff-misc/22-kernel-zstream-path-add-z.err new file mode 100644 index 00000000..e69de29b diff --git a/tests/csdiff/diff-misc/22-kernel-zstream-path-add.err b/tests/csdiff/diff-misc/22-kernel-zstream-path-add.err new file mode 100644 index 00000000..e69de29b diff --git a/tests/csdiff/diff-misc/22-kernel-zstream-path-fix-z.err b/tests/csdiff/diff-misc/22-kernel-zstream-path-fix-z.err new file mode 100644 index 00000000..e69de29b diff --git a/tests/csdiff/diff-misc/22-kernel-zstream-path-fix.err b/tests/csdiff/diff-misc/22-kernel-zstream-path-fix.err new file mode 100644 index 00000000..e69de29b diff --git a/tests/csdiff/diff-misc/22-kernel-zstream-path-new.err b/tests/csdiff/diff-misc/22-kernel-zstream-path-new.err new file mode 100644 index 00000000..30898a8b --- /dev/null +++ b/tests/csdiff/diff-misc/22-kernel-zstream-path-new.err @@ -0,0 +1,11 @@ +Error: UNINIT (CWE-457): +kernel-4.18.0-552.el8/linux-4.18.0-552.el8.x86_64/arch/x86/crypto/chacha20_glue.c:71:2: var_decl: Declaring variable "walk" without initializer. +kernel-4.18.0-552.el8/linux-4.18.0-552.el8.x86_64/arch/x86/crypto/chacha20_glue.c:74:2: path: Condition "__cond", taking false branch. +kernel-4.18.0-552.el8/linux-4.18.0-552.el8.x86_64/arch/x86/crypto/chacha20_glue.c:77:2: path: Condition "req->cryptlen <= 64", taking false branch. +kernel-4.18.0-552.el8/linux-4.18.0-552.el8.x86_64/arch/x86/crypto/chacha20_glue.c:77:2: path: Condition "!may_use_simd()", taking false branch. +kernel-4.18.0-552.el8/linux-4.18.0-552.el8.x86_64/arch/x86/crypto/chacha20_glue.c:80:2: uninit_use_in_call: Using uninitialized value "walk.flags" when calling "skcipher_walk_virt". +# 78| return crypto_chacha20_crypt(req); +# 79| +# 80|-> err = skcipher_walk_virt(&walk, req, true); +# 81| +# 82| crypto_chacha20_init(state, ctx, walk.iv); diff --git a/tests/csdiff/diff-misc/22-kernel-zstream-path-old.err b/tests/csdiff/diff-misc/22-kernel-zstream-path-old.err new file mode 100644 index 00000000..1ad84b07 --- /dev/null +++ b/tests/csdiff/diff-misc/22-kernel-zstream-path-old.err @@ -0,0 +1,11 @@ +Error: UNINIT (CWE-457): +kernel-4.18.0-513.5.1.el8_9/linux-4.18.0-513.5.1.el8.x86_64/arch/x86/crypto/chacha20_glue.c:71: var_decl: Declaring variable "walk" without initializer. +kernel-4.18.0-513.5.1.el8_9/linux-4.18.0-513.5.1.el8.x86_64/arch/x86/crypto/chacha20_glue.c:74: path: Condition "__cond", taking false branch. +kernel-4.18.0-513.5.1.el8_9/linux-4.18.0-513.5.1.el8.x86_64/arch/x86/crypto/chacha20_glue.c:77: path: Condition "req->cryptlen <= 64", taking false branch. +kernel-4.18.0-513.5.1.el8_9/linux-4.18.0-513.5.1.el8.x86_64/arch/x86/crypto/chacha20_glue.c:77: path: Condition "!may_use_simd()", taking false branch. +kernel-4.18.0-513.5.1.el8_9/linux-4.18.0-513.5.1.el8.x86_64/arch/x86/crypto/chacha20_glue.c:80: uninit_use_in_call: Using uninitialized value "walk.flags" when calling "skcipher_walk_virt". +# 78| return crypto_chacha20_crypt(req); +# 79| +# 80|-> err = skcipher_walk_virt(&walk, req, true); +# 81| +# 82| crypto_chacha20_init(state, ctx, walk.iv);