diff options
author | 2006-09-16 11:35:18 +0000 | |
---|---|---|
committer | 2006-09-16 11:35:18 +0000 | |
commit | 7bb67f2090becb1b43bfd5dabe7418f15be40a0d (patch) | |
tree | a93368f38d790d69e6adff35cf93b9ef5154ad13 | |
parent | sync printing w/ sysctl and also add missing sensor types to the conf parser; deraadt@ ok (diff) | |
download | wireguard-openbsd-7bb67f2090becb1b43bfd5dabe7418f15be40a0d.tar.xz wireguard-openbsd-7bb67f2090becb1b43bfd5dabe7418f15be40a0d.zip |
Only interpret link state routing messages for the monitored carp interface.
memcpy the if_msghdr to avoid alignment problems.
OK hshoexer@, miod@, deraadt@
-rw-r--r-- | usr.sbin/sasyncd/carp.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/usr.sbin/sasyncd/carp.c b/usr.sbin/sasyncd/carp.c index 06b35b4c309..974ea923dff 100644 --- a/usr.sbin/sasyncd/carp.c +++ b/usr.sbin/sasyncd/carp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: carp.c,v 1.6 2006/09/01 01:13:25 mpf Exp $ */ +/* $OpenBSD: carp.c,v 1.7 2006/09/16 11:35:18 mpf Exp $ */ /* * Copyright (c) 2005 Håkan Olsson. All rights reserved. @@ -193,15 +193,21 @@ static void carp_read(void) { char msg[2048]; - struct if_msghdr *ifm = (struct if_msghdr *)&msg; + struct rt_msghdr *rtm = (struct rt_msghdr *)&msg; + struct if_msghdr ifm; int len; len = read(cfgstate.route_socket, msg, sizeof(msg)); - if (len >= sizeof(struct if_msghdr) && - ifm->ifm_version == RTM_VERSION && - ifm->ifm_type == RTM_IFINFO) - carp_update_state(carp_map_state(ifm->ifm_data.ifi_link_state)); + if (len < sizeof(struct rt_msghdr) || + rtm->rtm_version != RTM_VERSION || + rtm->rtm_type != RTM_IFINFO) + return; + + memcpy(&ifm, rtm, sizeof(ifm)); + + if (ifm.ifm_index == cfgstate.carp_ifindex) + carp_update_state(carp_map_state(ifm.ifm_data.ifi_link_state)); } void |