NSLU2-Linux
view · edit · print · history

DS101.SegmentationFaultInIpkg History

Hide minor edits - Show changes to markup

January 07, 2008, at 06:22 PM by ByronT -- Revert Spam
Changed lines 1-205 from:

http://www.geocities.com/esxpartner

to:

Problem

When trying the ipkg update && ipkg upgrade the ipkg segfaults.

Symptoms

$ipkg -V 3 install wget-ssl
pkg_info_preinstall_check: updating arch priority for each package
pkg_info_preinstall_check: update file owner list
best installation candidate for wget-ssl
 adding wget-ssl to providers
  wget-ssl arch=powerpc arch_priority=10 constraint=1
  using latest matching wget-ssl 1.10.2-3 powerpc
arch powerpc (priority 10) supported for pkg wget-ssl
Installing wget-ssl (1.10.2-3) to root...
Downloading
http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/wget-ssl_1.10.2-3_powerpc.ipk
best installation candidate for openssl
 adding openssl to providers
  openssl arch=powerpc arch_priority=10 constraint=1
  using latest version of installed package openssl
pkg_depends.c:177: satisfying_pkg=0x100a09f0
Running script /tmp/ipkg-bsEuV6/wget-ssl-aTTdFp/preinst
Replacing pre-existing file /opt/man/man1/wget.1 owned by package wget-ssl
Replacing pre-existing file /opt/bin/wget owned by package wget-ssl
  installing maintainer scripts
  installing data files
    extracting data files to /
    Calling pkg_write_filelist from install_data_files
    creating wget-ssl.list file
    creating //opt/lib/ipkg/info/wget-ssl.list file for pkg wget-ssl
  resolving conf files
Segmentation fault (core dumped)

or

# ipkg info ipkg
Package: ipkg
Version: 0.99-163-2
Status: unknown ok not-installed
Section: base
Architecture: powerpc
maintainer: NSLU2 Linux <nslu2-linux@yahoogroups.com>
MD5Sum: cda27fe3b5c24d74e1ba8690f69c3617
Size: 81862
Filename: ipkg_0.99-163-2_powerpc.ipk
Source: :pserver:anoncvs@anoncvs.handhelds.org
Description: The Itsy Package Manager

Successfully terminated.
# ipkg install ipkg
Installing ipkg (0.99-163-2) to root...
Downloading >http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
Segmentation fault (core dumped)

Workaround

To overcome this you need to download and manually install the new ipkg. Do this by the following the steps below:

  1. Download the ipkg package
    Either by issuing the command ipkg download ipkg
    or by directly downloading the package through web http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
  2. Untar the package
    tar xzf ipkg_0.99-163-2_powerpc.ipk
    tar xzf data.tar.gz
  3. Copy the files
    cp ./opt/bin/ipkg /opt/bin
    cp ./opt/lib/libipkg.so.0.0.0 /opt/lib
  4. Install the package
    ipkg install ipkg

This is a log of the successful ipkg update:

# ipkg download ipkg
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
Downloaded ipkg as ./ipkg_0.99-163-2_powerpc.ipk
Successfully terminated.
# tar xzf ipkg_0.99-163-2_powerpc.ipk
# tar xzf data.tar.gz
# cp ./opt/bin/ipkg /opt/bin
# cp ./opt/lib/libipkg.so.0.0.0 /opt/lib
# ipkg install ipkg
Installing ipkg (0.99-163-2) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
    Configuration file '/opt/etc/ipkg.conf'
    ==> File on system created by you or by a script.
    ==> File also in package provided by package maintainer.
       What would you like to do about it ?  Your options are:
        Y or I  : install the package maintainer's version
        N or O  : keep your currently-installed version
          D     : show the differences between the versions (if diff is installed)
     The default action is to keep your current version.
    *** ipkg.conf (Y/I/N/O/D) [default=N] ? Y
Configuring ipkg
Successfully terminated.
# ipkg update
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/Packages.gz
Inflating http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/Packages.gz
Updated list of available packages in /opt/var/lib/ipkg/cross
Successfully terminated.
# ipkg upgrade
Upgrading openssl on root from 0.9.7d-4 to 0.9.7d-5...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/openssl_0.9.7d-5_powerpc.ipk
Upgrading wget-ssl on root from 1.10-1 to 1.10.2-3...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/wget-ssl_1.10.2-3_powerpc.ipk
    Configuration file '/opt/etc/wgetrc'
    ==> File on system created by you or by a script.
    ==> File also in package provided by package maintainer.
       What would you like to do about it ?  Your options are:
        Y or I  : install the package maintainer's version
        N or O  : keep your currently-installed version
          D     : show the differences between the versions (if diff is installed)
     The default action is to keep your current version.
    *** wgetrc (Y/I/N/O/D) [default=N] ? Y
Configuring openssl
Configuring wget-ssl
Successfully terminated.

Solution

The problem was solved here are the crucial emails from the mailin list. Now the workaround shouldn't be needed. The solution was supplied by mcdmx at users.sourceforge.net

Gerald Dachs wrote:
> What makes me nervous only that I didn't fix the problem, I made only a workaround, because
> I couldn't find a bug that produces the segfault. I know exactly the place where it segfaults, but
> I don't find a reason why. 

