Merge tag 'fsverity-for-linus' of git://git.kernel.org/pub/scm/fs/fsverity/linux
[platform/kernel/linux-rpi.git] / net / ipv6 / icmp.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *      Internet Control Message Protocol (ICMPv6)
4  *      Linux INET6 implementation
5  *
6  *      Authors:
7  *      Pedro Roque             <roque@di.fc.ul.pt>
8  *
9  *      Based on net/ipv4/icmp.c
10  *
11  *      RFC 1885
12  */
13
14 /*
15  *      Changes:
16  *
17  *      Andi Kleen              :       exception handling
18  *      Andi Kleen                      add rate limits. never reply to a icmp.
19  *                                      add more length checks and other fixes.
20  *      yoshfuji                :       ensure to sent parameter problem for
21  *                                      fragments.
22  *      YOSHIFUJI Hideaki @USAGI:       added sysctl for icmp rate limit.
23  *      Randy Dunlap and
24  *      YOSHIFUJI Hideaki @USAGI:       Per-interface statistics support
25  *      Kazunori MIYAZAWA @USAGI:       change output process to use ip6_append_data
26  */
27
28 #define pr_fmt(fmt) "IPv6: " fmt
29
30 #include <linux/module.h>
31 #include <linux/errno.h>
32 #include <linux/types.h>
33 #include <linux/socket.h>
34 #include <linux/in.h>
35 #include <linux/kernel.h>
36 #include <linux/sockios.h>
37 #include <linux/net.h>
38 #include <linux/skbuff.h>
39 #include <linux/init.h>
40 #include <linux/netfilter.h>
41 #include <linux/slab.h>
42
43 #ifdef CONFIG_SYSCTL
44 #include <linux/sysctl.h>
45 #endif
46
47 #include <linux/inet.h>
48 #include <linux/netdevice.h>
49 #include <linux/icmpv6.h>
50
51 #include <net/ip.h>
52 #include <net/sock.h>
53
54 #include <net/ipv6.h>
55 #include <net/ip6_checksum.h>
56 #include <net/ping.h>
57 #include <net/protocol.h>
58 #include <net/raw.h>
59 #include <net/rawv6.h>
60 #include <net/seg6.h>
61 #include <net/transp_v6.h>
62 #include <net/ip6_route.h>
63 #include <net/addrconf.h>
64 #include <net/icmp.h>
65 #include <net/xfrm.h>
66 #include <net/inet_common.h>
67 #include <net/dsfield.h>
68 #include <net/l3mdev.h>
69
70 #include <linux/uaccess.h>
71
72 static DEFINE_PER_CPU(struct sock *, ipv6_icmp_sk);
73
74 static int icmpv6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
75                        u8 type, u8 code, int offset, __be32 info)
76 {
77         /* icmpv6_notify checks 8 bytes can be pulled, icmp6hdr is 8 bytes */
78         struct icmp6hdr *icmp6 = (struct icmp6hdr *) (skb->data + offset);
79         struct net *net = dev_net(skb->dev);
80
81         if (type == ICMPV6_PKT_TOOBIG)
82                 ip6_update_pmtu(skb, net, info, skb->dev->ifindex, 0, sock_net_uid(net, NULL));
83         else if (type == NDISC_REDIRECT)
84                 ip6_redirect(skb, net, skb->dev->ifindex, 0,
85                              sock_net_uid(net, NULL));
86
87         if (!(type & ICMPV6_INFOMSG_MASK))
88                 if (icmp6->icmp6_type == ICMPV6_ECHO_REQUEST)
89                         ping_err(skb, offset, ntohl(info));
90
91         return 0;
92 }
93
94 static int icmpv6_rcv(struct sk_buff *skb);
95
96 static const struct inet6_protocol icmpv6_protocol = {
97         .handler        =       icmpv6_rcv,
98         .err_handler    =       icmpv6_err,
99         .flags          =       INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
100 };
101
102 /* Called with BH disabled */
103 static struct sock *icmpv6_xmit_lock(struct net *net)
104 {
105         struct sock *sk;
106
107         sk = this_cpu_read(ipv6_icmp_sk);
108         if (unlikely(!spin_trylock(&sk->sk_lock.slock))) {
109                 /* This can happen if the output path (f.e. SIT or
110                  * ip6ip6 tunnel) signals dst_link_failure() for an
111                  * outgoing ICMP6 packet.
112                  */
113                 return NULL;
114         }
115         sock_net_set(sk, net);
116         return sk;
117 }
118
119 static void icmpv6_xmit_unlock(struct sock *sk)
120 {
121         sock_net_set(sk, &init_net);
122         spin_unlock(&sk->sk_lock.slock);
123 }
124
125 /*
126  * Figure out, may we reply to this packet with icmp error.
127  *
128  * We do not reply, if:
129  *      - it was icmp error message.
130  *      - it is truncated, so that it is known, that protocol is ICMPV6
131  *        (i.e. in the middle of some exthdr)
132  *
133  *      --ANK (980726)
134  */
135
136 static bool is_ineligible(const struct sk_buff *skb)
137 {
138         int ptr = (u8 *)(ipv6_hdr(skb) + 1) - skb->data;
139         int len = skb->len - ptr;
140         __u8 nexthdr = ipv6_hdr(skb)->nexthdr;
141         __be16 frag_off;
142
143         if (len < 0)
144                 return true;
145
146         ptr = ipv6_skip_exthdr(skb, ptr, &nexthdr, &frag_off);
147         if (ptr < 0)
148                 return false;
149         if (nexthdr == IPPROTO_ICMPV6) {
150                 u8 _type, *tp;
151                 tp = skb_header_pointer(skb,
152                         ptr+offsetof(struct icmp6hdr, icmp6_type),
153                         sizeof(_type), &_type);
154
155                 /* Based on RFC 8200, Section 4.5 Fragment Header, return
156                  * false if this is a fragment packet with no icmp header info.
157                  */
158                 if (!tp && frag_off != 0)
159                         return false;
160                 else if (!tp || !(*tp & ICMPV6_INFOMSG_MASK))
161                         return true;
162         }
163         return false;
164 }
165
166 static bool icmpv6_mask_allow(struct net *net, int type)
167 {
168         if (type > ICMPV6_MSG_MAX)
169                 return true;
170
171         /* Limit if icmp type is set in ratemask. */
172         if (!test_bit(type, net->ipv6.sysctl.icmpv6_ratemask))
173                 return true;
174
175         return false;
176 }
177
178 static bool icmpv6_global_allow(struct net *net, int type)
179 {
180         if (icmpv6_mask_allow(net, type))
181                 return true;
182
183         if (icmp_global_allow())
184                 return true;
185
186         __ICMP_INC_STATS(net, ICMP_MIB_RATELIMITGLOBAL);
187         return false;
188 }
189
190 /*
191  * Check the ICMP output rate limit
192  */
193 static bool icmpv6_xrlim_allow(struct sock *sk, u8 type,
194                                struct flowi6 *fl6)
195 {
196         struct net *net = sock_net(sk);
197         struct dst_entry *dst;
198         bool res = false;
199
200         if (icmpv6_mask_allow(net, type))
201                 return true;
202
203         /*
204          * Look up the output route.
205          * XXX: perhaps the expire for routing entries cloned by
206          * this lookup should be more aggressive (not longer than timeout).
207          */
208         dst = ip6_route_output(net, sk, fl6);
209         if (dst->error) {
210                 IP6_INC_STATS(net, ip6_dst_idev(dst),
211                               IPSTATS_MIB_OUTNOROUTES);
212         } else if (dst->dev && (dst->dev->flags&IFF_LOOPBACK)) {
213                 res = true;
214         } else {
215                 struct rt6_info *rt = (struct rt6_info *)dst;
216                 int tmo = net->ipv6.sysctl.icmpv6_time;
217                 struct inet_peer *peer;
218
219                 /* Give more bandwidth to wider prefixes. */
220                 if (rt->rt6i_dst.plen < 128)
221                         tmo >>= ((128 - rt->rt6i_dst.plen)>>5);
222
223                 peer = inet_getpeer_v6(net->ipv6.peers, &fl6->daddr, 1);
224                 res = inet_peer_xrlim_allow(peer, tmo);
225                 if (peer)
226                         inet_putpeer(peer);
227         }
228         if (!res)
229                 __ICMP6_INC_STATS(net, ip6_dst_idev(dst),
230                                   ICMP6_MIB_RATELIMITHOST);
231         dst_release(dst);
232         return res;
233 }
234
235 static bool icmpv6_rt_has_prefsrc(struct sock *sk, u8 type,
236                                   struct flowi6 *fl6)
237 {
238         struct net *net = sock_net(sk);
239         struct dst_entry *dst;
240         bool res = false;
241
242         dst = ip6_route_output(net, sk, fl6);
243         if (!dst->error) {
244                 struct rt6_info *rt = (struct rt6_info *)dst;
245                 struct in6_addr prefsrc;
246
247                 rt6_get_prefsrc(rt, &prefsrc);
248                 res = !ipv6_addr_any(&prefsrc);
249         }
250         dst_release(dst);
251         return res;
252 }
253
254 /*
255  *      an inline helper for the "simple" if statement below
256  *      checks if parameter problem report is caused by an
257  *      unrecognized IPv6 option that has the Option Type
258  *      highest-order two bits set to 10
259  */
260
261 static bool opt_unrec(struct sk_buff *skb, __u32 offset)
262 {
263         u8 _optval, *op;
264
265         offset += skb_network_offset(skb);
266         op = skb_header_pointer(skb, offset, sizeof(_optval), &_optval);
267         if (!op)
268                 return true;
269         return (*op & 0xC0) == 0x80;
270 }
271
272 void icmpv6_push_pending_frames(struct sock *sk, struct flowi6 *fl6,
273                                 struct icmp6hdr *thdr, int len)
274 {
275         struct sk_buff *skb;
276         struct icmp6hdr *icmp6h;
277
278         skb = skb_peek(&sk->sk_write_queue);
279         if (!skb)
280                 return;
281
282         icmp6h = icmp6_hdr(skb);
283         memcpy(icmp6h, thdr, sizeof(struct icmp6hdr));
284         icmp6h->icmp6_cksum = 0;
285
286         if (skb_queue_len(&sk->sk_write_queue) == 1) {
287                 skb->csum = csum_partial(icmp6h,
288                                         sizeof(struct icmp6hdr), skb->csum);
289                 icmp6h->icmp6_cksum = csum_ipv6_magic(&fl6->saddr,
290                                                       &fl6->daddr,
291                                                       len, fl6->flowi6_proto,
292                                                       skb->csum);
293         } else {
294                 __wsum tmp_csum = 0;
295
296                 skb_queue_walk(&sk->sk_write_queue, skb) {
297                         tmp_csum = csum_add(tmp_csum, skb->csum);
298                 }
299
300                 tmp_csum = csum_partial(icmp6h,
301                                         sizeof(struct icmp6hdr), tmp_csum);
302                 icmp6h->icmp6_cksum = csum_ipv6_magic(&fl6->saddr,
303                                                       &fl6->daddr,
304                                                       len, fl6->flowi6_proto,
305                                                       tmp_csum);
306         }
307         ip6_push_pending_frames(sk);
308 }
309
310 struct icmpv6_msg {
311         struct sk_buff  *skb;
312         int             offset;
313         uint8_t         type;
314 };
315
316 static int icmpv6_getfrag(void *from, char *to, int offset, int len, int odd, struct sk_buff *skb)
317 {
318         struct icmpv6_msg *msg = (struct icmpv6_msg *) from;
319         struct sk_buff *org_skb = msg->skb;
320         __wsum csum;
321
322         csum = skb_copy_and_csum_bits(org_skb, msg->offset + offset,
323                                       to, len);
324         skb->csum = csum_block_add(skb->csum, csum, odd);
325         if (!(msg->type & ICMPV6_INFOMSG_MASK))
326                 nf_ct_attach(skb, org_skb);
327         return 0;
328 }
329
330 #if IS_ENABLED(CONFIG_IPV6_MIP6)
331 static void mip6_addr_swap(struct sk_buff *skb, const struct inet6_skb_parm *opt)
332 {
333         struct ipv6hdr *iph = ipv6_hdr(skb);
334         struct ipv6_destopt_hao *hao;
335         int off;
336
337         if (opt->dsthao) {
338                 off = ipv6_find_tlv(skb, opt->dsthao, IPV6_TLV_HAO);
339                 if (likely(off >= 0)) {
340                         hao = (struct ipv6_destopt_hao *)
341                                         (skb_network_header(skb) + off);
342                         swap(iph->saddr, hao->addr);
343                 }
344         }
345 }
346 #else
347 static inline void mip6_addr_swap(struct sk_buff *skb, const struct inet6_skb_parm *opt) {}
348 #endif
349
350 static struct dst_entry *icmpv6_route_lookup(struct net *net,
351                                              struct sk_buff *skb,
352                                              struct sock *sk,
353                                              struct flowi6 *fl6)
354 {
355         struct dst_entry *dst, *dst2;
356         struct flowi6 fl2;
357         int err;
358
359         err = ip6_dst_lookup(net, sk, &dst, fl6);
360         if (err)
361                 return ERR_PTR(err);
362
363         /*
364          * We won't send icmp if the destination is known
365          * anycast.
366          */
367         if (ipv6_anycast_destination(dst, &fl6->daddr)) {
368                 net_dbg_ratelimited("icmp6_send: acast source\n");
369                 dst_release(dst);
370                 return ERR_PTR(-EINVAL);
371         }
372
373         /* No need to clone since we're just using its address. */
374         dst2 = dst;
375
376         dst = xfrm_lookup(net, dst, flowi6_to_flowi(fl6), sk, 0);
377         if (!IS_ERR(dst)) {
378                 if (dst != dst2)
379                         return dst;
380         } else {
381                 if (PTR_ERR(dst) == -EPERM)
382                         dst = NULL;
383                 else
384                         return dst;
385         }
386
387         err = xfrm_decode_session_reverse(skb, flowi6_to_flowi(&fl2), AF_INET6);
388         if (err)
389                 goto relookup_failed;
390
391         err = ip6_dst_lookup(net, sk, &dst2, &fl2);
392         if (err)
393                 goto relookup_failed;
394
395         dst2 = xfrm_lookup(net, dst2, flowi6_to_flowi(&fl2), sk, XFRM_LOOKUP_ICMP);
396         if (!IS_ERR(dst2)) {
397                 dst_release(dst);
398                 dst = dst2;
399         } else {
400                 err = PTR_ERR(dst2);
401                 if (err == -EPERM) {
402                         dst_release(dst);
403                         return dst2;
404                 } else
405                         goto relookup_failed;
406         }
407
408 relookup_failed:
409         if (dst)
410                 return dst;
411         return ERR_PTR(err);
412 }
413
414 static struct net_device *icmp6_dev(const struct sk_buff *skb)
415 {
416         struct net_device *dev = skb->dev;
417
418         /* for local traffic to local address, skb dev is the loopback
419          * device. Check if there is a dst attached to the skb and if so
420          * get the real device index. Same is needed for replies to a link
421          * local address on a device enslaved to an L3 master device
422          */
423         if (unlikely(dev->ifindex == LOOPBACK_IFINDEX || netif_is_l3_master(skb->dev))) {
424                 const struct rt6_info *rt6 = skb_rt6_info(skb);
425
426                 if (rt6)
427                         dev = rt6->rt6i_idev->dev;
428         }
429
430         return dev;
431 }
432
433 static int icmp6_iif(const struct sk_buff *skb)
434 {
435         return icmp6_dev(skb)->ifindex;
436 }
437
438 /*
439  *      Send an ICMP message in response to a packet in error
440  */
441 void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info,
442                 const struct in6_addr *force_saddr,
443                 const struct inet6_skb_parm *parm)
444 {
445         struct inet6_dev *idev = NULL;
446         struct ipv6hdr *hdr = ipv6_hdr(skb);
447         struct sock *sk;
448         struct net *net;
449         struct ipv6_pinfo *np;
450         const struct in6_addr *saddr = NULL;
451         struct dst_entry *dst;
452         struct icmp6hdr tmp_hdr;
453         struct flowi6 fl6;
454         struct icmpv6_msg msg;
455         struct ipcm6_cookie ipc6;
456         int iif = 0;
457         int addr_type = 0;
458         int len;
459         u32 mark;
460
461         if ((u8 *)hdr < skb->head ||
462             (skb_network_header(skb) + sizeof(*hdr)) > skb_tail_pointer(skb))
463                 return;
464
465         if (!skb->dev)
466                 return;
467         net = dev_net(skb->dev);
468         mark = IP6_REPLY_MARK(net, skb->mark);
469         /*
470          *      Make sure we respect the rules
471          *      i.e. RFC 1885 2.4(e)
472          *      Rule (e.1) is enforced by not using icmp6_send
473          *      in any code that processes icmp errors.
474          */
475         addr_type = ipv6_addr_type(&hdr->daddr);
476
477         if (ipv6_chk_addr(net, &hdr->daddr, skb->dev, 0) ||
478             ipv6_chk_acast_addr_src(net, skb->dev, &hdr->daddr))
479                 saddr = &hdr->daddr;
480
481         /*
482          *      Dest addr check
483          */
484
485         if (addr_type & IPV6_ADDR_MULTICAST || skb->pkt_type != PACKET_HOST) {
486                 if (type != ICMPV6_PKT_TOOBIG &&
487                     !(type == ICMPV6_PARAMPROB &&
488                       code == ICMPV6_UNK_OPTION &&
489                       (opt_unrec(skb, info))))
490                         return;
491
492                 saddr = NULL;
493         }
494
495         addr_type = ipv6_addr_type(&hdr->saddr);
496
497         /*
498          *      Source addr check
499          */
500
501         if (__ipv6_addr_needs_scope_id(addr_type)) {
502                 iif = icmp6_iif(skb);
503         } else {
504                 /*
505                  * The source device is used for looking up which routing table
506                  * to use for sending an ICMP error.
507                  */
508                 iif = l3mdev_master_ifindex(skb->dev);
509         }
510
511         /*
512          *      Must not send error if the source does not uniquely
513          *      identify a single node (RFC2463 Section 2.4).
514          *      We check unspecified / multicast addresses here,
515          *      and anycast addresses will be checked later.
516          */
517         if ((addr_type == IPV6_ADDR_ANY) || (addr_type & IPV6_ADDR_MULTICAST)) {
518                 net_dbg_ratelimited("icmp6_send: addr_any/mcast source [%pI6c > %pI6c]\n",
519                                     &hdr->saddr, &hdr->daddr);
520                 return;
521         }
522
523         /*
524          *      Never answer to a ICMP packet.
525          */
526         if (is_ineligible(skb)) {
527                 net_dbg_ratelimited("icmp6_send: no reply to icmp error [%pI6c > %pI6c]\n",
528                                     &hdr->saddr, &hdr->daddr);
529                 return;
530         }
531
532         /* Needed by both icmp_global_allow and icmpv6_xmit_lock */
533         local_bh_disable();
534
535         /* Check global sysctl_icmp_msgs_per_sec ratelimit */
536         if (!(skb->dev->flags & IFF_LOOPBACK) && !icmpv6_global_allow(net, type))
537                 goto out_bh_enable;
538
539         mip6_addr_swap(skb, parm);
540
541         sk = icmpv6_xmit_lock(net);
542         if (!sk)
543                 goto out_bh_enable;
544
545         memset(&fl6, 0, sizeof(fl6));
546         fl6.flowi6_proto = IPPROTO_ICMPV6;
547         fl6.daddr = hdr->saddr;
548         if (force_saddr)
549                 saddr = force_saddr;
550         if (saddr) {
551                 fl6.saddr = *saddr;
552         } else if (!icmpv6_rt_has_prefsrc(sk, type, &fl6)) {
553                 /* select a more meaningful saddr from input if */
554                 struct net_device *in_netdev;
555
556                 in_netdev = dev_get_by_index(net, parm->iif);
557                 if (in_netdev) {
558                         ipv6_dev_get_saddr(net, in_netdev, &fl6.daddr,
559                                            inet6_sk(sk)->srcprefs,
560                                            &fl6.saddr);
561                         dev_put(in_netdev);
562                 }
563         }
564         fl6.flowi6_mark = mark;
565         fl6.flowi6_oif = iif;
566         fl6.fl6_icmp_type = type;
567         fl6.fl6_icmp_code = code;
568         fl6.flowi6_uid = sock_net_uid(net, NULL);
569         fl6.mp_hash = rt6_multipath_hash(net, &fl6, skb, NULL);
570         security_skb_classify_flow(skb, flowi6_to_flowi_common(&fl6));
571
572         np = inet6_sk(sk);
573
574         if (!icmpv6_xrlim_allow(sk, type, &fl6))
575                 goto out;
576
577         tmp_hdr.icmp6_type = type;
578         tmp_hdr.icmp6_code = code;
579         tmp_hdr.icmp6_cksum = 0;
580         tmp_hdr.icmp6_pointer = htonl(info);
581
582         if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr))
583                 fl6.flowi6_oif = np->mcast_oif;
584         else if (!fl6.flowi6_oif)
585                 fl6.flowi6_oif = np->ucast_oif;
586
587         ipcm6_init_sk(&ipc6, np);
588         ipc6.sockc.mark = mark;
589         fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel);
590
591         dst = icmpv6_route_lookup(net, skb, sk, &fl6);
592         if (IS_ERR(dst))
593                 goto out;
594
595         ipc6.hlimit = ip6_sk_dst_hoplimit(np, &fl6, dst);
596
597         msg.skb = skb;
598         msg.offset = skb_network_offset(skb);
599         msg.type = type;
600
601         len = skb->len - msg.offset;
602         len = min_t(unsigned int, len, IPV6_MIN_MTU - sizeof(struct ipv6hdr) - sizeof(struct icmp6hdr));
603         if (len < 0) {
604                 net_dbg_ratelimited("icmp: len problem [%pI6c > %pI6c]\n",
605                                     &hdr->saddr, &hdr->daddr);
606                 goto out_dst_release;
607         }
608
609         rcu_read_lock();
610         idev = __in6_dev_get(skb->dev);
611
612         if (ip6_append_data(sk, icmpv6_getfrag, &msg,
613                             len + sizeof(struct icmp6hdr),
614                             sizeof(struct icmp6hdr),
615                             &ipc6, &fl6, (struct rt6_info *)dst,
616                             MSG_DONTWAIT)) {
617                 ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTERRORS);
618                 ip6_flush_pending_frames(sk);
619         } else {
620                 icmpv6_push_pending_frames(sk, &fl6, &tmp_hdr,
621                                            len + sizeof(struct icmp6hdr));
622         }
623         rcu_read_unlock();
624 out_dst_release:
625         dst_release(dst);
626 out:
627         icmpv6_xmit_unlock(sk);
628 out_bh_enable:
629         local_bh_enable();
630 }
631 EXPORT_SYMBOL(icmp6_send);
632
633 /* Slightly more convenient version of icmp6_send with drop reasons.
634  */
635 void icmpv6_param_prob_reason(struct sk_buff *skb, u8 code, int pos,
636                               enum skb_drop_reason reason)
637 {
638         icmp6_send(skb, ICMPV6_PARAMPROB, code, pos, NULL, IP6CB(skb));
639         kfree_skb_reason(skb, reason);
640 }
641
642 /* Generate icmpv6 with type/code ICMPV6_DEST_UNREACH/ICMPV6_ADDR_UNREACH
643  * if sufficient data bytes are available
644  * @nhs is the size of the tunnel header(s) :
645  *  Either an IPv4 header for SIT encap
646  *         an IPv4 header + GRE header for GRE encap
647  */
648 int ip6_err_gen_icmpv6_unreach(struct sk_buff *skb, int nhs, int type,
649                                unsigned int data_len)
650 {
651         struct in6_addr temp_saddr;
652         struct rt6_info *rt;
653         struct sk_buff *skb2;
654         u32 info = 0;
655
656         if (!pskb_may_pull(skb, nhs + sizeof(struct ipv6hdr) + 8))
657                 return 1;
658
659         /* RFC 4884 (partial) support for ICMP extensions */
660         if (data_len < 128 || (data_len & 7) || skb->len < data_len)
661                 data_len = 0;
662
663         skb2 = data_len ? skb_copy(skb, GFP_ATOMIC) : skb_clone(skb, GFP_ATOMIC);
664
665         if (!skb2)
666                 return 1;
667
668         skb_dst_drop(skb2);
669         skb_pull(skb2, nhs);
670         skb_reset_network_header(skb2);
671
672         rt = rt6_lookup(dev_net(skb->dev), &ipv6_hdr(skb2)->saddr, NULL, 0,
673                         skb, 0);
674
675         if (rt && rt->dst.dev)
676                 skb2->dev = rt->dst.dev;
677
678         ipv6_addr_set_v4mapped(ip_hdr(skb)->saddr, &temp_saddr);
679
680         if (data_len) {
681                 /* RFC 4884 (partial) support :
682                  * insert 0 padding at the end, before the extensions
683                  */
684                 __skb_push(skb2, nhs);
685                 skb_reset_network_header(skb2);
686                 memmove(skb2->data, skb2->data + nhs, data_len - nhs);
687                 memset(skb2->data + data_len - nhs, 0, nhs);
688                 /* RFC 4884 4.5 : Length is measured in 64-bit words,
689                  * and stored in reserved[0]
690                  */
691                 info = (data_len/8) << 24;
692         }
693         if (type == ICMP_TIME_EXCEEDED)
694                 icmp6_send(skb2, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT,
695                            info, &temp_saddr, IP6CB(skb2));
696         else
697                 icmp6_send(skb2, ICMPV6_DEST_UNREACH, ICMPV6_ADDR_UNREACH,
698                            info, &temp_saddr, IP6CB(skb2));
699         if (rt)
700                 ip6_rt_put(rt);
701
702         kfree_skb(skb2);
703
704         return 0;
705 }
706 EXPORT_SYMBOL(ip6_err_gen_icmpv6_unreach);
707
708 static enum skb_drop_reason icmpv6_echo_reply(struct sk_buff *skb)
709 {
710         struct net *net = dev_net(skb->dev);
711         struct sock *sk;
712         struct inet6_dev *idev;
713         struct ipv6_pinfo *np;
714         const struct in6_addr *saddr = NULL;
715         struct icmp6hdr *icmph = icmp6_hdr(skb);
716         struct icmp6hdr tmp_hdr;
717         struct flowi6 fl6;
718         struct icmpv6_msg msg;
719         struct dst_entry *dst;
720         struct ipcm6_cookie ipc6;
721         u32 mark = IP6_REPLY_MARK(net, skb->mark);
722         SKB_DR(reason);
723         bool acast;
724         u8 type;
725
726         if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr) &&
727             net->ipv6.sysctl.icmpv6_echo_ignore_multicast)
728                 return reason;
729
730         saddr = &ipv6_hdr(skb)->daddr;
731
732         acast = ipv6_anycast_destination(skb_dst(skb), saddr);
733         if (acast && net->ipv6.sysctl.icmpv6_echo_ignore_anycast)
734                 return reason;
735
736         if (!ipv6_unicast_destination(skb) &&
737             !(net->ipv6.sysctl.anycast_src_echo_reply && acast))
738                 saddr = NULL;
739
740         if (icmph->icmp6_type == ICMPV6_EXT_ECHO_REQUEST)
741                 type = ICMPV6_EXT_ECHO_REPLY;
742         else
743                 type = ICMPV6_ECHO_REPLY;
744
745         memcpy(&tmp_hdr, icmph, sizeof(tmp_hdr));
746         tmp_hdr.icmp6_type = type;
747
748         memset(&fl6, 0, sizeof(fl6));
749         if (net->ipv6.sysctl.flowlabel_reflect & FLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES)
750                 fl6.flowlabel = ip6_flowlabel(ipv6_hdr(skb));
751
752         fl6.flowi6_proto = IPPROTO_ICMPV6;
753         fl6.daddr = ipv6_hdr(skb)->saddr;
754         if (saddr)
755                 fl6.saddr = *saddr;
756         fl6.flowi6_oif = icmp6_iif(skb);
757         fl6.fl6_icmp_type = type;
758         fl6.flowi6_mark = mark;
759         fl6.flowi6_uid = sock_net_uid(net, NULL);
760         security_skb_classify_flow(skb, flowi6_to_flowi_common(&fl6));
761
762         local_bh_disable();
763         sk = icmpv6_xmit_lock(net);
764         if (!sk)
765                 goto out_bh_enable;
766         np = inet6_sk(sk);
767
768         if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr))
769                 fl6.flowi6_oif = np->mcast_oif;
770         else if (!fl6.flowi6_oif)
771                 fl6.flowi6_oif = np->ucast_oif;
772
773         if (ip6_dst_lookup(net, sk, &dst, &fl6))
774                 goto out;
775         dst = xfrm_lookup(net, dst, flowi6_to_flowi(&fl6), sk, 0);
776         if (IS_ERR(dst))
777                 goto out;
778
779         /* Check the ratelimit */
780         if ((!(skb->dev->flags & IFF_LOOPBACK) && !icmpv6_global_allow(net, ICMPV6_ECHO_REPLY)) ||
781             !icmpv6_xrlim_allow(sk, ICMPV6_ECHO_REPLY, &fl6))
782                 goto out_dst_release;
783
784         idev = __in6_dev_get(skb->dev);
785
786         msg.skb = skb;
787         msg.offset = 0;
788         msg.type = type;
789
790         ipcm6_init_sk(&ipc6, np);
791         ipc6.hlimit = ip6_sk_dst_hoplimit(np, &fl6, dst);
792         ipc6.tclass = ipv6_get_dsfield(ipv6_hdr(skb));
793         ipc6.sockc.mark = mark;
794
795         if (icmph->icmp6_type == ICMPV6_EXT_ECHO_REQUEST)
796                 if (!icmp_build_probe(skb, (struct icmphdr *)&tmp_hdr))
797                         goto out_dst_release;
798
799         if (ip6_append_data(sk, icmpv6_getfrag, &msg,
800                             skb->len + sizeof(struct icmp6hdr),
801                             sizeof(struct icmp6hdr), &ipc6, &fl6,
802                             (struct rt6_info *)dst, MSG_DONTWAIT)) {
803                 __ICMP6_INC_STATS(net, idev, ICMP6_MIB_OUTERRORS);
804                 ip6_flush_pending_frames(sk);
805         } else {
806                 icmpv6_push_pending_frames(sk, &fl6, &tmp_hdr,
807                                            skb->len + sizeof(struct icmp6hdr));
808                 reason = SKB_CONSUMED;
809         }
810 out_dst_release:
811         dst_release(dst);
812 out:
813         icmpv6_xmit_unlock(sk);
814 out_bh_enable:
815         local_bh_enable();
816         return reason;
817 }
818
819 enum skb_drop_reason icmpv6_notify(struct sk_buff *skb, u8 type,
820                                    u8 code, __be32 info)
821 {
822         struct inet6_skb_parm *opt = IP6CB(skb);
823         struct net *net = dev_net(skb->dev);
824         const struct inet6_protocol *ipprot;
825         enum skb_drop_reason reason;
826         int inner_offset;
827         __be16 frag_off;
828         u8 nexthdr;
829
830         reason = pskb_may_pull_reason(skb, sizeof(struct ipv6hdr));
831         if (reason != SKB_NOT_DROPPED_YET)
832                 goto out;
833
834         seg6_icmp_srh(skb, opt);
835
836         nexthdr = ((struct ipv6hdr *)skb->data)->nexthdr;
837         if (ipv6_ext_hdr(nexthdr)) {
838                 /* now skip over extension headers */
839                 inner_offset = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr),
840                                                 &nexthdr, &frag_off);
841                 if (inner_offset < 0) {
842                         SKB_DR_SET(reason, IPV6_BAD_EXTHDR);
843                         goto out;
844                 }
845         } else {
846                 inner_offset = sizeof(struct ipv6hdr);
847         }
848
849         /* Checkin header including 8 bytes of inner protocol header. */
850         reason = pskb_may_pull_reason(skb, inner_offset + 8);
851         if (reason != SKB_NOT_DROPPED_YET)
852                 goto out;
853
854         /* BUGGG_FUTURE: we should try to parse exthdrs in this packet.
855            Without this we will not able f.e. to make source routed
856            pmtu discovery.
857            Corresponding argument (opt) to notifiers is already added.
858            --ANK (980726)
859          */
860
861         ipprot = rcu_dereference(inet6_protos[nexthdr]);
862         if (ipprot && ipprot->err_handler)
863                 ipprot->err_handler(skb, opt, type, code, inner_offset, info);
864
865         raw6_icmp_error(skb, nexthdr, type, code, inner_offset, info);
866         return SKB_CONSUMED;
867
868 out:
869         __ICMP6_INC_STATS(net, __in6_dev_get(skb->dev), ICMP6_MIB_INERRORS);
870         return reason;
871 }
872
873 /*
874  *      Handle icmp messages
875  */
876
877 static int icmpv6_rcv(struct sk_buff *skb)
878 {
879         enum skb_drop_reason reason = SKB_DROP_REASON_NOT_SPECIFIED;
880         struct net *net = dev_net(skb->dev);
881         struct net_device *dev = icmp6_dev(skb);
882         struct inet6_dev *idev = __in6_dev_get(dev);
883         const struct in6_addr *saddr, *daddr;
884         struct icmp6hdr *hdr;
885         u8 type;
886
887         if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
888                 struct sec_path *sp = skb_sec_path(skb);
889                 int nh;
890
891                 if (!(sp && sp->xvec[sp->len - 1]->props.flags &
892                                  XFRM_STATE_ICMP)) {
893                         reason = SKB_DROP_REASON_XFRM_POLICY;
894                         goto drop_no_count;
895                 }
896
897                 if (!pskb_may_pull(skb, sizeof(*hdr) + sizeof(struct ipv6hdr)))
898                         goto drop_no_count;
899
900                 nh = skb_network_offset(skb);
901                 skb_set_network_header(skb, sizeof(*hdr));
902
903                 if (!xfrm6_policy_check_reverse(NULL, XFRM_POLICY_IN,
904                                                 skb)) {
905                         reason = SKB_DROP_REASON_XFRM_POLICY;
906                         goto drop_no_count;
907                 }
908
909                 skb_set_network_header(skb, nh);
910         }
911
912         __ICMP6_INC_STATS(dev_net(dev), idev, ICMP6_MIB_INMSGS);
913
914         saddr = &ipv6_hdr(skb)->saddr;
915         daddr = &ipv6_hdr(skb)->daddr;
916
917         if (skb_checksum_validate(skb, IPPROTO_ICMPV6, ip6_compute_pseudo)) {
918                 net_dbg_ratelimited("ICMPv6 checksum failed [%pI6c > %pI6c]\n",
919                                     saddr, daddr);
920                 goto csum_error;
921         }
922
923         if (!pskb_pull(skb, sizeof(*hdr)))
924                 goto discard_it;
925
926         hdr = icmp6_hdr(skb);
927
928         type = hdr->icmp6_type;
929
930         ICMP6MSGIN_INC_STATS(dev_net(dev), idev, type);
931
932         switch (type) {
933         case ICMPV6_ECHO_REQUEST:
934                 if (!net->ipv6.sysctl.icmpv6_echo_ignore_all)
935                         reason = icmpv6_echo_reply(skb);
936                 break;
937         case ICMPV6_EXT_ECHO_REQUEST:
938                 if (!net->ipv6.sysctl.icmpv6_echo_ignore_all &&
939                     READ_ONCE(net->ipv4.sysctl_icmp_echo_enable_probe))
940                         reason = icmpv6_echo_reply(skb);
941                 break;
942
943         case ICMPV6_ECHO_REPLY:
944                 reason = ping_rcv(skb);
945                 break;
946
947         case ICMPV6_EXT_ECHO_REPLY:
948                 reason = ping_rcv(skb);
949                 break;
950
951         case ICMPV6_PKT_TOOBIG:
952                 /* BUGGG_FUTURE: if packet contains rthdr, we cannot update
953                    standard destination cache. Seems, only "advanced"
954                    destination cache will allow to solve this problem
955                    --ANK (980726)
956                  */
957                 if (!pskb_may_pull(skb, sizeof(struct ipv6hdr)))
958                         goto discard_it;
959                 hdr = icmp6_hdr(skb);
960
961                 /* to notify */
962                 fallthrough;
963         case ICMPV6_DEST_UNREACH:
964         case ICMPV6_TIME_EXCEED:
965         case ICMPV6_PARAMPROB:
966                 reason = icmpv6_notify(skb, type, hdr->icmp6_code,
967                                        hdr->icmp6_mtu);
968                 break;
969
970         case NDISC_ROUTER_SOLICITATION:
971         case NDISC_ROUTER_ADVERTISEMENT:
972         case NDISC_NEIGHBOUR_SOLICITATION:
973         case NDISC_NEIGHBOUR_ADVERTISEMENT:
974         case NDISC_REDIRECT:
975                 reason = ndisc_rcv(skb);
976                 break;
977
978         case ICMPV6_MGM_QUERY:
979                 igmp6_event_query(skb);
980                 return 0;
981
982         case ICMPV6_MGM_REPORT:
983                 igmp6_event_report(skb);
984                 return 0;
985
986         case ICMPV6_MGM_REDUCTION:
987         case ICMPV6_NI_QUERY:
988         case ICMPV6_NI_REPLY:
989         case ICMPV6_MLD2_REPORT:
990         case ICMPV6_DHAAD_REQUEST:
991         case ICMPV6_DHAAD_REPLY:
992         case ICMPV6_MOBILE_PREFIX_SOL:
993         case ICMPV6_MOBILE_PREFIX_ADV:
994                 break;
995
996         default:
997                 /* informational */
998                 if (type & ICMPV6_INFOMSG_MASK)
999                         break;
1000
1001                 net_dbg_ratelimited("icmpv6: msg of unknown type [%pI6c > %pI6c]\n",
1002                                     saddr, daddr);
1003
1004                 /*
1005                  * error of unknown type.
1006                  * must pass to upper level
1007                  */
1008
1009                 reason = icmpv6_notify(skb, type, hdr->icmp6_code,
1010                                        hdr->icmp6_mtu);
1011         }
1012
1013         /* until the v6 path can be better sorted assume failure and
1014          * preserve the status quo behaviour for the rest of the paths to here
1015          */
1016         if (reason)
1017                 kfree_skb_reason(skb, reason);
1018         else
1019                 consume_skb(skb);
1020
1021         return 0;
1022
1023 csum_error:
1024         reason = SKB_DROP_REASON_ICMP_CSUM;
1025         __ICMP6_INC_STATS(dev_net(dev), idev, ICMP6_MIB_CSUMERRORS);
1026 discard_it:
1027         __ICMP6_INC_STATS(dev_net(dev), idev, ICMP6_MIB_INERRORS);
1028 drop_no_count:
1029         kfree_skb_reason(skb, reason);
1030         return 0;
1031 }
1032
1033 void icmpv6_flow_init(struct sock *sk, struct flowi6 *fl6,
1034                       u8 type,
1035                       const struct in6_addr *saddr,
1036                       const struct in6_addr *daddr,
1037                       int oif)
1038 {
1039         memset(fl6, 0, sizeof(*fl6));
1040         fl6->saddr = *saddr;
1041         fl6->daddr = *daddr;
1042         fl6->flowi6_proto       = IPPROTO_ICMPV6;
1043         fl6->fl6_icmp_type      = type;
1044         fl6->fl6_icmp_code      = 0;
1045         fl6->flowi6_oif         = oif;
1046         security_sk_classify_flow(sk, flowi6_to_flowi_common(fl6));
1047 }
1048
1049 int __init icmpv6_init(void)
1050 {
1051         struct sock *sk;
1052         int err, i;
1053
1054         for_each_possible_cpu(i) {
1055                 err = inet_ctl_sock_create(&sk, PF_INET6,
1056                                            SOCK_RAW, IPPROTO_ICMPV6, &init_net);
1057                 if (err < 0) {
1058                         pr_err("Failed to initialize the ICMP6 control socket (err %d)\n",
1059                                err);
1060                         return err;
1061                 }
1062
1063                 per_cpu(ipv6_icmp_sk, i) = sk;
1064
1065                 /* Enough space for 2 64K ICMP packets, including
1066                  * sk_buff struct overhead.
1067                  */
1068                 sk->sk_sndbuf = 2 * SKB_TRUESIZE(64 * 1024);
1069         }
1070
1071         err = -EAGAIN;
1072         if (inet6_add_protocol(&icmpv6_protocol, IPPROTO_ICMPV6) < 0)
1073                 goto fail;
1074
1075         err = inet6_register_icmp_sender(icmp6_send);
1076         if (err)
1077                 goto sender_reg_err;
1078         return 0;
1079
1080 sender_reg_err:
1081         inet6_del_protocol(&icmpv6_protocol, IPPROTO_ICMPV6);
1082 fail:
1083         pr_err("Failed to register ICMP6 protocol\n");
1084         return err;
1085 }
1086
1087 void icmpv6_cleanup(void)
1088 {
1089         inet6_unregister_icmp_sender(icmp6_send);
1090         inet6_del_protocol(&icmpv6_protocol, IPPROTO_ICMPV6);
1091 }
1092
1093
1094 static const struct icmp6_err {
1095         int err;
1096         int fatal;
1097 } tab_unreach[] = {
1098         {       /* NOROUTE */
1099                 .err    = ENETUNREACH,
1100                 .fatal  = 0,
1101         },
1102         {       /* ADM_PROHIBITED */
1103                 .err    = EACCES,
1104                 .fatal  = 1,
1105         },
1106         {       /* Was NOT_NEIGHBOUR, now reserved */
1107                 .err    = EHOSTUNREACH,
1108                 .fatal  = 0,
1109         },
1110         {       /* ADDR_UNREACH */
1111                 .err    = EHOSTUNREACH,
1112                 .fatal  = 0,
1113         },
1114         {       /* PORT_UNREACH */
1115                 .err    = ECONNREFUSED,
1116                 .fatal  = 1,
1117         },
1118         {       /* POLICY_FAIL */
1119                 .err    = EACCES,
1120                 .fatal  = 1,
1121         },
1122         {       /* REJECT_ROUTE */
1123                 .err    = EACCES,
1124                 .fatal  = 1,
1125         },
1126 };
1127
1128 int icmpv6_err_convert(u8 type, u8 code, int *err)
1129 {
1130         int fatal = 0;
1131
1132         *err = EPROTO;
1133
1134         switch (type) {
1135         case ICMPV6_DEST_UNREACH:
1136                 fatal = 1;
1137                 if (code < ARRAY_SIZE(tab_unreach)) {
1138                         *err  = tab_unreach[code].err;
1139                         fatal = tab_unreach[code].fatal;
1140                 }
1141                 break;
1142
1143         case ICMPV6_PKT_TOOBIG:
1144                 *err = EMSGSIZE;
1145                 break;
1146
1147         case ICMPV6_PARAMPROB:
1148                 *err = EPROTO;
1149                 fatal = 1;
1150                 break;
1151
1152         case ICMPV6_TIME_EXCEED:
1153                 *err = EHOSTUNREACH;
1154                 break;
1155         }
1156
1157         return fatal;
1158 }
1159 EXPORT_SYMBOL(icmpv6_err_convert);
1160
1161 #ifdef CONFIG_SYSCTL
1162 static struct ctl_table ipv6_icmp_table_template[] = {
1163         {
1164                 .procname       = "ratelimit",
1165                 .data           = &init_net.ipv6.sysctl.icmpv6_time,
1166                 .maxlen         = sizeof(int),
1167                 .mode           = 0644,
1168                 .proc_handler   = proc_dointvec_ms_jiffies,
1169         },
1170         {
1171                 .procname       = "echo_ignore_all",
1172                 .data           = &init_net.ipv6.sysctl.icmpv6_echo_ignore_all,
1173                 .maxlen         = sizeof(u8),
1174                 .mode           = 0644,
1175                 .proc_handler = proc_dou8vec_minmax,
1176         },
1177         {
1178                 .procname       = "echo_ignore_multicast",
1179                 .data           = &init_net.ipv6.sysctl.icmpv6_echo_ignore_multicast,
1180                 .maxlen         = sizeof(u8),
1181                 .mode           = 0644,
1182                 .proc_handler = proc_dou8vec_minmax,
1183         },
1184         {
1185                 .procname       = "echo_ignore_anycast",
1186                 .data           = &init_net.ipv6.sysctl.icmpv6_echo_ignore_anycast,
1187                 .maxlen         = sizeof(u8),
1188                 .mode           = 0644,
1189                 .proc_handler = proc_dou8vec_minmax,
1190         },
1191         {
1192                 .procname       = "ratemask",
1193                 .data           = &init_net.ipv6.sysctl.icmpv6_ratemask_ptr,
1194                 .maxlen         = ICMPV6_MSG_MAX + 1,
1195                 .mode           = 0644,
1196                 .proc_handler = proc_do_large_bitmap,
1197         },
1198         { },
1199 };
1200
1201 struct ctl_table * __net_init ipv6_icmp_sysctl_init(struct net *net)
1202 {
1203         struct ctl_table *table;
1204
1205         table = kmemdup(ipv6_icmp_table_template,
1206                         sizeof(ipv6_icmp_table_template),
1207                         GFP_KERNEL);
1208
1209         if (table) {
1210                 table[0].data = &net->ipv6.sysctl.icmpv6_time;
1211                 table[1].data = &net->ipv6.sysctl.icmpv6_echo_ignore_all;
1212                 table[2].data = &net->ipv6.sysctl.icmpv6_echo_ignore_multicast;
1213                 table[3].data = &net->ipv6.sysctl.icmpv6_echo_ignore_anycast;
1214                 table[4].data = &net->ipv6.sysctl.icmpv6_ratemask_ptr;
1215         }
1216         return table;
1217 }
1218 #endif