Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4251320f authored by Ville Nuorvala's avatar Ville Nuorvala Committed by David S. Miller
Browse files

[IPV6]: Make sure error handling is done when calling ip6_route_output().



As ip6_route_output() never returns NULL, error checking must be done by
looking at dst->error in stead of comparing dst against NULL.

Signed-off-by: default avatarVille Nuorvala <vnuorval@tcs.hut.fi>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 23c435f7
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -25,12 +25,14 @@
static struct dst_ops xfrm6_dst_ops;
static struct xfrm_policy_afinfo xfrm6_policy_afinfo;

static int xfrm6_dst_lookup(struct xfrm_dst **dst, struct flowi *fl)
static int xfrm6_dst_lookup(struct xfrm_dst **xdst, struct flowi *fl)
{
	int err = 0;
	*dst = (struct xfrm_dst*)ip6_route_output(NULL, fl);
	if (!*dst)
		err = -ENETUNREACH;
	struct dst_entry *dst = ip6_route_output(NULL, fl);
	int err = dst->error;
	if (!err)
		*xdst = (struct xfrm_dst *) dst;
	else
		dst_release(dst);
	return err;
}

+5 −5
Original line number Diff line number Diff line
@@ -215,18 +215,18 @@ static struct dst_entry *sctp_v6_get_dst(struct sctp_association *asoc,
	}

	dst = ip6_route_output(NULL, &fl);
	if (dst) {
	if (!dst->error) {
		struct rt6_info *rt;
		rt = (struct rt6_info *)dst;
		SCTP_DEBUG_PRINTK(
			"rt6_dst:" NIP6_FMT " rt6_src:" NIP6_FMT "\n",
			NIP6(rt->rt6i_dst.addr), NIP6(rt->rt6i_src.addr));
	} else {
		SCTP_DEBUG_PRINTK("NO ROUTE\n");
	}

		return dst;
	}
	SCTP_DEBUG_PRINTK("NO ROUTE\n");
	dst_release(dst);
	return NULL;
}

/* Returns the number of consecutive initial bits that match in the 2 ipv6
 * addresses.