[Bug 1450966] Re: apt-get install segfault

dragonhahney 1450966 at bugs.launchpad.net
Thu Aug 13 06:28:52 UTC 2015


thank you for your information, sir.

On Wed, Aug 12, 2015 at 9:08 AM, Julian Andres Klode <juliank at ubuntu.com>
wrote:

> This is fixed in Debian unstable's 0.9.10 (and possibly earlier
> versions), so it is fixed in wily's 1.0.9.10 as well.
>
> ** Changed in: apt (Ubuntu)
>        Status: Confirmed => Fix Released
>
> --
> You received this bug notification because you are subscribed to apt in
> Ubuntu.
> Matching subscriptions: dragonhahney
> https://bugs.launchpad.net/bugs/1450966
>
> Title:
>   apt-get install segfault
>
> Status in apt package in Ubuntu:
>   Fix Released
>
> Bug description:
>   Package: apt
>   Version: apt-0.8.16~exp12ubuntu10.22
>   root at 0fb5fe4c0c0f:/build/apt-0.8.16~exp12ubuntu10.22# lsb_release -rd
>   Description:    Ubuntu 12.04.5 LTS
>   Release:        12.04
>
>   Expected to happen: running "apt-get install [ package ]" installs the
>   package
>
>   What happened: running "apt-get install [ package ]" encounters a
>   segfault
>
>   Debug notes:
>
>   This occurred while installing a package that depends on many other
>   packages.  The package I was installing had "Section" defined, while
>   the offending dependent package did not have "Section" defined.
>
>   I built apt from source with debug symbols and located found the issue
>   occurs because a NULL value is being passed to strcmp (frame 1).  This
>   happens because a prior function (frame 2) assumes that if the parent
>   package has "Section" defined, then the defendant package will also
>   have "Section" defined as well.
>
>   Adding the "Section" field to the offending package works around the
>   segfault issue.
>
>   Given that the policy manual (https://www.debian.org/doc/debian-policy
>   /ch-controlfields.html) states that section is recommended it's
>   technically correct to have a packge omit the Section field, and as
>   such, apt should tolerate this situation.
>
>   GDB:
>
>   Program received signal SIGSEGV, Segmentation fault.
>   __strcmp_sse42 () at ../sysdeps/x86_64/multiarch/strcmp-sse42.S:163
>   163     ../sysdeps/x86_64/multiarch/strcmp-sse42.S: No such file or
> directory.
>   (gdb) where
>   #0  __strcmp_sse42 () at ../sysdeps/x86_64/multiarch/strcmp-sse42.S:163
>   #1  0x00007ffff7ad7479 in ConfigValueInSubTree (SubTree=0x7ffff7b85879
> "APT::Never-MarkAuto-Sections", needle=0x0) at depcache.cc:53
>   #2  0x00007ffff7adcb54 in pkgDepCache::MarkInstall (this=0x668fb0,
> Pkg=..., AutoInst=true, Depth=0, FromUser=true,
>       ForceImportantDeps=false) at depcache.cc:1208
>   #3  0x0000000000431259 in TryToInstall::doAutoInstall
> (this=0x7fffffffd710) at apt-get.cc:878
>   #4  0x00000000004218a7 in DoInstall (CmdL=...) at apt-get.cc:1901
>   #5  0x00007ffff7abe322 in CommandLine::DispatchArg (this=0x7fffffffe5f0,
> Map=0x7fffffffe4b0, NoMatch=true) at contrib/cmndline.cc:337
>   #6  0x000000000042c109 in main (argc=5, argv=0x7fffffffe738) at
> apt-get.cc:3523
>
>   Frame 1, NULL value getting passed to strcmp
>
>   (gdb) f 1
>   #1  0x00007ffff7ad7479 in ConfigValueInSubTree (SubTree=0x7ffff7b85879
> "APT::Never-MarkAuto-Sections", needle=0x0) at depcache.cc:53
>   53               if (strcmp(needle, Opts->Value.c_str()) == 0)
>   (gdb) p needle
>   $4 = 0x0
>   (gdb) list
>   48            Opts = Opts->Child;
>   49            for (; Opts != 0; Opts = Opts->Next)
>   50            {
>   51               if (Opts->Value.empty() == true)
>   52                  continue;
>   53               if (strcmp(needle, Opts->Value.c_str()) == 0)
>   54                  return true;
>   55            }
>   56         }
>   57         return false;
>
>
>   Frame 2, code assumes InstVer.Section() is non-null if Pkg.Section()
> evaluates to true.
>
>   (gdb) f 2
>   #2  0x00007ffff7adcb54 in pkgDepCache::MarkInstall (this=0x668fb0,
> Pkg=..., AutoInst=true, Depth=0, FromUser=true,
>       ForceImportantDeps=false) at depcache.cc:1208
>   1208                if(Pkg.Section() &&
> ConfigValueInSubTree("APT::Never-MarkAuto-Sections", InstVer.Section()))
>   (gdb) p Pkg.Section()
>   $2 = 0x7ffff5b1325e "Optional"
>   (gdb) p InstVer.Section()
>   $6 = 0x0
>   (gdb) list
>   1203                if(DebugAutoInstall == true)
>   1204                   std::clog << OutputInDepth(Depth) << "Installing
> " << InstPkg.Name()
>   1205                             << " as " << Start.DepType() << " of "
> << Pkg.Name()
>   1206                             << std::endl;
>   1207                // now check if we should consider it a automatic
> dependency or not
>   1208                if(Pkg.Section() &&
> ConfigValueInSubTree("APT::Never-MarkAuto-Sections", InstVer.Section()))
>   1209                {
>   1210                   if(DebugAutoInstall == true)
>   1211                      std::clog << OutputInDepth(Depth) << "Setting
> NOT as auto-installed (direct "
>   1212                                << Start.DepType() << " of pkg in
> APT::Never-MarkAuto-Sections)" << std::endl;
>
> To manage notifications about this bug go to:
> https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1450966/+subscriptions
>

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to apt in Ubuntu.
https://bugs.launchpad.net/bugs/1450966

Title:
  apt-get install segfault

Status in apt package in Ubuntu:
  Fix Released

Bug description:
  Package: apt
  Version: apt-0.8.16~exp12ubuntu10.22
  root at 0fb5fe4c0c0f:/build/apt-0.8.16~exp12ubuntu10.22# lsb_release -rd
  Description:    Ubuntu 12.04.5 LTS
  Release:        12.04

  Expected to happen: running "apt-get install [ package ]" installs the
  package

  What happened: running "apt-get install [ package ]" encounters a
  segfault

  Debug notes:

  This occurred while installing a package that depends on many other
  packages.  The package I was installing had "Section" defined, while
  the offending dependent package did not have "Section" defined.

  I built apt from source with debug symbols and located found the issue
  occurs because a NULL value is being passed to strcmp (frame 1).  This
  happens because a prior function (frame 2) assumes that if the parent
  package has "Section" defined, then the defendant package will also
  have "Section" defined as well.

  Adding the "Section" field to the offending package works around the
  segfault issue.

  Given that the policy manual (https://www.debian.org/doc/debian-policy
  /ch-controlfields.html) states that section is recommended it's
  technically correct to have a packge omit the Section field, and as
  such, apt should tolerate this situation.

  GDB:

  Program received signal SIGSEGV, Segmentation fault.
  __strcmp_sse42 () at ../sysdeps/x86_64/multiarch/strcmp-sse42.S:163
  163     ../sysdeps/x86_64/multiarch/strcmp-sse42.S: No such file or directory.
  (gdb) where
  #0  __strcmp_sse42 () at ../sysdeps/x86_64/multiarch/strcmp-sse42.S:163
  #1  0x00007ffff7ad7479 in ConfigValueInSubTree (SubTree=0x7ffff7b85879 "APT::Never-MarkAuto-Sections", needle=0x0) at depcache.cc:53
  #2  0x00007ffff7adcb54 in pkgDepCache::MarkInstall (this=0x668fb0, Pkg=..., AutoInst=true, Depth=0, FromUser=true,
      ForceImportantDeps=false) at depcache.cc:1208
  #3  0x0000000000431259 in TryToInstall::doAutoInstall (this=0x7fffffffd710) at apt-get.cc:878
  #4  0x00000000004218a7 in DoInstall (CmdL=...) at apt-get.cc:1901
  #5  0x00007ffff7abe322 in CommandLine::DispatchArg (this=0x7fffffffe5f0, Map=0x7fffffffe4b0, NoMatch=true) at contrib/cmndline.cc:337
  #6  0x000000000042c109 in main (argc=5, argv=0x7fffffffe738) at apt-get.cc:3523

  Frame 1, NULL value getting passed to strcmp

  (gdb) f 1 
  #1  0x00007ffff7ad7479 in ConfigValueInSubTree (SubTree=0x7ffff7b85879 "APT::Never-MarkAuto-Sections", needle=0x0) at depcache.cc:53
  53               if (strcmp(needle, Opts->Value.c_str()) == 0)
  (gdb) p needle
  $4 = 0x0
  (gdb) list
  48            Opts = Opts->Child;
  49            for (; Opts != 0; Opts = Opts->Next)
  50            {
  51               if (Opts->Value.empty() == true)
  52                  continue;
  53               if (strcmp(needle, Opts->Value.c_str()) == 0)
  54                  return true;
  55            }
  56         }
  57         return false;

  
  Frame 2, code assumes InstVer.Section() is non-null if Pkg.Section() evaluates to true.

  (gdb) f 2
  #2  0x00007ffff7adcb54 in pkgDepCache::MarkInstall (this=0x668fb0, Pkg=..., AutoInst=true, Depth=0, FromUser=true, 
      ForceImportantDeps=false) at depcache.cc:1208
  1208                if(Pkg.Section() && ConfigValueInSubTree("APT::Never-MarkAuto-Sections", InstVer.Section()))
  (gdb) p Pkg.Section()
  $2 = 0x7ffff5b1325e "Optional"
  (gdb) p InstVer.Section()
  $6 = 0x0
  (gdb) list
  1203                if(DebugAutoInstall == true)
  1204                   std::clog << OutputInDepth(Depth) << "Installing " << InstPkg.Name()
  1205                             << " as " << Start.DepType() << " of " << Pkg.Name()
  1206                             << std::endl;
  1207                // now check if we should consider it a automatic dependency or not
  1208                if(Pkg.Section() && ConfigValueInSubTree("APT::Never-MarkAuto-Sections", InstVer.Section()))
  1209                {
  1210                   if(DebugAutoInstall == true)
  1211                      std::clog << OutputInDepth(Depth) << "Setting NOT as auto-installed (direct "
  1212                                << Start.DepType() << " of pkg in APT::Never-MarkAuto-Sections)" << std::endl;

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1450966/+subscriptions



More information about the foundations-bugs mailing list