Страница 1 из 2

ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 17:18:52
Adekamer
из-за ошибки в реализации округлений при подсчете чисел с плавующей точкой есть бага в БСД
в частности в БСД нельзя 529 поделить на 23
калькулятор или в шеле просто отказывается выполнять эту команду - может крашнуть систему

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 17:36:56
idle

Код: Выделить всё

#expr 529 / 23
23
#uname -rs
FreeBSD 4.9-RELEASE

#expr 529 / 23
23
#uname -rs
FreeBSD 7.0-CURRENT
И что?

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 17:41:30
Adekamer
повтори операцию еше десять раз или в цикле

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 17:45:28
idle

Код: Выделить всё

while true; do expr 529 / 23; done
23
23
...
Крутит, не падает.
Оставить на ночь?

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 17:59:48
toughcat
круто... а мужыки-то и не знали...
*побежал постить на ЛОР

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 18:01:34
weec
Adekamer, расскажи подробнее
как повторить проблемную ситуацию, опиши свою конфигурацию

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 18:12:44
terminus
6.2-RELEASE-p11 - не работает, то есть все работает ниче не упало

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 18:47:07
dikens3
Может забанить автора, чтобы не гадил такими постами?

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 19:51:05
pr0t
Может он НетБСД имеет в виду...Или Драгонфлай :mrgreen:

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 20:06:58
Mefis
у меня PCBSD 1.4. калькулятор не считает :) вылетает)

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 20:29:22
Alex Keda
вот так - наплодили форков кривых =)

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 21:38:39
terminus
Стоило ожидать... Раз уж pbi а не порты, раз уж все монтируется/демонтируетса само без паники, то о каком вообще делении 529 на 23 может идти речь? :mrgreen:

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 22:08:00
f_andrey
lissyara писал(а):вот так - наплодили форков кривых =)
http://aleksg.livejournal.com/477832.html ;)

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 22:27:25
terminus
Не, Adekamer ведь обещал КРАШъ всей системы к чертовой перематере :mrgreen:

Не может же все быть так плоско :mrgreen: :twisted: :mrgreen:

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 22:40:58
f_andrey
Как то навевает на мысль что сегодня день мега прикола 29 :) судя по коментам к посту это мегабоян, но я как то раньше тоже не слышал, наверное среди математиков так прикалываются :)

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-21 23:27:37
princeps
Блин, Адекамер, шутник :) Полдня убил, пытался повесить систему извлечением корня из 529 :)

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-22 8:39:13
Гость

Код: Выделить всё

