commit:     c5d40af3c56436cdbf774707cb36a8cdc832b3dd
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Tue Jan  3 04:02:24 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Jan  5 00:33:06 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c5d40af3

unpacker.eclass: pass -S to file to disable seccomp

Files being installed by Portage are generally trusted but also the
syscalls allowed by file are quite broad anyway.

With e.g. new libc or sandbox version (or any number of things...), the
syscalls used by file can change which leads to its seccomp filter killing
the process. This is an acceptable tradeoff when users are calling file(1),
but it makes less sense with trusted input within Portage, especially
where it may lead to confusing errors (swallowed within pipes, subshells,
etc).

Indeed, it might even be the case that file(1) is broken, but the user
needs to complete a world upgrade to get a newer file/portage/???, but
can't because of various ebuilds (like ones using this eclass) failing.

Disable seccomp for these calls to keep working.

Bug: https://bugs.gentoo.org/811462
Bug: https://bugs.gentoo.org/815877
Bug: https://bugs.gentoo.org/889046
Signed-off-by: Sam James <sam <AT> gentoo.org>

 eclass/unpacker.eclass | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/eclass/unpacker.eclass b/eclass/unpacker.eclass
index 5ce681ebaa0d..326b2fa67524 100644
--- a/eclass/unpacker.eclass
+++ b/eclass/unpacker.eclass
@@ -1,4 +1,4 @@
-# Copyright 1999-2022 Gentoo Authors
+# Copyright 1999-2023 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 # @ECLASS: unpacker.eclass
@@ -122,7 +122,7 @@ unpack_pdv() {
        local tmpfile="${T}/${FUNCNAME}"
        tail -c +$((${tailskip}+1)) ${src} 2>/dev/null | head -c 512 > 
"${tmpfile}"
 
-       local iscompressed=$(file -b "${tmpfile}")
+       local iscompressed=$(file -S -b "${tmpfile}")
        if [[ ${iscompressed:0:8} == "compress" ]] ; then
                iscompressed=1
                mv "${tmpfile}"{,.Z}
@@ -130,7 +130,7 @@ unpack_pdv() {
        else
                iscompressed=0
        fi
-       local istar=$(file -b "${tmpfile}")
+       local istar=$(file -S -b "${tmpfile}")
        if [[ ${istar:0:9} == "POSIX tar" ]] ; then
                istar=1
        else
@@ -244,7 +244,7 @@ unpack_makeself() {
 
        # lets grab the first few bytes of the file to figure out what kind of 
archive it is
        local decomp= filetype suffix
-       filetype=$("${exe[@]}" 2>/dev/null | head -c 512 | file -b -) || die
+       filetype=$("${exe[@]}" 2>/dev/null | head -c 512 | file -S -b -) || die
        case ${filetype} in
                *tar\ archive*)
                        decomp=cat

Reply via email to