LIBBSD TCPDUMP

Gedare Bloom gedare at rtems.org
Sat Jul 1 15:34:05 UTC 2017


On Sat, Jul 1, 2017 at 10:01 AM, Kirspel, Kevin <Kevin-Kirspel at idexx.com> wrote:
> I get a crash when running the tcpdump command in LIBBSD.  It is due to the
> following structure
>
>
>
> struct stp_bpdu_ {
>
>     u_int8_t protocol_id[2];
>
>     u_int8_t protocol_version;
>
>     u_int8_t bpdu_type;
>
>     u_int8_t flags;
>
>     u_int8_t root_id[8];
>
>     u_int8_t root_path_cost[4];
>
>    u_int8_t bridge_id[8];
>
>     u_int8_t port_id[2];
>
>     u_int8_t message_age[2];
>
>     u_int8_t max_age[2];
>
>     u_int8_t hello_time[2];
>
>     u_int8_t forward_delay[2];
>
>     u_int8_t v1_length;
>
> };
>
>
>
> In the code, there is an access to the port_id field as follows:
> EXTRACT_16BITS(&stp_bpdu->port_id).  EXTRACT_16BITS calls ntohs() .  Since
> the address of “&stp_bpdu->port_id” is at an odd word (16 bit) boundary, an
> exception is generated.  What is the correct way to fix this?  I was going
> to update EXTRACT_16BITS to check for an odd boundary and fix it up before
> calling ntohs().
>

That would probably be a more portable fix than allowing unaligned
accesses. I think the alignment should be made to the CPU_ALIGNMENT
macro.


>
>
> Kevin Kirspel
>
> Electrical Engineer - Sr. Staff
>
> Idexx Roswell
>
> 235 Hembree Park Drive
>
> Roswell GA 30076
>
> Tel: (770)-510-4444 ext. 81642
>
> Direct: (770)-688-1642
>
> Fax: (770)-510-4445
>
>
>
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list