diff options
author | Andrey V. Elsukov <ae@FreeBSD.org> | 2015-03-12 14:55:33 +0000 |
---|---|---|
committer | Andrey V. Elsukov <ae@FreeBSD.org> | 2015-03-12 14:55:33 +0000 |
commit | b57d97215ee60209c5fbbb1a1b26be6307e6d7e7 (patch) | |
tree | c26133fb383a32c1d0a177b6ac2b77001631a392 /sys/net/if.c | |
parent | edf3c81a5cfd45dcebf1c0fc08148a0674928fbf (diff) | |
download | src-b57d97215ee60209c5fbbb1a1b26be6307e6d7e7.tar.gz src-b57d97215ee60209c5fbbb1a1b26be6307e6d7e7.zip |
Add if_input_default() method, that will be used for if_input
initialization, when no input method specified before if_attach().
This prevents panics when if_input() method called directly e.g.
from bpf(4) code.
PR: 192426
Reviewed by: glebius
MFC after: 1 week
Notes
Notes:
svn path=/head/; revision=279920
Diffstat (limited to 'sys/net/if.c')
-rw-r--r-- | sys/net/if.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/net/if.c b/sys/net/if.c index 0c8d90223ba6..9d56803863ee 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -160,6 +160,7 @@ static void if_attachdomain1(struct ifnet *); static int ifconf(u_long, caddr_t); static void if_freemulti(struct ifmultiaddr *); static void if_grow(void); +static void if_input_default(struct ifnet *, struct mbuf *); static void if_route(struct ifnet *, int flag, int fam); static int if_setflag(struct ifnet *, int, int, int *, int); static int if_transmit(struct ifnet *ifp, struct mbuf *m); @@ -665,6 +666,8 @@ if_attach_internal(struct ifnet *ifp, int vmove, struct if_clone *ifc) ifp->if_transmit = if_transmit; ifp->if_qflush = if_qflush; } + if (ifp->if_input == NULL) + ifp->if_input = if_input_default; if (!vmove) { #ifdef MAC @@ -3516,6 +3519,13 @@ if_transmit(struct ifnet *ifp, struct mbuf *m) return (error); } +static void +if_input_default(struct ifnet *ifp __unused, struct mbuf *m) +{ + + m_freem(m); +} + int if_handoff(struct ifqueue *ifq, struct mbuf *m, struct ifnet *ifp, int adjust) { |