LINUX.ORG.RU

gcc 5.4.0 не компилирует linux-4.9.16-gentoo: fstack-protector not supported by compiler

 , , , ,


0

2

Доброго времени! При появлении ошибки на версии hardended, я скачал обычную версию gentoo stage3 от 2 мая 2017 для процессора i686, но ошибка повторилась:

livecd / # genkerel all
...
Cannot use config_cc_stackprotector_regular: -fstack-protector not supported by compiler
make: *** [Makefile:1066: prepare-compiler-check] Error 1
Failed to compile "prepare" target...

livecd / # ls -l /usr/src/linux
... linux-4.9.16-gentoo
livecd / # gcc --version
gcc (Gentoo 5.4.0-r3 p1.3, pie-0.6.5) 5.4.0

отключение fstack-protector не помогло так Stack Smashing Protection >=GCC 4.8.3 на десктопе можно отключить? (cflags="... -fno-stack-protector") и так https://forums.gentoo.org/viewtopic-t-1048336-start-0.html (cflags="... -fstack-protector-strong"). как я понимаю, изменение make.conf не требует дополнительных команд до запуска genkernel?

Перемещено shell-script из web-development

★★

Последнее исправление: znavko (всего исправлений: 1)

Web-development
gcc 5.4.0 не компилирует

Перепиши на HTML.

h578b1bde ★☆
()

как я понимаю, изменение make.conf не требует дополнительных команд до запуска genkernel?

Нет, но покажи оттуда флаги и то, что касается компилятора.

Bfgeshka ★★★★★
()
Ответ на: комментарий от Bfgeshka
CFLAGS="-O2 -march-i686 -pipe -fno-stack-protector"
CXXFLAGS="${CFLAGS} -fn-stack-protector"
CHOST="i686-pc-linux-gnu"
USE="bindlist -gnome -kde -minimal -qt4"
livecd / # gcc-config -l
[1] i686-pc-linux-gnu-5.4.0
znavko ★★
() автор топика
Ответ на: комментарий от znavko

CFLAGS="-O2 -march-i686 -pipe -fno-stack-protector"

Так ведь пишется -march=<архитектура>.

CXXFLAGS=«${CFLAGS} -fn-stack-protector»

Опечатка.

Кривой кофиг, короче.

К слову, другие компиляторы попробуй. У ряда проектов были проблемы с gcc 5, я бы его использовать не стал. Для стабильности есть 4, посвежее - 6, скоро обкатают 7.

Bfgeshka ★★★★★
()

Это известный баг новых скриптов сборки ядра, выражается он в том, что если у тебя заданы некорректные опции сборки - сборка зафэйлится.

Например я пытался собирать 64-битное ядро 32-битным компилятором(не посмотрел на то, что у меня гибридная система на виртуалке - так исторически сложилось, что ядро там 64-битное, а userland - нет) и в упор не понимал, какого хрена оно мне выдаёт вот эту вот ошибку даже при отключении stack protector.

Для начала проверь всё-ли в порядке у тебя с компилятором и тулчейном - попробуй собрать и слинковать простейшие бинари.

И да, обрати внимание на замечание Bfgeshka - он прав, опция CFLAGS в make.conf указана не верно.

Pinkbyte ★★★★★
()
Ответ на: комментарий от Bfgeshka

да, это при наборе опечатки. все так: -march=i686 и -fno-stack-protector.

выбрал gcc-4.9.4 https://packages.gentoo.org/packages/sys-devel/gcc но установка долго пилила и дала ошибку:

livecd / # emerge sys-devel/gcc-4.9.4
...
...
cc1plus: out of memoryallocating 1231320 bytes after a total of 12451840 bytes
make[3]: *** [Makefile:1069: insn-recog.o] Error 1
make[3]: *** Waiting for unfinished jobs....
..Leaving directory '/var/tmp/portage/sys-devel/gcc-4.9.4/work/build/gcc'
make[2]: *** [Makefile:4261: all-stage2-gcc] Error 2
..Leaving directory '/var/tmp/portage/sys-devel/gcc-4.9.4/work/build'
make[1]: *** [Makefile:19075: stage2-bubble] Error 2
...
ERROR: sys-devel/gcc-4.9.4::gentoo failed (compile phase):
  emake failed
....

то есть выбирать другой?

znavko ★★
() автор топика
Ответ на: комментарий от iZEN

4.9.3 тоже выдал ошибки:

