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