diff options
author | kbyanc <kbyanc@FreeBSD.org> | 2002-05-07 22:14:06 +0000 |
---|---|---|
committer | kbyanc <kbyanc@FreeBSD.org> | 2002-05-07 22:14:06 +0000 |
commit | cc607e6c2d164e9cb79d2fdec151a8c3a151be83 (patch) | |
tree | 1011805115056aee5a327edbdc2edbd88f8dd3e5 /sys/net/iso88025.h | |
parent | 890d39a38cddebc8d4ce58feba2c0be1ee5e44f6 (diff) | |
download | FreeBSD-src-cc607e6c2d164e9cb79d2fdec151a8c3a151be83.zip FreeBSD-src-cc607e6c2d164e9cb79d2fdec151a8c3a151be83.tar.gz |
Move ISO88025 source routing information into sockaddr_dl's sdl_data
field. This returns the sdl_data field to a variable-length field. More
importantly, this prevents a easily-reproduceable data-corruption bug when
the interface name plus the hardware address exceed the sdl_data field's
original 12 byte limit. However, token-ring interfaces may still overflow
the new sdl_data field's 46 byte limit if the interface name exceeds 6
characters (since 6 characters for interface name plus 6 for hardware
address plus 34 for source routing = the size of sdl_data). Further
refinements could overcome this limitation but would break binary
compatibility; this commit only addresses fixing the bug for
commonly-occuring cases without breaking binary compatibility with the
intention that the functionality can be MFC'ed to -stable.
See message ID's (both send to -arch):
20020421013332.F87395-100000@gateway.posi.net
20020430181359.G11009-300000@gateway.posi.net
for a more thorough description of the bug addressed and how to
reproduce it.
Approved by: silence on -arch and -net
Sponsored by: NTT Multimedia Communications Labs
MFC after: 1 week
Diffstat (limited to 'sys/net/iso88025.h')
-rw-r--r-- | sys/net/iso88025.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/net/iso88025.h b/sys/net/iso88025.h index e30193e..aad8d54 100644 --- a/sys/net/iso88025.h +++ b/sys/net/iso88025.h @@ -109,6 +109,15 @@ struct iso88025_sockaddr_data { u_char fc; }; +struct iso88025_sockaddr_dl_data { + u_short trld_rcf; + u_short *trld_route[RIF_MAX_LEN]; +}; + +#define SDL_ISO88025(s) ((struct iso88025_sockaddr_dl_data *) \ + ((s)->sdl_data + min((s)->sdl_nlen + \ + (s)->sdl_alen + (s)->sdl_slen, 12))) + /* * Structure of a 48-bit iso 802.5 address. * ( We could also add the 16 bit addresses as a union) |