Package: libdb5.3
Version: 5.3.28+dfsg2-1
Severity: normal

Dear Maintainer,

On bookworm/ppc64el, with configs unchanged from
  https://unix.stackexchange.com/a/403489/162189
and some random debs in pool/:
  $ valgrind apt-ftparchive generate -c=aptftp.conf aptgenerate.conf
  ==785== Conditional jump or move depends on uninitialised value(s)
  ==785==    at 0x4A0A778: __bam_stkrel (bt_search.c:985)
  ==785==    by 0x49F7A0B: __bamc_put (bt_cursor.c:2266)
  ==785==    by 0x4AD93B3: __dbc_iput (db_cam.c:2136)
  ==785==    by 0x4ADBB43: __dbc_put (db_cam.c:2049)
  ==785==    by 0x4AD2E1B: __db_put (db_am.c:583)
  ==785==    by 0x4AEE53F: __db_put_pp (db_iface.c:1663)
  ==785==    by 0x1A1A1F: Put (cachedb.h:75)
  ==785==    by 0x1A1A1F: CacheDB::LoadControl() (cachedb.cc:360)
  ==785==    by 0x1A39E7: CacheDB::GetFileInfo(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&, bool const&, bool 
const&, bool const&, bool, unsigned int, bool const&) (cachedb.cc:290)
  ==785==    by 0x1B69D7: 
PackagesWriter::DoPackage(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >) (writer.cc:409)
  ==785==    by 0x1B001F: FTWScanner::ProcessFile(char const*, bool) 
(writer.cc:156)
  ==785==    by 0x1B090B: operator()<const 
std::pair<std::__cxx11::basic_string<char>, bool>&> (writer.cc:217)
  ==785==    by 0x1B090B: operator()<__gnu_cxx::__normal_iterator<const 
std::pair<std::__cxx11::basic_string<char>, bool>*, 
std::vector<std::pair<std::__cxx11::basic_string<char>, bool> > > > 
(predefined_ops.h:395)
  ==785==    by 0x1B090B: __find_if<__gnu_cxx::__normal_iterator<const 
std::pair<std::__cxx11::basic_string<char>, bool>*, 
std::vector<std::pair<std::__cxx11::basic_string<char>, bool> > >, 
__gnu_cxx::__ops::_Iter_negate<FTWScanner::RecursiveScan(const 
std::string&)::<lambda(auto:1&&)> > > (stl_algobase.h:2071)
  ==785==    by 0x1B090B: __find_if_not<__gnu_cxx::__normal_iterator<const 
std::pair<std::__cxx11::basic_string<char>, bool>*, 
std::vector<std::pair<std::__cxx11::basic_string<char>, bool> > >, 
__gnu_cxx::__ops::_Iter_pred<FTWScanner::RecursiveScan(const 
std::string&)::<lambda(auto:1&&)> > > (stl_algo.h:109)
  ==785==    by 0x1B090B: find_if_not<__gnu_cxx::__normal_iterator<const 
std::pair<std::__cxx11::basic_string<char>, bool>*, 
std::vector<std::pair<std::__cxx11::basic_string<char>, bool> > >, 
FTWScanner::RecursiveScan(const std::string&)::<lambda(auto:1&&)> > 
(stl_algo.h:516)
  ==785==    by 0x1B090B: all_of<__gnu_cxx::__normal_iterator<const 
std::pair<std::__cxx11::basic_string<char>, bool>*, 
std::vector<std::pair<std::__cxx11::basic_string<char>, bool> > >, 
FTWScanner::RecursiveScan(const std::string&)::<lambda(auto:1&&)> > 
(stl_algo.h:456)
  ==785==    by 0x1B090B: 
FTWScanner::RecursiveScan(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&) (writer.cc:217)
  ==785==    by 0x198B73: PackageMap::GenPackages(Configuration&, 
CacheDB::Stats&) (apt-ftparchive.cc:229)
  ==785==
