Merge pull request #8772 from idryzhov/bfd-key-packed

bfdd: fix bfd key structure
This commit is contained in:
Rafael Zalamena 2021-06-04 10:42:21 -03:00 committed by GitHub
commit 8f55a5f267
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -173,15 +173,26 @@ enum bfd_session_flags {
BFD_SESS_FLAG_PASSIVE = 1 << 10, /* Passive mode */ BFD_SESS_FLAG_PASSIVE = 1 << 10, /* Passive mode */
}; };
/* BFD session hash keys */ /*
* BFD session hash key.
*
* This structure must not have any padding bytes because their value is
* unspecified after the struct assignment. Even when all fields of two keys
* are the same, if the padding bytes are different, then the calculated hash
* value is different, and the hash lookup will fail.
*
* Currently, the structure fields are correctly aligned, and the "packed"
* attribute is added as a precaution. "family" and "mhop" fields are two-bytes
* to eliminate unaligned memory access to "peer" and "local".
*/
struct bfd_key { struct bfd_key {
uint16_t family; uint16_t family;
uint8_t mhop; uint16_t mhop;
struct in6_addr peer; struct in6_addr peer;
struct in6_addr local; struct in6_addr local;
char ifname[MAXNAMELEN]; char ifname[MAXNAMELEN];
char vrfname[MAXNAMELEN]; char vrfname[MAXNAMELEN];
}; } __attribute__((packed));
struct bfd_session_stats { struct bfd_session_stats {
uint64_t rx_ctrl_pkt; uint64_t rx_ctrl_pkt;