The bug is triggered whenever ipkg tries to update a localy-modified config 
file. ipkg then prompts the user if the file should be updated or not. ipkg's 
user.c misses a matching va_end() call and this may lead to a segmentation fault.

Excerpt from the va_end() manpage:

"Each  invocation of va_start must be matched by a corresponding invocation of 
va_end in the same function. After the call va_end(ap) the variable ap is 
undefined. Multiple transversals of the list, each bracketed by  va_start and 
va_end are possible."

The proper fix (IMO) looks like this:

--- user.c  2004-02-25 14:18:01.000000000 +0100
+++ user.c.patched   2005-10-26 18:04:48.000000000 +0200
@@ -34,7 +34,6 @@
       int len = question_len;
       va_list ap;
       char *response;
-     va_start(ap, format);

  #ifndef IPKG_LIB
       vprintf(format, ap);
@@ -47,7 +46,9 @@
           question = realloc(question, len + 1);
           question_len = len;
      }
+          va_start(ap, format);
      len = vsnprintf(question,question_len,format,ap);
+          va_end(ap);
       } while (len > question_len);
       response = strdup(ipkg_cb_response(question));
  #endif


Cheers,

Michel

===================

On Thu, 14 Sep 2006 09:26:27 +0200
mcdmx at users.sourceforge.net wrote:

> Gerald Dachs wrote:
> > What makes me nervous only that I didn't fix the problem, I made only a workaround, because
> > I couldn't find a bug that produces the segfault. I know exactly the place where it segfaults, but
> > I don't find a reason why. 
> 
> The bug is triggered whenever ipkg tries to update a localy-modified config 
> file. ipkg then prompts the user if the file should be updated or not.

This I knew already.

> ipkg's 
> user.c misses a matching va_end() call and this may lead to a segmentation fault.
> 

You are absolutely right, and I guess it is pure luck that this doesn't happen on the
other platforms. I expect that most of the time the buffer for the message is big enough,
so that there is no need for the realloc and another call of the vsnprintf func.
That makes me even sure that my workaround don't hide a big problem, but I
will try to make the real fix today.

do you wan't to mail the ipkg developer?

Gerald

=====================

Gerald Dachs wrote:
 > do you wan't to mail the ipkg developer?

Yup, I've just sent the patch to the familiar mailing-list...

Bad flash also causes this problem

Pay particular attention that the segmentation fault error will also occur when the unsling is performed (by error) over the flash, filling it. You will have to recover from a bad flash (see RecoverFromABadFlash ) before you can continue.

January 07, 2008, at 08:58 AM by esxpartner -- lxhycudYHq
Changed lines 1-205 from:

Problem

When trying the ipkg update && ipkg upgrade the ipkg segfaults.

Symptoms

$ipkg -V 3 install wget-ssl
pkg_info_preinstall_check: updating arch priority for each package
pkg_info_preinstall_check: update file owner list
best installation candidate for wget-ssl
 adding wget-ssl to providers
  wget-ssl arch=powerpc arch_priority=10 constraint=1
  using latest matching wget-ssl 1.10.2-3 powerpc
arch powerpc (priority 10) supported for pkg wget-ssl
Installing wget-ssl (1.10.2-3) to root...
Downloading
http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/wget-ssl_1.10.2-3_powerpc.ipk
best installation candidate for openssl
 adding openssl to providers
  openssl arch=powerpc arch_priority=10 constraint=1
  using latest version of installed package openssl
pkg_depends.c:177: satisfying_pkg=0x100a09f0
Running script /tmp/ipkg-bsEuV6/wget-ssl-aTTdFp/preinst
Replacing pre-existing file /opt/man/man1/wget.1 owned by package wget-ssl
Replacing pre-existing file /opt/bin/wget owned by package wget-ssl
  installing maintainer scripts
  installing data files
    extracting data files to /
    Calling pkg_write_filelist from install_data_files
    creating wget-ssl.list file
    creating //opt/lib/ipkg/info/wget-ssl.list file for pkg wget-ssl
  resolving conf files
Segmentation fault (core dumped)

or

# ipkg info ipkg
Package: ipkg
Version: 0.99-163-2
Status: unknown ok not-installed
Section: base
Architecture: powerpc
maintainer: NSLU2 Linux <nslu2-linux@yahoogroups.com>
MD5Sum: cda27fe3b5c24d74e1ba8690f69c3617
Size: 81862
Filename: ipkg_0.99-163-2_powerpc.ipk
Source: :pserver:anoncvs@anoncvs.handhelds.org
Description: The Itsy Package Manager

Successfully terminated.
# ipkg install ipkg
Installing ipkg (0.99-163-2) to root...
Downloading >http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
Segmentation fault (core dumped)

Workaround

To overcome this you need to download and manually install the new ipkg. Do this by the following the steps below:

  1. Download the ipkg package
    Either by issuing the command ipkg download ipkg
    or by directly downloading the package through web http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
  2. Untar the package
    tar xzf ipkg_0.99-163-2_powerpc.ipk
    tar xzf data.tar.gz
  3. Copy the files
    cp ./opt/bin/ipkg /opt/bin
    cp ./opt/lib/libipkg.so.0.0.0 /opt/lib
  4. Install the package
    ipkg install ipkg

