Module Name:    src
Committed By:   plunky
Date:           Mon Jan  4 19:20:05 UTC 2010

Modified Files:
        src/sys/netbt: l2cap_upper.c rfcomm_upper.c sco_upper.c

Log Message:
prevent local socket address from being changed after socket is
in use (connect or listen)


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/netbt/l2cap_upper.c
cvs rdiff -u -r1.12 -r1.13 src/sys/netbt/rfcomm_upper.c
cvs rdiff -u -r1.8 -r1.9 src/sys/netbt/sco_upper.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/netbt/l2cap_upper.c
diff -u src/sys/netbt/l2cap_upper.c:1.10 src/sys/netbt/l2cap_upper.c:1.11
--- src/sys/netbt/l2cap_upper.c:1.10	Fri Sep 25 19:44:57 2009
+++ src/sys/netbt/l2cap_upper.c	Mon Jan  4 19:20:05 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: l2cap_upper.c,v 1.10 2009/09/25 19:44:57 plunky Exp $	*/
+/*	$NetBSD: l2cap_upper.c,v 1.11 2010/01/04 19:20:05 plunky Exp $	*/
 
 /*-
  * Copyright (c) 2005 Iain Hibbert.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: l2cap_upper.c,v 1.10 2009/09/25 19:44:57 plunky Exp $");
+__KERNEL_RCSID(0, "$NetBSD: l2cap_upper.c,v 1.11 2010/01/04 19:20:05 plunky Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -110,6 +110,9 @@
 l2cap_bind(struct l2cap_channel *chan, struct sockaddr_bt *addr)
 {
 
+	if (chan->lc_lcid != L2CAP_NULL_CID)
+		return EINVAL;
+
 	memcpy(&chan->lc_laddr, addr, sizeof(struct sockaddr_bt));
 	return 0;
 }

Index: src/sys/netbt/rfcomm_upper.c
diff -u src/sys/netbt/rfcomm_upper.c:1.12 src/sys/netbt/rfcomm_upper.c:1.13
--- src/sys/netbt/rfcomm_upper.c:1.12	Sun Nov 22 19:09:16 2009
+++ src/sys/netbt/rfcomm_upper.c	Mon Jan  4 19:20:05 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: rfcomm_upper.c,v 1.12 2009/11/22 19:09:16 mbalmer Exp $	*/
+/*	$NetBSD: rfcomm_upper.c,v 1.13 2010/01/04 19:20:05 plunky Exp $	*/
 
 /*-
  * Copyright (c) 2006 Itronix Inc.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rfcomm_upper.c,v 1.12 2009/11/22 19:09:16 mbalmer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rfcomm_upper.c,v 1.13 2010/01/04 19:20:05 plunky Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -106,6 +106,9 @@
 rfcomm_bind(struct rfcomm_dlc *dlc, struct sockaddr_bt *addr)
 {
 
+	if (dlc->rd_state != RFCOMM_DLC_CLOSED)
+		return EINVAL;
+
 	memcpy(&dlc->rd_laddr, addr, sizeof(struct sockaddr_bt));
 	return 0;
 }

Index: src/sys/netbt/sco_upper.c
diff -u src/sys/netbt/sco_upper.c:1.8 src/sys/netbt/sco_upper.c:1.9
--- src/sys/netbt/sco_upper.c:1.8	Wed Aug  6 15:01:24 2008
+++ src/sys/netbt/sco_upper.c	Mon Jan  4 19:20:05 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: sco_upper.c,v 1.8 2008/08/06 15:01:24 plunky Exp $	*/
+/*	$NetBSD: sco_upper.c,v 1.9 2010/01/04 19:20:05 plunky Exp $	*/
 
 /*-
  * Copyright (c) 2006 Itronix Inc.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sco_upper.c,v 1.8 2008/08/06 15:01:24 plunky Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sco_upper.c,v 1.9 2010/01/04 19:20:05 plunky Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -90,6 +90,9 @@
 sco_bind(struct sco_pcb *pcb, struct sockaddr_bt *addr)
 {
 
+	if (pcb->sp_link != NULL || pcb->sp_flags & SP_LISTENING)
+		return EINVAL;
+
 	bdaddr_copy(&pcb->sp_laddr, &addr->bt_bdaddr);
 	return 0;
 }

Reply via email to