silence l2fib_init() invalid read of size 2 found by address-sanitizer 82/8982/6
authorGabriel Ganne <gabriel.ganne@enea.com>
Tue, 24 Oct 2017 08:24:57 +0000 (10:24 +0200)
committerJohn Lo <loj@cisco.com>
Fri, 3 Nov 2017 14:12:40 +0000 (14:12 +0000)
l2fib_make_key() casts and reads the input 6-Bytes mac_address as u64,
therefore if the mac_address is declared with 6 Bytes only, address-sanitizer
rightly triggers an invalid read on the last two Bytes.

However, l2fib_make_key() does a 16 bits shift to discard those 2 values,
therefore, this invalid read is of no consequence (and so can be silenced safely).

Change-Id: I38646fe60073093d25cdf135185d4c96136d55d0
Signed-off-by: Gabriel Ganne <gabriel.ganne@enea.com>
src/vnet/l2/l2_fib.h

index 6346826..60c197f 100644 (file)
@@ -148,7 +148,12 @@ l2fib_compute_hash_bucket (l2fib_entry_key_t * key)
   return result % L2FIB_NUM_BUCKETS;
 }
 
-always_inline u64
+/**
+ * make address sanitizer skip this:
+ * The 6-Bytes mac-address is cast into an 8-Bytes u64, with 2 additional Bytes.
+ * l2fib_make_key() does read those two Bytes but does not use them.
+ */
+always_inline u64 __attribute__ ((no_sanitize_address))
 l2fib_make_key (u8 * mac_address, u16 bd_index)
 {
   u64 temp;