This is a log of the successful ipkg update:

# ipkg download ipkg
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
Downloaded ipkg as ./ipkg_0.99-163-2_powerpc.ipk
Successfully terminated.
# tar xzf ipkg_0.99-163-2_powerpc.ipk
# tar xzf data.tar.gz
# cp ./opt/bin/ipkg /opt/bin
# cp ./opt/lib/libipkg.so.0.0.0 /opt/lib
# ipkg install ipkg
Installing ipkg (0.99-163-2) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
    Configuration file '/opt/etc/ipkg.conf'
    ==> File on system created by you or by a script.
    ==> File also in package provided by package maintainer.
       What would you like to do about it ?  Your options are:
        Y or I  : install the package maintainer's version
        N or O  : keep your currently-installed version
          D     : show the differences between the versions (if diff is installed)
     The default action is to keep your current version.
    *** ipkg.conf (Y/I/N/O/D) [default=N] ? Y
Configuring ipkg
Successfully terminated.
# ipkg update
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/Packages.gz
Inflating http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/Packages.gz
Updated list of available packages in /opt/var/lib/ipkg/cross
Successfully terminated.
# ipkg upgrade
Upgrading openssl on root from 0.9.7d-4 to 0.9.7d-5...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/openssl_0.9.7d-5_powerpc.ipk
Upgrading wget-ssl on root from 1.10-1 to 1.10.2-3...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/wget-ssl_1.10.2-3_powerpc.ipk
    Configuration file '/opt/etc/wgetrc'
    ==> File on system created by you or by a script.
    ==> File also in package provided by package maintainer.
       What would you like to do about it ?  Your options are:
        Y or I  : install the package maintainer's version
        N or O  : keep your currently-installed version
          D     : show the differences between the versions (if diff is installed)
     The default action is to keep your current version.
    *** wgetrc (Y/I/N/O/D) [default=N] ? Y
Configuring openssl
Configuring wget-ssl
Successfully terminated.

Solution

The problem was solved here are the crucial emails from the mailin list. Now the workaround shouldn't be needed. The solution was supplied by mcdmx at users.sourceforge.net

Gerald Dachs wrote:
> What makes me nervous only that I didn't fix the problem, I made only a workaround, because
> I couldn't find a bug that produces the segfault. I know exactly the place where it segfaults, but
> I don't find a reason why. 

The bug is triggered whenever ipkg tries to update a localy-modified config 
file. ipkg then prompts the user if the file should be updated or not. ipkg's 
user.c misses a matching va_end() call and this may lead to a segmentation fault.

Excerpt from the va_end() manpage:

"Each  invocation of va_start must be matched by a corresponding invocation of 
va_end in the same function. After the call va_end(ap) the variable ap is 
undefined. Multiple transversals of the list, each bracketed by  va_start and 
va_end are possible."

The proper fix (IMO) looks like this:

--- user.c  2004-02-25 14:18:01.000000000 +0100
+++ user.c.patched   2005-10-26 18:04:48.000000000 +0200
@@ -34,7 +34,6 @@
       int len = question_len;
       va_list ap;
       char *response;
-     va_start(ap, format);

  #ifndef IPKG_LIB
       vprintf(format, ap);
@@ -47,7 +46,9 @@
           question = realloc(question, len + 1);
           question_len = len;
      }
+          va_start(ap, format);
      len = vsnprintf(question,question_len,format,ap);
+          va_end(ap);
       } while (len > question_len);
       response = strdup(ipkg_cb_response(question));
  #endif


Cheers,

Michel

===================

On Thu, 14 Sep 2006 09:26:27 +0200
mcdmx at users.sourceforge.net wrote:

> Gerald Dachs wrote:
> > What makes me nervous only that I didn't fix the problem, I made only a workaround, because
> > I couldn't find a bug that produces the segfault. I know exactly the place where it segfaults, but
> > I don't find a reason why. 
> 
> The bug is triggered whenever ipkg tries to update a localy-modified config 
> file. ipkg then prompts the user if the file should be updated or not.

This I knew already.

> ipkg's 
> user.c misses a matching va_end() call and this may lead to a segmentation fault.
> 

You are absolutely right, and I guess it is pure luck that this doesn't happen on the
other platforms. I expect that most of the time the buffer for the message is big enough,
so that there is no need for the realloc and another call of the vsnprintf func.
That makes me even sure that my workaround don't hide a big problem, but I
will try to make the real fix today.

do you wan't to mail the ipkg developer?

Gerald

=====================

Gerald Dachs wrote:
 > do you wan't to mail the ipkg developer?

Yup, I've just sent the patch to the familiar mailing-list...

Bad flash also causes this problem

Pay particular attention that the segmentation fault error will also occur when the unsling is performed (by error) over the flash, filling it. You will have to recover from a bad flash (see RecoverFromABadFlash ) before you can continue.

to:

http://www.geocities.com/esxpartner

August 15, 2007, at 04:28 AM by mwester -- Revert
Changed lines 1-205 from:

f

to:

Problem

When trying the ipkg update && ipkg upgrade the ipkg segfaults.

Symptoms

$ipkg -V 3 install wget-ssl
pkg_info_preinstall_check: updating arch priority for each package
pkg_info_preinstall_check: update file owner list
best installation candidate for wget-ssl
 adding wget-ssl to providers
  wget-ssl arch=powerpc arch_priority=10 constraint=1
  using latest matching wget-ssl 1.10.2-3 powerpc
arch powerpc (priority 10) supported for pkg wget-ssl
Installing wget-ssl (1.10.2-3) to root...
Downloading
http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/wget-ssl_1.10.2-3_powerpc.ipk
best installation candidate for openssl
 adding openssl to providers
  openssl arch=powerpc arch_priority=10 constraint=1
  using latest version of installed package openssl
pkg_depends.c:177: satisfying_pkg=0x100a09f0
Running script /tmp/ipkg-bsEuV6/wget-ssl-aTTdFp/preinst
Replacing pre-existing file /opt/man/man1/wget.1 owned by package wget-ssl
Replacing pre-existing file /opt/bin/wget owned by package wget-ssl
  installing maintainer scripts
  installing data files
    extracting data files to /
    Calling pkg_write_filelist from install_data_files
    creating wget-ssl.list file
    creating //opt/lib/ipkg/info/wget-ssl.list file for pkg wget-ssl
  resolving conf files
Segmentation fault (core dumped)

or

# ipkg info ipkg
Package: ipkg
Version: 0.99-163-2
Status: unknown ok not-installed
Section: base
Architecture: powerpc
maintainer: NSLU2 Linux <nslu2-linux@yahoogroups.com>
MD5Sum: cda27fe3b5c24d74e1ba8690f69c3617
Size: 81862
Filename: ipkg_0.99-163-2_powerpc.ipk
Source: :pserver:anoncvs@anoncvs.handhelds.org
Description: The Itsy Package Manager

Successfully terminated.
# ipkg install ipkg
Installing ipkg (0.99-163-2) to root...
Downloading >http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
Segmentation fault (core dumped)

Workaround

To overcome this you need to download and manually install the new ipkg. Do this by the following the steps below:

  1. Download the ipkg package
    Either by issuing the command ipkg download ipkg
    or by directly downloading the package through web http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
  2. Untar the package
    tar xzf ipkg_0.99-163-2_powerpc.ipk
    tar xzf data.tar.gz
  3. Copy the files
    cp ./opt/bin/ipkg /opt/bin
    cp ./opt/lib/libipkg.so.0.0.0 /opt/lib
  4. Install the package
    ipkg install ipkg

This is a log of the successful ipkg update:

# ipkg download ipkg
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
Downloaded ipkg as ./ipkg_0.99-163-2_powerpc.ipk
Successfully terminated.
# tar xzf ipkg_0.99-163-2_powerpc.ipk
# tar xzf data.tar.gz
# cp ./opt/bin/ipkg /opt/bin
# cp ./opt/lib/libipkg.so.0.0.0 /opt/lib
# ipkg install ipkg
Installing ipkg (0.99-163-2) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
    Configuration file '/opt/etc/ipkg.conf'
    ==> File on system created by you or by a script.
    ==> File also in package provided by package maintainer.
       What would you like to do about it ?  Your options are:
        Y or I  : install the package maintainer's version
        N or O  : keep your currently-installed version
          D     : show the differences between the versions (if diff is installed)
     The default action is to keep your current version.
    *** ipkg.conf (Y/I/N/O/D) [default=N] ? Y
Configuring ipkg
Successfully terminated.
# ipkg update
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/Packages.gz
Inflating http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/Packages.gz
Updated list of available packages in /opt/var/lib/ipkg/cross
Successfully terminated.
# ipkg upgrade
Upgrading openssl on root from 0.9.7d-4 to 0.9.7d-5...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/openssl_0.9.7d-5_powerpc.ipk
Upgrading wget-ssl on root from 1.10-1 to 1.10.2-3...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/wget-ssl_1.10.2-3_powerpc.ipk
    Configuration file '/opt/etc/wgetrc'
    ==> File on system created by you or by a script.
    ==> File also in package provided by package maintainer.
       What would you like to do about it ?  Your options are:
        Y or I  : install the package maintainer's version
        N or O  : keep your currently-installed version
          D     : show the differences between the versions (if diff is installed)
     The default action is to keep your current version.
    *** wgetrc (Y/I/N/O/D) [default=N] ? Y
Configuring openssl
Configuring wget-ssl
Successfully terminated.

Solution

The problem was solved here are the crucial emails from the mailin list. Now the workaround shouldn't be needed. The solution was supplied by mcdmx at users.sourceforge.net

Gerald Dachs wrote:
> What makes me nervous only that I didn't fix the problem, I made only a workaround, because
> I couldn't find a bug that produces the segfault. I know exactly the place where it segfaults, but
> I don't find a reason why. 

