diff options
author | sam <sam@FreeBSD.org> | 2003-09-30 04:46:08 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2003-09-30 04:46:08 +0000 |
commit | d1d4c947ce1dc00069d3ebc7667f42ebd15add02 (patch) | |
tree | e69e397b08ceb0859fe952a0aca6ef40dc00ff1d /sys/netinet6/ip6_output.c | |
parent | 8a599ca7c0982d2714c3a7d8fd2553f6367d3208 (diff) | |
download | FreeBSD-src-d1d4c947ce1dc00069d3ebc7667f42ebd15add02.zip FreeBSD-src-d1d4c947ce1dc00069d3ebc7667f42ebd15add02.tar.gz |
Correct pfil_run_hooks return handling: if the return value is non-zero
then the mbuf has been consumed by a hook; otherwise beware of a null
mbuf return (gack). In particular the bridge was doing the wrong thing.
While in the ipv6 code make it's handling of pfil_run_hooks identical
to netbsd.
Pointed out by: Pyun YongHyeon <yongari@kt-is.co.kr>
Diffstat (limited to 'sys/netinet6/ip6_output.c')
-rw-r--r-- | sys/netinet6/ip6_output.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/sys/netinet6/ip6_output.c b/sys/netinet6/ip6_output.c index 7e81373..e03fd3b 100644 --- a/sys/netinet6/ip6_output.c +++ b/sys/netinet6/ip6_output.c @@ -926,11 +926,8 @@ skip_ipsec2:; /* * Run through list of hooks for output packets. */ - if (pfil_run_hooks(&inet6_pfil_hook, &m, ifp, PFIL_OUT) != 0) { - error = EHOSTUNREACH; - goto done; - } - if (m == NULL) + error = pfil_run_hooks(&inet6_pfil_hook, &m, ifp, PFIL_OUT); + if (error != 0 || m == NULL) goto done; ip6 = mtod(m, struct ip6_hdr *); #endif /* PFIL_HOOKS */ |