From 42841a1a873741d90db9892d7cf94147465081ef Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 10 Nov 2008 18:26:25 -0800 Subject: [PATCH] Don't oops in dp_output_control() for skbs with null ->dev. This shouldn't ordinarily happen, since normal packets are received from a real device, but some packets can be spontaneously generated within the switch and thus have null ->dev. (Possibly that is itself a bug that we should track down; not sure.) --- datapath/datapath.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/datapath/datapath.c b/datapath/datapath.c index e9d51a8d5..d4f332ee9 100644 --- a/datapath/datapath.c +++ b/datapath/datapath.c @@ -670,7 +670,6 @@ dp_output_control(struct datapath *dp, struct sk_buff *skb, * forward the whole packet? */ struct sk_buff *f_skb; struct ofp_packet_in *opi; - struct net_bridge_port *p; size_t fwd_len, opi_len; int err; @@ -686,8 +685,9 @@ dp_output_control(struct datapath *dp, struct sk_buff *skb, } opi->buffer_id = htonl(buffer_id); opi->total_len = htons(skb->len); - p = skb->dev->br_port; - opi->in_port = htons(p ? p->port_no : OFPP_LOCAL); + opi->in_port = htons(skb->dev && skb->dev->br_port + ? skb->dev->br_port->port_no + : OFPP_LOCAL); opi->reason = reason; opi->pad = 0; memcpy(opi->data, skb_mac_header(skb), fwd_len); -- 2.43.0