|
@@ -250,15 +250,15 @@ static bool opt_unrec(struct sk_buff *skb, __u32 offset)
|
|
|
return (*op & 0xC0) == 0x80;
|
|
|
}
|
|
|
|
|
|
-int icmpv6_push_pending_frames(struct sock *sk, struct flowi6 *fl6,
|
|
|
- struct icmp6hdr *thdr, int len)
|
|
|
+void icmpv6_push_pending_frames(struct sock *sk, struct flowi6 *fl6,
|
|
|
+ struct icmp6hdr *thdr, int len)
|
|
|
{
|
|
|
struct sk_buff *skb;
|
|
|
struct icmp6hdr *icmp6h;
|
|
|
|
|
|
skb = skb_peek(&sk->sk_write_queue);
|
|
|
if (!skb)
|
|
|
- goto out;
|
|
|
+ return;
|
|
|
|
|
|
icmp6h = icmp6_hdr(skb);
|
|
|
memcpy(icmp6h, thdr, sizeof(struct icmp6hdr));
|
|
@@ -286,8 +286,6 @@ int icmpv6_push_pending_frames(struct sock *sk, struct flowi6 *fl6,
|
|
|
tmp_csum);
|
|
|
}
|
|
|
ip6_push_pending_frames(sk);
|
|
|
-out:
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
struct icmpv6_msg {
|
|
@@ -437,7 +435,6 @@ static void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info,
|
|
|
int iif = 0;
|
|
|
int addr_type = 0;
|
|
|
int len;
|
|
|
- int err = 0;
|
|
|
u32 mark = IP6_REPLY_MARK(net, skb->mark);
|
|
|
|
|
|
if ((u8 *)hdr < skb->head ||
|
|
@@ -574,17 +571,16 @@ static void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info,
|
|
|
rcu_read_lock();
|
|
|
idev = __in6_dev_get(skb->dev);
|
|
|
|
|
|
- err = ip6_append_data(sk, icmpv6_getfrag, &msg,
|
|
|
- len + sizeof(struct icmp6hdr),
|
|
|
- sizeof(struct icmp6hdr),
|
|
|
- &ipc6, &fl6, (struct rt6_info *)dst,
|
|
|
- MSG_DONTWAIT, &sockc_unused);
|
|
|
- if (err) {
|
|
|
+ if (ip6_append_data(sk, icmpv6_getfrag, &msg,
|
|
|
+ len + sizeof(struct icmp6hdr),
|
|
|
+ sizeof(struct icmp6hdr),
|
|
|
+ &ipc6, &fl6, (struct rt6_info *)dst,
|
|
|
+ MSG_DONTWAIT, &sockc_unused)) {
|
|
|
ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTERRORS);
|
|
|
ip6_flush_pending_frames(sk);
|
|
|
} else {
|
|
|
- err = icmpv6_push_pending_frames(sk, &fl6, &tmp_hdr,
|
|
|
- len + sizeof(struct icmp6hdr));
|
|
|
+ icmpv6_push_pending_frames(sk, &fl6, &tmp_hdr,
|
|
|
+ len + sizeof(struct icmp6hdr));
|
|
|
}
|
|
|
rcu_read_unlock();
|
|
|
out_dst_release:
|
|
@@ -681,7 +677,6 @@ static void icmpv6_echo_reply(struct sk_buff *skb)
|
|
|
struct icmpv6_msg msg;
|
|
|
struct dst_entry *dst;
|
|
|
struct ipcm6_cookie ipc6;
|
|
|
- int err = 0;
|
|
|
u32 mark = IP6_REPLY_MARK(net, skb->mark);
|
|
|
struct sockcm_cookie sockc_unused = {0};
|
|
|
|
|
@@ -718,8 +713,7 @@ static void icmpv6_echo_reply(struct sk_buff *skb)
|
|
|
else if (!fl6.flowi6_oif)
|
|
|
fl6.flowi6_oif = np->ucast_oif;
|
|
|
|
|
|
- err = ip6_dst_lookup(net, sk, &dst, &fl6);
|
|
|
- if (err)
|
|
|
+ if (ip6_dst_lookup(net, sk, &dst, &fl6))
|
|
|
goto out;
|
|
|
dst = xfrm_lookup(net, dst, flowi6_to_flowi(&fl6), sk, 0);
|
|
|
if (IS_ERR(dst))
|
|
@@ -736,17 +730,16 @@ static void icmpv6_echo_reply(struct sk_buff *skb)
|
|
|
ipc6.dontfrag = np->dontfrag;
|
|
|
ipc6.opt = NULL;
|
|
|
|
|
|
- err = ip6_append_data(sk, icmpv6_getfrag, &msg, skb->len + sizeof(struct icmp6hdr),
|
|
|
- sizeof(struct icmp6hdr), &ipc6, &fl6,
|
|
|
- (struct rt6_info *)dst, MSG_DONTWAIT,
|
|
|
- &sockc_unused);
|
|
|
-
|
|
|
- if (err) {
|
|
|
+ if (ip6_append_data(sk, icmpv6_getfrag, &msg,
|
|
|
+ skb->len + sizeof(struct icmp6hdr),
|
|
|
+ sizeof(struct icmp6hdr), &ipc6, &fl6,
|
|
|
+ (struct rt6_info *)dst, MSG_DONTWAIT,
|
|
|
+ &sockc_unused)) {
|
|
|
__ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTERRORS);
|
|
|
ip6_flush_pending_frames(sk);
|
|
|
} else {
|
|
|
- err = icmpv6_push_pending_frames(sk, &fl6, &tmp_hdr,
|
|
|
- skb->len + sizeof(struct icmp6hdr));
|
|
|
+ icmpv6_push_pending_frames(sk, &fl6, &tmp_hdr,
|
|
|
+ skb->len + sizeof(struct icmp6hdr));
|
|
|
}
|
|
|
dst_release(dst);
|
|
|
out:
|