mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 19:19:32 +03:00
6977619 NULL pointer deference in sa_handle_get_from_db()
References: illumos/illumos-gate@44bffe012c Ported-by: Richard Yao <ryao@gentoo.org> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Issue #1775
This commit is contained in:
parent
c0ebc844c7
commit
c1fabe7961
@ -1476,7 +1476,7 @@ EXPORT_SYMBOL(zfs_suspend_fs);
|
|||||||
int
|
int
|
||||||
zfs_resume_fs(zfs_sb_t *zsb, const char *osname)
|
zfs_resume_fs(zfs_sb_t *zsb, const char *osname)
|
||||||
{
|
{
|
||||||
int err, err2;
|
int err;
|
||||||
|
|
||||||
ASSERT(RRW_WRITE_HELD(&zsb->z_teardown_lock));
|
ASSERT(RRW_WRITE_HELD(&zsb->z_teardown_lock));
|
||||||
ASSERT(RW_WRITE_HELD(&zsb->z_teardown_inactive_lock));
|
ASSERT(RW_WRITE_HELD(&zsb->z_teardown_inactive_lock));
|
||||||
@ -1488,18 +1488,33 @@ zfs_resume_fs(zfs_sb_t *zsb, const char *osname)
|
|||||||
znode_t *zp;
|
znode_t *zp;
|
||||||
uint64_t sa_obj = 0;
|
uint64_t sa_obj = 0;
|
||||||
|
|
||||||
err2 = zap_lookup(zsb->z_os, MASTER_NODE_OBJ,
|
/*
|
||||||
ZFS_SA_ATTRS, 8, 1, &sa_obj);
|
* Make sure version hasn't changed
|
||||||
|
*/
|
||||||
|
|
||||||
if ((err || err2) && zsb->z_version >= ZPL_VERSION_SA)
|
err = zfs_get_zplprop(zsb->z_os, ZFS_PROP_VERSION,
|
||||||
|
&zsb->z_version);
|
||||||
|
|
||||||
|
if (err)
|
||||||
goto bail;
|
goto bail;
|
||||||
|
|
||||||
|
err = zap_lookup(zsb->z_os, MASTER_NODE_OBJ,
|
||||||
|
ZFS_SA_ATTRS, 8, 1, &sa_obj);
|
||||||
|
|
||||||
|
if (err && zsb->z_version >= ZPL_VERSION_SA)
|
||||||
|
goto bail;
|
||||||
|
|
||||||
if ((err = sa_setup(zsb->z_os, sa_obj,
|
if ((err = sa_setup(zsb->z_os, sa_obj,
|
||||||
zfs_attr_table, ZPL_END, &zsb->z_attr_table)) != 0)
|
zfs_attr_table, ZPL_END, &zsb->z_attr_table)) != 0)
|
||||||
goto bail;
|
goto bail;
|
||||||
|
|
||||||
|
if (zsb->z_version >= ZPL_VERSION_SA)
|
||||||
|
sa_register_update_callback(zsb->z_os,
|
||||||
|
zfs_sa_upgrade);
|
||||||
|
|
||||||
VERIFY(zfs_sb_setup(zsb, B_FALSE) == 0);
|
VERIFY(zfs_sb_setup(zsb, B_FALSE) == 0);
|
||||||
|
|
||||||
|
zfs_set_fuid_feature(zsb);
|
||||||
zsb->z_rollback_time = jiffies;
|
zsb->z_rollback_time = jiffies;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1530,8 +1545,8 @@ bail:
|
|||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
/*
|
/*
|
||||||
* Since we couldn't reopen zfs_sb_t or, setup the
|
* Since we couldn't reopen zfs_sb_t or, or
|
||||||
* sa framework, force unmount this file system.
|
* setup the sa framework force unmount this file system.
|
||||||
*/
|
*/
|
||||||
if (zsb->z_os)
|
if (zsb->z_os)
|
||||||
(void) zfs_umount(zsb->z_sb);
|
(void) zfs_umount(zsb->z_sb);
|
||||||
@ -1601,7 +1616,6 @@ zfs_set_version(zfs_sb_t *zsb, uint64_t newvers)
|
|||||||
|
|
||||||
zsb->z_version = newvers;
|
zsb->z_version = newvers;
|
||||||
|
|
||||||
if (zsb->z_version >= ZPL_VERSION_FUID)
|
|
||||||
zfs_set_fuid_feature(zsb);
|
zfs_set_fuid_feature(zsb);
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
|
Loading…
Reference in New Issue
Block a user