|
@@ -2667,10 +2667,6 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh)
|
|
|
skb_reset_mac_header(skb);
|
|
|
skb_reset_network_header(skb);
|
|
|
|
|
|
- /* Bugfix: need to give ip_route_input enough of an IP header to not gag. */
|
|
|
- ip_hdr(skb)->protocol = IPPROTO_ICMP;
|
|
|
- skb_reserve(skb, MAX_HEADER + sizeof(struct iphdr));
|
|
|
-
|
|
|
src = tb[RTA_SRC] ? nla_get_in_addr(tb[RTA_SRC]) : 0;
|
|
|
dst = tb[RTA_DST] ? nla_get_in_addr(tb[RTA_DST]) : 0;
|
|
|
iif = tb[RTA_IIF] ? nla_get_u32(tb[RTA_IIF]) : 0;
|
|
@@ -2680,6 +2676,15 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh)
|
|
|
else
|
|
|
uid = (iif ? INVALID_UID : current_uid());
|
|
|
|
|
|
+ /* Bugfix: need to give ip_route_input enough of an IP header to
|
|
|
+ * not gag.
|
|
|
+ */
|
|
|
+ ip_hdr(skb)->protocol = IPPROTO_UDP;
|
|
|
+ ip_hdr(skb)->saddr = src;
|
|
|
+ ip_hdr(skb)->daddr = dst;
|
|
|
+
|
|
|
+ skb_reserve(skb, MAX_HEADER + sizeof(struct iphdr));
|
|
|
+
|
|
|
memset(&fl4, 0, sizeof(fl4));
|
|
|
fl4.daddr = dst;
|
|
|
fl4.saddr = src;
|