> On 12/16/2002 9:45 PM, Vincent Jardin wrote: > > > > With FreeBSD, there are many ways to create a recursive local encapsulation > > loop within the IPv4 and IPv6 stack. > ... > > There is a simple local solution that is used by gif_output() that is not > > protected by any mutex: > .. > > if (++called > max_gif_nesting) { > > log(LOG_NOTICE, > > "gif_output: recursively called too many times(%d)\n", > > called); > > m_freem(m); > > error = EIO; /* is there better errno? */ > > goto end; > > } > > > > I am wondering if a more generic solution could be found, however I do not > > have any idea yet ;-(
Since we now have m_tag support, we could implement the solution OpenBSD uses which catches actual loops instead of just refusing to nest more then a certain amount. See sys/net/if_gif.c rev 1.19. -- Brooks -- Any statement of the form "X is the one, true Y" is FALSE. PGP fingerprint 655D 519C 26A7 82E7 2529 9BF0 5D8E 8BE9 F238 1AD4
msg07896/pgp00000.pgp
Description: PGP signature