patch-2.4.23 linux-2.4.23/net/ipv4/igmp.c

Next file: linux-2.4.23/net/ipv4/ip_gre.c
Previous file: linux-2.4.23/net/ipv4/icmp.c
Back to the patch index
Back to the overall index

diff -urN linux-2.4.22/net/ipv4/igmp.c linux-2.4.23/net/ipv4/igmp.c
@@ -285,8 +285,10 @@
 		return 0;
 	}
 	skb = alloc_skb(size + dev->hard_header_len + 15, GFP_ATOMIC);
-	if (skb == NULL)
+	if (skb == NULL) {
+		ip_rt_put(rt);
 		return 0;
+	}
 
 	skb->dst = &rt->u.dst;
 	skb->dev = dev;
@@ -1372,8 +1374,9 @@
 	sf_markstate(pmc);
 #endif
 	if (!delta) {
+		err = -EINVAL;
 		if (!pmc->sfcount[sfmode])
-			return -EINVAL;
+			goto out_unlock;
 		pmc->sfcount[sfmode]--;
 	}
 	err = 0;
@@ -1404,6 +1407,7 @@
 		igmp_ifc_event(pmc->interface);
 #endif
 	}
+out_unlock:
 	spin_unlock_bh(&pmc->lock);
 	return err;
 }

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)