Bug 40425 - distcc: падение с double free
Summary: distcc: падение с double free
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: distcc (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Vitaly Lipatov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-07-09 21:29 MSK by Alexey Sheplyakov
Modified: 2021-07-26 14:53 MSK (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Alexey Sheplyakov 2021-07-09 21:29:16 MSK
sudo apt-get install distcc gcc
cat > hello.c <<-EOF
#include <stdio.h>
int main(int argc, char **argv) {
    printf("Hello, world!\n");
    return 0;
}
EOF
distcc gcc -Wall -std=gnu89 -I. -O2 -o hello.o -c hello.c

Ожидаемый результат:

distcc[1234567] (dcc_build_somewhere) Warning: failed to distribute, running locally instead

Наблюдаемый результат:

free(): invalid next size (fast)
Aborted (core dumped)
Comment 1 Alexey Sheplyakov 2021-07-09 21:45:51 MSK
(gdb) bt
#0  dcc_gcc_rewrite_fqn (argv=0x487640) at src/compile.c:621
#1  0x000000000040605a in dcc_build_somewhere (argv=0x487640, sg_level=0, status=0x7fffffffda28) at src/compile.c:715
#2  0x000000000040676f in dcc_build_somewhere_timed (argv=0x487290, sg_level=0, status=0x7fffffffda28) at src/compile.c:1004
#3  0x0000000000406e96 in main (argc=16, argv=0x7fffffffdb48) at src/distcc.c:352
(gdb) print binname
$50 = "/usr/bin/x86_64-alt-linux-gnu-gcc\000\377\377\377\177", '\000' <repeats 18 times>, "H]@"
(gdb) print target_with_vendor 
$51 = 0x417949 "x86_64-alt-linux-gnu"

distcc пытается переписать gcc в ${triplet}-gcc [1]. Для этого distcc использует GNU_HOST,
который ему сообщил configure. А configure в наш, гм, странный триплет x86_64-alt-linux
пытается привести к общепринятому ${hardware}-${platform_variant}-${kernel}-${abi}
(hardware="x86_64", kernel="linux", abi="gnu"). Но компилятора с именем x86_64-alt-linux-gnu-gcc
нет (а есть x86_64-alt-linux-gcc), поэтому получается облом. И вдобавок почему-то портится куча.


[1] Чтобы "из коробки" работала сборка в гетерогенных кластерах, например клиент - arm, а сборочные узлы - x86
Comment 2 Alexey Sheplyakov 2021-07-11 13:02:53 MSK
> И вдобавок почему-то портится куча.

https://github.com/distcc/distcc/pull/425
Comment 3 Alexey Sheplyakov 2021-07-11 18:10:09 MSK
https://github.com/distcc/distcc/pull/427
Comment 4 Alexey Sheplyakov 2021-07-11 18:20:35 MSK
Пользуясь случаем, хочу послать много лучей добра людям, которые придумали триплет `x86_64-alt-linux`
Comment 5 Vitaly Lipatov 2021-07-11 18:26:49 MSK
(Ответ для Alexey Sheplyakov на комментарий #4)
> Пользуясь случаем, хочу послать много лучей добра людям, которые придумали
> триплет `x86_64-alt-linux`
...
>Но компилятора с именем x86_64-alt-linux-gnu-gcc
> нет (а есть x86_64-alt-linux-gcc), поэтому получается облом.
Нет ли у нас баги с названием компилятора?
Comment 6 Alexey Sheplyakov 2021-07-12 18:21:50 MSK
(In reply to Vitaly Lipatov from comment #5)
> (Ответ для Alexey Sheplyakov на комментарий #4)
> > Пользуясь случаем, хочу послать много лучей добра людям, которые придумали
> > триплет `x86_64-alt-linux`
> ...
> >Но компилятора с именем x86_64-alt-linux-gnu-gcc
> > нет (а есть x86_64-alt-linux-gcc), поэтому получается облом.
> Нет ли у нас баги с названием компилятора?

Триплеты `${arch}-alt-linux` существуют очень давно. Насколько я понимаю, это калька с `${arch}-redhat-linux` (хотя могу ошибаться). Поменять триплеты *теперь* вряд ли возможно (не разломав сборку кучи пакетов). Придётся обучить distcc жить с теми триплетами, которые уже есть. Собственно, именно это и делает https://github.com/distcc/distcc/pull/427
Comment 7 Vitaly Lipatov 2021-07-12 19:15:11 MSK
(Ответ для Alexey Sheplyakov на комментарий #6)
> (In reply to Vitaly Lipatov from comment #5)
> > (Ответ для Alexey Sheplyakov на комментарий #4)
> > > Пользуясь случаем, хочу послать много лучей добра людям, которые придумали
> > > триплет `x86_64-alt-linux`
> > ...
> > >Но компилятора с именем x86_64-alt-linux-gnu-gcc
> > > нет (а есть x86_64-alt-linux-gcc), поэтому получается облом.
> > Нет ли у нас баги с названием компилятора?
> 
> Триплеты `${arch}-alt-linux` существуют очень давно. Насколько я понимаю,
> это калька с `${arch}-redhat-linux` (хотя могу ошибаться). Поменять триплеты
> *теперь* вряд ли возможно (не разломав сборку кучи пакетов).
Ну мне казалось, что в пакетах никак это не используется. Возможно, в каких-то редких странных пакетах.
Но это это тема другой баги :)

> Придётся
> обучить distcc жить с теми триплетами, которые уже есть. Собственно, именно
> это и делает https://github.com/distcc/distcc/pull/427
Спасибо за исправленную сборку!
Comment 8 Alexey Sheplyakov 2021-07-26 14:53:51 MSK
Исправлено в 3.4-alt2