livecd / # emerge sys-devel/gcc-4.9.3 
... много букв, в том числе warning'ов
...
collect2: error: Id terminated with signal 9 [Killed]
...
emake failed
znavko ★★
() автор топика
Ответ на: комментарий от iZEN

по совету https://askubuntu.com/questions/33697/how-do-i-add-a-swap-partition-after-sys... добавлен свап в /etc/fstab так:

livecd / # fdisk -l /dev/sda
sda1 ...
sda2 ...
sda3 7.5GB Linux filesystem
sda4 ...

livecd / # blkid /dev/sda3 >> /etc/fstab
livecd / # nano /etc/fstab
...исправления текста...

livecd / # swapon -U `blkid /dev/sda3 | awk -F'"' '{print $2}'`

livecd / # cat /proc/swaps
filename type size used priority
/dev/sda3 partition 7812092 0 -1

запускаю установку опять

livecd / # emerge sys-devel/gcc-4.9.4
!!! 'sys-devel/gcc-4.9.4' is not a valid package atom. 
!!! Please check ebuild(5) for full details. 
livecd / # emerge =sys-devel/gcc-4.9.4
..скачка, распаковка...
znavko ★★
() автор топика
Ответ на: комментарий от znavko

поставилось нормально благодаря свапу, поменялось гсс по умолчанию так

livecd / # emerge sys-devel/gcc-4.9.4
...
...
>>> No outdated packages were found on your system.

livecd / # gcc-config -l
 [1] i686-pc-linux-gnu-4.9.4
 [2] i686-pc-linux-gnu-5.4.0 *

livecd / # gcc-config 1
  * Switching native-compiler to i686-pc-linux-gnu-4.9.4 ...
...

livecd / # gcc-config -l
 [1] i686-pc-linux-gnu-4.9.4 *
 [2] i686-pc-linux-gnu-5.4.0

ставлю ядро опять и получаю ошибку:

livecd / # genkernel all
 * Gentoo Linux Genkernel: Version 3.4.52.4
...
Cannot use config_cc_stackprotector_regular: -fstack-protector not supported by compiler
...

Редактирую make.conf

livecd / # nano /etc/portage/make.conf

CFLAGS="-O2 -march=i686 -pipe"
CXXFLAGS="${CFLAGS}"
CHOST="i686-pc-linux-gnu"

...

livecd / # genkernel all
Cannot use config_cc_stackprotector_regular: -fstack-protector not supported by compiler

ничего не помогает.

znavko ★★
() автор топика
Ответ на: комментарий от znavko

он не видел компилятор

livecd / # genkernel all --kernel-cc=i686-pc-linux-gnu-4.9.4
...
make: i686-pc-linux-gnu-4.9.4: Command not found

нашел компилятор так:

livecd / # which gcc
/usr/bin/gcc

livecd / # cd /usr/bin
livecd / # ls | grep gcc
gcc
gcc-4.9.4
gcc-5.4.0
gcc-ar
gcc-config
gcc-nm
gcc-ranlib
i686-pc-linux-gnu-gcc
i686-pc-linux-gnu-gcc-4.9.4
i686-pc-linux-gnu-gcc-5.4.0
...

livecd / # genkernel all --kernel-cc=/usr/bin/i686-pc-linux-gnu-gcc-4.9.4
...
Cannot use config_cc_stackprotector_regular: -fstack-protector not supported by compiler

ставлю gcc-4.4.7

znavko ★★
() автор топика
Ответ на: комментарий от znavko

ssp stack smashing protector http://wiki.osdev.org/Stack_Smashing_Protector включен по умолчанию, начиная с версии 4.8.3: GCC 4.8.3 defaults to -fstack-protector https://www.gentoo.org/support/news-items/2014-06-15-gcc48_ssp.html

но почему-то в 4.9.0 сообщение -fstack-protector not supported.

ssp нашелся в gcc-4.2.2 http://stackoverflow.com/questions/1629685/when-and-how-to-use-gccs-stack-pro... но его нет в генту.

из присутствующих в генту https://packages.gentoo.org/packages/sys-devel/gcc найден ssp в gcc-4.1.2. http://lists.busybox.net/pipermail/uclibc/2007-March/038450.html

znavko ★★
() автор топика
Ответ на: комментарий от znavko

Думаю, что в make.conf всё же необходимо указать рабочий компилятор GCC 5.4:

CC=/usr/bin/gcc-5.4.0
CXX=/usr/bin/g++-5.4.0
CPP=/usr/bin/cpp-5.4.0

