summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/dev/sdev_subr.c
diff options
context:
space:
mode:
authorJerry Gilliam <Jerry.Gilliam@Sun.COM>2010-06-28 14:29:09 -0700
committerJerry Gilliam <Jerry.Gilliam@Sun.COM>2010-06-28 14:29:09 -0700
commit2b080a343365d348d0bc9c6b0904cbe4e0526818 (patch)
tree242329b082d5d159d332cb4be61426e3fed079b5 /usr/src/uts/common/fs/dev/sdev_subr.c
parentd2256d265bf2bcad0d811b81411de3802a4b97c6 (diff)
downloadillumos-gate-2b080a343365d348d0bc9c6b0904cbe4e0526818.tar.gz
6961039 /dev/vt: race in symlink updates can result in kernel heap corruption
Diffstat (limited to 'usr/src/uts/common/fs/dev/sdev_subr.c')
-rw-r--r--usr/src/uts/common/fs/dev/sdev_subr.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/usr/src/uts/common/fs/dev/sdev_subr.c b/usr/src/uts/common/fs/dev/sdev_subr.c
index 3fced7bb9c..a47493ab55 100644
--- a/usr/src/uts/common/fs/dev/sdev_subr.c
+++ b/usr/src/uts/common/fs/dev/sdev_subr.c
@@ -2573,6 +2573,15 @@ get_cache:
/*
* Check validity of node
+ * Drop invalid and nodes to be skipped.
+ * A node the validator indicates as stale needs
+ * to be returned as presumably the node name itself
+ * is valid and the node data itself will be refreshed
+ * on lookup. An application performing a readdir then
+ * stat on each entry should thus always see consistent
+ * data. In any case, it is not possible to synchronize
+ * with dynamic kernel state, and any view we return can
+ * never be anything more than a snapshot at a point in time.
*/
if (vtor) {
switch (vtor(dv)) {
@@ -2581,6 +2590,10 @@ get_cache:
case SDEV_VTOR_INVALID:
case SDEV_VTOR_SKIP:
continue;
+ case SDEV_VTOR_STALE:
+ sdcmn_err3(("sdev_readir: %s stale\n",
+ dv->sdev_name));
+ break;
default:
cmn_err(CE_PANIC,
"dev fs: validator failed: %s(%p)\n",