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