[PATCH Coda 1/5] Avoid crash when opening Coda device
Jan Harkes
jaharkes at cs.cmu.edu
Tue Jul 10 18:43:09 UTC 2007
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
More information about the freebsd-fs
mailing list