touch-packages team mailing list archive
-
touch-packages team
-
Mailing list archive
-
Message #96204
Re: [Bug 1450966] Re: apt-get install segfault
thank you for your information, sir.
On Wed, Aug 12, 2015 at 9:08 AM, Julian Andres Klode <juliank@xxxxxxxxxx>
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@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
Touch seeded packages, 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@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
References