Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Timur Khanjanov                      2:5020/400     31 Aug 2005  19:00:38
 To : Gleb Smirnoff
 Subject : Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями
 -------------------------------------------------------------------------------- 
 
 В письме Wed, 31 Aug 2005 12:38:04 +0000, Gleb Smirnoff
 написал:
 
 > Timur Khanjanov <intel@intrans.baku.az> wrote:
 >>> TK> наступил вчера на вот такие грабли
 >>> TK> если завести pppoe через mpd на более чем 64х физических интерфейсах
 >>> TK> то на 65м получаем sigsegv и зависание mpd с полной загрузкой процессора
 >>> TK> и отсутствием реакции на что бы то ни было кроме kill -9 
 >>> TK> после копания в исходниках с gdb в зубах обнаружил следуещее
 >>> TK> Массивы содержащие линки и бандлы - динамические и удлиняются через 
 >>> TK> функцию LengthenArray
 >>> TK> но в файле pppoe.c  видим следующее на 154й строке
 >>> TK> int PppoeIfCount=0;                                                     
 >>> TK> struct PppoeIf PppoeIfs[64]; итак - физические интерфейсы для линков
 >>> TK> хранятся в _статическом_ массиве на 64 элемента смотрим дальше в функции
 >>> TK> PppoeNodeUpdate производится его заполнение проверка на переполнение
 >>> TK> массива _не производися_ в результате на 65м интерфейсе вот в этой
 >>> TK> строке (~830)                PppoeIfs[PppoeIfCount++].listen=0; нолик
 >>> TK> записывается аккурат в указатель на массив бандлов и потом при попытке
 >>> TK> добавить новый бандл получаем 11й сигнал дальше - больше - при приходе
 >>> TK> сигнала мпд пытается всё закрыть опять лезет в массив бандлов опять
 >>> TK> получает 11й сигнал и так пока его не снимут через kill -9 
 >>> 
 >>> TK> пока прописал там размер массива на 256, но пожалуй там надо
 >>> TK> сделать как в списках бандлов/линков динамический массив и
 >>> TK> увеличение через LenghtenArray
 >>> 
 >>> Шлите патчи. :)
 > 
 > TK> как только - так сразу Ж8)
 > TK> сходу могу только чтоб при превышении лимита матерился
 > 
 > Уже будет намного лучше, чем то, что имеем сейчас.
 
 ну вот приблизительно так
 diff -u pppoe.h.orig pppoe.h 
 - --- pppoe.h.orig Thu Sep  1 03:30:10 2005
 +++ pppoe.h   Thu Sep  1 03:30:21 2005
 @@ -15,6 +15,12 @@
  
  
  /*
 + * CONSTANTS
 + */
 + 
 +#define PHYS_INT_MAX 256
 +
 +/*
   * VARIABLES
   */
 
 diff -u pppoe.c.orig pppoe.c 
 - --- pppoe.c.orig Wed Aug 31 21:24:44 2005
 +++ pppoe.c   Thu Sep  1 03:37:04 2005
 @@ -152,7 +152,7 @@
      EventRef  ctrlEvent;     /* listen for ctrl messages */
  };
  int PppoeIfCount=0;
 -struct PppoeIf PppoeIfs[256];
 +struct PppoeIf PppoeIfs[PHYS_INT_MAX];
  
  int PppoeListenUpdateSheduled=0;
  struct pppTimer PppoeListenUpdateTimer;
 @@ -823,6 +823,10 @@
       j=i;
    };
    if (j==-1) {
 +      if(PppoeIfCount>=PHYS_INT_MAX){
 +         Log(LG_ERR, ("[%s] Can't create node on %s already has %d physical
 interfaces", lnk->name, p->path, (PHYS_INT_MAX) ));
 +         return;
 +      }   
        if (CreatePppoeNode(p->path,p->hook)) {
       snprintf(PppoeIfs[PppoeIfCount].ifnodepath,sizeof(PppoeIfs[PppoeIfCount].i
 fnodepath),"%s",p->path);
       snprintf(PppoeIfs[PppoeIfCount].session,sizeof(PppoeIfs[PppoeIfCount].sess
 ion),"%s",p->session);
 не уверен что сообщение об ошибке грамматически правильно Ж8)
 
 патч неполный - при превышении лимита он
 всё равно грохается по 11му сигналу пытаясь напечатать 
 [%s] PPPoE server listening on %s for service \"%s\"
 но хотя бы не зависает и громко матерится перед этим
 
 а по уму там всё равно динамический массив делать надо
 
 -- 
 Homo Homini domini est
 --- ifmail v.2.15dev5.3
  * Origin: Gamma NNTP server Moscow Russia (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Timur Khanjanov   31 Aug 2005 13:00:15 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Gleb Smirnoff   31 Aug 2005 13:33:43 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Timur Khanjanov   31 Aug 2005 15:00:28 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Gleb Smirnoff   31 Aug 2005 16:38:04 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Timur Khanjanov   31 Aug 2005 19:00:38 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Timur Khanjanov   31 Aug 2005 17:00:28 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Gleb Smirnoff   31 Aug 2005 18:37:07 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Timur Khanjanov   31 Aug 2005 20:00:38 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Gleb Smirnoff   01 Sep 2005 04:24:14 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Timur Khanjanov   01 Sep 2005 13:00:14 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Sergey Matveychuk   08 Sep 2005 12:02:35 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Gleb Smirnoff   08 Sep 2005 12:20:19 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Sergey Matveychuk   08 Sep 2005 12:46:29 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Timur Khanjanov   08 Sep 2005 14:00:13 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Gleb Smirnoff   08 Sep 2005 14:18:56 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Moderator of RU.UNIX.BSD   08 Sep 2005 16:07:18 
 mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Andrey Ostanovsky   08 Sep 2005 16:08:50 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Timur Khanjanov   08 Sep 2005 18:00:34 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Sergey Matveychuk   08 Sep 2005 14:22:59 
 Re: mpd, pppoe на куче интерфейсов и грабли, присыпанные листьями   Timur Khanjanov   08 Sep 2005 18:00:34 
Архивное /ru.unix.bsd/1016937969064.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional