All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Sesterhenn <snakebyte@gmx.de>
To: netdev@vger.kernel.org
Subject: Deadlock with icmpv6fuzz
Date: Tue, 20 Jan 2009 21:47:43 +0100	[thread overview]
Message-ID: <20090120204743.GA25797@alice> (raw)

Hi,

I can get my box into a deadlock when running "icmpv6fuzz -r 25668",
source code is attached

# CONFIG_CLASSIC_RCU is not set
CONFIG_TREE_RCU=y
# CONFIG_PREEMPT_RCU is not set
CONFIG_RCU_TRACE=y
CONFIG_RCU_FANOUT=32
# CONFIG_RCU_FANOUT_EXACT is not set
CONFIG_TREE_RCU_TRACE=y
# CONFIG_PREEMPT_RCU_TRACE is not set
CONFIG_RCU_TORTURE_TEST=m
CONFIG_RCU_CPU_STALL_DETECTOR=y

CONFIG_IPV6=m
CONFIG_IPV6_PRIVACY=y
# CONFIG_IPV6_ROUTER_PREF is not set
# CONFIG_IPV6_OPTIMISTIC_DAD is not set
# CONFIG_IPV6_MIP6 is not set
CONFIG_IPV6_SIT=m
CONFIG_IPV6_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=m
# CONFIG_IPV6_MULTIPLE_TABLES is not set
# CONFIG_IPV6_MROUTE is not set
CONFIG_NF_CONNTRACK_IPV6=m
CONFIG_IP6_NF_MATCH_IPV6HEADER=m

Kernel is current -git

[ 5459.100023] INFO: RCU detected CPU 0 stall (t=2500 jiffies)
[ 5459.100023] Pid: 25668, comm: icmpv6fuzz Not tainted 2.6.29-rc2 #92
[ 5459.100023] Call Trace:
[ 5459.100023]  [<c0629676>] ? printk+0x18/0x1a
[ 5459.100023]  [<c016db22>] __rcu_pending+0x62/0x250
[ 5459.100023]  [<c014c55b>] ? trace_hardirqs_off+0xb/0x10
[ 5459.100023]  [<c016dd22>] rcu_pending+0x12/0x40
[ 5459.100023]  [<c0132b8a>] update_process_times+0x2a/0x60
[ 5459.100023]  [<c014a115>] tick_sched_timer+0x55/0xc0
[ 5459.100023]  [<c014a0c0>] ? tick_sched_timer+0x0/0xc0
[ 5459.100023]  [<c01409b0>] __run_hrtimer+0x70/0xe0
[ 5459.100023]  [<c014a0c0>] ? tick_sched_timer+0x0/0xc0
[ 5459.100023]  [<c014118d>] hrtimer_interrupt+0xed/0x190
[ 5459.100023]  [<c010597b>] timer_interrupt+0x3b/0x50
[ 5459.100023]  [<c016ac19>] handle_IRQ_event+0x29/0x60
[ 5459.100023]  [<c016c9a5>] handle_level_irq+0x65/0xe0
[ 5459.100023]  [<c016c940>] ? handle_level_irq+0x0/0xe0
[ 5459.100023]  <IRQ>  [<c014e9b1>] ? trace_hardirqs_on_caller+0x151/0x1c0
[ 5459.100023]  [<c0103bac>] ? common_interrupt+0x2c/0x34
[ 5459.100023]  [<c014007b>] ? posix_cpu_clock_get+0xb/0x160
[ 5459.100023]  [<d18a6e87>] ? ipv6_push_exthdr+0x17/0x70 [ipv6]
[ 5459.100023]  [<c0570aaf>] ? skb_store_bits+0x10f/0x200
[ 5459.100023]  [<d18a6f03>] ? ipv6_push_frag_opts+0x23/0x30 [ipv6]
[ 5459.100023]  [<d18858ab>] ? ip6_push_pending_frames+0x21b/0x3e0 [ipv6]
[ 5459.100023]  [<d189b01a>] ? rawv6_sendmsg+0xbfa/0xc70 [ipv6]
[ 5459.100023]  [<c05f0494>] ? inet_sendmsg+0x34/0x60
[ 5459.100023]  [<c056a909>] ? sock_sendmsg+0xe9/0x110
[ 5459.100023]  [<c013d800>] ? autoremove_wake_function+0x0/0x50
[ 5459.100023]  [<c018db96>] ? might_fault+0x46/0xa0
[ 5459.100023]  [<c018dbe1>] ? might_fault+0x91/0xa0
[ 5459.100023]  [<c018db96>] ? might_fault+0x46/0xa0
[ 5459.100023]  [<c031aa65>] ? copy_from_user+0x35/0x130
[ 5459.100023]  [<c056ac55>] ? sys_sendto+0xa5/0xd0
[ 5459.100023]  [<c018db96>] ? might_fault+0x46/0xa0
[ 5459.100023]  [<c0568fb0>] ? sock_ioctl+0x0/0x240
[ 5459.100023]  [<c018db96>] ? might_fault+0x46/0xa0
[ 5459.100023]  [<c056b28b>] ? sys_socketcall+0x18b/0x2a0
[ 5459.100023]  [<c0103551>] ? sysenter_do_call+0x12/0x31
[ 5489.100020] INFO: RCU detected CPU 0 stall (t=10000 jiffies)
[ 5489.100020] Pid: 25668, comm: icmpv6fuzz Not tainted 2.6.29-rc2 #92
[ 5489.100020] Call Trace:
[ 5489.100020]  [<c0629676>] ? printk+0x18/0x1a
[ 5489.100020]  [<c016db22>] __rcu_pending+0x62/0x250
[ 5489.100020]  [<c014c55b>] ? trace_hardirqs_off+0xb/0x10
[ 5489.100020]  [<c016dd22>] rcu_pending+0x12/0x40
[ 5489.100020]  [<c0132b8a>] update_process_times+0x2a/0x60
[ 5489.100020]  [<c014a115>] tick_sched_timer+0x55/0xc0
[ 5489.100020]  [<c014a0c0>] ? tick_sched_timer+0x0/0xc0
[ 5489.100020]  [<c01409b0>] __run_hrtimer+0x70/0xe0
[ 5489.100020]  [<c014a0c0>] ? tick_sched_timer+0x0/0xc0
[ 5489.100020]  [<c014118d>] hrtimer_interrupt+0xed/0x190
[ 5489.100020]  [<c010597b>] timer_interrupt+0x3b/0x50
[ 5489.100020]  [<c016ac19>] handle_IRQ_event+0x29/0x60
[ 5489.100020]  [<c016c9a5>] handle_level_irq+0x65/0xe0
[ 5489.100020]  [<c016c940>] ? handle_level_irq+0x0/0xe0
[ 5489.100020]  <IRQ>  [<c014e9b1>] ? trace_hardirqs_on_caller+0x151/0x1c0
[ 5489.100020]  [<c0103bac>] ? common_interrupt+0x2c/0x34
[ 5489.100020]  [<c014007b>] ? posix_cpu_clock_get+0xb/0x160
[ 5489.100020]  [<d18a6e87>] ? ipv6_push_exthdr+0x17/0x70 [ipv6]
[ 5489.100020]  [<c0570aaf>] ? skb_store_bits+0x10f/0x200
[ 5489.100020]  [<d18a6f03>] ? ipv6_push_frag_opts+0x23/0x30 [ipv6]
[ 5489.100020]  [<d18858ab>] ? ip6_push_pending_frames+0x21b/0x3e0 [ipv6]
[ 5489.100020]  [<d189b01a>] ? rawv6_sendmsg+0xbfa/0xc70 [ipv6]
[ 5489.100020]  [<c05f0494>] ? inet_sendmsg+0x34/0x60
[ 5489.100020]  [<c056a909>] ? sock_sendmsg+0xe9/0x110
[ 5489.100020]  [<c013d800>] ? autoremove_wake_function+0x0/0x50
[ 5489.100020]  [<c018db96>] ? might_fault+0x46/0xa0
[ 5489.100020]  [<c018dbe1>] ? might_fault+0x91/0xa0
[ 5489.100020]  [<c018db96>] ? might_fault+0x46/0xa0
[ 5489.100020]  [<c031aa65>] ? copy_from_user+0x35/0x130
[ 5489.100020]  [<c056ac55>] ? sys_sendto+0xa5/0xd0
[ 5489.100020]  [<c018db96>] ? might_fault+0x46/0xa0
[ 5489.100020]  [<c0568fb0>] ? sock_ioctl+0x0/0x240
[ 5489.100020]  [<c018db96>] ? might_fault+0x46/0xa0
[ 5489.100020]  [<c056b28b>] ? sys_socketcall+0x18b/0x2a0
[ 5489.100020]  [<c0103551>] ? sysenter_do_call+0x12/0x31

and so on

