# -fno-stack-protector

## quequero

Salve a tutti,

ho un piccolo e noioso problema che non riesco a risolvere ed avrei bisogno del vostro aiuto.

Ogni volta che provo a ricompilare le glibc ottengo questo errore:

 *Quote:*   

> 
> 
> cc1: error: unrecognized command line option "-fno-stack-protector"
> 
> 

 

Ho letto che si deve rimuovere l'use flag "vanilla" ed infatti nel mio make.conf e' disabilitato (con -vanilla) ed ho anche ricompilato gcc (con -vanilla e hardened) giusto per sicurezza. Per ricompilare le glibc utilizzo questo profilo:

 *Quote:*   

> 
> 
> [6] i686-pc-linux-gnu-3.4.4 *
> 
> 

 

Tuttavia anche ricompilando gcc con l'use "vanilla" (giusto per fare un test) non riesco a cavare ragno dal buco e cercando sul forum non ho proprio trovato altre soluzioni. Qualcuno puo' aiutarmi?

Grazie tante a tutti!

----------

## shogun_panda

 *quequero wrote:*   

> Salve a tutti,
> 
> ho un piccolo e noioso problema che non riesco a risolvere ed avrei bisogno del vostro aiuto.
> 
> Ogni volta che provo a ricompilare le glibc ottengo questo errore:
> ...

 

Posta l'emerge info...Magari il problema è altrove...

----------

## quequero

Certo, ecco a te:

 *Quote:*   

> 
> 
> Portage 2.0.51.22-r3 (default-linux/x86/2005.0, gcc-3.4.4, glibc-2.3.5-r2, 2.6.14.2 i686)
> 
> =================================================================
> ...

 

Questi sono gli USE dal make.conf

 *Quote:*   

> 
> 
> USE="acpi amuled hardened md5sum mmx openssh pam_console sse -X -alsa -apm
> 
>      -arts -avi -berkdb -bitmap-fonts -cups -eds -emboss -encode
> ...

 

Ho anche disabilitato distcc... Nel caso che il problema provenisse da un altro compilatore all'interno

della rete ma niente da fare...

Grazie tante!

----------

## randomaze

 *quequero wrote:*   

> 
> 
>  *Quote:*   
> 
> cc1: error: unrecognized command line option "-fno-stack-protector"
> ...

 

Sembrerebbe che non viene valorizzata la prima parte del comando (che probabilmente sta in una variabile).

Ora, giusto per evitare di essere in una situazione simile proverei a ricompilare bash (con il gcc -vanilla). Non é detto che serva, ma male non fa  :Wink: 

 *Quote:*   

> Ho letto ...

 

Puoi passarimi il link dove "hai letto"? Così gli do un occhio anche io....

----------

## makoomba

posta gcc -v

edit:

anche equery uses gcc

----------

## quequero

Allora il link al post e' questo:

https://forums.gentoo.org/viewtopic-t-387353-highlight-fnostackprotector.html

Ma cercando "-fno-stack-protector" dicono tutti la stessa cosa.

```

# gcc -v

Reading specs from /usr/lib/gcc/i686-pc-linux-gnu/3.4.4/specs

Configured with: /var/tmp/portage/gcc-3.4.4-r1/work/gcc-3.4.4/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/3.4.4 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/3.4.4/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/3.4.4 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/3.4.4/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/3.4.4/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/3.4.4/include/g++-v3 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --disable-libunwind-exceptions --disable-multilib --disable-libmudflap --disable-libgcj --enable-languages=c,c++ --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu

Thread model: posix

gcc version 3.4.4 (Gentoo Hardened 3.4.4-r1, ssp-3.4.4-1.0, pie-8.7.8)

```

e poi:

```

# equery uses gcc

[ Searching for packages matching gcc... ]

[ Colour Code : set unset ]

[ Legend    : Left column  (U) - USE flags from make.conf              ]

[           : Right column (I) - USE flags packages was installed with ]

[ Found these USE variables for sys-devel/gcc-3.4.4-r1 ]

 U I

 - - altivec        : Adds support for optimizations for G4 and G5/ppc970 processors

 - - bootstrap      : !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used during original system bootstrapping

 - - build          : !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used for creating build images and the first half of bootstrapping.

 - - fortran        : Adds support for fortran (formally f77)

 - - gcj            : Enable building with gcj

 - - gtk            : Adds support for x11-libs/gtk+ (The GIMP Toolkit)

 + + hardened       : activate default security enhancements for toolchain (gcc, glibc, binutils)

 - - ip28           : Enable building a compiler capable of building a kernel for SGI Indigo2 Impact R10000 (IP28)

 - - multilib       : On 64bit systems, if you want to be able to compile 32bit and 64bit binaries

 - - multislot      : Allow for SLOTs to include minor version (3.3.4 instead of just 3.3)

 - - n32            : Enable n32 ABI support on mips

 - - n64            : Enable n64 ABI support on mips

 + + nls            : <unknown>

 - - nocxx          : Disable support for C++ (DONT USE THIS UNLESS YOU KNOW WHAT YOU'RE DOING)

 - - objc           : Build support for the Objective C code language

 - - objc-gc        : Build support for the Objective C code language Garbage Collector

 - - vanilla        : Do not add extra patches which change default behaviour

 - - mudflap        : Add support for mudflap, a pointer use checking library

 - - nopie          : Disable PIE support (NOT FOR GENERAL USE)

 - - nossp          : Disable SSP support (NOT FOR GENERAL USE)

 - - boundschecking : add bounds checking patch by Haj Ten Brugge, this will DISABLE the hardened PIE+SSP patches

```

Ricompilare la bash non sembra aver risolto il problema purtroppo  :Smile: 

