Created attachment 14960 [details] Скриншот фрагмента кода После сравнения с NULL в rpmfc.c:1008, указатель 'fc' разименовывается в rpmfc.c:1124. --- Имеем: if (fc == NULL) { rpmlog(RPMLOG_ERR, _("Empty file classifier\n")); goto exit; } ... exit: rpmstrPoolFreeze(fc->cdict, 0); Т.е. прям явное разименование нуля. Found by Linux Verification Center (https://portal.linuxtesting.ru/) with SVACE. Author E.Bykhanova.
Created attachment 14961 [details] Скриншот фрагмента кода
Спасибо за сообщение! Суть ошибки ясна. Тут, конечно, по месту в исходниках сразу видно, что это часть rpmbuild, и у нас её представляет пакет rpm-build, который собирается из других исходников, на основе совсем другой версии, более старой. Код с ошибкой никак не используется. Это предположительно. Позже в ответе разберусь больше с его использованием. Есть ли смысл патчить код, который (предположительно) никак не используется? -- Не думаю. Если и когда rpmbuild-часть станет задействована в ALT, то будет переработана с ALT-овскими изменениями из rpm-build, и скорее всего на основе уже другой апстримной версии, которая будет иметься к тому времени. (Поэтому resolved as LATER.) Остаётся ещё вопрос: Есть ли в rpm-build (другом пакете) такой код? (Стоит поверить. Мне кажется, нет. Это более новая фича тут.) Чтобы изучить, какой код реально используется в собранном в ALT пакете, делаю так: смотрю вид кода при сборке: gear -t gears/sisyphus --hasher -- hsh --apt-conf=/home/imz/.hasher/sisyphus/apt.conf ~/hasher/ (к сожалению, не получается сказать hsh --rpmbuild-args='-bp', чтобы для этой цели -- анализа исходников -- только подготовить исходники (выполнить стадию %prep): такая опция не имеет задуманного эффекта при передаче hsh) Файл ~/hasher/chroot/usr/src/RPM/BUILD/rpm-4.13.0.1/build/rpmfc.c присутствует. Что ж, выходит, build/-часть исходников не удаляется перед сборкой, что позволило бы нам "доказать", что они никак не задействованы. Функция rpmfcClassify и ошибка в ней на месте. Всё на месте после (в общем случае) приложения патчей и удаления ненужных исходников для сборки. В выводе hsh (команда выше) посмотрим, используется ли файл rpmfc.c для компиляции. (Наверное, для более точного анализа исходников было бы хорошо именно через обёртку gcc или т.п. фиксировать, какие исходники используются; например, давая на анализ результат cpp.) Упоминания rpmfc: /usr/bin/ginstall -c -m 644 ./build/rpmfc.h include/rpm/rpmfc.h /bin/sh ../libtool --tag=CC --mode=compile x86_64-alt-linux-gcc -DHAVE_CONFIG_H -I.. -I.. -I../include/ -I/usr/include/beecrypt -DLUA_COMPAT_APIINTCASTS -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -fno-strict-aliasing -fstack-protector -Wempty-body -c -o rpmfc.lo rpmfc.c libtool: compile: x86_64-alt-linux-gcc -DHAVE_CONFIG_H -I.. -I.. -I../include/ -I/usr/include/beecrypt -DLUA_COMPAT_APIINTCASTS -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -fno-strict-aliasing -fstack-protector -Wempty-body -c rpmfc.c -fPIC -DPIC -o .libs/rpmfc.o /bin/sh ../libtool --tag=CC --mode=link x86_64-alt-linux-gcc -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -fno-strict-aliasing -fstack-protector -Wempty-body -version-info 7:1:0 -o librpmbuild.la -rpath /usr/lib64 build.lo expression.lo files.lo misc.lo pack.lo parseBuildInstallClean.lo parseChangelog.lo parseDescription.lo parseFiles.lo parsePreamble.lo parsePrep.lo parseReqs.lo parseScript.lo parseSpec.lo reqprov.lo rpmfc.lo spec.lo parsePolicies.lo policies.lo ../lib/librpm.la ../rpmio/librpmio.la ../misc/libmisc.la -lcap -lpopt -lmagic -lsha1detectcoll -lpthread libtool: link: x86_64-alt-linux-gcc -shared -fPIC -DPIC .libs/build.o .libs/expression.o .libs/files.o .libs/misc.o .libs/pack.o .libs/parseBuildInstallClean.o .libs/parseChangelog.o .libs/parseDescription.o .libs/parseFiles.o .libs/parsePreamble.o .libs/parsePrep.o .libs/parseReqs.o .libs/parseScript.o .libs/parseSpec.o .libs/reqprov.o .libs/rpmfc.o .libs/spec.o .libs/parsePolicies.o .libs/policies.o -Wl,--whole-archive ../misc/.libs/libmisc.a -Wl,--no-whole-archive -Wl,-rpath -Wl,/usr/src/RPM/BUILD/rpm-4.13.0.1/lib/.libs -Wl,-rpath -Wl,/usr/src/RPM/BUILD/rpm-4.13.0.1/rpmio/.libs ../lib/.libs/librpm.so ../rpmio/.libs/librpmio.so -lcap -lpopt -lmagic -lsha1detectcoll -lpthread -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -g -O2 -flto=auto -fstack-protector -Wl,-soname -Wl,librpmbuild.so.7 -o .libs/librpmbuild.so.7.0.1 /bin/sh ../libtool --tag=CC --mode=link x86_64-alt-linux-gcc -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -fno-strict-aliasing -fstack-protector -Wempty-body -version-info 7:1:0 -o librpmbuild.la -rpath /usr/lib64 build.lo expression.lo files.lo misc.lo pack.lo parseBuildInstallClean.lo parseChangelog.lo parseDescription.lo parseFiles.lo parsePreamble.lo parsePrep.lo parseReqs.lo parseScript.lo parseSpec.lo reqprov.lo rpmfc.lo spec.lo parsePolicies.lo policies.lo ../lib/librpm.la ../rpmio/librpmio.la ../misc/libmisc.la -lcap -lpopt -lmagic -lsha1detectcoll -lpthread libtool: link: x86_64-alt-linux-gcc -shared -fPIC -DPIC .libs/build.o .libs/expression.o .libs/files.o .libs/misc.o .libs/pack.o .libs/parseBuildInstallClean.o .libs/parseChangelog.o .libs/parseDescription.o .libs/parseFiles.o .libs/parsePreamble.o .libs/parsePrep.o .libs/parseReqs.o .libs/parseScript.o .libs/parseSpec.o .libs/reqprov.o .libs/rpmfc.o .libs/spec.o .libs/parsePolicies.o .libs/policies.o -Wl,--whole-archive ../misc/.libs/libmisc.a -Wl,--no-whole-archive -Wl,-rpath -Wl,/usr/src/RPM/BUILD/rpm-4.13.0.1/lib/.libs -Wl,-rpath -Wl,/usr/src/RPM/BUILD/rpm-4.13.0.1/rpmio/.libs ../lib/.libs/librpm.so ../rpmio/.libs/librpmio.so -lcap -lpopt -lmagic -lsha1detectcoll -lpthread -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -g -O2 -flto=auto -fstack-protector -Wl,-soname -Wl,librpmbuild.so.7 -o .libs/librpmbuild.so.7.0.1 libtool: install: (cd /usr/src/RPM/BUILD/rpm-4.13.0.1/build; /bin/sh "/usr/src/RPM/BUILD/rpm-4.13.0.1/libtool" --tag CC --mode=relink x86_64-alt-linux-gcc -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -fno-strict-aliasing -fstack-protector -Wempty-body -version-info 7:1:0 -o librpmbuild.la -rpath /usr/lib64 build.lo expression.lo files.lo misc.lo pack.lo parseBuildInstallClean.lo parseChangelog.lo parseDescription.lo parseFiles.lo parsePreamble.lo parsePrep.lo parseReqs.lo parseScript.lo parseSpec.lo reqprov.lo rpmfc.lo spec.lo parsePolicies.lo policies.lo ../lib/librpm.la ../rpmio/librpmio.la ../misc/libmisc.la -lcap -lpopt -lmagic -lsha1detectcoll -lpthread -inst-prefix-dir /usr/src/tmp/rpm-buildroot) libtool: relink: x86_64-alt-linux-gcc -shared -fPIC -DPIC .libs/build.o .libs/expression.o .libs/files.o .libs/misc.o .libs/pack.o .libs/parseBuildInstallClean.o .libs/parseChangelog.o .libs/parseDescription.o .libs/parseFiles.o .libs/parsePreamble.o .libs/parsePrep.o .libs/parseReqs.o .libs/parseScript.o .libs/parseSpec.o .libs/reqprov.o .libs/rpmfc.o .libs/spec.o .libs/parsePolicies.o .libs/policies.o -Wl,--whole-archive ../misc/.libs/libmisc.a -Wl,--no-whole-archive -L/usr/src/tmp/rpm-buildroot/usr/lib64 -L/usr/lib64 -lrpm -lrpmio -lcap -lpopt -lmagic -lsha1detectcoll -lpthread -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -g -O2 -flto=auto -fstack-protector -Wl,-soname -Wl,librpmbuild.so.7 -o .libs/librpmbuild.so.7.0.1 /usr/libexec/rpm-build/install -p -m 644 rpmio/argv.h rpmio/rpmio.h rpmio/rpmurl.h rpmio/rpmmacro.h rpmio/rpmlog.h rpmio/rpmpgp.h rpmio/rpmsq.h rpmio/rpmstring.h rpmio/rpmstrpool.h rpmio/rpmsw.h rpmio/rpmfileutil.h rpmio/rpmutil.h rpmio/rpmkeyring.h rpmio/rpmbase64.h lib/header.h lib/rpmdb.h lib/rpmcallback.h lib/rpmcli.h lib/rpmlib.h lib/rpmds.h lib/rpmfi.h lib/rpmfiles.h lib/rpmlegacy.h lib/rpmpol.h lib/rpmps.h lib/rpmprob.h lib/rpmtag.h lib/rpmtd.h lib/rpmte.h lib/rpmts.h lib/rpmtypes.h lib/rpmvf.h lib/rpmarchive.h lib/rpmvercmp.h sign/rpmsign.h build/rpmbuild.h build/rpmfc.h build/rpmspec.h '/usr/src/tmp/rpm-buildroot/usr/include/rpm' libtool: install: (cd /usr/src/RPM/BUILD/rpm-4.13.0.1/build; /bin/sh "/usr/src/RPM/BUILD/rpm-4.13.0.1/libtool" --tag CC --mode=relink x86_64-alt-linux-gcc -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -fno-strict-aliasing -fstack-protector -Wempty-body -version-info 7:1:0 -o librpmbuild.la -rpath /usr/lib64 build.lo expression.lo files.lo misc.lo pack.lo parseBuildInstallClean.lo parseChangelog.lo parseDescription.lo parseFiles.lo parsePreamble.lo parsePrep.lo parseReqs.lo parseScript.lo parseSpec.lo reqprov.lo rpmfc.lo spec.lo parsePolicies.lo policies.lo ../lib/librpm.la ../rpmio/librpmio.la ../misc/libmisc.la -lcap -lpopt -lmagic -lsha1detectcoll -lpthread -inst-prefix-dir /usr/src/RPM/BUILD/rpm-4.13.0.1/tests/testing) libtool: relink: x86_64-alt-linux-gcc -shared -fPIC -DPIC .libs/build.o .libs/expression.o .libs/files.o .libs/misc.o .libs/pack.o .libs/parseBuildInstallClean.o .libs/parseChangelog.o .libs/parseDescription.o .libs/parseFiles.o .libs/parsePreamble.o .libs/parsePrep.o .libs/parseReqs.o .libs/parseScript.o .libs/parseSpec.o .libs/reqprov.o .libs/rpmfc.o .libs/spec.o .libs/parsePolicies.o .libs/policies.o -Wl,--whole-archive ../misc/.libs/libmisc.a -Wl,--no-whole-archive -L/usr/src/RPM/BUILD/rpm-4.13.0.1/tests/testing/usr/lib64 -L/usr/lib64 -lrpm -lrpmio -lcap -lpopt -lmagic -lsha1detectcoll -lpthread -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -g -O2 -flto=auto -fstack-protector -Wl,-soname -Wl,librpmbuild.so.7 -o .libs/librpmbuild.so.7.0.1 /usr/bin/ginstall -c -m 644 rpmio/argv.h rpmio/rpmio.h rpmio/rpmurl.h rpmio/rpmmacro.h rpmio/rpmlog.h rpmio/rpmpgp.h rpmio/rpmsq.h rpmio/rpmstring.h rpmio/rpmstrpool.h rpmio/rpmsw.h rpmio/rpmfileutil.h rpmio/rpmutil.h rpmio/rpmkeyring.h rpmio/rpmbase64.h lib/header.h lib/rpmdb.h lib/rpmcallback.h lib/rpmcli.h lib/rpmlib.h lib/rpmds.h lib/rpmfi.h lib/rpmfiles.h lib/rpmlegacy.h lib/rpmpol.h lib/rpmps.h lib/rpmprob.h lib/rpmtag.h lib/rpmtd.h lib/rpmte.h lib/rpmts.h lib/rpmtypes.h lib/rpmvf.h lib/rpmarchive.h lib/rpmvercmp.h sign/rpmsign.h build/rpmbuild.h build/rpmfc.h build/rpmspec.h '/usr/src/RPM/BUILD/rpm-4.13.0.1/tests/testing/usr/include/rpm' Оно попадает в библиотеку librpmbuild. Для чего используется эта библиотека? Кому-то нужен пакет librpmbuild7? Ограничусь только ответом на второй вопрос, про зависимость на пакет. $ ~/hasher/aptbox/apt-cache whatdepends librpmbuild7 librpmbuild7-4.13.0.1-alt44@1776845801 librpmbuild7-debuginfo-4.13.0.1-alt44@1776845801 Depends: librpmbuild7 = 4.13.0.1-alt44 dnf5-plugins-5.4.0.0-alt1:sisyphus+411009.2.6.1@1773309762 Depends: <librpmbuild.so.7()(64bit)> librpmbuild7-4.13.0.1-alt44@1776845801 $ (Какой-то короткий вывод, если сравнить с showpkg. Наверное, ошибка в whatdepends.) $ ~/hasher/aptbox/apt-cache showpkg librpmbuild7 Package: librpmbuild7 Versions: 4.13.0.1-alt44@1776845801(/tmp/.private/imz/hasher/repo/x86_64/RPMS.hasher/) 4.13.0.1-alt44:sisyphus+405580.200.3.1@1768927476(/tmp/.private/imz/hasher/aptbox/var/lib/apt/lists/../../../../../apt-lists/ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64_base_pkglist.classic)(/tmp/.private/imz/hasher/aptbox/var/lib/rpm/Packages) Reverse Depends: rpmspec,librpmbuild7 4.13.0.1-alt44:sisyphus+405580.200.3.1 python3-module-rpm,librpmbuild7 4.13.0.1-alt44:sisyphus+405580.200.3.1 python-module-rpm,librpmbuild7 4.13.0.1-alt44:sisyphus+405580.200.3.1 librpm-devel,librpmbuild7 4.13.0.1-alt44:sisyphus+405580.200.3.1 rpmspec,librpmbuild7 4.13.0.1-alt44 librpm-devel,librpmbuild7 4.13.0.1-alt44 python-module-rpm,librpmbuild7 4.13.0.1-alt44 python3-module-rpm,librpmbuild7 4.13.0.1-alt44 librpmbuild7-debuginfo,librpmbuild7 4.13.0.1-alt44 Dependencies: 4.13.0.1-alt44@1776845801 - libc.so.6(GLIBC_2.15)(64bit) (0 (null)) libcap.so.2()(64bit) (2 set:kirQLhjUBY0) libmagic.so.1()(64bit) (2 set:ifeePaApd4op02) libpopt.so.0()(64bit) (2 set:jftck0pY4jRJWvaCunRMZrjSd) librpm7 (5 4.13.0.1-alt44) 4.13.0.1-alt44:sisyphus+405580.200.3.1@1768927476 - libc.so.6(GLIBC_2.15)(64bit) (0 (null)) libcap.so.2()(64bit) (2 set:kirQLhjUBY0) libmagic.so.1()(64bit) (2 set:ifeePaApd4op02) libpopt.so.0()(64bit) (2 set:jftck0pY4jRJWvaCunRMZrjSd) librpm7 (5 4.13.0.1-alt44:sisyphus+405580.200.3.1) Provides: 4.13.0.1-alt44@1776845801 - librpmbuild7 librpmbuild.so.7()(64bit) 4.13.0.1-alt44:sisyphus+405580.200.3.1@1768927476 - librpmbuild7 librpmbuild.so.7()(64bit) Reverse Provides: librpmbuild7 4.13.0.1-alt44:sisyphus+405580.200.3.1@1768927476 librpmbuild7 4.13.0.1-alt44@1776845801 $ Из реально используемого тут только rpmspec. (Остальное просто bindings на всё подряд.) Используется ли функция rpmfcClassify, которая с ошибкой? git -P grep -nH -Fe rpmfcClassify build/rpmfc.c:1002:rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode) build/rpmfc.c:1376: rc = rpmfcClassify(fc, pkg->dpaths, fmode); build/rpmfc.h:86:rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode); tools/rpmdeps.c:106: if (rpmfcClassify(fc, av, NULL) || rpmfcApply(fc)) Только в утилите rpmdeps. В rpmspec нет. Пакуется ли rpmdeps и может ли случиться, что оно используется? $ grep -Fe 'rpmdeps' /ALT/Sisyphus/{noarch,x86_64}/base/contents_index /ALT/Sisyphus/x86_64/base/contents_index:/usr/lib/eepm-rpm/rpmdeps eepm-rpm-build $ Есть утилита того же происхождения в другом пакете. У него свои исходники со своими ошиками (есть ли она там, я не знаю). eepm-rpm-build Можно перенаправить внимание по поводу этой найденной ошибки в апстрим https://github.com/rpm-software-management/rpm (наверно, уже нет); в пакет eepm-rpm-build ; в пакет rpm-build (наверно, ещё нет в той старой версии: rpmfcClassify для классификации файлов должен быть для замены механизма find-requires/provides на шелле, а в той версии так).
(Ответ для Ivan Zakharyaschev на комментарий #2) > $ ~/hasher/aptbox/apt-cache whatdepends librpmbuild7 > librpmbuild7-4.13.0.1-alt44@1776845801 > librpmbuild7-debuginfo-4.13.0.1-alt44@1776845801 > Depends: librpmbuild7 = 4.13.0.1-alt44 > dnf5-plugins-5.4.0.0-alt1:sisyphus+411009.2.6.1@1773309762 > Depends: <librpmbuild.so.7()(64bit)> > librpmbuild7-4.13.0.1-alt44@1776845801 > $ > > (Какой-то короткий вывод, если сравнить с showpkg. Наверное, ошибка в > whatdepends.) > > $ ~/hasher/aptbox/apt-cache showpkg librpmbuild7 > Package: librpmbuild7 https://bugzilla.altlinux.org/58830