mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2026-01-03 16:13:15 +00:00
Fix bad hash calculation because of signed address
The addr[] was being used signed, but this causes hash calcultion to overflow. Originally reported as Debian bug 480173.
This commit is contained in:
parent
7b3d366e06
commit
7dec1bf88b
12
lib/utils.c
12
lib/utils.c
@ -518,13 +518,14 @@ const char *rt_addr_n2a(int af, int len, const void *addr, char *buf, int buflen
|
||||
struct namerec
|
||||
{
|
||||
struct namerec *next;
|
||||
const char *name;
|
||||
inet_prefix addr;
|
||||
char *name;
|
||||
};
|
||||
|
||||
static struct namerec *nht[256];
|
||||
#define NHASH 257
|
||||
static struct namerec *nht[NHASH];
|
||||
|
||||
char *resolve_address(const char *addr, int len, int af)
|
||||
static const char *resolve_address(const void *addr, int len, int af)
|
||||
{
|
||||
struct namerec *n;
|
||||
struct hostent *h_ent;
|
||||
@ -539,7 +540,7 @@ char *resolve_address(const char *addr, int len, int af)
|
||||
len = 4;
|
||||
}
|
||||
|
||||
hash = addr[len-1] ^ addr[len-2] ^ addr[len-3] ^ addr[len-4];
|
||||
hash = *(__u32 *)(addr + len - 4) % NHASH;
|
||||
|
||||
for (n = nht[hash]; n; n = n->next) {
|
||||
if (n->addr.family == af &&
|
||||
@ -573,7 +574,8 @@ const char *format_host(int af, int len, const void *addr,
|
||||
{
|
||||
#ifdef RESOLVE_HOSTNAMES
|
||||
if (resolve_hosts) {
|
||||
char *n;
|
||||
const char *n;
|
||||
|
||||
if (len <= 0) {
|
||||
switch (af) {
|
||||
case AF_INET:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user