[yocto] rpmdeps buffer overflow

Marc Ferland marc.ferland at gmail.com
Fri Aug 10 07:50:09 PDT 2018


On Thu, Aug 9, 2018 at 2:34 PM, Marc Ferland <marc.ferland at gmail.com> wrote:
> Hi,
>
> I'm creating a recipe for a precompiled SDK. This SDK contains various
> precompiled libraries and executables. When I get to the packaging
> step bitbake aborts with the following error:
>
> ERROR: pylon-5.0.12-r0 do_package: Error executing a python function
> in exec_python_func() autogenerated:
>
> The stack trace of python calls that resulted in this exception/failure was:
> File: 'exec_python_func() autogenerated', lineno: 2, function: <module>
>      0001:
>  *** 0002:package_do_filedeps(d)
>      0003:
> File: '/vagrant/yocto/poky/meta/classes/package.bbclass', lineno:
> 1484, function: package_do_filedeps
>      1480:            continue
>      1481:        for files in chunks(pkgfiles[pkg], 100):
>      1482:            pkglist.append((pkg, files, rpmdeps, pkgdest))
>      1483:
>  *** 1484:    processed = oe.utils.multiprocess_exec( pkglist,
> oe.package.filedeprunner)
>      1485:
>      1486:    provides_files = {}
>      1487:    requires_files = {}
>      1488:
> File: '/vagrant/yocto/poky/meta/lib/oe/utils.py', lineno: 240,
> function: multiprocess_exec
>      0236:        mapresult = pool.map_async(function, commands,
> error_callback=failures)
>      0237:
>      0238:        pool.close()
>      0239:        pool.join()
>  *** 0240:        results = mapresult.get()
>      0241:    except KeyboardInterrupt:
>      0242:        pool.terminate()
>      0243:        pool.join()
>      0244:        raise
> File: '/usr/lib/python3.6/multiprocessing/pool.py', lineno: 644, function: get
>      0640:            raise TimeoutError
>      0641:        if self._success:
>      0642:            return self._value
>      0643:        else:
>  *** 0644:            raise self._value
>      0645:
>      0646:    def _set(self, i, obj):
>      0647:        self._success, self._value = obj
>      0648:        if self._callback and self._success:
> Exception: subprocess.CalledProcessError: Command
> '['/home/vagrant/build/tmp/work/aarch64-poky-linux/pylon/5.0.12-r0/recipe-sysroot-native/usr/lib/rpm/rpmdeps',
> '--alldeps', '/home/vagrant/build/tmp/work/aarch64-poky-linux/pylon/5.0.12-r0/packages-split/pylon/opt/pylon5/lib64/libpylon_TL_bcon-5.0.12.so',
>
> REMOVED FOR BREVITY
>
> '/home/vagrant/build/tmp/work/aarch64-poky-linux/pylon/5.0.12-r0/packages-split/pylon/opt/pylon5/bin/platforms/libqxcb.so']'
> died with <Signals.SIGABRT: 6>.
>
> Subprocess output:
> *** buffer overflow detected ***:
> /home/vagrant/build/tmp/work/aarch64-poky-linux/pylon/5.0.12-r0/recipe-sysroot-native/usr/lib/rpm/rpmdeps
> terminated
>
> ERROR: pylon-5.0.12-r0 do_package: Function failed: package_do_filedeps
> ERROR: Logfile of failure stored in:
> /home/vagrant/build/tmp/work/aarch64-poky-linux/pylon/5.0.12-r0/temp/log.do_package.30101
> ERROR: Task (/vagrant/yocto/meta-telops/recipes-basler/pylon5/pylon_5.0.12.bb:do_package)
> failed with exit code '1'
>
> Digging a little deeper, it looks like certain files cause rpmdeps to
> blowup. For example, issuing:
>
> rpmdeps --alldeps
> /home/vagrant/build/tmp/work/aarch64-poky-linux/pylon/5.0.12-r0/packages-split/pylon/opt/pylon5/bin/libQt5Core.so.5.6.2
>
> I get the expected:
>   0 /home/vagrant/build/tmp/work/aarch64-poky-linux/pylon/5.0.12-r0/packages-split/pylon/opt/pylon5/bin/libQt5Core.so.5.6.2
>     P libQt5Core.so.5(Qt_5_PRIVATE_API)(64bit)
>     P libQt5Core.so.5(Qt_5)(64bit)
>     P libQt5Core.so.5(Qt_5.0)(64bit)
>     P libQt5Core.so.5(Qt_5.0)(64bit)
> ....
>
> But running rpmdeps on one of their proprietary lib:
> rpmdeps --alldeps
> /home/vagrant/build/tmp/work/aarch64-poky-linux/pylon/5.0.12-r0/packages-split/pylon/opt/pylon5/bin/libPylonQtBase.so.1.0.0
> *** buffer overflow detected ***:
> /home/vagrant/build/tmp/work/aarch64-poky-linux/pylon/5.0.12-r0/recipe-sysroot-native/usr/lib/rpm/rpmdeps
> terminated
> Aborted (core dumped)
>

