commit:     c439961a06625b27d39d683beee00e8c3a54005f
Author:     Oskari Pirhonen <xxc3ncoredxx <AT> gmail <DOT> com>
AuthorDate: Thu Jan 13 05:08:03 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Feb 20 02:04:16 2022 +0000
URL:        https://gitweb.gentoo.org/proj/crossdev.git/commit/?id=c439961a

crossdev: use package.use.{mask,force} for pie/ssp

A hardened host profile forces the pie and ssp USE flags which is
overriding GUSE="-pie -ssp". Use package.use.mask and package.use.force
to control the flags.

Closes: https://bugs.gentoo.org/831165
Signed-off-by: Oskari Pirhonen <xxc3ncoredxx <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 crossdev | 45 +++++++++++++++++++++++++++++----------------
 1 file changed, 29 insertions(+), 16 deletions(-)

diff --git a/crossdev b/crossdev
index e2e01e8..fcf6a65 100755
--- a/crossdev
+++ b/crossdev
@@ -409,9 +409,11 @@ parse_target() {
                        pie_support=no
                        ;;
        esac
+       # Running a hardened profile on the host forces pie #831165
        if [[ $pie_support = "no" ]]; then
                # pie is >=gcc-6, nopie is <gcc-6
-               GUSE+=" -pie nopie"
+               GMASK+=" pie -nopie"
+               GFORCE+=" nopie"
        fi
 
        local ssp_support=yes
@@ -423,9 +425,11 @@ parse_target() {
                #       check as '$CC -fstack-protector -c -x c - </dev/null'
                alpha*|avr*|hppa*|ia64*|mmix*|nios2*) ssp_support=no;;
        esac
+       # Running a hardened profile on the host forces ssp #831165
        if [[ $ssp_support = "no" ]]; then
                # ssp is >=gcc-6, nossp is <gcc-6
-               GUSE+=" -ssp nossp"
+               GMASK+=" ssp -nossp"
+               GFORCE+=" nossp"
        fi
 }
 
@@ -726,6 +730,8 @@ for_each_extra_pkg() {
                XUSE=${XUSES[i]} \
                XENV=${XENVS[i]} \
                XOVL=${XOVLS[i]} \
+               XMASK=${XMASKS[i]} \
+               XFORCE=${XFORCES[i]} \
                "$@"
        done
 }
@@ -775,12 +781,13 @@ MULTILIB_USE=""
 HOST_ABI="default"
 STAGE=""
 AENV=""
-BCAT="sys-devel"  ; BPKG="binutils"      ; BVER="" BUSE="" BENV="" BOVL=""
-GCAT="sys-devel"  ; GPKG="gcc"           ; GVER="" GUSE="" GENV="" GOVL=""
-KCAT="sys-kernel" ; KPKG="linux-headers" ; KVER="" KUSE="" KENV="" KOVL=""
-LCAT="sys-libs"   ; LPKG="[none]"        ; LVER="" LUSE="" LENV="" LOVL=""
-DCAT="sys-devel"  ; DPKG="gdb"           ; DVER="" DUSE="" DENV="" DOVL=""
-XPKGS=() XVERS=() XUSES=() XENVS=() XOVLS=()
+# Only GMASK/GFORCE are currently used
+BCAT="sys-devel"  ; BPKG="binutils"      ; BVER="" BUSE="" BENV="" BOVL="" 
BMASK="" BFORCE=""
+GCAT="sys-devel"  ; GPKG="gcc"           ; GVER="" GUSE="" GENV="" GOVL="" 
GMASK="" GFORCE=""
+KCAT="sys-kernel" ; KPKG="linux-headers" ; KVER="" KUSE="" KENV="" KOVL="" 
KMASK="" KFORCE=""
+LCAT="sys-libs"   ; LPKG="[none]"        ; LVER="" LUSE="" LENV="" LOVL="" 
LMASK="" LFORCE=""
+DCAT="sys-devel"  ; DPKG="gdb"           ; DVER="" DUSE="" DENV="" DOVL="" 
DMASK="" DFORCE=""
+XPKGS=() XVERS=() XUSES=() XENVS=() XOVLS=() XMASKS=() XFORCES=()
 DEFAULT_VER="[latest]"
 SEARCH_OVERLAYS=""
 CROSSDEV_OVERLAY=""
@@ -1273,9 +1280,9 @@ set_env() {
 }
 set_portage() {
        local l=$1
-       eval set -- \${${l}CAT} \${${l}PKG} \"\${${l}VER}\" \"\${${l}ENV}\" 
\"\${${l}OVL}\"
-       local cat=$1 pkg=$2 ver=$3 env=$4 ovl=$5
-       shift 5
+       eval set -- \${${l}CAT} \${${l}PKG} \"\${${l}VER}\" \"\${${l}ENV}\" 
\"\${${l}OVL}\" \"\${${l}MASK}\" \"\${${l}FORCE}\"
+       local cat=$1 pkg=$2 ver=$3 env=$4 ovl=$5 mask=$6 force=$7
+       shift 7
        local use=$*
 
        [[ ${pkg} == "[none]" ]] && return 0
@@ -1283,14 +1290,20 @@ set_portage() {
        case ${CTARGET} in
                # avr requires multilib, that provides
                # libgcc for all sub-architectures #378387
-               avr*)   set_use_force ${pkg} multilib
-                       set_use_mask ${pkg} -multilib;;
+               avr*)
+                       mask+=" -multilib"
+                       force+=" multilib"
+                       ;;
                *-newlib|*-elf|*-eabi)
-                       set_use_force ${pkg} multilib;
-                       set_use_mask ${pkg} -multilib;;
-               *)      set_use_force ${pkg} -multilib;;
+                       mask+=" -multilib"
+                       force+=" multilib"
+                       ;;
+               *)
+                       mask+=" multilib";;
        esac
 
+       set_use_mask ${pkg} "${mask}"
+       set_use_force ${pkg} "${force}"
        set_keywords ${pkg} ${ver}
        set_use ${pkg} ${use}
        set_links ${cat} ${pkg} "${ovl}"

Reply via email to