Skip to content

Commit fec4170

Browse files
avg-Ibehlendorf
authored andcommitted
Illumos 5909 - ensure that shared snap names don't become too long after promotion
5909 ensure that shared snap names don't become too long after promotion Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: George Wilson <george@delphix.com> Approved by: Dan McDonald <danmcd@omniti.com> References: https://www.illumos.org/issues/5909 illumos/illumos-gate@cb5842f Ported-by: Andriy Gapon <avg@FreeBSD.org> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #3550
1 parent cf50a2b commit fec4170

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

module/zfs/dsl_dataset.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2131,12 +2131,14 @@ dsl_dataset_promote_check(void *arg, dmu_tx_t *tx)
21312131
int err;
21322132
uint64_t unused;
21332133
uint64_t ss_mv_cnt;
2134+
size_t max_snap_len;
21342135

21352136
err = promote_hold(ddpa, dp, FTAG);
21362137
if (err != 0)
21372138
return (err);
21382139

21392140
hds = ddpa->ddpa_clone;
2141+
max_snap_len = MAXNAMELEN - strlen(ddpa->ddpa_clonename) - 1;
21402142

21412143
if (dsl_dataset_phys(hds)->ds_flags & DS_FLAG_NOPROMOTE) {
21422144
promote_rele(ddpa, FTAG);
@@ -2200,6 +2202,10 @@ dsl_dataset_promote_check(void *arg, dmu_tx_t *tx)
22002202

22012203
/* Check that the snapshot name does not conflict */
22022204
VERIFY0(dsl_dataset_get_snapname(ds));
2205+
if (strlen(ds->ds_snapname) >= max_snap_len) {
2206+
err = SET_ERROR(ENAMETOOLONG);
2207+
goto out;
2208+
}
22032209
err = dsl_dataset_snap_lookup(hds, ds->ds_snapname, &val);
22042210
if (err == 0) {
22052211
(void) strcpy(ddpa->err_ds, snap->ds->ds_snapname);

0 commit comments

Comments
 (0)