l2: avoid overflow read of mac address 87/35787/2
authorDamjan Marion <damarion@cisco.com>
Fri, 25 Mar 2022 15:20:16 +0000 (16:20 +0100)
committerBeno�t Ganne <bganne@cisco.com>
Fri, 25 Mar 2022 17:08:44 +0000 (17:08 +0000)
Type: improvement
Change-Id: I99d2c69ede39b3ba5604e1811ce12209c47f5caf
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/vnet/l2/l2_fib.h

index 202e2d9..e24d427 100644 (file)
@@ -240,29 +240,9 @@ l2fib_compute_hash_bucket (l2fib_entry_key_t * key)
 always_inline u64
 l2fib_make_key (const u8 * mac_address, u16 bd_index)
 {
-  u64 temp;
-
-  /*
-   * The mac address in memory is A:B:C:D:E:F
-   * The bd id in register is H:L
-   */
-#if CLIB_ARCH_IS_LITTLE_ENDIAN
-  /*
-   * Create the in-register key as F:E:D:C:B:A:H:L
-   * In memory the key is L:H:A:B:C:D:E:F
-   */
-  temp = CLIB_MEM_OVERFLOW_LOAD ((u64 *) mac_address) << 16;
-  temp = (temp & ~0xffff) | (u64) (bd_index);
-#else
-  /*
-   * Create the in-register key as H:L:A:B:C:D:E:F
-   * In memory the key is H:L:A:B:C:D:E:F
-   */
-  temp = CLIB_MEM_OVERFLOW_LOAD ((u64 *) mac_address) >> 16;
-  temp = temp | (((u64) bd_index) << 48);
-#endif
-
-  return temp;
+  l2fib_entry_key_t key = { .fields.bd_index = bd_index };
+  clib_memcpy_fast (&key.fields.mac, mac_address, sizeof (key.fields.mac));
+  return key.raw;
 }