The bug is triggered whenever ipkg tries to update a localy-modified config 
file. ipkg then prompts the user if the file should be updated or not. ipkg's 
user.c misses a matching va_end() call and this may lead to a segmentation fault.

Excerpt from the va_end() manpage:

"Each  invocation of va_start must be matched by a corresponding invocation of 
va_end in the same function. After the call va_end(ap) the variable ap is 
undefined. Multiple transversals of the list, each bracketed by  va_start and 
va_end are possible."

The proper fix (IMO) looks like this:

--- user.c  2004-02-25 14:18:01.000000000 +0100
+++ user.c.patched   2005-10-26 18:04:48.000000000 +0200
@@ -34,7 +34,6 @@
       int len = question_len;
       va_list ap;
       char *response;
-     va_start(ap, format);

  #ifndef IPKG_LIB
       vprintf(format, ap);
@@ -47,7 +46,9 @@
           question = realloc(question, len + 1);
           question_len = len;
      }
+          va_start(ap, format);
      len = vsnprintf(question,question_len,format,ap);
+          va_end(ap);
       } while (len > question_len);
       response = strdup(ipkg_cb_response(question));
  #endif


Cheers,

Michel

===================

On Thu, 14 Sep 2006 09:26:27 +0200
mcdmx at users.sourceforge.net wrote:

> Gerald Dachs wrote:
> > What makes me nervous only that I didn't fix the problem, I made only a workaround, because
> > I couldn't find a bug that produces the segfault. I know exactly the place where it segfaults, but
> > I don't find a reason why. 
> 
> The bug is triggered whenever ipkg tries to update a localy-modified config 
> file. ipkg then prompts the user if the file should be updated or not.

This I knew already.

> ipkg's 
> user.c misses a matching va_end() call and this may lead to a segmentation fault.
> 

You are absolutely right, and I guess it is pure luck that this doesn't happen on the
other platforms. I expect that most of the time the buffer for the message is big enough,
so that there is no need for the realloc and another call of the vsnprintf func.
That makes me even sure that my workaround don't hide a big problem, but I
will try to make the real fix today.

do you wan't to mail the ipkg developer?

Gerald

=====================

Gerald Dachs wrote:
 > do you wan't to mail the ipkg developer?

Yup, I've just sent the patch to the familiar mailing-list...

Bad flash also causes this problem

Pay particular attention that the segmentation fault error will also occur when the unsling is performed (by error) over the flash, filling it. You will have to recover from a bad flash (see RecoverFromABadFlash ) before you can continue.

August 14, 2007, at 09:57 PM by f -- fff
August 14, 2007, at 09:55 PM by f -- fff
Changed lines 1-205 from:

Problem

When trying the ipkg update && ipkg upgrade the ipkg segfaults.

Symptoms

$ipkg -V 3 install wget-ssl
pkg_info_preinstall_check: updating arch priority for each package
pkg_info_preinstall_check: update file owner list
best installation candidate for wget-ssl
 adding wget-ssl to providers
  wget-ssl arch=powerpc arch_priority=10 constraint=1
  using latest matching wget-ssl 1.10.2-3 powerpc
arch powerpc (priority 10) supported for pkg wget-ssl
Installing wget-ssl (1.10.2-3) to root...
Downloading
http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/wget-ssl_1.10.2-3_powerpc.ipk
best installation candidate for openssl
 adding openssl to providers
  openssl arch=powerpc arch_priority=10 constraint=1
  using latest version of installed package openssl
pkg_depends.c:177: satisfying_pkg=0x100a09f0
Running script /tmp/ipkg-bsEuV6/wget-ssl-aTTdFp/preinst
Replacing pre-existing file /opt/man/man1/wget.1 owned by package wget-ssl
Replacing pre-existing file /opt/bin/wget owned by package wget-ssl
  installing maintainer scripts
  installing data files
    extracting data files to /
    Calling pkg_write_filelist from install_data_files
    creating wget-ssl.list file
    creating //opt/lib/ipkg/info/wget-ssl.list file for pkg wget-ssl
  resolving conf files
Segmentation fault (core dumped)

or

# ipkg info ipkg
Package: ipkg
Version: 0.99-163-2
Status: unknown ok not-installed
Section: base
Architecture: powerpc
maintainer: NSLU2 Linux <nslu2-linux@yahoogroups.com>
MD5Sum: cda27fe3b5c24d74e1ba8690f69c3617
Size: 81862
Filename: ipkg_0.99-163-2_powerpc.ipk
Source: :pserver:anoncvs@anoncvs.handhelds.org
Description: The Itsy Package Manager

Successfully terminated.
# ipkg install ipkg
Installing ipkg (0.99-163-2) to root...
Downloading >http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
Segmentation fault (core dumped)

Workaround

To overcome this you need to download and manually install the new ipkg. Do this by the following the steps below:

  1. Download the ipkg package
    Either by issuing the command ipkg download ipkg
    or by directly downloading the package through web http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
  2. Untar the package
    tar xzf ipkg_0.99-163-2_powerpc.ipk
    tar xzf data.tar.gz
  3. Copy the files
    cp ./opt/bin/ipkg /opt/bin
    cp ./opt/lib/libipkg.so.0.0.0 /opt/lib
  4. Install the package
    ipkg install ipkg