iZEN ★★★★★
()
Ответ на: комментарий от Pinkbyte

Это известный баг новых скриптов сборки ядра, выражается он в том, что если у тебя заданы некорректные опции сборки - сборка зафэйлится.

лейтенант, перелогиньтесь.

если у тебя заданы некорректные опции сборки - сборка зафэйлится.

this

etwrq ★★★★★
()
Ответ на: комментарий от iZEN

ничего не получается

# cat /etc/portage/make.conf
CC="/usr/bin/gcc-5.4.0"
CXX="/usr/bin/g++-5.4.0"
CPP="/usr/bin/cpp-5.4.0"

CFLAGS="-O2 -march=i686 -pipe"
CXXFLAGS="${CFLAGS}"
CHOST="i686-pc-linux-gnu"
USE="bindist"
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"

тут https://ubuntuforums.org/showthread.php?t=418234 говорят опция -fno-stack-protector решает вопрос. в моем случае просто никак не действует.

вот в каком месте ошибка:

...
Notifier error injection (NOTIFIER_ERROR_INJECTION) [N/m/y/?] (NEW)
--
  SYSTBL arch/x85/entry/syscalls/../../include/generated/asm/syscalls_32.h
  HOSTCC scripts/basic/bin2c
  CHK    include/config/kernel.release
  UPD    include/config/kernel.release
Cannot use config_cc_stackprotector_regular: -fstack-protector not supported by compiler
make: *** [Makefile:1066: prepare-compiler-check] Error 1
--
Running with options: all
Using genkernel.conf from /etc/genkernel.conf
..
znavko ★★
() автор топика
Ответ на: комментарий от etwrq

Ты до конца дочитай, что я подразумевал под некорректными опциями - а потом уже обвиняй в капитанстве. Кстати, подумай - хорошо ли это, валиться с ошибкой невозможности использования опции -fstack-protector, когда эта опция даже НЕ ТРЕБУЕТСЯ? :-)

Pinkbyte ★★★★★
()

Помнится во фре был наиглавнейший makefile, который втихаря включался во все файлы. Может и тут так?

anonymous
()
Ответ на: комментарий от znavko

м.б. надо ядро генту 4.9.16 пропатчить?

в ошибке в графе SYSTBL указан файл /usr/src/linux-4.9.16-gentoo/arch/x86/include/generated/asm, слово stack в двух строках:

__SYSCALL_I386(186, sys_sigaltstack, )
__SYSCALL_I386(186, compat_sys_sigaltstack, )

а также

livecd / # cd /usr/src/linux-4.9.16-gentoo
livecd / # ls
COPYING Kbuild Makefile arch crypto firmware init lib...
...
livecd / # grep -rl fstack-protector .
./scripts/gcc-x86_64-has-stack-protector.sh
./scripts/gcc-x86_32-has-stack-protector.sh
./kernel/panic.c
./include/linux/sched.h
./tools/perf/Makefile.config
./tools/thermal/tmon/Makefile
./tools/build/feature/Makefile
./arch/Kconfig
./arch/mips/boot/compressed/Makefile
./arch/powerpc/boot/Makefile
./arch/x86/xen/enlighten.c
./arch/arm/boot/compressed/Makefile
./Makefile

livecd / # cat ./scripts/gcc-x86_32-has-stack-protector.sh
#!/bin/sh
echo "int foo(void) { char X[200]; return 3; }" | $* -S -x c -c -O0 -fstack-protector - -o - 2> /dev/null | grep -q "%gs"
if [ "$?" -eq "0" ] ; then
        echo y
else
        echo n
fi

livecd / # nano ./scripts/gcc-x86_32-has-stack-protector.sh

удаление параметра -fstack-protector привело к той же ошибке в новом файле: arch/x86/entry/syscalls/../../include/generated/asm/unistd_32_ia32.h

livecd / # cat /usr/src/linux*/arch/x86/include/generated/asm/unistd_32_ia32.h |grep stack
#define __NR_ia32_sigaltstack 186

как-то надо что-то править в исходниках или надо везде флаг компилятора удалять? и почем всё-таки компилятор не поддерживает fstack-protector? какой нормальный компилятор поставить для генту?

znavko ★★
() автор топика
Ответ на: комментарий от znavko

главный мэйкфайл ядра:

