aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2021-02-23 22:31:07 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2021-02-23 22:40:01 +0000
commit9c4a8d24f0ffd5243fa5c6fe27178f669f16d1f5 (patch)
tree6045555119ee248aa4e726567813effea3b4c1bc
parentbbacb7ce72956a41c0daeefe875e5209d87c11ba (diff)
downloadsrc-9c4a8d24f0ffd5243fa5c6fe27178f669f16d1f5.tar.gz
src-9c4a8d24f0ffd5243fa5c6fe27178f669f16d1f5.zip
Fix nd6 rib_action() handling.
rib_action() guarantees valid rc filling IFF it returns without error. Check rib_action() return code instead of checking rc fields. PR: 253800 Reported by: Frederic Denis <freebsdml@hecian.net> MFC after: immediately
-rw-r--r--sys/netinet6/nd6_rtr.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/sys/netinet6/nd6_rtr.c b/sys/netinet6/nd6_rtr.c
index eca704dc2843..51b831a956bc 100644
--- a/sys/netinet6/nd6_rtr.c
+++ b/sys/netinet6/nd6_rtr.c
@@ -698,12 +698,11 @@ defrouter_addreq(struct nd_defrouter *new)
NET_EPOCH_ASSERT();
error = rib_action(fibnum, RTM_ADD, &info, &rc);
- if (rc.rc_rt != NULL) {
+ if (error == 0) {
struct nhop_object *nh = nhop_select(rc.rc_nh_new, 0);
rt_routemsg(RTM_ADD, rc.rc_rt, nh, fibnum);
- }
- if (error == 0)
new->installed = 1;
+ }
}
/*
@@ -719,6 +718,7 @@ defrouter_delreq(struct nd_defrouter *dr)
struct rib_cmd_info rc;
struct epoch_tracker et;
unsigned int fibnum;
+ int error;
bzero(&def, sizeof(def));
bzero(&mask, sizeof(mask));
@@ -737,8 +737,8 @@ defrouter_delreq(struct nd_defrouter *dr)
info.rti_info[RTAX_NETMASK] = (struct sockaddr *)&mask;
NET_EPOCH_ENTER(et);
- rib_action(fibnum, RTM_DELETE, &info, &rc);
- if (rc.rc_rt != NULL) {
+ error = rib_action(fibnum, RTM_DELETE, &info, &rc);
+ if (error == 0) {
struct nhop_object *nh = nhop_select(rc.rc_nh_old, 0);
rt_routemsg(RTM_DELETE, rc.rc_rt, nh, fibnum);
}