mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
calipso: hash the cache key, not the option start, in calipso_cache_add()
calipso_cache_add() stores calipso_ptr + 2 as the cache key, but
computes entry->hash over calipso_ptr, i.e. starting two bytes earlier
at the option type and length. calipso_opt_getattr() looks entries up
with calipso_cache_check(calipso + 2, calipso[1], ...), which hashes the
key itself.
The two hashes only match on a jhash collision, so the CALIPSO label
cache never hits and every labelled packet takes the full DOI lookup and
category conversion path. The memcmp() on the key keeps lookups
correct, so this is a performance bug only.
Hash the stored key, as cipso_v4_cache_add() does for CIPSO.
Fixes: 4fee5242bf ("calipso: Add a label cache.")
Signed-off-by: Joas Antonio dos Santos <joasantonio108@gmail.com>
Assisted-by: Claude:claude-opus-5-5
Reviewed-by: Daniel Machon <daniel.machon@microchip.com>
Link: https://patch.msgid.link/179138670045.80227.16155454353416856947@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
0b3fc7fe6f
commit
d538cc3ec0
|
|
@ -283,7 +283,7 @@ static int calipso_cache_add(const unsigned char *calipso_ptr,
|
|||
goto cache_add_failure;
|
||||
}
|
||||
entry->key_len = calipso_ptr_len;
|
||||
entry->hash = calipso_map_cache_hash(calipso_ptr, calipso_ptr_len);
|
||||
entry->hash = calipso_map_cache_hash(entry->key, calipso_ptr_len);
|
||||
refcount_inc(&secattr->cache->refcount);
|
||||
entry->lsm_data = secattr->cache;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user