Grazie di nuovo!

----------

## randomaze

 *quequero wrote:*   

>  + + hardened       : activate default security enhancements for toolchain (gcc, glibc, binutils)

 

Io proverei a disabilitare la USE hardened. Ma sarebbe un workaround/esperimento e non una soluzione definitiva

----------

## quequero

Ho gia' provato ma e' uguale  :Sad: 

----------

## .:chrome:.

-fno-stack-protector non esiste come opzine di GCC (versione 3.3). tu che versione hai?

ma soprattutto dove cacchio viene settata?

 *quequero wrote:*   

> ho anche ricompilato gcc (con -vanilla e hardened) giusto per sicurezza

 

hardened non è una flag che si deve impostare "tanto per fare" ed alla leggera.

anzi... non si importa per niente

viene ereditata quando si usa il profilo hardened. se non hai il profilo hardened rischi solo di fare danni. in generale è una flag che l'utente non dovrebbe mai toccare.

----------

## quequero

Come no, -fno-stack-protector viene aggiunta da ssp e fa parte di gcc sia 3.3 che 3.4!

E come puoi vedere dal mio gcc -v la ssp e' stata inclusa correttamente... Il mistero e'

perche' le libc non lo trovino anche usando -vanilla... Non riesco a veramente a capirne

il motivo :/

Grazie dell'aiuto di nuovo

----------

## .:chrome:.

ma... non ho ancora capito... tu stai usando un profilo hardened o no?

a cosa punta /etc/make.profile?

se non stai usando il profilo hardened non è affatto normale che tu abbia quelle variabili

----------

## quequero

Dunque il profilo e':

 *Quote:*   

> 
> 
> # ls -l /etc/make.profile  
> 
> lrwxrwxrwx  1 root root 48 Apr 16  2005 /etc/make.profile -> ../usr/portage/profiles/default-linux/x86/2005.0
> ...

 

Ma non trovo nulla di strano nell'avere gcc con le patch per l'hardening (oddio magari e' strano vederle

nel gcc -v anche se il gcc-profile in uso non e' hardened).

Su tutte le macchine della lan che NON usano il profilo hardened i profili per gcc che ho sono:

 *Quote:*   

> 
> 
>  [1] i686-pc-linux-gnu-3.4.4 *
> 
>  [2] i686-pc-linux-gnu-3.4.4-hardened
> ...

 

Uhm sei proprio sicuro che queste opzioni non debbano esser presenti? Perche' se cosi fosse avrei

toppato grosso a configurare un bel po' di pc, ma mi pare strano :/

Semmai provo a postare nel gentoo forum intenazionale, vediamo che mi dicono, fammi sapere se hai

altri suggerimenti, grazie!

----------

## makoomba

beh, un pò di casino c'è, non si nega.

imposta il profilo hardened e prova a ricompilare le glibc

----------

## .:chrome:.

 *quequero wrote:*   

> non trovo nulla di strano nell'avere gcc con le patch per l'hardening (oddio magari e' strano vederle
> 
> nel gcc -v anche se il gcc-profile in uso non e' hardened).

 

errore. gravissimo errore

la flag hardened come ti dicevo è ereditata dal profilo hardened, e non deve essere mai impostata dall'utente.

il motivo di questo? vedilo con i tuoi occhi: fai un sync, cambia il profilo in hardened, e poi fai un emerge -uDN world -ptv.

a quanto punto guarda quanti e quali pacchetti verranno ricompilati e con quali flag.

un profilo hardened per glibc implica un pesante cambiamento del metodo di indirizzamento ed allocazione della memoria (per citare solo uno dei cambiamenti), e se queste modifiche non vengono opportunamente propagate in tutto il sistema nessuno può garantire il corretto funzionamento di nessun software.

la prossima volta, prima di giocare con le flag, verifica di poterlo fare. sono certo di aver letto da qualche parte (forse nella documentazione di glibc) quello che tiho appena scritto.

permettimi poi un commento sul compilatore: hai notato che gcc-3.4.4 è considerato stabile su alcune architetture, ma non sulla x86, che tu usi? se mi parli di server, di rete, di sistemi hardened, io penso a macchine in produzione, e cambiare gcc per una versione non considerata stabile su una macchina in produzione, mi pare una pratica abbastanza stupida.

questo per avere cosa? un guadagno di qualche secondo nella compilazione di codice ad oggetti?

----------

## quequero

Forse qui si sta facendo un sacco di rumore per nulla, puo' anche darsi che mi sbagli

ma _emerge -B glibc_ di sicuro non puo' far male al sistema... Quindi non venirmi a dire

di non giocare coi flag quando stavo semplicemente vedendo se il pacchetto veniva

compilato, d'accordo che non trovo soluzione al problema ma questo non vuol dire che

sono fresco di Gentoo... Negli anni qualcosa credo (spero) di averla imparata.

Il problema e' che pur non utilizzando un profilo hardened, e pur avendo le opzioni di 

ssp in gcc, le glibc non se ne accorgono.

A mano riesco a compilare correttamente con tutte le opzioni di ssp:

```

# gcc -fno-stack-protector  -fno-stack-protector-all main.c -o main

# ./main

Funziono!

```

Un'altra cosa che faccio notare e' che -fno DISABILITA la feature di ssp, motivo per cui

non c'e' alcun pericolo nel ricompilare ed installare (cosa che comunque NON ho fatto) le

glibc. Ora torno alla domanda originale: perche' le glibc non trovano l'opzione per disabilitare

ssp mentre a mano tutto funziona senza alcun problema? Tutto qui!

Domani provo anche ad utilizzare il gcc 3.3 cosi vi faccio sapere se il problema era il

compilatore.

Grazie di nuovo

----------

