aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabriel Ganne <gabriel.ganne@enea.com>2017-10-24 10:24:57 +0200
committerJohn Lo <loj@cisco.com>2017-11-03 14:12:40 +0000
commita30d903956d387b9c5e97f4b50d1166361fb33da (patch)
tree6aa59b2a8778074d298fc2a07c2a3fbc9dabb72e
parentef5d5aa2f168d7964076bcf74b0da249b3e0cd23 (diff)
silence l2fib_init() invalid read of size 2 found by address-sanitizer
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>
-rw-r--r--src/vnet/l2/l2_fib.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/vnet/l2/l2_fib.h b/src/vnet/l2/l2_fib.h
index 6346826ee99..60c197f2a57 100644
--- a/src/vnet/l2/l2_fib.h
+++ b/src/vnet/l2/l2_fib.h
@@ -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;