aboutsummaryrefslogtreecommitdiffstats
path: root/net/irda
diff options
context:
space:
mode:
authorAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
committerAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
commitada47b5fe13d89735805b566185f4885f5a3f750 (patch)
tree644b88f8a71896307d71438e9b3af49126ffb22b /net/irda
parent43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff)
parent3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff)
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'net/irda')
-rw-r--r--net/irda/af_irda.c341
-rw-r--r--net/irda/discovery.c1
-rw-r--r--net/irda/ircomm/ircomm_core.c1
-rw-r--r--net/irda/ircomm/ircomm_lmp.c1
-rw-r--r--net/irda/ircomm/ircomm_param.c1
-rw-r--r--net/irda/ircomm/ircomm_tty.c7
-rw-r--r--net/irda/irda_device.c1
-rw-r--r--net/irda/iriap.c1
-rw-r--r--net/irda/iriap_event.c2
-rw-r--r--net/irda/irias_object.c1
-rw-r--r--net/irda/irlan/irlan_client.c1
-rw-r--r--net/irda/irlan/irlan_common.c29
-rw-r--r--net/irda/irlan/irlan_eth.c5
-rw-r--r--net/irda/irlan/irlan_provider.c1
-rw-r--r--net/irda/irlap.c14
-rw-r--r--net/irda/irlap_event.c3
-rw-r--r--net/irda/irlap_frame.c1
-rw-r--r--net/irda/irlmp.c4
-rw-r--r--net/irda/irnet/irnet.h1
-rw-r--r--net/irda/irnet/irnet_irda.c5
-rw-r--r--net/irda/irnet/irnet_ppp.c14
-rw-r--r--net/irda/irnetlink.c3
-rw-r--r--net/irda/irqueue.c1
-rw-r--r--net/irda/irsysctl.c31
-rw-r--r--net/irda/irttp.c1
25 files changed, 281 insertions, 190 deletions
diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c
index dd35641835f4..2a4efcea3423 100644
--- a/net/irda/af_irda.c
+++ b/net/irda/af_irda.c
@@ -48,6 +48,7 @@
48#include <linux/smp_lock.h> 48#include <linux/smp_lock.h>
49#include <linux/socket.h> 49#include <linux/socket.h>
50#include <linux/sockios.h> 50#include <linux/sockios.h>
51#include <linux/slab.h>
51#include <linux/init.h> 52#include <linux/init.h>
52#include <linux/net.h> 53#include <linux/net.h>
53#include <linux/irda.h> 54#include <linux/irda.h>
@@ -61,7 +62,7 @@
61 62
62#include <net/irda/af_irda.h> 63#include <net/irda/af_irda.h>
63 64
64static int irda_create(struct net *net, struct socket *sock, int protocol); 65static int irda_create(struct net *net, struct socket *sock, int protocol, int kern);
65 66
66static const struct proto_ops irda_stream_ops; 67static const struct proto_ops irda_stream_ops;
67static const struct proto_ops irda_seqpacket_ops; 68static const struct proto_ops irda_seqpacket_ops;
@@ -714,11 +715,14 @@ static int irda_getname(struct socket *sock, struct sockaddr *uaddr,
714 struct sockaddr_irda saddr; 715 struct sockaddr_irda saddr;
715 struct sock *sk = sock->sk; 716 struct sock *sk = sock->sk;
716 struct irda_sock *self = irda_sk(sk); 717 struct irda_sock *self = irda_sk(sk);
718 int err;
717 719
720 lock_kernel();
718 memset(&saddr, 0, sizeof(saddr)); 721 memset(&saddr, 0, sizeof(saddr));
719 if (peer) { 722 if (peer) {
723 err = -ENOTCONN;
720 if (sk->sk_state != TCP_ESTABLISHED) 724 if (sk->sk_state != TCP_ESTABLISHED)
721 return -ENOTCONN; 725 goto out;
722 726
723 saddr.sir_family = AF_IRDA; 727 saddr.sir_family = AF_IRDA;
724 saddr.sir_lsap_sel = self->dtsap_sel; 728 saddr.sir_lsap_sel = self->dtsap_sel;
@@ -735,8 +739,10 @@ static int irda_getname(struct socket *sock, struct sockaddr *uaddr,
735 /* uaddr_len come to us uninitialised */ 739 /* uaddr_len come to us uninitialised */
736 *uaddr_len = sizeof (struct sockaddr_irda); 740 *uaddr_len = sizeof (struct sockaddr_irda);
737 memcpy(uaddr, &saddr, *uaddr_len); 741 memcpy(uaddr, &saddr, *uaddr_len);
738 742 err = 0;
739 return 0; 743out:
744 unlock_kernel();
745 return err;
740} 746}
741 747
742/* 748/*
@@ -748,21 +754,25 @@ static int irda_getname(struct socket *sock, struct sockaddr *uaddr,
748static int irda_listen(struct socket *sock, int backlog) 754static int irda_listen(struct socket *sock, int backlog)
749{ 755{
750 struct sock *sk = sock->sk; 756 struct sock *sk = sock->sk;
757 int err = -EOPNOTSUPP;
751 758
752 IRDA_DEBUG(2, "%s()\n", __func__); 759 IRDA_DEBUG(2, "%s()\n", __func__);
753 760
761 lock_kernel();
754 if ((sk->sk_type != SOCK_STREAM) && (sk->sk_type != SOCK_SEQPACKET) && 762 if ((sk->sk_type != SOCK_STREAM) && (sk->sk_type != SOCK_SEQPACKET) &&
755 (sk->sk_type != SOCK_DGRAM)) 763 (sk->sk_type != SOCK_DGRAM))
756 return -EOPNOTSUPP; 764 goto out;
757 765
758 if (sk->sk_state != TCP_LISTEN) { 766 if (sk->sk_state != TCP_LISTEN) {
759 sk->sk_max_ack_backlog = backlog; 767 sk->sk_max_ack_backlog = backlog;
760 sk->sk_state = TCP_LISTEN; 768 sk->sk_state = TCP_LISTEN;
761 769
762 return 0; 770 err = 0;
763 } 771 }
772out:
773 unlock_kernel();
764 774
765 return -EOPNOTSUPP; 775 return err;
766} 776}
767 777
768/* 778/*
@@ -783,36 +793,40 @@ static int irda_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
783 if (addr_len != sizeof(struct sockaddr_irda)) 793 if (addr_len != sizeof(struct sockaddr_irda))
784 return -EINVAL; 794 return -EINVAL;
785 795
796 lock_kernel();
786#ifdef CONFIG_IRDA_ULTRA 797#ifdef CONFIG_IRDA_ULTRA
787 /* Special care for Ultra sockets */ 798 /* Special care for Ultra sockets */
788 if ((sk->sk_type == SOCK_DGRAM) && 799 if ((sk->sk_type == SOCK_DGRAM) &&
789 (sk->sk_protocol == IRDAPROTO_ULTRA)) { 800 (sk->sk_protocol == IRDAPROTO_ULTRA)) {
790 self->pid = addr->sir_lsap_sel; 801 self->pid = addr->sir_lsap_sel;
802 err = -EOPNOTSUPP;
791 if (self->pid & 0x80) { 803 if (self->pid & 0x80) {
792 IRDA_DEBUG(0, "%s(), extension in PID not supp!\n", __func__); 804 IRDA_DEBUG(0, "%s(), extension in PID not supp!\n", __func__);
793 return -EOPNOTSUPP; 805 goto out;
794 } 806 }
795 err = irda_open_lsap(self, self->pid); 807 err = irda_open_lsap(self, self->pid);
796 if (err < 0) 808 if (err < 0)
797 return err; 809 goto out;
798 810
799 /* Pretend we are connected */ 811 /* Pretend we are connected */
800 sock->state = SS_CONNECTED; 812 sock->state = SS_CONNECTED;
801 sk->sk_state = TCP_ESTABLISHED; 813 sk->sk_state = TCP_ESTABLISHED;
814 err = 0;
802 815
803 return 0; 816 goto out;
804 } 817 }
805#endif /* CONFIG_IRDA_ULTRA */ 818#endif /* CONFIG_IRDA_ULTRA */
806 819
807 self->ias_obj = irias_new_object(addr->sir_name, jiffies); 820 self->ias_obj = irias_new_object(addr->sir_name, jiffies);
821 err = -ENOMEM;
808 if (self->ias_obj == NULL) 822 if (self->ias_obj == NULL)
809 return -ENOMEM; 823 goto out;
810 824
811 err = irda_open_tsap(self, addr->sir_lsap_sel, addr->sir_name); 825 err = irda_open_tsap(self, addr->sir_lsap_sel, addr->sir_name);
812 if (err < 0) { 826 if (err < 0) {
813 kfree(self->ias_obj->name); 827 kfree(self->ias_obj->name);
814 kfree(self->ias_obj); 828 kfree(self->ias_obj);
815 return err; 829 goto out;
816 } 830 }
817 831
818 /* Register with LM-IAS */ 832 /* Register with LM-IAS */
@@ -820,7 +834,10 @@ static int irda_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
820 self->stsap_sel, IAS_KERNEL_ATTR); 834 self->stsap_sel, IAS_KERNEL_ATTR);
821 irias_insert_object(self->ias_obj); 835 irias_insert_object(self->ias_obj);