From owner-freebsd-fs@FreeBSD.ORG Tue Jul 10 18:43:09 2007 Return-Path: X-Original-To: freebsd-fs@freebsd.org Delivered-To: freebsd-fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id B0A4216A400 for ; Tue, 10 Jul 2007 18:43:09 +0000 (UTC) (envelope-from jaharkes@cs.cmu.edu) Received: from delft.aura.cs.cmu.edu (DELFT.AURA.CS.CMU.EDU [128.2.206.88]) by mx1.freebsd.org (Postfix) with ESMTP id 8EF6F13C4C2 for ; Tue, 10 Jul 2007 18:43:09 +0000 (UTC) (envelope-from jaharkes@cs.cmu.edu) Received: from jaharkes by delft.aura.cs.cmu.edu with local (Exim 4.67) (envelope-from ) id 1I8K2D-0007M4-I4; Tue, 10 Jul 2007 14:02:01 -0400 From: Jan Harkes To: freebsd-fs@freebsd.org Date: Tue, 10 Jul 2007 14:01:57 -0400 Message-Id: <11840905214090-git-send-email-jaharkes@cs.cmu.edu> X-Mailer: git-send-email 1.5.2.1 In-Reply-To: <2c84c1de0707060800t21f3f993mfb53f7975a881ed4@mail.gmail.com> References: <2c84c1de0707060800t21f3f993mfb53f7975a881ed4@mail.gmail.com> Cc: Jan Harkes Subject: [PATCH Coda 1/5] Avoid crash when opening Coda device X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Jul 2007 18:43:09 -0000 When allocating coda_mntinfo, we need to initialize dev so that we can actually find the allocated coda_mntinfo structure later on. --- coda_fbsd.c | 5 +++-- coda_psdev.c | 12 +++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/coda_fbsd.c b/coda_fbsd.c index 8a74ada..5a603de 100644 --- a/coda_fbsd.c +++ b/coda_fbsd.c @@ -124,6 +124,7 @@ static void coda_fbsd_clone(arg, cred, name, namelen, dev) dev_ref(*dev); mnt = malloc(sizeof(struct coda_mntinfo), M_CODA, M_WAITOK|M_ZERO); LIST_INSERT_HEAD(&coda_mnttbl, mnt, mi_list); + mnt->dev = *dev; } struct coda_mntinfo * @@ -133,8 +134,8 @@ dev2coda_mntinfo(struct cdev *dev) LIST_FOREACH(mnt, &coda_mnttbl, mi_list) { if (mnt->dev == dev) - break; + return mnt; } - return mnt; + return NULL; } diff --git a/coda_psdev.c b/coda_psdev.c index 7d35540..d5d965a 100644 --- a/coda_psdev.c +++ b/coda_psdev.c @@ -129,6 +129,8 @@ vc_nb_open(dev, flag, mode, td) coda_nc_init(); mnt = dev2coda_mntinfo(dev); + KASSERT(mnt, ("Coda: tried to open uninitialized cfs device")); + vcp = &mnt->mi_vcomm; if (VC_OPEN(vcp)) return(EBUSY); @@ -154,15 +156,15 @@ vc_nb_close (dev, flag, mode, td) register struct vcomm *vcp; register struct vmsg *vmp, *nvmp = NULL; struct coda_mntinfo *mi; - int err; + int err; ENTRY; mi = dev2coda_mntinfo(dev); - vcp = &(mi->mi_vcomm); - - if (!VC_OPEN(vcp)) - panic("vcclose: not open"); + KASSERT(mi, ("Coda: closing unknown cfs device")); + + vcp = &mi->mi_vcomm; + KASSERT(VC_OPEN(vcp), ("Coda: closing unopened cfs device")); /* prevent future operations on this vfs from succeeding by auto- * unmounting any vfs mounted via this device. This frees user or -- 1.5.2.1