svn commit: r218541 -
stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Andrey V. Elsukov
ae at FreeBSD.org
Fri Feb 11 05:56:15 UTC 2011
Author: ae
Date: Fri Feb 11 05:56:14 2011
New Revision: 218541
URL: http://svn.freebsd.org/changeset/base/218541
Log:
MFC r218278:
vdev's sectorsize should not be greater than 8 Kbytes and also
it should be power of 2. This prevents non-aligned access while
probing vdev's labels.
PR: kern/147852
Modified:
stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/amd64/include/xen/ (props changed)
stable/8/sys/cddl/contrib/opensolaris/ (props changed)
stable/8/sys/contrib/dev/acpica/ (props changed)
stable/8/sys/contrib/pf/ (props changed)
Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
==============================================================================
--- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c Fri Feb 11 05:54:46 2011 (r218540)
+++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c Fri Feb 11 05:56:14 2011 (r218541)
@@ -392,7 +392,8 @@ vdev_geom_open_by_path(vdev_t *vd, int c
if (pp != NULL) {
ZFS_LOG(1, "Found provider by name %s.", vd->vdev_path);
cp = vdev_geom_attach(pp);
- if (cp != NULL && check_guid) {
+ if (cp != NULL && check_guid && ISP2(pp->sectorsize) &&
+ pp->sectorsize <= VDEV_PAD_SIZE) {
g_topology_unlock();
guid = vdev_geom_read_guid(cp);
g_topology_lock();
@@ -456,6 +457,17 @@ vdev_geom_open(vdev_t *vd, uint64_t *psi
if (cp == NULL) {
ZFS_LOG(1, "Provider %s not found.", vd->vdev_path);
error = ENOENT;
+ } else if (cp->provider->sectorsize > VDEV_PAD_SIZE ||
+ !ISP2(cp->provider->sectorsize)) {
+ ZFS_LOG(1, "Provider %s has unsupported sectorsize.",
+ vd->vdev_path);
+
+ g_topology_lock();
+ vdev_geom_detach(cp, 0);
+ g_topology_unlock();
+
+ error = EINVAL;
+ cp = NULL;
} else if (cp->acw == 0 && (spa_mode(vd->vdev_spa) & FWRITE) != 0) {
int i;
More information about the svn-src-stable-8
mailing list