Linux Audio

Check our new training course

Buildroot integration, development and maintenance

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