From: Ben Gras Date: Mon, 29 Mar 2010 11:39:54 +0000 (+0000) Subject: fix null deref; vmnt->mounted_on is NULL legitimately for root. X-Git-Tag: v3.1.7~195 X-Git-Url: http://zhaoyanbai.com/repos/%22http:/www.isc.org/icons/man.named.html?a=commitdiff_plain;h=bc0e36f40281ab9b304fc11d9ce8fa73c375dcf1;p=minix.git fix null deref; vmnt->mounted_on is NULL legitimately for root. changed check+panic to assert(). added assert(). --- diff --git a/servers/vfs/path.c b/servers/vfs/path.c index 05706f7b8..1d2f65299 100644 --- a/servers/vfs/path.c +++ b/servers/vfs/path.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include "fproc.h" #include "vmnt.h" @@ -43,6 +44,8 @@ int flags; struct vmnt *vmp; struct node_details res; + assert(dirp); + /* Get a free vnode */ if((new_vp = get_free_vnode()) == NIL_VNODE) return(NIL_VNODE); @@ -238,7 +241,7 @@ node_details_t *node; dir_vp = 0; /* Start node is now the mounted partition's root node */ for (vmp = &vmnt[0]; vmp != &vmnt[NR_MNTS]; ++vmp) { - if (vmp->m_dev != NO_DEV) { + if (vmp->m_dev != NO_DEV && vmp->m_mounted_on) { if (vmp->m_mounted_on->v_inode_nr == res.inode_nr && vmp->m_mounted_on->v_fs_e == res.fs_e) { dir_vp = vmp->m_root_node; @@ -246,10 +249,7 @@ node_details_t *node; } } } - - if (!dir_vp) { - panic("VFS lookup: can't find mounted partition"); - } + assert(dir_vp); } else { /* Climbing up mount */ /* Find the vmnt that represents the partition on