(gdb) l*(ipv6_push_exthdr+0x17)
0x4d7 is in ipv6_push_exthdr (net/ipv6/exthdrs.c:700).
695		*proto = NEXTHDR_ROUTING;
696	}
697	
698	static void ipv6_push_exthdr(struct sk_buff *skb, u8 *proto, u8 type, struct ipv6_opt_hdr *opt)
699	{
700		struct ipv6_opt_hdr *h = (struct ipv6_opt_hdr *)skb_push(skb, ipv6_optlen(opt));
701	
702		memcpy(h, opt, ipv6_optlen(opt));
703		h->nexthdr = *proto;
704		*proto = type;

(gdb) l*(skb_store_bits+0x10f)
0x282f is in skb_store_bits (net/core/skbuff.c:1567).
1562				vaddr = kmap_skb_frag(frag);
1563				memcpy(vaddr + frag->page_offset + offset - start,
1564				       from, copy);
1565				kunmap_skb_frag(vaddr);
1566	
1567				if ((len -= copy) == 0)
1568					return 0;
1569				offset += copy;
1570				from += copy;
1571			}

(gdb) l*(ipv6_push_frag_opts+0x23)
0x553 is in ipv6_push_frag_opts (net/ipv6/exthdrs.c:730).
725	
726	void ipv6_push_frag_opts(struct sk_buff *skb, struct ipv6_txoptions *opt, u8 *proto)
727	{
728		if (opt->dst1opt)
729			ipv6_push_exthdr(skb, proto, NEXTHDR_DEST, opt->dst1opt);
730	}
731	
732	struct ipv6_txoptions *
733	ipv6_dup_options(struct sock *sk, struct ipv6_txoptions *opt)
734	{




Running the same command on a different box with a different config

[11237.306574] skb_under_panic: text:c071d473 len:2361 put:864 head:ca7510c0 data:ca750f10 tail:0xca751270 end:0xca751280 dev:<NULL>
[11237.306909] ------------[ cut here ]------------
[11237.307002] kernel BUG at net/core/skbuff.c:147!
[11237.307045] invalid opcode: 0000 [#1] PREEMPT DEBUG_PAGEALLOC
[11237.307045] last sysfs file: /sys/class/vc/vcsa50/dev
[11237.307045] Modules linked in: [last unloaded: rcutorture]
[11237.307045] 
[11237.307045] Pid: 19951, comm: icmpv6fuzz Not tainted (2.6.29-rc2-00021-gd84d31c #216) System Name
[11237.307045] EIP: 0060:[<c06918e1>] EFLAGS: 00010246 CPU: 0
[11237.307045] EIP is at skb_under_panic+0x3f/0x46
[11237.307045] EAX: 00000088 EBX: c098dafb ECX: c012413f EDX: c012476a
[11237.307045] ESI: 00000000 EDI: ca5b5ccc EBP: ca5b5c68 ESP: ca5b5c3c
[11237.307045]  DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068
[11237.307045] Process icmpv6fuzz (pid: 19951, ti=ca5b5000 task=c2aa0000 task.ti=ca5b5000)
[11237.307045] Stack:
[11237.307045]  c09d321a c071d473 00000939 00000360 ca7510c0 ca750f10 ca751270 ca751280
[11237.307045]  c098dafb cce2e620 c724c0cc ca5b5c74 c0692b30 ca5b5cd3 ca5b5c90 c071d473
[11237.307045]  0000003c ca5b5c90 cce2e620 cedc11b4 ca5b5ccc ca5b5ca0 c071d4c5 c724c0cc
[11237.307045] Call Trace:
[11237.307045]  [<c071d473>] ? ipv6_push_exthdr+0x26/0x55
[11237.307045]  [<c0692b30>] ? skb_push+0x2c/0x35
[11237.307045]  [<c071d473>] ? ipv6_push_exthdr+0x26/0x55
[11237.307045]  [<c071d4c5>] ? ipv6_push_frag_opts+0x23/0x29
[11237.307045]  [<c0701a8a>] ? ip6_push_pending_frames+0x1b2/0x39b
[11237.307045]  [<c07145b1>] ? rawv6_sendmsg+0xa84/0xb17
[11237.307045]  [<c013ec6d>] ? put_lock_stats+0xd/0x21
[11237.307045]  [<c013ec6d>] ? put_lock_stats+0xd/0x21
[11237.307045]  [<c013ed20>] ? lock_release_holdtime+0x9f/0xa7
[11237.307045]  [<c06db84a>] ? inet_sendmsg+0x40/0x4d
[11237.307045]  [<c068db41>] ? sock_sendmsg+0xce/0xe5
[11237.307045]  [<c013ec6d>] ? put_lock_stats+0xd/0x21
[11237.307045]  [<c013416c>] ? autoremove_wake_function+0x0/0x35
[11237.307045]  [<c0142df7>] ? lock_release_non_nested+0xb0/0x1f8
[11237.307045]  [<c017ccb3>] ? might_fault+0x4f/0x8b
[11237.307045]  [<c017ccb3>] ? might_fault+0x4f/0x8b
[11237.307045]  [<c068e4a1>] ? sys_sendto+0xa9/0xc8
[11237.307045]  [<c013ec6d>] ? put_lock_stats+0xd/0x21
[11237.307045]  [<c013ed20>] ? lock_release_holdtime+0x9f/0xa7
[11237.307045]  [<c07b2557>] ? sub_preempt_count+0xc0/0xd1
[11237.307045]  [<c013ec6d>] ? put_lock_stats+0xd/0x21
[11237.307045]  [<c013ed20>] ? lock_release_holdtime+0x9f/0xa7
[11237.307045]  [<c0142df7>] ? lock_release_non_nested+0xb0/0x1f8
[11237.307045]  [<c017ccb3>] ? might_fault+0x4f/0x8b
[11237.307045]  [<c068ec3d>] ? sys_socketcall+0xeb/0x180
[11237.307045]  [<c0102ea1>] ? sysenter_do_call+0x12/0x31
[11237.307045] Code: 0f 45 de 53 ff b0 94 00 00 00 ff b0 90 00 00 00 ff b0 9c 00 00 00 ff b0 98 00 00 00 52 ff 70 50 51 68 1a 32 9d c0 e8 6f 2e a9 ff <0f> 0b 83 c4 24 eb fe 55 89 e5 56 53 0f 1f 44 00 00 8b 70 14 bb 
[11237.307045] EIP: [<c06918e1>] skb_under_panic+0x3f/0x46 SS:ESP 0068:ca5b5c3c
[11237.374079] ---[ end trace 7188985726996093 ]---

(gdb) l *(ipv6_push_exthdr+0x26)
0xc071d473 is in ipv6_push_exthdr (net/ipv6/exthdrs.c:700).
695		*proto = NEXTHDR_ROUTING;
696	}
697	
698	static void ipv6_push_exthdr(struct sk_buff *skb, u8 *proto, u8 type, struct ipv6_opt_hdr *opt)
699	{
700		struct ipv6_opt_hdr *h = (struct ipv6_opt_hdr *)skb_push(skb, ipv6_optlen(opt));
701	
702		memcpy(h, opt, ipv6_optlen(opt));
703		h->nexthdr = *proto;
704		*proto = type;


----------------8<------------------------

/*
 * ICMPv6 or ICMPv4 socket fuzzer.
 *
 * Copyright (c) 2006, Clément Lecigne
 */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/param.h>
#include <net/if.h>
//#include <net/if_var.h>
#include <sys/uio.h>
//#include <netinet6/ip6_mroute.h>
//#include <netinet6/in6_var.h>


#define SIOCGETMIFCNT_IN6       SIOCPROTOPRIVATE        /* IP protocol privates */
#define SIOCGETSGCNT_IN6        (SIOCPROTOPRIVATE+1)
#define SIOCGETRPF      (SIOCPROTOPRIVATE+2)


/* functions */
unsigned int randaddr(void);
void randsoopt(int);
void randgoopt(int);
void randioctl(int);
void usage(char *);

/*
* boucle until we hit a valid socket option
*/
void randsoopt(int sock)
{
	unsigned int optval;
	int optlen, optname, level, ret, on = rand() % 2;
	do
	{
		switch (rand() % 5)
		{
			case 0:
				level = IPPROTO_IPV6;
				break;
			case 1:
				level = SOL_SOCKET;
				break;
			case 2:
				level = IPPROTO_RAW;
				break;
			case 3:
				level = rand() & 0xFF;
				break;
			case 4:
				level = IPPROTO_IP;
				break;
		}
		
		if (rand() % 6)
		{
			optlen = rand();
			optval = (unsigned int)randaddr();
		}
		else
		{
		/* 
			* In some cases, kernel excepts that
			* optlen == sizeof (int) and that's
			* the first bound checking.
			*/
			optlen = sizeof (int);
			on = rand();
			optval = (unsigned int)&on;
		}
		
		if (rand() % 8)
			optname = rand() % 255;
		else
			optname = rand();
#if 0
		/*
		 * anti well know FreeBSD mbufs exhaustion.
		 */
		if (optname == 25 || optname == IPV6_IPSEC_POLICY || 
				optname == IPV6_FW_ADD || optname == IPV6_FW_FLUSH
				|| optname == IPV6_FW_DEL || optname == IPV6_FW_ZERO)
			continue;
		/*printf("level : %d - optname : %d - optlen : %d\n", 
				level, optname, optlen);*/
#endif
		ret = setsockopt(sock, level, optname, (void *)optval, optlen);

	}while(ret == -1);
	return;
}


/*
* ioctl ipv6 socket fuzzer.
*/
void randioctl(int sock)
{
	unsigned long reqs[] = { SIOCGETSGCNT_IN6, SIOCGETMIFCNT_IN6,
		SIOCGETRPF};
/*
		GSCOPE6DEF, SIOCGLIFADDR, SIOCSIFPHYADDR_IN6, SIOCGIFNETMASK_IN6,
		SIOCAIFADDR_IN6, SIOCGIFDSTADDR_IN6, SIOCSIFALIFETIME_IN6, 
		SIOCGIFADDR_IN6, SIOCGIFDSTADDR_IN6, SIOCGIFNETMASK_IN6, SIOCGIFAFLAG_IN6,
		SIOCGIFSTAT_IN6, SIOCGIFSTAT_ICMP6, SIOCGIFALIFETIME_IN6, SIOCSIFALIFETIME_IN6,
		SIOCAIFADDR_IN6, SIOCDIFADDR_IN6 }; */
	unsigned int arg;
	int ret;
	unsigned long request;
	
	if (rand() % 8)
		request = reqs[rand() % (sizeof (reqs) / sizeof (reqs[0]))];
	else
		request = rand() + rand();
	if (rand() % 2)
	{
		arg = randaddr();
		ret = ioctl(sock, request, (caddr_t)arg);
	}
	else
	{
		arg = rand();
		ret = ioctl(sock, request, (int)arg);
	}
}


/*
* return a random address
*/
unsigned int randaddr(void)
{
	char *p = malloc(1);
	unsigned int heap = (unsigned int)p;
	free(p);
	switch (rand() % 4)
	{
		case 0:
			return (heap + (rand() & 0xFFF));
		case 1:
			return ((unsigned int)&heap + (rand() & 0xFFF));
		case 2:
			return (0xc0000000 + (rand() & 0xFFFF));
		case 3:
			return (rand());
	}
	return (0);
}


int main(int ac, char **av) 
{
	int32_t cc, s, occ, i, j, a, try, count, opts;
	u_int32_t seed, maxsize;
	u_int8_t ip6;
	char c, *buf;
	struct addrinfo *res, hints;
	struct sockaddr_in6 from;
	socklen_t fromlen;
	struct msghdr msg;
	struct cmsghdr *cmsg = NULL;
	struct iovec iov;
	
	/* default values */
	seed = getpid();
	count = 50;
	occ = 10000;
	maxsize = 4096;
	opts = 50;
	ip6 = 1;
	fromlen = sizeof(from);
	
	if (getuid())
	{
		fprintf(stderr, " - you must be root.\n");
		exit(EXIT_FAILURE);
	}
	
	while ((c = getopt(ac, av, "r:n:c:m:o:46")) != EOF)
	{
		switch (c)
		{
			case '6':
				ip6 = 1;
				break;
			case '4':
				ip6 = 0;
				break;
			case 'r':
				seed = atoi(optarg);
				break;
			case 'n':
				occ = atoi(optarg);
				break;
			case 'c':
				count = atoi(optarg);
				break;
			case 'm':
				maxsize = atoi(optarg);
				break;
			case 'o':
				opts = atoi(optarg);
				break;
			default:
				usage(av[0]);
				break;
		}
	}
	
	printf("seeding with %u\n", seed);
	srand(seed);

	buf = malloc(maxsize);
	if (buf == NULL)
	{
		printf("%s: out of memory.\n", av[0]);
		exit(EXIT_FAILURE);
	}

	memset(&hints, 0, sizeof(hints));
	hints.ai_flags = AI_CANONNAME;
	hints.ai_socktype = SOCK_RAW;
	
	if(ip6)
	{
		hints.ai_family = AF_INET6;
		hints.ai_protocol = IPPROTO_ICMPV6;
		getaddrinfo("::1", NULL, &hints, &res); 
	}
	else
	{
		hints.ai_family = AF_INET;
		hints.ai_protocol = IPPROTO_ICMP;
		getaddrinfo("127.0.0.1", NULL, &hints, &res);
	}

	for (i = 0; i < occ; i++)
	{
		printf(".\n");
		s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
		//cc = bind(s, res->ai_addr, res->ai_addrlen);


		for (j = 0; j < opts; j++)
		{
			randsoopt(s);
			//randgoopt(s);
			randioctl(s);

			for (a = 0; a < 32; a++)
				buf[a] = rand() % 255;

			try = 0;
			do
			{
				switch(rand() % 3)
				{
				case 0:
					cc = sendto(s, buf, rand() % maxsize, 0,
							(struct sockaddr *)res->ai_addr, res->ai_addrlen);
					break;
				case 1:
				case 2:
					msg.msg_controllen = (rand() % 2) ? rand() & maxsize : 0;
					if (msg.msg_controllen)
					{
						if (msg.msg_controllen < sizeof (struct cmsghdr))
							cmsg = (struct cmsghdr *)malloc(sizeof (struct cmsghdr));
						else
							cmsg = (struct cmsghdr *)malloc(msg.msg_controllen);
						if (cmsg == NULL) goto nocmsghdr;
						msg.msg_control = cmsg;
						cmsg->cmsg_level = (rand() % 2) ? IPPROTO_IPV6 : rand();
						cmsg->cmsg_type = (rand() % 2) ? rand() % 255 : rand();
						cmsg->cmsg_len = (rand() % 2) ? msg.msg_controllen : rand();
					}
					else
					{
nocmsghdr:
						msg.msg_control = (rand() % 5) ? NULL : (void*)randaddr();
						msg.msg_controllen = (rand() % 2) ? rand() : 0;
					}
					iov.iov_len = (rand() % 2) ? rand() : rand() & maxsize;
					iov.iov_base = (rand() % 2) ? (void*)randaddr() : &buf;
					msg.msg_iov = (rand() % 2) ? (void*)randaddr() : &iov;
					if (rand() % 5)
					{
						msg.msg_name = res->ai_addr;
						msg.msg_namelen = res->ai_addrlen;
					}
					else
					{
						msg.msg_name = (caddr_t)randaddr();
						msg.msg_namelen = rand();
					}
					msg.msg_flags = rand();
					cc = sendmsg (s, &msg, rand());
				}
				if (cmsg != NULL)
				{	
				//	free(cmsg);
				//	cmsg = NULL;
				}
				try++;
			} while(cc == -1 && try != count); 
			recvmsg(s, &msg, MSG_DONTWAIT);
		}
		close(s);
	}
	free(buf);
	freeaddrinfo(res);
	exit(EXIT_SUCCESS);
}

/* 
* usage
*/
void usage(char *prog)
{
	printf("usage: %s [-4] [-6] [-r seed] [-c sendto-timeout]\n"
		"          [-m maxsize] [-o maxsetsockopt] [-n occ]\n", prog);
	exit(EXIT_FAILURE);
}

             reply	other threads:[~2009-01-20 20:48 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-20 20:47 Eric Sesterhenn [this message]
2009-01-27  5:31 ` Deadlock with icmpv6fuzz David Miller
2009-01-27  7:53   ` Eric Sesterhenn
2009-01-28  9:35     ` Herbert Xu
2009-01-30  1:49       ` David Miller
2009-02-05 13:01         ` Herbert Xu
2009-02-05 14:31           ` Eric Sesterhenn
2009-02-05 22:24             ` Roland Dreier
2009-02-05 23:43               ` Herbert Xu
2009-02-06  8:50                 ` David Miller
2009-02-06  8:54                   ` Herbert Xu
2009-02-06  9:05                     ` David Miller
2009-02-06  9:22                       ` Herbert Xu
2009-02-06  9:27                         ` David Miller
2009-02-06 10:27                           ` Herbert Xu
2009-02-06 10:34                             ` Herbert Xu
2009-02-06 11:07                               ` David Miller
2009-02-09  5:03                                 ` Herbert Xu
2009-02-09  6:04                                   ` David Miller
2009-02-25  7:44                                   ` David Miller
2009-02-25  8:25                                     ` Herbert Xu
2009-02-06 11:05                             ` David Miller
2009-02-05 23:16           ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090120204743.GA25797@alice \
    --to=snakebyte@gmx.de \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.