From 5db4cdaab5ffcb1cc922f9503d3b9ae0bc12c8e1 Mon Sep 17 00:00:00 2001 From: tedu Date: Thu, 18 Dec 2014 19:26:46 +0000 Subject: [PATCH] simple to use siphash here. ok deraadt --- usr.sbin/ospfd/lsupdate.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/usr.sbin/ospfd/lsupdate.c b/usr.sbin/ospfd/lsupdate.c index 273b88ad1e3..41a10a6412c 100644 --- a/usr.sbin/ospfd/lsupdate.c +++ b/usr.sbin/ospfd/lsupdate.c @@ -1,4 +1,4 @@ -/* $OpenBSD: lsupdate.c,v 1.41 2013/01/17 09:06:35 markus Exp $ */ +/* $OpenBSD: lsupdate.c,v 1.42 2014/12/18 19:26:46 tedu Exp $ */ /* * Copyright (c) 2005 Claudio Jeker @@ -18,13 +18,13 @@ */ #include -#include #include #include #include #include #include +#include #include "ospf.h" #include "ospfd.h" @@ -528,6 +528,8 @@ struct lsa_cache { u_int32_t hashmask; } lsacache; +SIPHASH_KEY lsacachekey; + struct lsa_ref *lsa_cache_look(struct lsa_hdr *); void @@ -543,10 +545,17 @@ lsa_cache_init(u_int32_t hashsize) for (i = 0; i < hs; i++) LIST_INIT(&lsacache.hashtbl[i]); + arc4random_buf(&lsacachekey, sizeof(lsacachekey)); lsacache.hashmask = hs - 1; } +uint32_t +lsa_hash_hdr(const struct lsa_hdr *hdr) +{ + return SipHash24(&lsacachekey, hdr, sizeof(*hdr)); +} + struct lsa_ref * lsa_cache_add(void *data, u_int16_t len) { @@ -573,8 +582,7 @@ lsa_cache_add(void *data, u_int16_t len) ref->len = len; ref->refcnt = 1; - head = &lsacache.hashtbl[hash32_buf(&ref->hdr, sizeof(ref->hdr), - HASHINIT) & lsacache.hashmask]; + head = &lsacache.hashtbl[lsa_hash_hdr(&ref->hdr) & lsacache.hashmask]; LIST_INSERT_HEAD(head, ref, entry); return (ref); } @@ -612,8 +620,7 @@ lsa_cache_look(struct lsa_hdr *lsa_hdr) struct lsa_cache_head *head; struct lsa_ref *ref; - head = &lsacache.hashtbl[hash32_buf(lsa_hdr, sizeof(*lsa_hdr), - HASHINIT) & lsacache.hashmask]; + head = &lsacache.hashtbl[lsa_hash_hdr(lsa_hdr) & lsacache.hashmask]; LIST_FOREACH(ref, head, entry) { if (memcmp(&ref->hdr, lsa_hdr, sizeof(*lsa_hdr)) == 0) -- 2.20.1