There is an improper check for valid message size, which may lead to
stack overflow and buffer leaks to log when a large message is received.
Thanks to Daniel McCarney for bugreport and analysis.
return 1;
/* Handle proper message */
- if ((msg_len > 255) && (msg_len + 1 > len))
+ if (msg_len + 1 > len)
return 0;
/* Some elementary cleanup */
void
bgp_log_error(struct bgp_proto *p, u8 class, char *msg, unsigned code, unsigned subcode, byte *data, unsigned len)
{
- byte argbuf[256], *t = argbuf;
+ byte argbuf[256+16], *t = argbuf;
unsigned i;
/* Don't report Cease messages generated by myself */