[Xorp-cvs] XORP cvs commit: xorp/libxorp

Pavlin Radoslavov pavlin@icir.org
Tue, 20 Dec 2005 23:51:36 -0800


> It looks like the problem only occurs on xorp13 the AMD64 machine.

Intersting. I remember that the XLOG stuff was (suppose to be)
working when the result message is larger than the initial 1025
bytes so I was surprised when you said it doesn't work for large
messages.

Later I will test it on the same OS as xorp13, but on an i386
architecture to see whether it is an OS issue.

Pavlin


> 
>    Atanu.
> 
> >>>>> "Atanu" == Atanu Ghosh <atanu@ICSI.Berkeley.EDU> writes:
> 
>     Atanu> The function x_vasprintf takes printf style arguments
>     Atanu> (varargs) and returns a malloc'd buffer with all the
>     Atanu> output. Internally this function starts with a buffer of size
>     Atanu> 1025, it then calls vsnprintf with the buffer. If the buffer
>     Atanu> is not large enough a new buffer is allocated and a second
>     Atanu> try is made to format the arguments. The problem is that in
>     Atanu> the second and subsequent calls to vnsprintf the varargs
>     Atanu> pointer is in the wrong place. I therefore used va_copy to
>     Atanu> pass the same varargs pointer to vsnprintf every time.
> 
>     Atanu> I saw the problem when tracing BGP an update message packed
>     Atanu> with NLRIs required a buffer of 21060 bytes. The vsnprintf
>     Atanu> routine ends up accessing parts of that stack that it
>     Atanu> shouldn't.
> 
>     Atanu> I should have guessed that va_copy was new. I'll fix the
>     Atanu> problem in x_asprintf.
> 
>     Atanu>       Atanu.
> 
> >>>>> "Pavlin" == Pavlin Radoslavov <pavlin@icir.org> writes:
> 
>     >>> CVSROOT: /usr/local/www/data/cvs Module name: xorp Changes by:
>     >>> atanu@xorpc.icir.org 2005-12-21 01:24:47 UTC
>     >>> 
>     >>> XORP CVS repository
>     >>> 
>     >>> 
>     >>> Modified files: libxorp xlog.c
>     >>> 
>     >>> Log message: Take a copy of the variable arguments so they can
>     >>> be used multiple times.
> 
>     Pavlin> Introducing va_copy() breaks the compilation on FreeBSD-4.10
>     Pavlin> with the default compiler (gcc-2.95.4):
> 
>     Pavlin> xlog.c: In function `x_vasprintf': xlog.c:1162: warning:
>     Pavlin> implicit declaration of function `va_copy' gmake[3]: ***
>     Pavlin> [xlog.lo] Error 1
> 
>     Pavlin> Can you give an example where the original implementation
>     Pavlin> fails.
> 
>     Pavlin> Pavlin
> 
>     >>> Also fix a possible double free issue which could never happen.
>     >>> 
>     >>> Revision Changes Path 1.13 +5 -2; commitid: af7343a8aede7ea6;
>     >>> xorp/libxorp/xlog.c
>     >>> _______________________________________________ Xorp-cvs mailing
>     >>> list Xorp-cvs@icir.org
>     >>> http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-cvs
> 
>     Atanu> _______________________________________________ Xorp-cvs
>     Atanu> mailing list Xorp-cvs@icir.org
>     Atanu> http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-cvs
> _______________________________________________
> Xorp-cvs mailing list
> Xorp-cvs@icir.org
> http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-cvs