This is a log of the successful ipkg update:

# ipkg download ipkg
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
Downloaded ipkg as ./ipkg_0.99-163-2_powerpc.ipk
Successfully terminated.
# tar xzf ipkg_0.99-163-2_powerpc.ipk
# tar xzf data.tar.gz
# cp ./opt/bin/ipkg /opt/bin
# cp ./opt/lib/libipkg.so.0.0.0 /opt/lib
# ipkg install ipkg
Installing ipkg (0.99-163-2) to root...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
    Configuration file '/opt/etc/ipkg.conf'
    ==> File on system created by you or by a script.
    ==> File also in package provided by package maintainer.
       What would you like to do about it ?  Your options are:
        Y or I  : install the package maintainer's version
        N or O  : keep your currently-installed version
          D     : show the differences between the versions (if diff is installed)
     The default action is to keep your current version.
    *** ipkg.conf (Y/I/N/O/D) [default=N] ? Y
Configuring ipkg
Successfully terminated.
# ipkg update
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/Packages.gz
Inflating http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/Packages.gz
Updated list of available packages in /opt/var/lib/ipkg/cross
Successfully terminated.
# ipkg upgrade
Upgrading openssl on root from 0.9.7d-4 to 0.9.7d-5...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/openssl_0.9.7d-5_powerpc.ipk
Upgrading wget-ssl on root from 1.10-1 to 1.10.2-3...
Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/wget-ssl_1.10.2-3_powerpc.ipk
    Configuration file '/opt/etc/wgetrc'
    ==> File on system created by you or by a script.
    ==> File also in package provided by package maintainer.
       What would you like to do about it ?  Your options are:
        Y or I  : install the package maintainer's version
        N or O  : keep your currently-installed version
          D     : show the differences between the versions (if diff is installed)
     The default action is to keep your current version.
    *** wgetrc (Y/I/N/O/D) [default=N] ? Y
Configuring openssl
Configuring wget-ssl
Successfully terminated.

Solution

The problem was solved here are the crucial emails from the mailin list. Now the workaround shouldn't be needed. The solution was supplied by mcdmx at users.sourceforge.net

Gerald Dachs wrote:
> What makes me nervous only that I didn't fix the problem, I made only a workaround, because
> I couldn't find a bug that produces the segfault. I know exactly the place where it segfaults, but
> I don't find a reason why. 

The bug is triggered whenever ipkg tries to update a localy-modified config 
file. ipkg then prompts the user if the file should be updated or not. ipkg's 
user.c misses a matching va_end() call and this may lead to a segmentation fault.

Excerpt from the va_end() manpage:

"Each  invocation of va_start must be matched by a corresponding invocation of 
va_end in the same function. After the call va_end(ap) the variable ap is 
undefined. Multiple transversals of the list, each bracketed by  va_start and 
va_end are possible."

The proper fix (IMO) looks like this:

--- user.c  2004-02-25 14:18:01.000000000 +0100
+++ user.c.patched   2005-10-26 18:04:48.000000000 +0200
@@ -34,7 +34,6 @@
       int len = question_len;
       va_list ap;
       char *response;
-     va_start(ap, format);

  #ifndef IPKG_LIB
       vprintf(format, ap);
@@ -47,7 +46,9 @@
           question = realloc(question, len + 1);
           question_len = len;
      }
+          va_start(ap, format);
      len = vsnprintf(question,question_len,format,ap);
+          va_end(ap);
       } while (len > question_len);
       response = strdup(ipkg_cb_response(question));
  #endif


Cheers,

Michel

===================

On Thu, 14 Sep 2006 09:26:27 +0200
mcdmx at users.sourceforge.net wrote:

> Gerald Dachs wrote:
> > What makes me nervous only that I didn't fix the problem, I made only a workaround, because
> > I couldn't find a bug that produces the segfault. I know exactly the place where it segfaults, but
> > I don't find a reason why. 
> 
> The bug is triggered whenever ipkg tries to update a localy-modified config 
> file. ipkg then prompts the user if the file should be updated or not.

This I knew already.

> ipkg's 
> user.c misses a matching va_end() call and this may lead to a segmentation fault.
> 

You are absolutely right, and I guess it is pure luck that this doesn't happen on the
other platforms. I expect that most of the time the buffer for the message is big enough,
so that there is no need for the realloc and another call of the vsnprintf func.
That makes me even sure that my workaround don't hide a big problem, but I
will try to make the real fix today.

do you wan't to mail the ipkg developer?

Gerald

=====================

Gerald Dachs wrote:
 > do you wan't to mail the ipkg developer?

Yup, I've just sent the patch to the familiar mailing-list...

Bad flash also causes this problem

Pay particular attention that the segmentation fault error will also occur when the unsling is performed (by error) over the flash, filling it. You will have to recover from a bad flash (see RecoverFromABadFlash ) before you can continue.

to:

f

February 03, 2007, at 03:42 AM by alfonso reyes --
February 03, 2007, at 03:40 AM by alfonso reyes --
Changed line 205 from:

Pay particular attention that the segmentation fault error will also occur when the unsling is performed (by error) over the flash, filling it. You will have to recover from a bad flash (see RecoverFromABadFlash) befopre you can continue.

to:

Pay particular attention that the segmentation fault error will also occur when the unsling is performed (by error) over the flash, filling it. You will have to recover from a bad flash (see RecoverFromABadFlash ) before you can continue.

February 03, 2007, at 03:40 AM by alfonso reyes --
Changed line 205 from:

Pay particular attention that the segmentation fault error will also occur when the unsling is performed (by error) over the flash, filling it. You will have to recover from a bad flash (see RecoverFromABadFlash ) befopre you can continue.

to:

Pay particular attention that the segmentation fault error will also occur when the unsling is performed (by error) over the flash, filling it. You will have to recover from a bad flash (see RecoverFromABadFlash) befopre you can continue.

February 03, 2007, at 03:39 AM by alfonso reyes --
Changed line 205 from:

Pay particular attention that the segmentation fault error will also occur when the unsling is performed (by error) over the flash, filling it. You will have to recover from a bad flash (see RecoverFromABadFlash) befopre you can continue.

to:

Pay particular attention that the segmentation fault error will also occur when the unsling is performed (by error) over the flash, filling it. You will have to recover from a bad flash (see RecoverFromABadFlash ) befopre you can continue.

February 03, 2007, at 03:38 AM by alfonso reyes --
Changed lines 201-205 from:

Yup, I've just sent the patch to the familiar mailing-list...@]

to:

Yup, I've just sent the patch to the familiar mailing-list...@]

Bad flash also causes this problem

Pay particular attention that the segmentation fault error will also occur when the unsling is performed (by error) over the flash, filling it. You will have to recover from a bad flash (see RecoverFromABadFlash) befopre you can continue.

October 13, 2006, at 02:22 PM by bartik --
Changed lines 170-171 from:

mcdmx@users.sourceforge.net wrote:

to:

mcdmx at users.sourceforge.net wrote:

October 13, 2006, at 02:21 PM by bartik -- changed solution to workaround and added the solution
Changed lines 56-57 from:

Solution

to:

Workaround

Added lines 118-201:

Solution

The problem was solved here are the crucial emails from the mailin list. Now the workaround shouldn't be needed. The solution was supplied by mcdmx at users.sourceforge.net

Gerald Dachs wrote:
> What makes me nervous only that I didn't fix the problem, I made only a workaround, because
> I couldn't find a bug that produces the segfault. I know exactly the place where it segfaults, but
> I don't find a reason why. 

The bug is triggered whenever ipkg tries to update a localy-modified config 
file. ipkg then prompts the user if the file should be updated or not. ipkg's 
user.c misses a matching va_end() call and this may lead to a segmentation fault.

Excerpt from the va_end() manpage:

"Each  invocation of va_start must be matched by a corresponding invocation of 
va_end in the same function. After the call va_end(ap) the variable ap is 
undefined. Multiple transversals of the list, each bracketed by  va_start and 
va_end are possible."

The proper fix (IMO) looks like this:

--- user.c  2004-02-25 14:18:01.000000000 +0100
+++ user.c.patched   2005-10-26 18:04:48.000000000 +0200
@@ -34,7 +34,6 @@
       int len = question_len;
       va_list ap;
       char *response;
-     va_start(ap, format);

  #ifndef IPKG_LIB
       vprintf(format, ap);
@@ -47,7 +46,9 @@
           question = realloc(question, len + 1);
           question_len = len;
      }
+          va_start(ap, format);
      len = vsnprintf(question,question_len,format,ap);
+          va_end(ap);
       } while (len > question_len);
       response = strdup(ipkg_cb_response(question));
  #endif


Cheers,

Michel

===================

On Thu, 14 Sep 2006 09:26:27 +0200
mcdmx@users.sourceforge.net wrote:

> Gerald Dachs wrote:
> > What makes me nervous only that I didn't fix the problem, I made only a workaround, because
> > I couldn't find a bug that produces the segfault. I know exactly the place where it segfaults, but
> > I don't find a reason why. 
> 
> The bug is triggered whenever ipkg tries to update a localy-modified config 
> file. ipkg then prompts the user if the file should be updated or not.

This I knew already.

> ipkg's 
> user.c misses a matching va_end() call and this may lead to a segmentation fault.
> 

You are absolutely right, and I guess it is pure luck that this doesn't happen on the
other platforms. I expect that most of the time the buffer for the message is big enough,
so that there is no need for the realloc and another call of the vsnprintf func.
That makes me even sure that my workaround don't hide a big problem, but I
will try to make the real fix today.

do you wan't to mail the ipkg developer?

Gerald

=====================

Gerald Dachs wrote:
 > do you wan't to mail the ipkg developer?

Yup, I've just sent the patch to the familiar mailing-list...
September 13, 2006, at 11:42 AM by bartik -- Changed the formatting for the output
Changed line 7 from:

[=$ipkg -V 3 install wget-ssl

to:

[@$ipkg -V 3 install wget-ssl

Changed lines 33-34 from:

Segmentation fault (core dumped)=]

to:

Segmentation fault (core dumped)@]