Got a little bit further by disabling filedeps with
SKIP_FILEDEPS_${PN} = "1". Now I get a buffer overflow from rpmbuild:

ERROR: pylon-5.0.12-r0 do_package_write_rpm: Function failed:
BUILDSPEC (log file is located at
/home/vagrant/build/tmp/work/aarch64-poky-linux/pylon/5.0.12-r0/temp/log.do_package_write_rpm.32236)
ERROR: Logfile of failure stored in:
/home/vagrant/build/tmp/work/aarch64-poky-linux/pylon/5.0.12-r0/temp/log.do_package_write_rpm.32236
Log data follows:
| DEBUG: Executing python function sstate_task_prefunc
| DEBUG: Python function sstate_task_prefunc finished
| DEBUG: Executing python function extend_recipe_sysroot
| NOTE: Direct dependencies are
['virtual:native:/vagrant/yocto/poky/meta/recipes-devtools/pseudo/pseudo_1.8.2.bb:do_populate_sysroot',
'virtual:native:/vagrant/yocto/poky/meta/recipes-devtools/rpm/rpm_git.bb:do_populate_sysroot']
| NOTE: Installed into sysroot: []
| NOTE: Skipping as already exists in sysroot: ['pseudo-native',
'rpm-native', 'dbus-native', 'popt-native', 'bzip2-native',
'db-native', 'gnu-config-native', 'quilt-native', 'autoconf-native',
'xz-native', 'elfutils-native', 'automake-native', 'python3-native',
'gettext-minimal-native', 'nss-native', 'pkgconfig-native',
'file-native', 'libarchive-native', 'libtool-native', 'expat-native',
'm4-native', 'texinfo-dummy-native', 'zlib-native', 'sqlite3-native',
'openssl-native', 'readline-native', 'nspr-native', 'lzo-native',
'e2fsprogs-native', 'pigz-native', 'makedepend-native',
'cryptodev-linux-native', 'ncurses-native', 'util-linux-native',
'attr-native', 'util-macros-native', 'xproto-native']
| DEBUG: Python function extend_recipe_sysroot finished
| DEBUG: Executing python function do_package_write_rpm
| DEBUG: Executing python function read_subpackage_metadata
| DEBUG: Python function read_subpackage_metadata finished
| DEBUG: Executing python function do_package_rpm
| DEBUG: Executing python function write_specfile
| NOTE: Creating EMPTY RPM Package for pylon-dbg
| NOTE: Not creating empty RPM package for pylon-staticdev
| NOTE: Creating RPM package for pylon-dev
| NOTE: Creating RPM package for pylon-doc
| NOTE: Not creating empty RPM package for pylon-locale
| NOTE: Creating RPM package for pylon
| NOTE: Creating RPM package for pylon
| DEBUG: Python function write_specfile finished
| DEBUG: PKGWRITEDIR:
/home/vagrant/build/tmp/work/aarch64-poky-linux/pylon/5.0.12-r0/deploy-rpms/aarch64
| DEBUG: Executing shell function BUILDSPEC
| Building target platforms: aarch64-poky-linux
| Building for target aarch64-poky-linux
| Processing files: pylon-5.0.12-r0.aarch64
| *** buffer overflow detected ***:
/home/vagrant/build/tmp/work/aarch64-poky-linux/pylon/5.0.12-r0/recipe-sysroot-native/usr/bin/rpmbuild
terminated
| Aborted (core dumped)
| WARNING: exit code 134 from a shell command.
| DEBUG: Python function do_package_rpm finished
| DEBUG: Python function do_package_write_rpm finished
| ERROR: Function failed: BUILDSPEC (log file is located at
/home/vagrant/build/tmp/work/aarch64-poky-linux/pylon/5.0.12-r0/temp/log.do_package_write_rpm.32236)
ERROR: Task (/vagrant/yocto/meta-telops/recipes-basler/pylon5/pylon_5.0.12.bb:do_package_write_rpm)
failed with exit code '1'

Any help appreciated!

Regards,

Marc


More information about the yocto mailing list