which is
    983                 if (LF_ISSET(STK_PGONLY))
    984                         continue;
    985                 if (LF_ISSET(STK_NOLOCK) &&
    986                     (epg->lock.mode == DB_LOCK_READ ||
    987                     atomic_read(&mpf->mfp->multiversion) == 0)) {
    988                         if ((t_ret = __LPUT(dbc, epg->lock)) != 0 && 
ret == 0)
    989                                 ret = t_ret;

And adding
    985                 if (LF_ISSET(STK_NOLOCK)) {
    986 printf("epg->lock.mode=%d\n", epg->lock.mode);
    987 printf("atomic_read(&mpf->mfp->multiversion)=%d\n", 
atomic_read(&mpf->mfp->multiversion));
    988 }
    989                 if (LF_ISSET(STK_NOLOCK) &&
    990                     (epg->lock.mode == DB_LOCK_READ ||
turns the error into
  ==47309== Conditional jump or move depends on uninitialised value(s)
  ==47309==    at 0x539FC34: __vfprintf_internal (vfprintf-process-arg.c:58)
  ==47309==    by 0x549A6FB: __printf_chk@@GLIBC_2.17 (printf_chk.c:33)
  ==47309==    by 0x4A0A86F: printf (stdio2.h:86)
  ==47309==    by 0x4A0A86F: __bam_stkrel (bt_search.c:986)
  ==47309==    by 0x49F7A6B: __bamc_put (bt_cursor.c:2266)
  ==47309==    by 0x4AD9453: __dbc_iput (db_cam.c:2136)
  ==47309==    by 0x4ADBBE3: __dbc_put (db_cam.c:2049)
  ==47309==    by 0x4AD2EBB: __db_put (db_am.c:583)
  ==47309==    by 0x4AEE5DF: __db_put_pp (db_iface.c:1663)
  ==47309==    by 0x1A1A1F: Put (cachedb.h:75)
  ==47309==    by 0x1A1A1F: CacheDB::LoadControl() (cachedb.cc:360)
  ==47309==    by 0x1A39E7: 
CacheDB::GetFileInfo(std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > const&, bool const&, bool const&, bool const&, bool, 
unsigned int, bool const&) (cachedb.cc:290)
  ==47309==    by 0x1B69D7: 
PackagesWriter::DoPackage(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >) (writer.cc:409)
  ==47309==    by 0x1B001F: FTWScanner::ProcessFile(char const*, bool) 
(writer.cc:156)
  ==47309==
  ==47309== Use of uninitialised value of size 8
  ==47309==    at 0x5393138: _itoa_word (_itoa.c:177)
  ==47309==    by 0x539F6EF: __vfprintf_internal (vfprintf-process-arg.c:164)
  ==47309==    by 0x4A0A86F: printf (stdio2.h:86)
  ==47309==    by 0x4A0A86F: __bam_stkrel (bt_search.c:986)
  ==47309==    by 0x49F7A6B: __bamc_put (bt_cursor.c:2266)
  ==47309==    by 0x4AD9453: __dbc_iput (db_cam.c:2136)
  ==47309==    by 0x4ADBBE3: __dbc_put (db_cam.c:2049)
  ==47309==    by 0x4AD2EBB: __db_put (db_am.c:583)
  ==47309==    by 0x4AEE5DF: __db_put_pp (db_iface.c:1663)
  ==47309==    by 0x1A1A1F: Put (cachedb.h:75)
  ==47309==    by 0x1A1A1F: CacheDB::LoadControl() (cachedb.cc:360)
  ==47309==    by 0x1A39E7: 
CacheDB::GetFileInfo(std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > const&, bool const&, bool const&, bool const&, bool, 
unsigned int, bool const&) (cachedb.cc:290)
  ==47309==    by 0x1B69D7: 
PackagesWriter::DoPackage(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >) (writer.cc:409)
  ==47309==    by 0x1B001F: FTWScanner::ProcessFile(char const*, bool) 
(writer.cc:156)
  ==47309==
  ==47309== Conditional jump or move depends on uninitialised value(s)
  ==47309==    at 0x5393140: _itoa_word (_itoa.c:177)
  ==47309==    by 0x539F6EF: __vfprintf_internal (vfprintf-process-arg.c:164)
  ==47309==    by 0x4A0A86F: printf (stdio2.h:86)
  ==47309==    by 0x4A0A86F: __bam_stkrel (bt_search.c:986)
  ==47309==    by 0x49F7A6B: __bamc_put (bt_cursor.c:2266)
  ==47309==    by 0x4AD9453: __dbc_iput (db_cam.c:2136)
  ==47309==    by 0x4ADBBE3: __dbc_put (db_cam.c:2049)
  ==47309==    by 0x4AD2EBB: __db_put (db_am.c:583)
  ==47309==    by 0x4AEE5DF: __db_put_pp (db_iface.c:1663)
  ==47309==    by 0x1A1A1F: Put (cachedb.h:75)
  ==47309==    by 0x1A1A1F: CacheDB::LoadControl() (cachedb.cc:360)
  ==47309==    by 0x1A39E7: 
CacheDB::GetFileInfo(std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > const&, bool const&, bool const&, bool const&, bool, 
unsigned int, bool const&) (cachedb.cc:290)
  ==47309==    by 0x1B69D7: 
PackagesWriter::DoPackage(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >) (writer.cc:409)
  ==47309==    by 0x1B001F: FTWScanner::ProcessFile(char const*, bool) 
(writer.cc:156)
  ==47309==

Which points to epg->lock.mode.
Happens in bookworm apt and Salsa apt bc1fbd12789bfebf225be7af5052840a6add21e2.
I trust apt to drive bdb correctly.

Never managed to use bdb, much less looked at the code,
so idk what this means. But, here we are.

Best,

Attachment: signature.asc
Description: PGP signature

Reply via email to