Changed line 37 from:

[=# ipkg info ipkg

to:

[@# ipkg info ipkg

Changed lines 54-55 from:

Segmentation fault (core dumped)=]

to:

Segmentation fault (core dumped)@]

Changed line 74 from:

[=# ipkg download ipkg

to:

[@# ipkg download ipkg

Changed line 117 from:

Successfully terminated.=]

to:

Successfully terminated.@]

September 13, 2006, at 11:39 AM by bartik -- First installment of this troubleshooting article
Added lines 1-117:

Problem

When trying the ipkg update && ipkg upgrade the ipkg segfaults.

Symptoms

$ipkg -V 3 install wget-ssl pkg_info_preinstall_check: updating arch priority for each package pkg_info_preinstall_check: update file owner list best installation candidate for wget-ssl adding wget-ssl to providers wget-ssl arch=powerpc arch_priority=10 constraint=1 using latest matching wget-ssl 1.10.2-3 powerpc arch powerpc (priority 10) supported for pkg wget-ssl Installing wget-ssl (1.10.2-3) to root... Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/wget-ssl_1.10.2-3_powerpc.ipk best installation candidate for openssl adding openssl to providers openssl arch=powerpc arch_priority=10 constraint=1 using latest version of installed package openssl pkg_depends.c:177: satisfying_pkg=0x100a09f0 Running script /tmp/ipkg-bsEuV6/wget-ssl-aTTdFp/preinst Replacing pre-existing file /opt/man/man1/wget.1 owned by package wget-ssl Replacing pre-existing file /opt/bin/wget owned by package wget-ssl installing maintainer scripts installing data files extracting data files to / Calling pkg_write_filelist from install_data_files creating wget-ssl.list file creating //opt/lib/ipkg/info/wget-ssl.list file for pkg wget-ssl resolving conf files Segmentation fault (core dumped)

or

# ipkg info ipkg Package: ipkg Version: 0.99-163-2 Status: unknown ok not-installed Section: base Architecture: powerpc maintainer: NSLU2 Linux <nslu2-linux@yahoogroups.com> MD5Sum: cda27fe3b5c24d74e1ba8690f69c3617 Size: 81862 Filename: ipkg_0.99-163-2_powerpc.ipk Source: :pserver:anoncvs@anoncvs.handhelds.org Description: The Itsy Package Manager Successfully terminated. # ipkg install ipkg Installing ipkg (0.99-163-2) to root... Downloading >http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk Segmentation fault (core dumped)

Solution

To overcome this you need to download and manually install the new ipkg. Do this by the following the steps below:

  1. Download the ipkg package
    Either by issuing the command ipkg download ipkg
    or by directly downloading the package through web http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk
  2. Untar the package
    tar xzf ipkg_0.99-163-2_powerpc.ipk
    tar xzf data.tar.gz
  3. Copy the files
    cp ./opt/bin/ipkg /opt/bin
    cp ./opt/lib/libipkg.so.0.0.0 /opt/lib
  4. Install the package
    ipkg install ipkg

This is a log of the successful ipkg update:

# ipkg download ipkg Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk Downloaded ipkg as ./ipkg_0.99-163-2_powerpc.ipk Successfully terminated. # tar xzf ipkg_0.99-163-2_powerpc.ipk # tar xzf data.tar.gz # cp ./opt/bin/ipkg /opt/bin # cp ./opt/lib/libipkg.so.0.0.0 /opt/lib # ipkg install ipkg Installing ipkg (0.99-163-2) to root... Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/ipkg_0.99-163-2_powerpc.ipk Configuration file '/opt/etc/ipkg.conf' ==> File on system created by you or by a script. ==> File also in package provided by package maintainer. What would you like to do about it ? Your options are: Y or I : install the package maintainer's version N or O : keep your currently-installed version D : show the differences between the versions (if diff is installed) The default action is to keep your current version. *** ipkg.conf (Y/I/N/O/D) [default=N] ? Y Configuring ipkg Successfully terminated. # ipkg update Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/Packages.gz Inflating http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/Packages.gz Updated list of available packages in /opt/var/lib/ipkg/cross Successfully terminated. # ipkg upgrade Upgrading openssl on root from 0.9.7d-4 to 0.9.7d-5... Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/openssl_0.9.7d-5_powerpc.ipk Upgrading wget-ssl on root from 1.10-1 to 1.10.2-3... Downloading http://ipkg.nslu2-linux.org/feeds/optware/ds101g/cross/stable/wget-ssl_1.10.2-3_powerpc.ipk Configuration file '/opt/etc/wgetrc' ==> File on system created by you or by a script. ==> File also in package provided by package maintainer. What would you like to do about it ? Your options are: Y or I : install the package maintainer's version N or O : keep your currently-installed version D : show the differences between the versions (if diff is installed) The default action is to keep your current version. *** wgetrc (Y/I/N/O/D) [default=N] ? Y Configuring openssl Configuring wget-ssl Successfully terminated.

view · edit · print · history · Last edited by ByronT.
Based on work by esxpartner, mwester, f, alfonso reyes, and bartik.
Originally by bartik.
Page last modified on January 07, 2008, at 06:22 PM