linux/net/ax25/af_ax25.c
<<
>>
Prefs
   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
  50HLIST_HEAD(ax25_list);
  51DEFINE_SPINLOCK(ax25_list_lock);
  52
  53static const struct proto_ops ax25_proto_ops;
  54
  55static 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 */
  63static 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 */
  76static 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);
  85again:
  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 */
 109static 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 */
 140void 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 */
 152struct 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 */
 179struct 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 */
 205ax25_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
 237EXPORT_SYMBOL(ax25_find_cb);
 238
 239void 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 */
 263void ax25_destroy_socket(ax25_cb *);
 264
 265/*
 266 *      Handler for deferred kills.
 267 */
 268static 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 */
 288void 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 */
 344static 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
 436out_put:
 437        ax25_cb_put(ax25);
 438        return ret;
 439
 440einval_put:
 441        ret = -EINVAL;
 442        goto out_put;
 443}
 444
 445static 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 */
 469void 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 */
 502ax25_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
 530static 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
 681static 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
 778static 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
 791out:
 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 */
 801static struct proto ax25_proto = {
 802        .name     = "AX25",
 803        .owner    = THIS_MODULE,
 804        .obj_size = sizeof(struct ax25_sock),
 805};
 806
 807static 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
 888struct 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
 958static 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 */
1045static 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
1110done:
1111        ax25_cb_add(ax25);
1112        sock_reset_flag(sk, SOCK_ZAPPED);
1113
1114out:
1115        release_sock(sk);
1116
1117        return err;
1118}
1119
1120/*
1121 *      FIXME: nonblock behaviour looks like it may have a bug.
1122 */
1123static 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;
1327out_release:
1328        release_sock(sk);
1329
1330        return err;
1331}
1332
1333static 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
1395out:
1396        release_sock(sk);
1397
1398        return err;
1399}
1400
1401static 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
1443out:
1444        release_sock(sk);
1445
1446        return err;
1447}
1448
1449static 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
1612out:
1613        release_sock(sk);
1614
1615        return err;
1616}
1617
1618static 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
1684out:
1685        release_sock(sk);
1686
1687        return err;
1688}
1689
1690static int ax25_shutdown(struct socket *sk, int how)
1691{
1692        /* FIXME - generate DM and RNR states */
1693        return -EOPNOTSUPP;
1694}
1695
1696static 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
1860static 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
1867static 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
1872static 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
1878static 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
1927static 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
1935static const struct net_proto_family ax25_family_ops = {
1936        .family =       PF_AX25,
1937        .create =       ax25_create,
1938        .owner  =       THIS_MODULE,
1939};
1940
1941static 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 */
1966static struct packet_type ax25_packet_type __read_mostly = {
1967        .type   =       cpu_to_be16(ETH_P_AX25),
1968        .func   =       ax25_kiss_rcv,
1969};
1970
1971static struct notifier_block ax25_dev_notifier = {
1972        .notifier_call = ax25_device_event,
1973};
1974
1975static 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);
1990out:
1991        return rc;
1992}
1993module_init(ax25_init);
1994
1995
1996MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
1997MODULE_DESCRIPTION("The amateur radio AX.25 link layer protocol");
1998MODULE_LICENSE("GPL");
1999MODULE_ALIAS_NETPROTO(PF_AX25);
2000
2001static 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}
2018module_exit(ax25_exit);
2019