summaryrefslogtreecommitdiff
path: root/sys/netinet
diff options
context:
space:
mode:
authorAngelos D. Keromytis <angelos@cvs.openbsd.org>2001-02-28 05:27:38 +0000
committerAngelos D. Keromytis <angelos@cvs.openbsd.org>2001-02-28 05:27:38 +0000
commit4ef8ded04c2a484befe1ab2ac3f9695a3ce907c3 (patch)
tree4af9a7adb6f8a3e996b276c5fccc6074fd783e11 /sys/netinet
parente439b727f29610377324ef6a1b0bfdb43da19e8f (diff)
Handle failures more gracefully.
Diffstat (limited to 'sys/netinet')
-rw-r--r--sys/netinet/ip_spd.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/sys/netinet/ip_spd.c b/sys/netinet/ip_spd.c
index bdc25c1fc2a..d68138b869e 100644
--- a/sys/netinet/ip_spd.c
+++ b/sys/netinet/ip_spd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_spd.c,v 1.10 2001/02/28 04:16:57 angelos Exp $ */
+/* $OpenBSD: ip_spd.c,v 1.11 2001/02/28 05:27:37 angelos Exp $ */
/*
* The author of this code is Angelos D. Keromytis (angelos@cis.upenn.edu)
@@ -872,10 +872,7 @@ ipsp_clear_acquire(struct tdb *tdb)
case IPSP_DIRECTION_OUT:
ip = mtod(ipa->ipa_packet, struct ip *);
if (ipa->ipa_packet->m_len < sizeof(struct ip))
- {
- m_freem(ipa->ipa_packet);
- break;
- }
+ break;
/* Same as in ip_output() -- massage the header */
ip->ip_len = htons((u_short) ip->ip_len);
@@ -893,9 +890,10 @@ ipsp_clear_acquire(struct tdb *tdb)
if (IF_QFULL(ifq))
{
IF_DROP(ifq);
- m_freem(ipa->ipa_packet);
+ break;
}
IF_ENQUEUE(ifq, ipa->ipa_packet);
+ ipa->ipa_packet = NULL;
schednetisr(NETISR_IP);
splx(s);
break;
@@ -921,9 +919,10 @@ ipsp_clear_acquire(struct tdb *tdb)
if (IF_QFULL(ifq))
{
IF_DROP(ifq);
- m_freem(ipa->ipa_packet);
+ break;
}
IF_ENQUEUE(ifq, ipa->ipa_packet);
+ ipa->ipa_packet = NULL;
schednetisr(NETISR_IPV6);
splx(s);
break;
@@ -1002,9 +1001,11 @@ ipsp_acquire_sa(struct ipsec_policy *ipo, union sockaddr_union *gw,
/* Check whether request has been made already. */
if ((ipa = ipsp_pending_acquire(gw)) != NULL)
{
- if (ipa->ipa_packet)
- m_freem(ipa->ipa_packet);
- ipa->ipa_packet = m_copym2(m, 0, M_COPYALL, M_DONTWAIT);
+ if (ipa->ipa_packet && m)
+ {
+ m_freem(ipa->ipa_packet);
+ ipa->ipa_packet = m_copym2(m, 0, M_COPYALL, M_DONTWAIT);
+ }
return 0;
}