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; }