mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-25 03:37:45 +03:00
OpenZFS 6314 - buffer overflow in dsl_dataset_name
Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed by: Prakash Surya <prakash.surya@delphix.com> Reviewed by: Igor Kozhukhov <ikozhukhov@gmail.com> Approved by: Dan McDonald <danmcd@omniti.com> Ported-by: Brian Behlendorf <behlendorf1@llnl.gov> OpenZFS-issue: https://www.illumos.org/issues/6314 OpenZFS-commit: https://github.com/openzfs/openzfs/commit/d6160ee
This commit is contained in:
committed by
Brian Behlendorf
parent
43e52eddb1
commit
eca7b76001
+12
-11
@@ -604,7 +604,7 @@ zfs_secpolicy_setprop(const char *dsname, zfs_prop_t prop, nvpair_t *propval,
|
||||
case ZFS_PROP_SNAPSHOT_LIMIT:
|
||||
if (!INGLOBALZONE(curproc)) {
|
||||
uint64_t zoned;
|
||||
char setpoint[MAXNAMELEN];
|
||||
char setpoint[ZFS_MAX_DATASET_NAME_LEN];
|
||||
/*
|
||||
* Unprivileged users are allowed to modify the
|
||||
* limit on things *under* (ie. contained by)
|
||||
@@ -846,7 +846,7 @@ zfs_secpolicy_destroy_snaps(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
|
||||
int
|
||||
zfs_secpolicy_rename_perms(const char *from, const char *to, cred_t *cr)
|
||||
{
|
||||
char parentname[MAXNAMELEN];
|
||||
char parentname[ZFS_MAX_DATASET_NAME_LEN];
|
||||
int error;
|
||||
|
||||
if ((error = zfs_secpolicy_write_perms(from,
|
||||
@@ -899,7 +899,7 @@ zfs_secpolicy_promote(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
|
||||
error = dsl_dataset_hold(dp, zc->zc_name, FTAG, &clone);
|
||||
|
||||
if (error == 0) {
|
||||
char parentname[MAXNAMELEN];
|
||||
char parentname[ZFS_MAX_DATASET_NAME_LEN];
|
||||
dsl_dataset_t *origin = NULL;
|
||||
dsl_dir_t *dd;
|
||||
dd = clone->ds_dir;
|
||||
@@ -1076,7 +1076,7 @@ zfs_secpolicy_log_history(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
|
||||
static int
|
||||
zfs_secpolicy_create_clone(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
|
||||
{
|
||||
char parentname[MAXNAMELEN];
|
||||
char parentname[ZFS_MAX_DATASET_NAME_LEN];
|
||||
int error;
|
||||
char *origin;
|
||||
|
||||
@@ -1219,7 +1219,7 @@ zfs_secpolicy_hold(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
|
||||
|
||||
for (pair = nvlist_next_nvpair(holds, NULL); pair != NULL;
|
||||
pair = nvlist_next_nvpair(holds, pair)) {
|
||||
char fsname[MAXNAMELEN];
|
||||
char fsname[ZFS_MAX_DATASET_NAME_LEN];
|
||||
error = dmu_fsname(nvpair_name(pair), fsname);
|
||||
if (error != 0)
|
||||
return (error);
|
||||
@@ -1240,7 +1240,7 @@ zfs_secpolicy_release(zfs_cmd_t *zc, nvlist_t *innvl, cred_t *cr)
|
||||
|
||||
for (pair = nvlist_next_nvpair(innvl, NULL); pair != NULL;
|
||||
pair = nvlist_next_nvpair(innvl, pair)) {
|
||||
char fsname[MAXNAMELEN];
|
||||
char fsname[ZFS_MAX_DATASET_NAME_LEN];
|
||||
error = dmu_fsname(nvpair_name(pair), fsname);
|
||||
if (error != 0)
|
||||
return (error);
|
||||
@@ -2260,7 +2260,8 @@ zfs_ioc_snapshot_list_next(zfs_cmd_t *zc)
|
||||
* A dataset name of maximum length cannot have any snapshots,
|
||||
* so exit immediately.
|
||||
*/
|
||||
if (strlcat(zc->zc_name, "@", sizeof (zc->zc_name)) >= MAXNAMELEN) {
|
||||
if (strlcat(zc->zc_name, "@", sizeof (zc->zc_name)) >=
|
||||
ZFS_MAX_DATASET_NAME_LEN) {
|
||||
dmu_objset_rele(os, FTAG);
|
||||
return (SET_ERROR(ESRCH));
|
||||
}
|
||||
@@ -3048,7 +3049,7 @@ zfs_fill_zplprops(const char *dataset, nvlist_t *createprops,
|
||||
boolean_t fuids_ok, sa_ok;
|
||||
uint64_t zplver = ZPL_VERSION;
|
||||
objset_t *os = NULL;
|
||||
char parentname[MAXNAMELEN];
|
||||
char parentname[ZFS_MAX_DATASET_NAME_LEN];
|
||||
char *cp;
|
||||
spa_t *spa;
|
||||
uint64_t spa_vers;
|
||||
@@ -3414,7 +3415,7 @@ zfs_destroy_unmount_origin(const char *fsname)
|
||||
return;
|
||||
ds = dmu_objset_ds(os);
|
||||
if (dsl_dir_is_clone(ds->ds_dir) && DS_IS_DEFER_DESTROY(ds->ds_prev)) {
|
||||
char originname[MAXNAMELEN];
|
||||
char originname[ZFS_MAX_DATASET_NAME_LEN];
|
||||
dsl_dataset_name(ds->ds_prev, originname);
|
||||
dmu_objset_rele(os, FTAG);
|
||||
(void) zfs_unmount_snap(originname);
|
||||
@@ -4266,7 +4267,7 @@ zfs_ioc_recv(zfs_cmd_t *zc)
|
||||
nvlist_t *props = NULL;
|
||||
char *origin = NULL;
|
||||
char *tosnap;
|
||||
char tofs[ZFS_MAXNAMELEN];
|
||||
char tofs[ZFS_MAX_DATASET_NAME_LEN];
|
||||
int error = 0;
|
||||
|
||||
if (dataset_namecheck(zc->zc_value, NULL, NULL) != 0 ||
|
||||
@@ -4344,7 +4345,7 @@ zfs_ioc_recv_new(const char *fsname, nvlist_t *innvl, nvlist_t *outnvl)
|
||||
char *snapname = NULL;
|
||||
char *origin = NULL;
|
||||
char *tosnap;
|
||||
char tofs[ZFS_MAXNAMELEN];
|
||||
char tofs[ZFS_MAX_DATASET_NAME_LEN];
|
||||
boolean_t force;
|
||||
boolean_t resumable;
|
||||
uint64_t action_handle = 0;
|
||||
|
||||
Reference in New Issue
Block a user