livecd / # cd /usr/src/linux-4.9.16-gentoo
livecd / # ls
.... Makefile
livecd / # cat Makefile | grep fstack-protector
  stackp-flag := -fstack-protector
  stackp-flag := -fstack-protector-strong
  stackp-flag := $(call cc-option, -fno-stack-protector)
  stackp-path := $(srctree)/scripts/gcc-$(SRCARCH)_$(BITS)-has-stack-protector.sh
#Make sure compiler does not have buggy stack-protector support.

как найти компилятор с нормальной поддержкой SSP для генту?

znavko ★★
() автор топика
Ответ на: комментарий от znavko

Попробуй вывести значения переменных через echo. Мало ли - вдруг эффективные значения не то что думаешь.

anonymous
()
Ответ на: комментарий от anonymous

Кстати в дебиане пакет компилятора ядра отдельный и заморожен.

anonymous
()
Ответ на: комментарий от anonymous

мейкфайл я поправил: закомментировал все строки с stackprotector: от 673 до 690й, теперь получил следующую ошибку:

livecd / # genkernel all
...
kernel/bounds.c:1:0: error: CPU you selected does not support x86-64 instruction set

в генкернел сложно отключить стекпротектор.

есть ли другая утилита компиляции ядра?

znavko ★★
() автор топика
Ответ на: комментарий от znavko

процессор `nano /proc/cpuinfo` 4 ядра

Intel (R) Pentium(R) CPU N3530 @ 2.16GHz

znavko ★★
() автор топика
Ответ на: комментарий от znavko

Я в генте не силён. Но наверняка там есть команда «сделать зашибись». В дебиане, например есть. Попробуй в виртуалке («чистая» инсталляция) собрать. Возможно намудрили с зависимостями...

anonymous
()
Ответ на: комментарий от znavko

как найти компилятор с нормальной поддержкой SSP для генту?

GCC 6.3 чем не вариант?

iZEN ★★★★★
()
Ответ на: комментарий от etwrq

в /usr/src/linux-4.9.0-gentoo/.config присутствует эта строка:

CONFIG_CC_STACKPROTECTOR_REGULAR=y

но её измнение не влияет: файл конфиг пересоздаётся при каждом запуске генкернел. снятие прав chmod -w .config не помогает - все равно пересоздается.

znavko ★★
() автор топика
Ответ на: комментарий от slaykovsky

`genkernel all --menuconfig' произвела инвоук менюконфиг, в котором я смог пройти 1й шаг (отключить опцию 64-bit kernel) но на втором шаге Virtualization меню не идет дальше ни при выборе по умолчанию, ни при активации ни при деактивации всего списка. как правильно выбрать?

znavko ★★
() автор топика
Ответ на: комментарий от znavko

понял.

не нашел есть ли настройка SSP.

а в Processor type and features есть такое Generic x86 support (NEW)

в Processor family по умолчанию выбрано: Pentium-Pro. есть другой: 586/K5/5x86/6x86/6x86MX. на lenovo g50-30 соответственно intel 686. оставил как есть Pentium-Pro, но мне непонятно что такое 6x86

znavko ★★
() автор топика
Ответ на: комментарий от znavko

сохранены настройки в menuconfig (снята опция 64-bit kernel), наблюдается «Compiling 4.9.16-gentoo bzImage... спасибо за присутствие!

znavko ★★
() автор топика
Ответ на: комментарий от slaykovsky

РЕШЕНО с помощью genkernel --menuconfig all

Kernel compiled successfully!

Required Kernel Parameters:
   root=/dev/$ROOT
  
   Where $ROOT is the device node for your root partition as the one specified in /etc/fstab

If you require Genkernel's hardware detection features: you MUST tell your bootloader to use the provided INITRAMFS file.

WARNING... WARNING... WARNING...
Additional kernel cmdline argument that *may* be required to boot properly...
With support for several ext* filesystems available, it may be needed to add "rootfstype=ext3" or "rootfstype=ext4: ti the list of boot parameters.

Теперь буду ставить иксы, драйвера и прочее окружение.

znavko ★★
() автор топика
30 июля 2017 г.

Я вдоль почитал твою тему... Во первых gcc ставь либо 4й либо 7й. Потому что 5й и 6й, лично на мой взгляд, сильно я б сказал странные и на них всем насрать. Во вторых если ты не разработчик gentoo из той команды которая делает live cd/dvd не надо использовать вот это --> genkerel. Просто осиль уже ты три команды для сборки вручную.

init_6 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.