1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-07 16:59:22 +00:00

selftest/minidebuginfo: extract files from tar archive using tarfile module

Python 3.14 added security checks around archive extraction, and by
default will refuse to handle symlinks with absolute paths. It's possible
to handle this using 'filter' argument, but it is not always available
in older Python versions on various host distributions we need to support,
so let's extract only the needed files directly using tarfile module.

busybox is itself a symlink to busybox.nosuid, so both are extracted.

[YOCTO #16195]

(From OE-Core rev: 799e2124cdcb27bd924598619da61cbd11730b56)

Signed-off-by: Alexander Kanavin <alex@linutronix.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit d52d00a3bb4a1ba93e88f1d24d8bb99d6aa321eb)
Signed-off-by: Yoann Congal <yoann.congal@smile.fr>
Signed-off-by: Paul Barker <paul@pbarker.dev>
This commit is contained in:
Alexander Kanavin
2026-03-20 14:46:58 +01:00
committed by Paul Barker
parent 98ab055e73
commit e13525ed22
@@ -6,7 +6,7 @@
import os
import subprocess
import tempfile
import shutil
import tarfile
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import bitbake, get_bb_var, get_bb_vars, runCmd
@@ -32,7 +32,10 @@ IMAGE_FSTYPES = "tar.bz2"
# ".gnu_debugdata" which stores minidebuginfo.
with tempfile.TemporaryDirectory(prefix = "unpackfs-") as unpackedfs:
filename = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], "{}.tar.bz2".format(bb_vars['IMAGE_LINK_NAME']))
shutil.unpack_archive(filename, unpackedfs)
with tarfile.open(filename) as tar:
tar.extract("./bin/busybox", path=unpackedfs)
tar.extract("./bin/busybox.nosuid", path=unpackedfs)
tar.extract("./lib/libc.so.6", path=unpackedfs)
r = runCmd([bb_vars['READELF'], "-W", "-S", os.path.join(unpackedfs, "bin", "busybox")],
native_sysroot = native_sysroot, target_sys = target_sys)