[OLSR-users] Plugin development: how to avoid buffer/packet size overrun when olsr message is of dynamic length.

Christoffer Andersson (spam-protected)
Wed Jul 14 10:53:33 CEST 2004

I have looked through the entire code in the secure plugin and I cannot find any reference to
GETD_MAXMESSAGESIZE, or any maxmessagesize -= ...

Is there a remote chance that I have found a bug?  For the moment I cannot figure out
how you ensure that secure does not exceed the pck size when adding the signature at the end of pck.

Just to make sure I am looking the right places:

I have found the definitions of where you get the data and function pointers in olsrd_plugin.h/c.

Here you have for instance to get the add_ptf function....

olsr_plugin_io(GETF_ADD_PTF, &add_ptf, sizeof(add_ptf)))

I cannot find an entry for GETD_MAXMESSAGESIZE.

And there is no code in any of the files in the secure plugin using a variable starting with max (grep).

Anyways, since I cannot find the code, I will try to show what I think needs doing:

I need to add the following in olsrd_plugin.h

int *maxmessagesize;

I need to add the following in olsrd_plugin.c (the fetch_olsrd_data() method)

if( !olsr_plugin_io(GETD_MASMESSAGESIZE,
  maxmessagesize = NULL;
  retval = 0;

then in my olsrd_myplugin.c I must use the maxmessagesize -= mymessagesize;
where should this line be to make sure olsr initialises properly?
Should it go in the olsr_plugin_init() method together with the 
add_ptf(&add_signature); and similar statements?

Thanks for all help and don't let my questions ruin your vacation :D


-----Original Message-----
From: Andreas T√łnnesen [mailto:(spam-protected)]
Sent: 13. juli 2004 18:39
To: Christoffer Andersson
Cc: (spam-protected)
Subject: Re: [OLSR-users] Plugin development: how to avoid buffer/packet
size overrun when olsr message is of dynamic length.

Hei Christoffer,

My comments are inline.

> I am making a plugin where I am adding a packet transform function (add_ptf) to check a packet and add an extra olsr messge at the end.
> This ekstra olsr message checks the messages in the packet to build its own message.
> This olsr message is therefore dynamic in size.  So far I have come up with the following solution:
> Assume that I have to add data from every olsr message in the packet.
> Find out how much space my new olsr message needs if the packet contains the maximum possible number of the smallest messages in olsr (which is HELLO?).
> Limit the packet size so that I can always add my message in this scenario, hence never exceeding the packet size.
> 1. Is this a valid approach?

Yes. But the smallest message is the empty TC. Lets see if I can
remember this by heart:
message header 12 bytes + TC header 4 bytes.

> 2. I am struggling a bit in the code of the secure plugin to find out how you limited the packet size 
> to make sure that you always have room for the signature at the end of the packet.  I can tell that you 
> have defined a MAXMESSAGESIZE of 512, but I cannot see where or how you use this to tell olsr that it
> has to leave room for the signature to avoid packet buffer overrun, or max packet size overrun.

The maximum bytes olsrd will put in a OLSR packet is set by the global
variable maxmessagesize(not to be confused with the MAXMESSAGESIZE
symbol) defined in defs.h. The plugin can access this
variable trough the GETD__MAXMESSAGESIZE command. In the security
plugin you'll probably see something like:
maxmessagesize -= sizeof(signature_message);

This makes sure there is enough room left in the outputbuffer for the
signature message.

Hope this was of help!

- Andreas 

Andreas T√łnnesen((spam-protected))
UniK University Graduation Center
University of Oslo

More information about the Olsr-users mailing list