]> git.proxmox.com Git - mirror_frr.git/commitdiff
Merge pull request #8772 from idryzhov/bfd-key-packed
authorRafael Zalamena <rzalamena@users.noreply.github.com>
Fri, 4 Jun 2021 13:42:21 +0000 (10:42 -0300)
committerGitHub <noreply@github.com>
Fri, 4 Jun 2021 13:42:21 +0000 (10:42 -0300)
bfdd: fix bfd key structure

bfdd/bfd.h

index d9d5d8cb5ea74b9c477d5034048d52bace7ab857..7d5b7887c7d821733f1ac443d9e2b4904086778d 100644 (file)
@@ -173,15 +173,26 @@ enum bfd_session_flags {
        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 {
        uint16_t family;
-       uint8_t mhop;
+       uint16_t mhop;
        struct in6_addr peer;
        struct in6_addr local;
        char ifname[MAXNAMELEN];
        char vrfname[MAXNAMELEN];
-};
+} __attribute__((packed));
 
 struct bfd_session_stats {
        uint64_t rx_ctrl_pkt;