clk: Drop the rate range on clk_put()
[linux-2.6-microblaze.git] / net / ax25 / af_ax25.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *
4  * Copyright (C) Alan Cox GW4PTS (alan@lxorguk.ukuu.org.uk)
5  * Copyright (C) Jonathan Naylor G4KLX (g4klx@g4klx.demon.co.uk)
6  * Copyright (C) Darryl Miles G7LED (dlm@g7led.demon.co.uk)
7  * Copyright (C) Steven Whitehouse GW7RRM (stevew@acm.org)
8  * Copyright (C) Joerg Reuter DL1BKE (jreuter@yaina.de)
9  * Copyright (C) Hans-Joachim Hetscher DD8NE (dd8ne@bnv-bamberg.de)
10  * Copyright (C) Hans Alblas PE1AYX (hans@esrac.ele.tue.nl)
11  * Copyright (C) Frederic Rible F1OAT (frible@teaser.fr)
12  */
13 #include <linux/capability.h>
14 #include <linux/module.h>
15 #include <linux/errno.h>
16 #include <linux/types.h>
17 #include <linux/socket.h>
18 #include <linux/in.h>
19 #include <linux/kernel.h>
20 #include <linux/sched/signal.h>
21 #include <linux/timer.h>
22 #include <linux/string.h>
23 #include <linux/sockios.h>
24 #include <linux/net.h>
25 #include <linux/slab.h>
26 #include <net/ax25.h>
27 #include <linux/inet.h>
28 #include <linux/netdevice.h>
29 #include <linux/if_arp.h>
30 #include <linux/skbuff.h>
31 #include <net/sock.h>
32 #include <linux/uaccess.h>
33 #include <linux/fcntl.h>
34 #include <linux/termios.h>      /* For TIOCINQ/OUTQ */
35 #include <linux/mm.h>
36 #include <linux/interrupt.h>
37 #include <linux/notifier.h>
38 #include <linux/proc_fs.h>
39 #include <linux/stat.h>
40 #include <linux/sysctl.h>
41 #include <linux/init.h>
42 #include <linux/spinlock.h>
43 #include <net/net_namespace.h>
44 #include <net/tcp_states.h>
45 #include <net/ip.h>
46 #include <net/arp.h>
47
48
49
50 HLIST_HEAD(ax25_list);
51 DEFINE_SPINLOCK(ax25_list_lock);
52
53 static const struct proto_ops ax25_proto_ops;
54
55 static void ax25_free_sock(struct sock *sk)
56 {
57         ax25_cb_put(sk_to_ax25(sk));
58 }
59
60 /*
61  *      Socket removal during an interrupt is now safe.
62  */
63 static void ax25_cb_del(ax25_cb *ax25)
64 {
65         if (!hlist_unhashed(&ax25->ax25_node)) {
66                 spin_lock_bh(&ax25_list_lock);
67                 hlist_del_init(&ax25->ax25_node);
68                 spin_unlock_bh(&ax25_list_lock);
69                 ax25_cb_put(ax25);
70         }
71 }
72
73 /*
74  *      Kill all bound sockets on a dropped device.
75  */
76 static void ax25_kill_by_device(struct net_device *dev)
77 {
78         ax25_dev *ax25_dev;
79         ax25_cb *s;
80
81         if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL)
82                 return;
83
84         spin_lock_bh(&ax25_list_lock);
85 again:
86         ax25_for_each(s, &ax25_list) {
87                 if (s->ax25_dev == ax25_dev) {
88                         spin_unlock_bh(&ax25_list_lock);
89                         lock_sock(s->sk);
90                         s->ax25_dev = NULL;
91                         release_sock(s->sk);
92                         ax25_disconnect(s, ENETUNREACH);
93                         spin_lock_bh(&ax25_list_lock);
94
95                         /* The entry could have been deleted from the
96                          * list meanwhile and thus the next pointer is
97                          * no longer valid.  Play it safe and restart
98                          * the scan.  Forward progress is ensured
99                          * because we set s->ax25_dev to NULL and we
100                          * are never passed a NULL 'dev' argument.
101                          */
102                         goto again;
103                 }
104         }
105         spin_unlock_bh(&ax25_list_lock);
106 }
107
108 /*
109  *      Handle device status changes.
110  */
111 static int ax25_device_event(struct notifier_block *this, unsigned long event,
112                              void *ptr)
113 {
114         struct net_device *dev = netdev_notifier_info_to_dev(ptr);
115
116         if (!net_eq(dev_net(dev), &init_net))
117                 return NOTIFY_DONE;
118
119         /* Reject non AX.25 devices */
120         if (dev->type != ARPHRD_AX25)
121                 return NOTIFY_DONE;
122
123         switch (event) {
124         case NETDEV_UP:
125                 ax25_dev_device_up(dev);
126                 break;
127         case NETDEV_DOWN:
128                 ax25_kill_by_device(dev);
129                 ax25_rt_device_down(dev);
130                 ax25_dev_device_down(dev);
131                 break;
132         default:
133                 break;
134         }
135
136         return NOTIFY_DONE;
137 }
138
139 /*
140  *      Add a socket to the bound sockets list.
141  */
142 void ax25_cb_add(ax25_cb *ax25)
143 {
144         spin_lock_bh(&ax25_list_lock);
145         ax25_cb_hold(ax25);
146         hlist_add_head(&ax25->ax25_node, &ax25_list);
147         spin_unlock_bh(&ax25_list_lock);
148 }
149
150 /*
151  *      Find a socket that wants to accept the SABM we have just
152  *      received.
153  */
154 struct sock *ax25_find_listener(ax25_address *addr, int digi,
155         struct net_device *dev, int type)
156 {
157         ax25_cb *s;
158
159         spin_lock(&ax25_list_lock);
160         ax25_for_each(s, &ax25_list) {
161                 if ((s->iamdigi && !digi) || (!s->iamdigi && digi))
162                         continue;
163                 if (s->sk && !ax25cmp(&s->source_addr, addr) &&
164                     s->sk->sk_type == type && s->sk->sk_state == TCP_LISTEN) {
165                         /* If device is null we match any device */
166                         if (s->ax25_dev == NULL || s->ax25_dev->dev == dev) {
167                                 sock_hold(s->sk);
168                                 spin_unlock(&ax25_list_lock);
169                                 return s->sk;
170                         }
171                 }
172         }
173         spin_unlock(&ax25_list_lock);
174
175         return NULL;
176 }
177
178 /*
179  *      Find an AX.25 socket given both ends.
180  */
181 struct sock *ax25_get_socket(ax25_address *my_addr, ax25_address *dest_addr,
182         int type)
183 {
184         struct sock *sk = NULL;
185         ax25_cb *s;
186
187         spin_lock(&ax25_list_lock);
188         ax25_for_each(s, &ax25_list) {
189                 if (s->sk && !ax25cmp(&s->source_addr, my_addr) &&
190                     !ax25cmp(&s->dest_addr, dest_addr) &&
191                     s->sk->sk_type == type) {
192                         sk = s->sk;
193                         sock_hold(sk);
194                         break;
195                 }
196         }
197
198         spin_unlock(&ax25_list_lock);
199
200         return sk;
201 }
202
203 /*
204  *      Find an AX.25 control block given both ends. It will only pick up
205  *      floating AX.25 control blocks or non Raw socket bound control blocks.
206  */
207 ax25_cb *ax25_find_cb(const ax25_address *src_addr, ax25_address *dest_addr,
208         ax25_digi *digi, struct net_device *dev)
209 {
210         ax25_cb *s;
211
212         spin_lock_bh(&ax25_list_lock);
213         ax25_for_each(s, &ax25_list) {
214                 if (s->sk && s->sk->sk_type != SOCK_SEQPACKET)
215                         continue;
216                 if (s->ax25_dev == NULL)
217                         continue;
218                 if (ax25cmp(&s->source_addr, src_addr) == 0 && ax25cmp(&s->dest_addr, dest_addr) == 0 && s->ax25_dev->dev == dev) {
219                         if (digi != NULL && digi->ndigi != 0) {
220                                 if (s->digipeat == NULL)
221                                         continue;
222                                 if (ax25digicmp(s->digipeat, digi) != 0)
223                                         continue;
224                         } else {
225                                 if (s->digipeat != NULL && s->digipeat->ndigi != 0)
226                                         continue;
227                         }
228                         ax25_cb_hold(s);
229                         spin_unlock_bh(&ax25_list_lock);
230
231                         return s;
232                 }
233         }
234         spin_unlock_bh(&ax25_list_lock);
235
236         return NULL;
237 }
238
239 EXPORT_SYMBOL(ax25_find_cb);
240
241 void ax25_send_to_raw(ax25_address *addr, struct sk_buff *skb, int proto)
242 {
243         ax25_cb *s;
244         struct sk_buff *copy;
245
246         spin_lock(&ax25_list_lock);
247         ax25_for_each(s, &ax25_list) {
248                 if (s->sk != NULL && ax25cmp(&s->source_addr, addr) == 0 &&
249                     s->sk->sk_type == SOCK_RAW &&
250                     s->sk->sk_protocol == proto &&
251                     s->ax25_dev->dev == skb->dev &&
252                     atomic_read(&s->sk->sk_rmem_alloc) <= s->sk->sk_rcvbuf) {
253                         if ((copy = skb_clone(skb, GFP_ATOMIC)) == NULL)
254                                 continue;
255                         if (sock_queue_rcv_skb(s->sk, copy) != 0)
256                                 kfree_skb(copy);
257                 }
258         }
259         spin_unlock(&ax25_list_lock);
260 }
261
262 /*
263  *      Deferred destroy.
264  */
265 void ax25_destroy_socket(ax25_cb *);
266
267 /*
268  *      Handler for deferred kills.
269  */
270 static void ax25_destroy_timer(struct timer_list *t)
271 {
272         ax25_cb *ax25 = from_timer(ax25, t, dtimer);
273         struct sock *sk;
274
275         sk=ax25->sk;
276
277         bh_lock_sock(sk);
278         sock_hold(sk);
279         ax25_destroy_socket(ax25);
280         bh_unlock_sock(sk);
281         sock_put(sk);
282 }
283
284 /*
285  *      This is called from user mode and the timers. Thus it protects itself
286  *      against interrupt users but doesn't worry about being called during
287  *      work. Once it is removed from the queue no interrupt or bottom half
288  *      will touch it and we are (fairly 8-) ) safe.
289  */
290 void ax25_destroy_socket(ax25_cb *ax25)
291 {
292         struct sk_buff *skb;
293
294         ax25_cb_del(ax25);
295
296         ax25_stop_heartbeat(ax25);
297         ax25_stop_t1timer(ax25);
298         ax25_stop_t2timer(ax25);
299         ax25_stop_t3timer(ax25);
300         ax25_stop_idletimer(ax25);
301
302         ax25_clear_queues(ax25);        /* Flush the queues */
303
304         if (ax25->sk != NULL) {
305                 while ((skb = skb_dequeue(&ax25->sk->sk_receive_queue)) != NULL) {
306                         if (skb->sk != ax25->sk) {
307                                 /* A pending connection */
308                                 ax25_cb *sax25 = sk_to_ax25(skb->sk);
309
310                                 /* Queue the unaccepted socket for death */
311                                 sock_orphan(skb->sk);
312
313                                 /* 9A4GL: hack to release unaccepted sockets */
314                                 skb->sk->sk_state = TCP_LISTEN;
315
316                                 ax25_start_heartbeat(sax25);
317                                 sax25->state = AX25_STATE_0;
318                         }
319
320                         kfree_skb(skb);
321                 }
322                 skb_queue_purge(&ax25->sk->sk_write_queue);
323         }
324
325         if (ax25->sk != NULL) {
326                 if (sk_has_allocations(ax25->sk)) {
327                         /* Defer: outstanding buffers */
328                         timer_setup(&ax25->dtimer, ax25_destroy_timer, 0);
329                         ax25->dtimer.expires  = jiffies + 2 * HZ;
330                         add_timer(&ax25->dtimer);
331                 } else {
332                         struct sock *sk=ax25->sk;
333                         ax25->sk=NULL;
334                         sock_put(sk);
335                 }
336         } else {
337                 ax25_cb_put(ax25);
338         }
339 }
340
341 /*
342  * dl1bke 960311: set parameters for existing AX.25 connections,
343  *                includes a KILL command to abort any connection.
344  *                VERY useful for debugging ;-)
345  */
346 static int ax25_ctl_ioctl(const unsigned int cmd, void __user *arg)
347 {
348         struct ax25_ctl_struct ax25_ctl;
349         ax25_digi digi;
350         ax25_dev *ax25_dev;
351         ax25_cb *ax25;
352         unsigned int k;
353         int ret = 0;
354
355         if (copy_from_user(&ax25_ctl, arg, sizeof(ax25_ctl)))
356                 return -EFAULT;
357
358         if ((ax25_dev = ax25_addr_ax25dev(&ax25_ctl.port_addr)) == NULL)
359                 return -ENODEV;
360
361         if (ax25_ctl.digi_count > AX25_MAX_DIGIS)
362                 return -EINVAL;
363
364         if (ax25_ctl.arg > ULONG_MAX / HZ && ax25_ctl.cmd != AX25_KILL)
365                 return -EINVAL;
366
367         digi.ndigi = ax25_ctl.digi_count;
368         for (k = 0; k < digi.ndigi; k++)
369                 digi.calls[k] = ax25_ctl.digi_addr[k];
370
371         if ((ax25 = ax25_find_cb(&ax25_ctl.source_addr, &ax25_ctl.dest_addr, &digi, ax25_dev->dev)) == NULL)
372                 return -ENOTCONN;
373
374         switch (ax25_ctl.cmd) {
375         case AX25_KILL:
376                 ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
377 #ifdef CONFIG_AX25_DAMA_SLAVE
378                 if (ax25_dev->dama.slave && ax25->ax25_dev->values[AX25_VALUES_PROTOCOL] == AX25_PROTO_DAMA_SLAVE)
379                         ax25_dama_off(ax25);
380 #endif
381                 ax25_disconnect(ax25, ENETRESET);
382                 break;
383
384         case AX25_WINDOW:
385                 if (ax25->modulus == AX25_MODULUS) {
386                         if (ax25_ctl.arg < 1 || ax25_ctl.arg > 7)
387                                 goto einval_put;
388                 } else {
389                         if (ax25_ctl.arg < 1 || ax25_ctl.arg > 63)
390                                 goto einval_put;
391                 }
392                 ax25->window = ax25_ctl.arg;
393                 break;
394
395         case AX25_T1:
396                 if (ax25_ctl.arg < 1 || ax25_ctl.arg > ULONG_MAX / HZ)
397                         goto einval_put;
398                 ax25->rtt = (ax25_ctl.arg * HZ) / 2;
399                 ax25->t1  = ax25_ctl.arg * HZ;
400                 break;
401
402         case AX25_T2:
403                 if (ax25_ctl.arg < 1 || ax25_ctl.arg > ULONG_MAX / HZ)
404                         goto einval_put;
405                 ax25->t2 = ax25_ctl.arg * HZ;
406                 break;
407
408         case AX25_N2:
409                 if (ax25_ctl.arg < 1 || ax25_ctl.arg > 31)
410                         goto einval_put;
411                 ax25->n2count = 0;
412                 ax25->n2 = ax25_ctl.arg;
413                 break;
414
415         case AX25_T3:
416                 if (ax25_ctl.arg > ULONG_MAX / HZ)
417                         goto einval_put;
418                 ax25->t3 = ax25_ctl.arg * HZ;
419                 break;
420
421         case AX25_IDLE:
422                 if (ax25_ctl.arg > ULONG_MAX / (60 * HZ))
423                         goto einval_put;
424
425                 ax25->idle = ax25_ctl.arg * 60 * HZ;
426                 break;
427
428         case AX25_PACLEN:
429                 if (ax25_ctl.arg < 16 || ax25_ctl.arg > 65535)
430                         goto einval_put;
431                 ax25->paclen = ax25_ctl.arg;
432                 break;
433
434         default:
435                 goto einval_put;
436           }
437
438 out_put:
439         ax25_cb_put(ax25);
440         return ret;
441
442 einval_put:
443         ret = -EINVAL;
444         goto out_put;
445 }
446
447 static void ax25_fillin_cb_from_dev(ax25_cb *ax25, ax25_dev *ax25_dev)
448 {
449         ax25->rtt     = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]) / 2;
450         ax25->t1      = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T1]);
451         ax25->t2      = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T2]);
452         ax25->t3      = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_T3]);
453         ax25->n2      = ax25_dev->values[AX25_VALUES_N2];
454         ax25->paclen  = ax25_dev->values[AX25_VALUES_PACLEN];
455         ax25->idle    = msecs_to_jiffies(ax25_dev->values[AX25_VALUES_IDLE]);
456         ax25->backoff = ax25_dev->values[AX25_VALUES_BACKOFF];
457
458         if (ax25_dev->values[AX25_VALUES_AXDEFMODE]) {
459                 ax25->modulus = AX25_EMODULUS;
460                 ax25->window  = ax25_dev->values[AX25_VALUES_EWINDOW];
461         } else {
462                 ax25->modulus = AX25_MODULUS;
463                 ax25->window  = ax25_dev->values[AX25_VALUES_WINDOW];
464         }
465 }
466
467 /*
468  *      Fill in a created AX.25 created control block with the default
469  *      values for a particular device.
470  */
471 void ax25_fillin_cb(ax25_cb *ax25, ax25_dev *ax25_dev)
472 {
473         ax25->ax25_dev = ax25_dev;
474
475         if (ax25->ax25_dev != NULL) {
476                 ax25_fillin_cb_from_dev(ax25, ax25_dev);
477                 return;
478         }
479
480         /*
481          * No device, use kernel / AX.25 spec default values
482          */
483         ax25->rtt     = msecs_to_jiffies(AX25_DEF_T1) / 2;
484         ax25->t1      = msecs_to_jiffies(AX25_DEF_T1);
485         ax25->t2      = msecs_to_jiffies(AX25_DEF_T2);
486         ax25->t3      = msecs_to_jiffies(AX25_DEF_T3);
487         ax25->n2      = AX25_DEF_N2;
488         ax25->paclen  = AX25_DEF_PACLEN;
489         ax25->idle    = msecs_to_jiffies(AX25_DEF_IDLE);
490         ax25->backoff = AX25_DEF_BACKOFF;
491
492         if (AX25_DEF_AXDEFMODE) {
493                 ax25->modulus = AX25_EMODULUS;
494                 ax25->window  = AX25_DEF_EWINDOW;
495         } else {
496                 ax25->modulus = AX25_MODULUS;
497                 ax25->window  = AX25_DEF_WINDOW;
498         }
499 }
500
501 /*
502  * Create an empty AX.25 control block.
503  */
504 ax25_cb *ax25_create_cb(void)
505 {
506         ax25_cb *ax25;
507
508         if ((ax25 = kzalloc(sizeof(*ax25), GFP_ATOMIC)) == NULL)
509                 return NULL;
510
511         refcount_set(&ax25->refcount, 1);
512
513         skb_queue_head_init(&ax25->write_queue);
514         skb_queue_head_init(&ax25->frag_queue);
515         skb_queue_head_init(&ax25->ack_queue);
516         skb_queue_head_init(&ax25->reseq_queue);
517
518         ax25_setup_timers(ax25);
519
520         ax25_fillin_cb(ax25, NULL);
521
522         ax25->state = AX25_STATE_0;
523
524         return ax25;
525 }
526
527 /*
528  *      Handling for system calls applied via the various interfaces to an
529  *      AX25 socket object
530  */
531
532 static int ax25_setsockopt(struct socket *sock, int level, int optname,
533                 sockptr_t optval, unsigned int optlen)
534 {
535         struct sock *sk = sock->sk;
536         ax25_cb *ax25;
537         struct net_device *dev;
538         char devname[IFNAMSIZ];
539         unsigned int opt;
540         int res = 0;
541
542         if (level != SOL_AX25)
543                 return -ENOPROTOOPT;
544
545         if (optlen < sizeof(unsigned int))
546                 return -EINVAL;
547
548         if (copy_from_sockptr(&opt, optval, sizeof(unsigned int)))
549                 return -EFAULT;
550
551         lock_sock(sk);
552         ax25 = sk_to_ax25(sk);
553
554         switch (optname) {
555         case AX25_WINDOW:
556                 if (ax25->modulus == AX25_MODULUS) {
557                         if (opt < 1 || opt > 7) {
558                                 res = -EINVAL;
559                                 break;
560                         }
561                 } else {
562                         if (opt < 1 || opt > 63) {
563                                 res = -EINVAL;
564                                 break;
565                         }
566                 }
567                 ax25->window = opt;
568                 break;
569
570         case AX25_T1:
571                 if (opt < 1 || opt > UINT_MAX / HZ) {
572                         res = -EINVAL;
573                         break;
574                 }
575                 ax25->rtt = (opt * HZ) >> 1;
576                 ax25->t1  = opt * HZ;
577                 break;
578
579         case AX25_T2:
580                 if (opt < 1 || opt > UINT_MAX / HZ) {
581                         res = -EINVAL;
582                         break;
583                 }
584                 ax25->t2 = opt * HZ;
585                 break;
586
587         case AX25_N2:
588                 if (opt < 1 || opt > 31) {
589                         res = -EINVAL;
590                         break;
591                 }
592                 ax25->n2 = opt;
593                 break;
594
595         case AX25_T3:
596                 if (opt < 1 || opt > UINT_MAX / HZ) {
597                         res = -EINVAL;
598                         break;
599                 }
600                 ax25->t3 = opt * HZ;
601                 break;
602
603         case AX25_IDLE:
604                 if (opt > UINT_MAX / (60 * HZ)) {
605                         res = -EINVAL;
606                         break;
607                 }
608                 ax25->idle = opt * 60 * HZ;
609                 break;
610
611         case AX25_BACKOFF:
612                 if (opt > 2) {
613                         res = -EINVAL;
614                         break;
615                 }
616                 ax25->backoff = opt;
617                 break;
618
619         case AX25_EXTSEQ:
620                 ax25->modulus = opt ? AX25_EMODULUS : AX25_MODULUS;
621                 break;
622
623         case AX25_PIDINCL:
624                 ax25->pidincl = opt ? 1 : 0;
625                 break;
626
627         case AX25_IAMDIGI:
628                 ax25->iamdigi = opt ? 1 : 0;
629                 break;
630
631         case AX25_PACLEN:
632                 if (opt < 16 || opt > 65535) {
633                         res = -EINVAL;
634                         break;
635                 }
636                 ax25->paclen = opt;
637                 break;
638
639         case SO_BINDTODEVICE:
640                 if (optlen > IFNAMSIZ - 1)
641                         optlen = IFNAMSIZ - 1;
642
643                 memset(devname, 0, sizeof(devname));
644
645                 if (copy_from_sockptr(devname, optval, optlen)) {
646                         res = -EFAULT;
647                         break;
648                 }
649
650                 if (sk->sk_type == SOCK_SEQPACKET &&
651                    (sock->state != SS_UNCONNECTED ||
652                     sk->sk_state == TCP_LISTEN)) {
653                         res = -EADDRNOTAVAIL;
654                         break;
655                 }
656
657                 rtnl_lock();
658                 dev = __dev_get_by_name(&init_net, devname);
659                 if (!dev) {
660                         rtnl_unlock();
661                         res = -ENODEV;
662                         break;
663                 }
664
665                 ax25->ax25_dev = ax25_dev_ax25dev(dev);
666                 if (!ax25->ax25_dev) {
667                         rtnl_unlock();
668                         res = -ENODEV;
669                         break;
670                 }
671                 ax25_fillin_cb(ax25, ax25->ax25_dev);
672                 rtnl_unlock();
673                 break;
674
675         default:
676                 res = -ENOPROTOOPT;
677         }
678         release_sock(sk);
679
680         return res;
681 }
682
683 static int ax25_getsockopt(struct socket *sock, int level, int optname,
684         char __user *optval, int __user *optlen)
685 {
686         struct sock *sk = sock->sk;
687         ax25_cb *ax25;
688         struct ax25_dev *ax25_dev;
689         char devname[IFNAMSIZ];
690         void *valptr;
691         int val = 0;
692         int maxlen, length;
693
694         if (level != SOL_AX25)
695                 return -ENOPROTOOPT;
696
697         if (get_user(maxlen, optlen))
698                 return -EFAULT;
699
700         if (maxlen < 1)
701                 return -EFAULT;
702
703         valptr = (void *) &val;
704         length = min_t(unsigned int, maxlen, sizeof(int));
705
706         lock_sock(sk);
707         ax25 = sk_to_ax25(sk);
708
709         switch (optname) {
710         case AX25_WINDOW:
711                 val = ax25->window;
712                 break;
713
714         case AX25_T1:
715                 val = ax25->t1 / HZ;
716                 break;
717
718         case AX25_T2:
719                 val = ax25->t2 / HZ;
720                 break;
721
722         case AX25_N2:
723                 val = ax25->n2;
724                 break;
725
726         case AX25_T3:
727                 val = ax25->t3 / HZ;
728                 break;
729
730         case AX25_IDLE:
731                 val = ax25->idle / (60 * HZ);
732                 break;
733
734         case AX25_BACKOFF:
735                 val = ax25->backoff;
736                 break;
737
738         case AX25_EXTSEQ:
739                 val = (ax25->modulus == AX25_EMODULUS);
740                 break;
741
742         case AX25_PIDINCL:
743                 val = ax25->pidincl;
744                 break;
745
746         case AX25_IAMDIGI:
747                 val = ax25->iamdigi;
748                 break;
749
750         case AX25_PACLEN:
751                 val = ax25->paclen;
752                 break;
753
754         case SO_BINDTODEVICE:
755                 ax25_dev = ax25->ax25_dev;
756
757                 if (ax25_dev != NULL && ax25_dev->dev != NULL) {
758                         strlcpy(devname, ax25_dev->dev->name, sizeof(devname));
759                         length = strlen(devname) + 1;
760                 } else {
761                         *devname = '\0';
762                         length = 1;
763                 }
764
765                 valptr = (void *) devname;
766                 break;
767
768         default:
769                 release_sock(sk);
770                 return -ENOPROTOOPT;
771         }
772         release_sock(sk);
773
774         if (put_user(length, optlen))
775                 return -EFAULT;
776
777         return copy_to_user(optval, valptr, length) ? -EFAULT : 0;
778 }
779
780 static int ax25_listen(struct socket *sock, int backlog)
781 {
782         struct sock *sk = sock->sk;
783         int res = 0;
784
785         lock_sock(sk);
786         if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_LISTEN) {
787                 sk->sk_max_ack_backlog = backlog;
788                 sk->sk_state           = TCP_LISTEN;
789                 goto out;
790         }
791         res = -EOPNOTSUPP;
792
793 out:
794         release_sock(sk);
795
796         return res;
797 }
798
799 /*
800  * XXX: when creating ax25_sock we should update the .obj_size setting
801  * below.
802  */
803 static struct proto ax25_proto = {
804         .name     = "AX25",
805         .owner    = THIS_MODULE,
806         .obj_size = sizeof(struct ax25_sock),
807 };
808
809 static int ax25_create(struct net *net, struct socket *sock, int protocol,
810                        int kern)
811 {
812         struct sock *sk;
813         ax25_cb *ax25;
814
815         if (protocol < 0 || protocol > U8_MAX)
816                 return -EINVAL;
817
818         if (!net_eq(net, &init_net))
819                 return -EAFNOSUPPORT;
820
821         switch (sock->type) {
822         case SOCK_DGRAM:
823                 if (protocol == 0 || protocol == PF_AX25)
824                         protocol = AX25_P_TEXT;
825                 break;
826
827         case SOCK_SEQPACKET:
828                 switch (protocol) {
829                 case 0:
830                 case PF_AX25:   /* For CLX */
831                         protocol = AX25_P_TEXT;
832                         break;
833                 case AX25_P_SEGMENT:
834 #ifdef CONFIG_INET
835                 case AX25_P_ARP:
836                 case AX25_P_IP:
837 #endif
838 #ifdef CONFIG_NETROM
839                 case AX25_P_NETROM:
840 #endif
841 #ifdef CONFIG_ROSE
842                 case AX25_P_ROSE:
843 #endif
844                         return -ESOCKTNOSUPPORT;
845 #ifdef CONFIG_NETROM_MODULE
846                 case AX25_P_NETROM:
847                         if (ax25_protocol_is_registered(AX25_P_NETROM))
848                                 return -ESOCKTNOSUPPORT;
849                         break;
850 #endif
851 #ifdef CONFIG_ROSE_MODULE
852                 case AX25_P_ROSE:
853                         if (ax25_protocol_is_registered(AX25_P_ROSE))
854                                 return -ESOCKTNOSUPPORT;
855                         break;
856 #endif
857                 default:
858                         break;
859                 }
860                 break;
861
862         case SOCK_RAW:
863                 if (!capable(CAP_NET_RAW))
864                         return -EPERM;
865                 break;
866         default:
867                 return -ESOCKTNOSUPPORT;
868         }
869
870         sk = sk_alloc(net, PF_AX25, GFP_ATOMIC, &ax25_proto, kern);
871         if (sk == NULL)
872                 return -ENOMEM;
873
874         ax25 = ax25_sk(sk)->cb = ax25_create_cb();
875         if (!ax25) {
876                 sk_free(sk);
877                 return -ENOMEM;
878         }
879
880         sock_init_data(sock, sk);
881
882         sk->sk_destruct = ax25_free_sock;
883         sock->ops    = &ax25_proto_ops;
884         sk->sk_protocol = protocol;
885
886         ax25->sk    = sk;
887
888         return 0;
889 }
890
891 struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev)
892 {
893         struct sock *sk;
894         ax25_cb *ax25, *oax25;
895
896         sk = sk_alloc(sock_net(osk), PF_AX25, GFP_ATOMIC, osk->sk_prot, 0);
897         if (sk == NULL)
898                 return NULL;
899
900         if ((ax25 = ax25_create_cb()) == NULL) {
901                 sk_free(sk);
902                 return NULL;
903         }
904
905         switch (osk->sk_type) {
906         case SOCK_DGRAM:
907                 break;
908         case SOCK_SEQPACKET:
909                 break;
910         default:
911                 sk_free(sk);
912                 ax25_cb_put(ax25);
913                 return NULL;
914         }
915
916         sock_init_data(NULL, sk);
917
918         sk->sk_type     = osk->sk_type;
919         sk->sk_priority = osk->sk_priority;
920         sk->sk_protocol = osk->sk_protocol;
921         sk->sk_rcvbuf   = osk->sk_rcvbuf;
922         sk->sk_sndbuf   = osk->sk_sndbuf;
923         sk->sk_state    = TCP_ESTABLISHED;
924         sock_copy_flags(sk, osk);
925
926         oax25 = sk_to_ax25(osk);
927
928         ax25->modulus = oax25->modulus;
929         ax25->backoff = oax25->backoff;
930         ax25->pidincl = oax25->pidincl;
931         ax25->iamdigi = oax25->iamdigi;
932         ax25->rtt     = oax25->rtt;
933         ax25->t1      = oax25->t1;
934         ax25->t2      = oax25->t2;
935         ax25->t3      = oax25->t3;
936         ax25->n2      = oax25->n2;
937         ax25->idle    = oax25->idle;
938         ax25->paclen  = oax25->paclen;
939         ax25->window  = oax25->window;
940
941         ax25->ax25_dev    = ax25_dev;
942         ax25->source_addr = oax25->source_addr;
943
944         if (oax25->digipeat != NULL) {
945                 ax25->digipeat = kmemdup(oax25->digipeat, sizeof(ax25_digi),
946                                          GFP_ATOMIC);
947                 if (ax25->digipeat == NULL) {
948                         sk_free(sk);
949                         ax25_cb_put(ax25);
950                         return NULL;
951                 }
952         }
953
954         ax25_sk(sk)->cb = ax25;
955         sk->sk_destruct = ax25_free_sock;
956         ax25->sk    = sk;
957
958         return sk;
959 }
960
961 static int ax25_release(struct socket *sock)
962 {
963         struct sock *sk = sock->sk;
964         ax25_cb *ax25;
965
966         if (sk == NULL)
967                 return 0;
968
969         sock_hold(sk);
970         sock_orphan(sk);
971         lock_sock(sk);
972         ax25 = sk_to_ax25(sk);
973
974         if (sk->sk_type == SOCK_SEQPACKET) {
975                 switch (ax25->state) {
976                 case AX25_STATE_0:
977                         release_sock(sk);
978                         ax25_disconnect(ax25, 0);
979                         lock_sock(sk);
980                         ax25_destroy_socket(ax25);
981                         break;
982
983                 case AX25_STATE_1:
984                 case AX25_STATE_2:
985                         ax25_send_control(ax25, AX25_DISC, AX25_POLLON, AX25_COMMAND);
986                         release_sock(sk);
987                         ax25_disconnect(ax25, 0);
988                         lock_sock(sk);
989                         if (!sock_flag(ax25->sk, SOCK_DESTROY))
990                                 ax25_destroy_socket(ax25);
991                         break;
992
993                 case AX25_STATE_3:
994                 case AX25_STATE_4:
995                         ax25_clear_queues(ax25);
996                         ax25->n2count = 0;
997
998                         switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
999                         case AX25_PROTO_STD_SIMPLEX:
1000                         case AX25_PROTO_STD_DUPLEX:
1001                                 ax25_send_control(ax25,
1002                                                   AX25_DISC,
1003                                                   AX25_POLLON,
1004                                                   AX25_COMMAND);
1005                                 ax25_stop_t2timer(ax25);
1006                                 ax25_stop_t3timer(ax25);
1007                                 ax25_stop_idletimer(ax25);
1008                                 break;
1009 #ifdef CONFIG_AX25_DAMA_SLAVE
1010                         case AX25_PROTO_DAMA_SLAVE:
1011                                 ax25_stop_t3timer(ax25);
1012                                 ax25_stop_idletimer(ax25);
1013                                 break;
1014 #endif
1015                         }
1016                         ax25_calculate_t1(ax25);
1017                         ax25_start_t1timer(ax25);
1018                         ax25->state = AX25_STATE_2;
1019                         sk->sk_state                = TCP_CLOSE;
1020                         sk->sk_shutdown            |= SEND_SHUTDOWN;
1021                         sk->sk_state_change(sk);
1022                         sock_set_flag(sk, SOCK_DESTROY);
1023                         break;
1024
1025                 default:
1026                         break;
1027                 }
1028         } else {
1029                 sk->sk_state     = TCP_CLOSE;
1030                 sk->sk_shutdown |= SEND_SHUTDOWN;
1031                 sk->sk_state_change(sk);
1032                 ax25_destroy_socket(ax25);
1033         }
1034
1035         sock->sk   = NULL;
1036         release_sock(sk);
1037         sock_put(sk);
1038
1039         return 0;
1040 }
1041
1042 /*
1043  *      We support a funny extension here so you can (as root) give any callsign
1044  *      digipeated via a local address as source. This hack is obsolete now
1045  *      that we've implemented support for SO_BINDTODEVICE. It is however small
1046  *      and trivially backward compatible.
1047  */
1048 static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
1049 {
1050         struct sock *sk = sock->sk;
1051         struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
1052         ax25_dev *ax25_dev = NULL;
1053         ax25_uid_assoc *user;
1054         ax25_address call;
1055         ax25_cb *ax25;
1056         int err = 0;
1057
1058         if (addr_len != sizeof(struct sockaddr_ax25) &&
1059             addr_len != sizeof(struct full_sockaddr_ax25))
1060                 /* support for old structure may go away some time
1061                  * ax25_bind(): uses old (6 digipeater) socket structure.
1062                  */
1063                 if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1064                     (addr_len > sizeof(struct full_sockaddr_ax25)))
1065                         return -EINVAL;
1066
1067         if (addr->fsa_ax25.sax25_family != AF_AX25)
1068                 return -EINVAL;
1069
1070         user = ax25_findbyuid(current_euid());
1071         if (user) {
1072                 call = user->call;
1073                 ax25_uid_put(user);
1074         } else {
1075                 if (ax25_uid_policy && !capable(CAP_NET_ADMIN))
1076                         return -EACCES;
1077
1078                 call = addr->fsa_ax25.sax25_call;
1079         }
1080
1081         lock_sock(sk);
1082
1083         ax25 = sk_to_ax25(sk);
1084         if (!sock_flag(sk, SOCK_ZAPPED)) {
1085                 err = -EINVAL;
1086                 goto out;
1087         }
1088
1089         ax25->source_addr = call;
1090
1091         /*
1092          * User already set interface with SO_BINDTODEVICE
1093          */
1094         if (ax25->ax25_dev != NULL)
1095                 goto done;
1096
1097         if (addr_len > sizeof(struct sockaddr_ax25) && addr->fsa_ax25.sax25_ndigis == 1) {
1098                 if (ax25cmp(&addr->fsa_digipeater[0], &null_ax25_address) != 0 &&
1099                     (ax25_dev = ax25_addr_ax25dev(&addr->fsa_digipeater[0])) == NULL) {
1100                         err = -EADDRNOTAVAIL;
1101                         goto out;
1102                 }
1103         } else {
1104                 if ((ax25_dev = ax25_addr_ax25dev(&addr->fsa_ax25.sax25_call)) == NULL) {
1105                         err = -EADDRNOTAVAIL;
1106                         goto out;
1107                 }
1108         }
1109
1110         if (ax25_dev != NULL)
1111                 ax25_fillin_cb(ax25, ax25_dev);
1112
1113 done:
1114         ax25_cb_add(ax25);
1115         sock_reset_flag(sk, SOCK_ZAPPED);
1116
1117 out:
1118         release_sock(sk);
1119
1120         return err;
1121 }
1122
1123 /*
1124  *      FIXME: nonblock behaviour looks like it may have a bug.
1125  */
1126 static int __must_check ax25_connect(struct socket *sock,
1127         struct sockaddr *uaddr, int addr_len, int flags)
1128 {
1129         struct sock *sk = sock->sk;
1130         ax25_cb *ax25 = sk_to_ax25(sk), *ax25t;
1131         struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1132         ax25_digi *digi = NULL;
1133         int ct = 0, err = 0;
1134
1135         /*
1136          * some sanity checks. code further down depends on this
1137          */
1138
1139         if (addr_len == sizeof(struct sockaddr_ax25))
1140                 /* support for this will go away in early 2.5.x
1141                  * ax25_connect(): uses obsolete socket structure
1142                  */
1143                 ;
1144         else if (addr_len != sizeof(struct full_sockaddr_ax25))
1145                 /* support for old structure may go away some time
1146                  * ax25_connect(): uses old (6 digipeater) socket structure.
1147                  */
1148                 if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1149                     (addr_len > sizeof(struct full_sockaddr_ax25)))
1150                         return -EINVAL;
1151
1152
1153         if (fsa->fsa_ax25.sax25_family != AF_AX25)
1154                 return -EINVAL;
1155
1156         lock_sock(sk);
1157
1158         /* deal with restarts */
1159         if (sock->state == SS_CONNECTING) {
1160                 switch (sk->sk_state) {
1161                 case TCP_SYN_SENT: /* still trying */
1162                         err = -EINPROGRESS;
1163                         goto out_release;
1164
1165                 case TCP_ESTABLISHED: /* connection established */
1166                         sock->state = SS_CONNECTED;
1167                         goto out_release;
1168
1169                 case TCP_CLOSE: /* connection refused */
1170                         sock->state = SS_UNCONNECTED;
1171                         err = -ECONNREFUSED;
1172                         goto out_release;
1173                 }
1174         }
1175
1176         if (sk->sk_state == TCP_ESTABLISHED && sk->sk_type == SOCK_SEQPACKET) {
1177                 err = -EISCONN; /* No reconnect on a seqpacket socket */
1178                 goto out_release;
1179         }
1180
1181         sk->sk_state   = TCP_CLOSE;
1182         sock->state = SS_UNCONNECTED;
1183
1184         kfree(ax25->digipeat);
1185         ax25->digipeat = NULL;
1186
1187         /*
1188          *      Handle digi-peaters to be used.
1189          */
1190         if (addr_len > sizeof(struct sockaddr_ax25) &&
1191             fsa->fsa_ax25.sax25_ndigis != 0) {
1192                 /* Valid number of digipeaters ? */
1193                 if (fsa->fsa_ax25.sax25_ndigis < 1 ||
1194                     fsa->fsa_ax25.sax25_ndigis > AX25_MAX_DIGIS ||
1195                     addr_len < sizeof(struct sockaddr_ax25) +
1196                     sizeof(ax25_address) * fsa->fsa_ax25.sax25_ndigis) {
1197                         err = -EINVAL;
1198                         goto out_release;
1199                 }
1200
1201                 if ((digi = kmalloc(sizeof(ax25_digi), GFP_KERNEL)) == NULL) {
1202                         err = -ENOBUFS;
1203                         goto out_release;
1204                 }
1205
1206                 digi->ndigi      = fsa->fsa_ax25.sax25_ndigis;
1207                 digi->lastrepeat = -1;
1208
1209                 while (ct < fsa->fsa_ax25.sax25_ndigis) {
1210                         if ((fsa->fsa_digipeater[ct].ax25_call[6] &
1211                              AX25_HBIT) && ax25->iamdigi) {
1212                                 digi->repeated[ct] = 1;
1213                                 digi->lastrepeat   = ct;
1214                         } else {
1215                                 digi->repeated[ct] = 0;
1216                         }
1217                         digi->calls[ct] = fsa->fsa_digipeater[ct];
1218                         ct++;
1219                 }
1220         }
1221
1222         /*
1223          *      Must bind first - autobinding in this may or may not work. If
1224          *      the socket is already bound, check to see if the device has
1225          *      been filled in, error if it hasn't.
1226          */
1227         if (sock_flag(sk, SOCK_ZAPPED)) {
1228                 /* check if we can remove this feature. It is broken. */
1229                 printk(KERN_WARNING "ax25_connect(): %s uses autobind, please contact jreuter@yaina.de\n",
1230                         current->comm);
1231                 if ((err = ax25_rt_autobind(ax25, &fsa->fsa_ax25.sax25_call)) < 0) {
1232                         kfree(digi);
1233                         goto out_release;
1234                 }
1235
1236                 ax25_fillin_cb(ax25, ax25->ax25_dev);
1237                 ax25_cb_add(ax25);
1238         } else {
1239                 if (ax25->ax25_dev == NULL) {
1240                         kfree(digi);
1241                         err = -EHOSTUNREACH;
1242                         goto out_release;
1243                 }
1244         }
1245
1246         if (sk->sk_type == SOCK_SEQPACKET &&
1247             (ax25t=ax25_find_cb(&ax25->source_addr, &fsa->fsa_ax25.sax25_call, digi,
1248                          ax25->ax25_dev->dev))) {
1249                 kfree(digi);
1250                 err = -EADDRINUSE;              /* Already such a connection */
1251                 ax25_cb_put(ax25t);
1252                 goto out_release;
1253         }
1254
1255         ax25->dest_addr = fsa->fsa_ax25.sax25_call;
1256         ax25->digipeat  = digi;
1257
1258         /* First the easy one */
1259         if (sk->sk_type != SOCK_SEQPACKET) {
1260                 sock->state = SS_CONNECTED;
1261                 sk->sk_state   = TCP_ESTABLISHED;
1262                 goto out_release;
1263         }
1264
1265         /* Move to connecting socket, ax.25 lapb WAIT_UA.. */
1266         sock->state        = SS_CONNECTING;
1267         sk->sk_state          = TCP_SYN_SENT;
1268
1269         switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) {
1270         case AX25_PROTO_STD_SIMPLEX:
1271         case AX25_PROTO_STD_DUPLEX:
1272                 ax25_std_establish_data_link(ax25);
1273                 break;
1274
1275 #ifdef CONFIG_AX25_DAMA_SLAVE
1276         case AX25_PROTO_DAMA_SLAVE:
1277                 ax25->modulus = AX25_MODULUS;
1278                 ax25->window  = ax25->ax25_dev->values[AX25_VALUES_WINDOW];
1279                 if (ax25->ax25_dev->dama.slave)
1280                         ax25_ds_establish_data_link(ax25);
1281                 else
1282                         ax25_std_establish_data_link(ax25);
1283                 break;
1284 #endif
1285         }
1286
1287         ax25->state = AX25_STATE_1;
1288
1289         ax25_start_heartbeat(ax25);
1290
1291         /* Now the loop */
1292         if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) {
1293                 err = -EINPROGRESS;
1294                 goto out_release;
1295         }
1296
1297         if (sk->sk_state == TCP_SYN_SENT) {
1298                 DEFINE_WAIT(wait);
1299
1300                 for (;;) {
1301                         prepare_to_wait(sk_sleep(sk), &wait,
1302                                         TASK_INTERRUPTIBLE);
1303                         if (sk->sk_state != TCP_SYN_SENT)
1304                                 break;
1305                         if (!signal_pending(current)) {
1306                                 release_sock(sk);
1307                                 schedule();
1308                                 lock_sock(sk);
1309                                 continue;
1310                         }
1311                         err = -ERESTARTSYS;
1312                         break;
1313                 }
1314                 finish_wait(sk_sleep(sk), &wait);
1315
1316                 if (err)
1317                         goto out_release;
1318         }
1319
1320         if (sk->sk_state != TCP_ESTABLISHED) {
1321                 /* Not in ABM, not in WAIT_UA -> failed */
1322                 sock->state = SS_UNCONNECTED;
1323                 err = sock_error(sk);   /* Always set at this point */
1324                 goto out_release;
1325         }
1326
1327         sock->state = SS_CONNECTED;
1328
1329         err = 0;
1330 out_release:
1331         release_sock(sk);
1332
1333         return err;
1334 }
1335
1336 static int ax25_accept(struct socket *sock, struct socket *newsock, int flags,
1337                        bool kern)
1338 {
1339         struct sk_buff *skb;
1340         struct sock *newsk;
1341         DEFINE_WAIT(wait);
1342         struct sock *sk;
1343         int err = 0;
1344
1345         if (sock->state != SS_UNCONNECTED)
1346                 return -EINVAL;
1347
1348         if ((sk = sock->sk) == NULL)
1349                 return -EINVAL;
1350
1351         lock_sock(sk);
1352         if (sk->sk_type != SOCK_SEQPACKET) {
1353                 err = -EOPNOTSUPP;
1354                 goto out;
1355         }
1356
1357         if (sk->sk_state != TCP_LISTEN) {
1358                 err = -EINVAL;
1359                 goto out;
1360         }
1361
1362         /*
1363          *      The read queue this time is holding sockets ready to use
1364          *      hooked into the SABM we saved
1365          */
1366         for (;;) {
1367                 prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE);
1368                 skb = skb_dequeue(&sk->sk_receive_queue);
1369                 if (skb)
1370                         break;
1371
1372                 if (flags & O_NONBLOCK) {
1373                         err = -EWOULDBLOCK;
1374                         break;
1375                 }
1376                 if (!signal_pending(current)) {
1377                         release_sock(sk);
1378                         schedule();
1379                         lock_sock(sk);
1380                         continue;
1381                 }
1382                 err = -ERESTARTSYS;
1383                 break;
1384         }
1385         finish_wait(sk_sleep(sk), &wait);
1386
1387         if (err)
1388                 goto out;
1389
1390         newsk            = skb->sk;
1391         sock_graft(newsk, newsock);
1392
1393         /* Now attach up the new socket */
1394         kfree_skb(skb);
1395         sk_acceptq_removed(sk);
1396         newsock->state = SS_CONNECTED;
1397
1398 out:
1399         release_sock(sk);
1400
1401         return err;
1402 }
1403
1404 static int ax25_getname(struct socket *sock, struct sockaddr *uaddr,
1405         int peer)
1406 {
1407         struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)uaddr;
1408         struct sock *sk = sock->sk;
1409         unsigned char ndigi, i;
1410         ax25_cb *ax25;
1411         int err = 0;
1412
1413         memset(fsa, 0, sizeof(*fsa));
1414         lock_sock(sk);
1415         ax25 = sk_to_ax25(sk);
1416
1417         if (peer != 0) {
1418                 if (sk->sk_state != TCP_ESTABLISHED) {
1419                         err = -ENOTCONN;
1420                         goto out;
1421                 }
1422
1423                 fsa->fsa_ax25.sax25_family = AF_AX25;
1424                 fsa->fsa_ax25.sax25_call   = ax25->dest_addr;
1425
1426                 if (ax25->digipeat != NULL) {
1427                         ndigi = ax25->digipeat->ndigi;
1428                         fsa->fsa_ax25.sax25_ndigis = ndigi;
1429                         for (i = 0; i < ndigi; i++)
1430                                 fsa->fsa_digipeater[i] =
1431                                                 ax25->digipeat->calls[i];
1432                 }
1433         } else {
1434                 fsa->fsa_ax25.sax25_family = AF_AX25;
1435                 fsa->fsa_ax25.sax25_call   = ax25->source_addr;
1436                 fsa->fsa_ax25.sax25_ndigis = 1;
1437                 if (ax25->ax25_dev != NULL) {
1438                         memcpy(&fsa->fsa_digipeater[0],
1439                                ax25->ax25_dev->dev->dev_addr, AX25_ADDR_LEN);
1440                 } else {
1441                         fsa->fsa_digipeater[0] = null_ax25_address;
1442                 }
1443         }
1444         err = sizeof (struct full_sockaddr_ax25);
1445
1446 out:
1447         release_sock(sk);
1448
1449         return err;
1450 }
1451
1452 static int ax25_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
1453 {
1454         DECLARE_SOCKADDR(struct sockaddr_ax25 *, usax, msg->msg_name);
1455         struct sock *sk = sock->sk;
1456         struct sockaddr_ax25 sax;
1457         struct sk_buff *skb;
1458         ax25_digi dtmp, *dp;
1459         ax25_cb *ax25;
1460         size_t size;
1461         int lv, err, addr_len = msg->msg_namelen;
1462
1463         if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
1464                 return -EINVAL;
1465
1466         lock_sock(sk);
1467         ax25 = sk_to_ax25(sk);
1468
1469         if (sock_flag(sk, SOCK_ZAPPED)) {
1470                 err = -EADDRNOTAVAIL;
1471                 goto out;
1472         }
1473
1474         if (sk->sk_shutdown & SEND_SHUTDOWN) {
1475                 send_sig(SIGPIPE, current, 0);
1476                 err = -EPIPE;
1477                 goto out;
1478         }
1479
1480         if (ax25->ax25_dev == NULL) {
1481                 err = -ENETUNREACH;
1482                 goto out;
1483         }
1484
1485         if (len > ax25->ax25_dev->dev->mtu) {
1486                 err = -EMSGSIZE;
1487                 goto out;
1488         }
1489
1490         if (usax != NULL) {
1491                 if (usax->sax25_family != AF_AX25) {
1492                         err = -EINVAL;
1493                         goto out;
1494                 }
1495
1496                 if (addr_len == sizeof(struct sockaddr_ax25))
1497                         /* ax25_sendmsg(): uses obsolete socket structure */
1498                         ;
1499                 else if (addr_len != sizeof(struct full_sockaddr_ax25))
1500                         /* support for old structure may go away some time
1501                          * ax25_sendmsg(): uses old (6 digipeater)
1502                          * socket structure.
1503                          */
1504                         if ((addr_len < sizeof(struct sockaddr_ax25) + sizeof(ax25_address) * 6) ||
1505                             (addr_len > sizeof(struct full_sockaddr_ax25))) {
1506                                 err = -EINVAL;
1507                                 goto out;
1508                         }
1509
1510
1511                 if (addr_len > sizeof(struct sockaddr_ax25) && usax->sax25_ndigis != 0) {
1512                         int ct           = 0;
1513                         struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)usax;
1514
1515                         /* Valid number of digipeaters ? */
1516                         if (usax->sax25_ndigis < 1 ||
1517                             usax->sax25_ndigis > AX25_MAX_DIGIS ||
1518                             addr_len < sizeof(struct sockaddr_ax25) +
1519                             sizeof(ax25_address) * usax->sax25_ndigis) {
1520                                 err = -EINVAL;
1521                                 goto out;
1522                         }
1523
1524                         dtmp.ndigi      = usax->sax25_ndigis;
1525
1526                         while (ct < usax->sax25_ndigis) {
1527                                 dtmp.repeated[ct] = 0;
1528                                 dtmp.calls[ct]    = fsa->fsa_digipeater[ct];
1529                                 ct++;
1530                         }
1531
1532                         dtmp.lastrepeat = 0;
1533                 }
1534
1535                 sax = *usax;
1536                 if (sk->sk_type == SOCK_SEQPACKET &&
1537                     ax25cmp(&ax25->dest_addr, &sax.sax25_call)) {
1538                         err = -EISCONN;
1539                         goto out;
1540                 }
1541                 if (usax->sax25_ndigis == 0)
1542                         dp = NULL;
1543                 else
1544                         dp = &dtmp;
1545         } else {
1546                 /*
1547                  *      FIXME: 1003.1g - if the socket is like this because
1548                  *      it has become closed (not started closed) and is VC
1549                  *      we ought to SIGPIPE, EPIPE
1550                  */
1551                 if (sk->sk_state != TCP_ESTABLISHED) {
1552                         err = -ENOTCONN;
1553                         goto out;
1554                 }
1555                 sax.sax25_family = AF_AX25;
1556                 sax.sax25_call   = ax25->dest_addr;
1557                 dp = ax25->digipeat;
1558         }
1559
1560         /* Build a packet */
1561         /* Assume the worst case */
1562         size = len + ax25->ax25_dev->dev->hard_header_len;
1563
1564         skb = sock_alloc_send_skb(sk, size, msg->msg_flags&MSG_DONTWAIT, &err);
1565         if (skb == NULL)
1566                 goto out;
1567
1568         skb_reserve(skb, size - len);
1569
1570         /* User data follows immediately after the AX.25 data */
1571         if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
1572                 err = -EFAULT;
1573                 kfree_skb(skb);
1574                 goto out;
1575         }
1576
1577         skb_reset_network_header(skb);
1578
1579         /* Add the PID if one is not supplied by the user in the skb */
1580         if (!ax25->pidincl)
1581                 *(u8 *)skb_push(skb, 1) = sk->sk_protocol;
1582
1583         if (sk->sk_type == SOCK_SEQPACKET) {
1584                 /* Connected mode sockets go via the LAPB machine */
1585                 if (sk->sk_state != TCP_ESTABLISHED) {
1586                         kfree_skb(skb);
1587                         err = -ENOTCONN;
1588                         goto out;
1589                 }
1590
1591                 /* Shove it onto the queue and kick */
1592                 ax25_output(ax25, ax25->paclen, skb);
1593
1594                 err = len;
1595                 goto out;
1596         }
1597
1598         skb_push(skb, 1 + ax25_addr_size(dp));
1599
1600         /* Building AX.25 Header */
1601
1602         /* Build an AX.25 header */
1603         lv = ax25_addr_build(skb->data, &ax25->source_addr, &sax.sax25_call,
1604                              dp, AX25_COMMAND, AX25_MODULUS);
1605
1606         skb_set_transport_header(skb, lv);
1607
1608         *skb_transport_header(skb) = AX25_UI;
1609
1610         /* Datagram frames go straight out of the door as UI */
1611         ax25_queue_xmit(skb, ax25->ax25_dev->dev);
1612
1613         err = len;
1614
1615 out:
1616         release_sock(sk);
1617
1618         return err;
1619 }
1620
1621 static int ax25_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
1622                         int flags)
1623 {
1624         struct sock *sk = sock->sk;
1625         struct sk_buff *skb;
1626         int copied;
1627         int err = 0;
1628
1629         lock_sock(sk);
1630         /*
1631          *      This works for seqpacket too. The receiver has ordered the
1632          *      queue for us! We do one quick check first though
1633          */
1634         if (sk->sk_type == SOCK_SEQPACKET && sk->sk_state != TCP_ESTABLISHED) {
1635                 err =  -ENOTCONN;
1636                 goto out;
1637         }
1638
1639         /* Now we can treat all alike */
1640         skb = skb_recv_datagram(sk, flags & ~MSG_DONTWAIT,
1641                                 flags & MSG_DONTWAIT, &err);
1642         if (skb == NULL)
1643                 goto out;
1644
1645         if (!sk_to_ax25(sk)->pidincl)
1646                 skb_pull(skb, 1);               /* Remove PID */
1647
1648         skb_reset_transport_header(skb);
1649         copied = skb->len;
1650
1651         if (copied > size) {
1652                 copied = size;
1653                 msg->msg_flags |= MSG_TRUNC;
1654         }
1655
1656         skb_copy_datagram_msg(skb, 0, msg, copied);
1657
1658         if (msg->msg_name) {
1659                 ax25_digi digi;
1660                 ax25_address src;
1661                 const unsigned char *mac = skb_mac_header(skb);
1662                 DECLARE_SOCKADDR(struct sockaddr_ax25 *, sax, msg->msg_name);
1663
1664                 memset(sax, 0, sizeof(struct full_sockaddr_ax25));
1665                 ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
1666                                 &digi, NULL, NULL);
1667                 sax->sax25_family = AF_AX25;
1668                 /* We set this correctly, even though we may not let the
1669                    application know the digi calls further down (because it
1670                    did NOT ask to know them).  This could get political... **/
1671                 sax->sax25_ndigis = digi.ndigi;
1672                 sax->sax25_call   = src;
1673
1674                 if (sax->sax25_ndigis != 0) {
1675                         int ct;
1676                         struct full_sockaddr_ax25 *fsa = (struct full_sockaddr_ax25 *)sax;
1677
1678                         for (ct = 0; ct < digi.ndigi; ct++)
1679                                 fsa->fsa_digipeater[ct] = digi.calls[ct];
1680                 }
1681                 msg->msg_namelen = sizeof(struct full_sockaddr_ax25);
1682         }
1683
1684         skb_free_datagram(sk, skb);
1685         err = copied;
1686
1687 out:
1688         release_sock(sk);
1689
1690         return err;
1691 }
1692
1693 static int ax25_shutdown(struct socket *sk, int how)
1694 {
1695         /* FIXME - generate DM and RNR states */
1696         return -EOPNOTSUPP;
1697 }
1698
1699 static int ax25_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
1700 {
1701         struct sock *sk = sock->sk;
1702         void __user *argp = (void __user *)arg;
1703         int res = 0;
1704
1705         lock_sock(sk);
1706         switch (cmd) {
1707         case TIOCOUTQ: {
1708                 long amount;
1709
1710                 amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
1711                 if (amount < 0)
1712                         amount = 0;
1713                 res = put_user(amount, (int __user *)argp);
1714                 break;
1715         }
1716
1717         case TIOCINQ: {
1718                 struct sk_buff *skb;
1719                 long amount = 0L;
1720                 /* These two are safe on a single CPU system as only user tasks fiddle here */
1721                 if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
1722                         amount = skb->len;
1723                 res = put_user(amount, (int __user *) argp);
1724                 break;
1725         }
1726
1727         case SIOCAX25ADDUID:    /* Add a uid to the uid/call map table */
1728         case SIOCAX25DELUID:    /* Delete a uid from the uid/call map table */
1729         case SIOCAX25GETUID: {
1730                 struct sockaddr_ax25 sax25;
1731                 if (copy_from_user(&sax25, argp, sizeof(sax25))) {
1732                         res = -EFAULT;
1733                         break;
1734                 }
1735                 res = ax25_uid_ioctl(cmd, &sax25);
1736                 break;
1737         }
1738
1739         case SIOCAX25NOUID: {   /* Set the default policy (default/bar) */
1740                 long amount;
1741                 if (!capable(CAP_NET_ADMIN)) {
1742                         res = -EPERM;
1743                         break;
1744                 }
1745                 if (get_user(amount, (long __user *)argp)) {
1746                         res = -EFAULT;
1747                         break;
1748                 }
1749                 if (amount < 0 || amount > AX25_NOUID_BLOCK) {
1750                         res = -EINVAL;
1751                         break;
1752                 }
1753                 ax25_uid_policy = amount;
1754                 res = 0;
1755                 break;
1756         }
1757
1758         case SIOCADDRT:
1759         case SIOCDELRT:
1760         case SIOCAX25OPTRT:
1761                 if (!capable(CAP_NET_ADMIN)) {
1762                         res = -EPERM;
1763                         break;
1764                 }
1765                 res = ax25_rt_ioctl(cmd, argp);
1766                 break;
1767
1768         case SIOCAX25CTLCON:
1769                 if (!capable(CAP_NET_ADMIN)) {
1770                         res = -EPERM;
1771                         break;
1772                 }
1773                 res = ax25_ctl_ioctl(cmd, argp);
1774                 break;
1775
1776         case SIOCAX25GETINFO:
1777         case SIOCAX25GETINFOOLD: {
1778                 ax25_cb *ax25 = sk_to_ax25(sk);
1779                 struct ax25_info_struct ax25_info;
1780
1781                 ax25_info.t1        = ax25->t1   / HZ;
1782                 ax25_info.t2        = ax25->t2   / HZ;
1783                 ax25_info.t3        = ax25->t3   / HZ;
1784                 ax25_info.idle      = ax25->idle / (60 * HZ);
1785                 ax25_info.n2        = ax25->n2;
1786                 ax25_info.t1timer   = ax25_display_timer(&ax25->t1timer)   / HZ;
1787                 ax25_info.t2timer   = ax25_display_timer(&ax25->t2timer)   / HZ;
1788                 ax25_info.t3timer   = ax25_display_timer(&ax25->t3timer)   / HZ;
1789                 ax25_info.idletimer = ax25_display_timer(&ax25->idletimer) / (60 * HZ);
1790                 ax25_info.n2count   = ax25->n2count;
1791                 ax25_info.state     = ax25->state;
1792                 ax25_info.rcv_q     = sk_rmem_alloc_get(sk);
1793                 ax25_info.snd_q     = sk_wmem_alloc_get(sk);
1794                 ax25_info.vs        = ax25->vs;
1795                 ax25_info.vr        = ax25->vr;
1796                 ax25_info.va        = ax25->va;
1797                 ax25_info.vs_max    = ax25->vs; /* reserved */
1798                 ax25_info.paclen    = ax25->paclen;
1799                 ax25_info.window    = ax25->window;
1800
1801                 /* old structure? */
1802                 if (cmd == SIOCAX25GETINFOOLD) {
1803                         static int warned = 0;
1804                         if (!warned) {
1805                                 printk(KERN_INFO "%s uses old SIOCAX25GETINFO\n",
1806                                         current->comm);
1807                                 warned=1;
1808                         }
1809
1810                         if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct_deprecated))) {
1811                                 res = -EFAULT;
1812                                 break;
1813                         }
1814                 } else {
1815                         if (copy_to_user(argp, &ax25_info, sizeof(struct ax25_info_struct))) {
1816                                 res = -EINVAL;
1817                                 break;
1818                         }
1819                 }
1820                 res = 0;
1821                 break;
1822         }
1823
1824         case SIOCAX25ADDFWD:
1825         case SIOCAX25DELFWD: {
1826                 struct ax25_fwd_struct ax25_fwd;
1827                 if (!capable(CAP_NET_ADMIN)) {
1828                         res = -EPERM;
1829                         break;
1830                 }
1831                 if (copy_from_user(&ax25_fwd, argp, sizeof(ax25_fwd))) {
1832                         res = -EFAULT;
1833                         break;
1834                 }
1835                 res = ax25_fwd_ioctl(cmd, &ax25_fwd);
1836                 break;
1837         }
1838
1839         case SIOCGIFADDR:
1840         case SIOCSIFADDR:
1841         case SIOCGIFDSTADDR:
1842         case SIOCSIFDSTADDR:
1843         case SIOCGIFBRDADDR:
1844         case SIOCSIFBRDADDR:
1845         case SIOCGIFNETMASK:
1846         case SIOCSIFNETMASK:
1847         case SIOCGIFMETRIC:
1848         case SIOCSIFMETRIC:
1849                 res = -EINVAL;
1850                 break;
1851
1852         default:
1853                 res = -ENOIOCTLCMD;
1854                 break;
1855         }
1856         release_sock(sk);
1857
1858         return res;
1859 }
1860
1861 #ifdef CONFIG_PROC_FS
1862
1863 static void *ax25_info_start(struct seq_file *seq, loff_t *pos)
1864         __acquires(ax25_list_lock)
1865 {
1866         spin_lock_bh(&ax25_list_lock);
1867         return seq_hlist_start(&ax25_list, *pos);
1868 }
1869
1870 static void *ax25_info_next(struct seq_file *seq, void *v, loff_t *pos)
1871 {
1872         return seq_hlist_next(v, &ax25_list, pos);
1873 }
1874
1875 static void ax25_info_stop(struct seq_file *seq, void *v)
1876         __releases(ax25_list_lock)
1877 {
1878         spin_unlock_bh(&ax25_list_lock);
1879 }
1880
1881 static int ax25_info_show(struct seq_file *seq, void *v)
1882 {
1883         ax25_cb *ax25 = hlist_entry(v, struct ax25_cb, ax25_node);
1884         char buf[11];
1885         int k;
1886
1887
1888         /*
1889          * New format:
1890          * magic dev src_addr dest_addr,digi1,digi2,.. st vs vr va t1 t1 t2 t2 t3 t3 idle idle n2 n2 rtt window paclen Snd-Q Rcv-Q inode
1891          */
1892
1893         seq_printf(seq, "%p %s %s%s ",
1894                    ax25,
1895                    ax25->ax25_dev == NULL? "???" : ax25->ax25_dev->dev->name,
1896                    ax2asc(buf, &ax25->source_addr),
1897                    ax25->iamdigi? "*":"");
1898         seq_printf(seq, "%s", ax2asc(buf, &ax25->dest_addr));
1899
1900         for (k=0; (ax25->digipeat != NULL) && (k < ax25->digipeat->ndigi); k++) {
1901                 seq_printf(seq, ",%s%s",
1902                            ax2asc(buf, &ax25->digipeat->calls[k]),
1903                            ax25->digipeat->repeated[k]? "*":"");
1904         }
1905
1906         seq_printf(seq, " %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %d %d",
1907                    ax25->state,
1908                    ax25->vs, ax25->vr, ax25->va,
1909                    ax25_display_timer(&ax25->t1timer) / HZ, ax25->t1 / HZ,
1910                    ax25_display_timer(&ax25->t2timer) / HZ, ax25->t2 / HZ,
1911                    ax25_display_timer(&ax25->t3timer) / HZ, ax25->t3 / HZ,
1912                    ax25_display_timer(&ax25->idletimer) / (60 * HZ),
1913                    ax25->idle / (60 * HZ),
1914                    ax25->n2count, ax25->n2,
1915                    ax25->rtt / HZ,
1916                    ax25->window,
1917                    ax25->paclen);
1918
1919         if (ax25->sk != NULL) {
1920                 seq_printf(seq, " %d %d %lu\n",
1921                            sk_wmem_alloc_get(ax25->sk),
1922                            sk_rmem_alloc_get(ax25->sk),
1923                            sock_i_ino(ax25->sk));
1924         } else {
1925                 seq_puts(seq, " * * *\n");
1926         }
1927         return 0;
1928 }
1929
1930 static const struct seq_operations ax25_info_seqops = {
1931         .start = ax25_info_start,
1932         .next = ax25_info_next,
1933         .stop = ax25_info_stop,
1934         .show = ax25_info_show,
1935 };
1936 #endif
1937
1938 static const struct net_proto_family ax25_family_ops = {
1939         .family =       PF_AX25,
1940         .create =       ax25_create,
1941         .owner  =       THIS_MODULE,
1942 };
1943
1944 static const struct proto_ops ax25_proto_ops = {
1945         .family         = PF_AX25,
1946         .owner          = THIS_MODULE,
1947         .release        = ax25_release,
1948         .bind           = ax25_bind,
1949         .connect        = ax25_connect,
1950         .socketpair     = sock_no_socketpair,
1951         .accept         = ax25_accept,
1952         .getname        = ax25_getname,
1953         .poll           = datagram_poll,
1954         .ioctl          = ax25_ioctl,
1955         .gettstamp      = sock_gettstamp,
1956         .listen         = ax25_listen,
1957         .shutdown       = ax25_shutdown,
1958         .setsockopt     = ax25_setsockopt,
1959         .getsockopt     = ax25_getsockopt,
1960         .sendmsg        = ax25_sendmsg,
1961         .recvmsg        = ax25_recvmsg,
1962         .mmap           = sock_no_mmap,
1963         .sendpage       = sock_no_sendpage,
1964 };
1965
1966 /*
1967  *      Called by socket.c on kernel start up
1968  */
1969 static struct packet_type ax25_packet_type __read_mostly = {
1970         .type   =       cpu_to_be16(ETH_P_AX25),
1971         .func   =       ax25_kiss_rcv,
1972 };
1973
1974 static struct notifier_block ax25_dev_notifier = {
1975         .notifier_call = ax25_device_event,
1976 };
1977
1978 static int __init ax25_init(void)
1979 {
1980         int rc = proto_register(&ax25_proto, 0);
1981
1982         if (rc != 0)
1983                 goto out;
1984
1985         sock_register(&ax25_family_ops);
1986         dev_add_pack(&ax25_packet_type);
1987         register_netdevice_notifier(&ax25_dev_notifier);
1988
1989         proc_create_seq("ax25_route", 0444, init_net.proc_net, &ax25_rt_seqops);
1990         proc_create_seq("ax25", 0444, init_net.proc_net, &ax25_info_seqops);
1991         proc_create_seq("ax25_calls", 0444, init_net.proc_net,
1992                         &ax25_uid_seqops);
1993 out:
1994         return rc;
1995 }
1996 module_init(ax25_init);
1997
1998
1999 MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
2000 MODULE_DESCRIPTION("The amateur radio AX.25 link layer protocol");
2001 MODULE_LICENSE("GPL");
2002 MODULE_ALIAS_NETPROTO(PF_AX25);
2003
2004 static void __exit ax25_exit(void)
2005 {
2006         remove_proc_entry("ax25_route", init_net.proc_net);
2007         remove_proc_entry("ax25", init_net.proc_net);
2008         remove_proc_entry("ax25_calls", init_net.proc_net);
2009
2010         unregister_netdevice_notifier(&ax25_dev_notifier);
2011
2012         dev_remove_pack(&ax25_packet_type);
2013
2014         sock_unregister(PF_AX25);
2015         proto_unregister(&ax25_proto);
2016
2017         ax25_rt_free();
2018         ax25_uid_free();
2019         ax25_dev_free();
2020 }
2021 module_exit(ax25_exit);