> sh -c 'echo $((529 / 23))'
> csh -c '@ out= 529 / 23; echo $out'
> expr 529 / 23
> echo 529 / 23 | bc
> echo 529 23 / p | dc
> awk 'BEGIN { print 529 / 23 }'
> echo 'main() { printf("%d\n", 529 / 23); }' | cc -xc -; ./a.out
И все выдают `23', но это не интересно...
Как насчет еще способов для простой арифметики штатными средствами из шелла (perl/python/etc отпадают, ибо не штатные)?

ps, а есть ли способ запустить файл из stdout? а то последний пример выглядит коряво, хотя второй тоже не очень

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-23 9:29:59
zingel
Разьве это баг, во я недавно нашел

http://www.freebsd.org/cgi/query-pr.cgi?pr=120872

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-23 10:16:29
dikens3
zingel писал(а):Разьве это баг, во я недавно нашел

http://www.freebsd.org/cgi/query-pr.cgi?pr=120872
Моя твоя непонима. :-)
Там ответ дан, неправильное использование команды fsstat -M FILE (А реально нужно -M DUMP_CORE) приводит к такой ошибке. Сказал что смотрит код и возможно сделает чтобы выход осуществлялся без FAULT 11, если в параметре -M будет просто файл.

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-23 11:39:58
zingel
fstat валится по сигфолту от 45 байт в функции _kvm_initvtop() /usr/src/lib/libkvm/kvm.c,

Код: Выделить всё

int
kvm_close(kd)
        kvm_t *kd;
{
        int error = 0;

        if (kd->pmfd >= 0)
                error |= close(kd->pmfd);
        if (kd->vmfd >= 0)
                error |= close(kd->vmfd);
        if (kd->nlfd >= 0)
                error |= close(kd->nlfd);
        if (kd->vmst)
                _kvm_freevtop(kd);
        if (kd->procbase != 0)
                free((void *)kd->procbase);
        if (kd->argv != 0)
                free((void *)kd->argv);
        free((void *)kd);

        return (0);
}
нужно сделать #define EEXIST 17 на проверке elf-формата фала.

Это ли не баг? Тем боле ответа от девелоперов небыло. Оно там будет лежать пока я не напишу патч, напишу - выложу.

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-23 18:53:50
zingel
Вобщем-то я малость опоздал,

Код: Выделить всё

"Alexander V. Chernikov" <admin@su29.net> 
кому	        666.root@gmail.com	 
дата		23.02.2008 17:26	 
тема		Re: i386/120872: fstat exit on signall 11	
 
The following patch fixes an issue on i386/amd64 platforms

kvm_checkheader is a simple cut-n-paste from imgact_elf.c check_header

diff -urN lib/libkvm.orig/kvm.c lib/libkvm/kvm.c
--- lib/libkvm.orig/kvm.c       2008-02-23 17:48:27.000000000 +0300
+++ lib/libkvm/kvm.c    2008-02-23 17:48:33.000000000 +0300
@@ -64,6 +64,8 @@
 #include <string.h>
 #include <unistd.h>

+#include <machine/elf.h>
+
 #include "kvm_private.h"

 /* from src/lib/libc/gen/nlist.c */
@@ -136,6 +138,21 @@
       return (p);
 }

+int
+_kvm_checkheader(void *e)
+{
+       Elf_Ehdr *hdr = e;
+       if (!IS_ELF(*hdr) ||
+           hdr->e_ident[EI_CLASS] != ELF_TARG_CLASS ||
+           hdr->e_ident[EI_DATA] != ELF_TARG_DATA ||
+           hdr->e_ident[EI_VERSION] != EV_CURRENT ||
+           hdr->e_phentsize != sizeof(Elf_Phdr) ||
+           hdr->e_version != ELF_TARG_VER ||
+           hdr->e_machine > MAX_BRANDS)
+               return (ENOEXEC);
+return (0);
+}
+
 static kvm_t *
 _kvm_open(kd, uf, mf, flag, errout)
       kvm_t *kd;
diff -urN lib/libkvm.orig/kvm_amd64.c lib/libkvm/kvm_amd64.c
--- lib/libkvm.orig/kvm_amd64.c 2008-02-23 17:48:27.000000000 +0300
+++ lib/libkvm/kvm_amd64.c      2008-02-23 17:51:27.000000000 +0300
@@ -170,6 +170,11 @@
                       return (-1);

               ehdr = kd->vmst->mmapbase;
+               if (_kvm_checkheader(ehdr) != 0) {
+                       _kvm_err(kd, kd->program, "core is not valid ELF core");
+                       return (-1);
+               }
+
               hdrsz = ehdr->e_phoff + ehdr->e_phentsize * ehdr->e_phnum;
               if (_kvm_maphdrs(kd, hdrsz) == -1)
                       return (-1);
diff -urN lib/libkvm.orig/kvm_i386.c lib/libkvm/kvm_i386.c
--- lib/libkvm.orig/kvm_i386.c  2008-02-23 17:51:03.000000000 +0300
+++ lib/libkvm/kvm_i386.c       2008-02-23 17:51:14.000000000 +0300
@@ -177,6 +177,11 @@
                       return (-1);

               ehdr = kd->vmst->mmapbase;
+               if (_kvm_checkheader(ehdr) != 0) {
+                       _kvm_err(kd, kd->program, "core is not valid ELF core");
+                       return (-1);
+               }
+
               hdrsz = ehdr->e_phoff + ehdr->e_phentsize * ehdr->e_phnum;
               if (_kvm_maphdrs(kd, hdrsz) == -1)
                       return (-1);
diff -urN lib/libkvm.orig/kvm_private.h lib/libkvm/kvm_private.h
--- lib/libkvm.orig/kvm_private.h       2008-02-23 17:48:28.000000000 +0300
+++ lib/libkvm/kvm_private.h    2008-02-23 17:48:33.000000000 +0300
@@ -79,6 +79,9 @@
           __printflike(3, 4);
 int     _kvm_uvatop(kvm_t *, const struct proc *, u_long, u_long *);

+#define MAX_BRANDS     8 /* from sys/imgact_elf.h */
+int     _kvm_checkheader(void *);
+
 #if defined(__amd64__) || defined(__i386__)
 void    _kvm_minidump_freevtop(kvm_t *);
 int     _kvm_minidump_initvtop(kvm_t *); 

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-24 3:27:05
Гость
но это всего лишь проверка на заголовок. А если с заголовком все в порядке, а с данными нет, то разве нет шанса эксплуатировать привилегии sgid программы с группой kmem? Если такого шанса нет, то зачем вообще проверять заголовок?
соррри, если сказал глупость

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-24 8:11:15
zingel
проверка заголовка нужна для условия ELF или не ELF-формат, "если с заголовком всё в порядке, а с данными - нет" - такого с ELF не бывает.

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-27 9:50:58
zingel

Re: ХА! Я знаю багу в БСД

Добавлено: 2008-02-27 10:37:46
Гость
там про kernel based virtual machine, а не про kernel virtual memory.
А в статусе Porting Linux KVM To FreeBSD не написано committed.

Перепутал?