Skip to content

Commit cb5842f

Browse files
avg-Iahrens
authored andcommitted
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>
1 parent beddaa9 commit cb5842f

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

usr/src/uts/common/fs/zfs/dsl_dataset.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2099,12 +2099,14 @@ dsl_dataset_promote_check(void *arg, dmu_tx_t *tx)
20992099
int err;
21002100
uint64_t unused;
21012101
uint64_t ss_mv_cnt;
2102+
size_t max_snap_len;
21022103

21032104
err = promote_hold(ddpa, dp, FTAG);
21042105
if (err != 0)
21052106
return (err);
21062107

21072108
hds = ddpa->ddpa_clone;
2109+
max_snap_len = MAXNAMELEN - strlen(ddpa->ddpa_clonename) - 1;
21082110

21092111
if (dsl_dataset_phys(hds)->ds_flags & DS_FLAG_NOPROMOTE) {
21102112
promote_rele(ddpa, FTAG);
@@ -2168,6 +2170,10 @@ dsl_dataset_promote_check(void *arg, dmu_tx_t *tx)
21682170

21692171
/* Check that the snapshot name does not conflict */
21702172
VERIFY0(dsl_dataset_get_snapname(ds));
2173+
if (strlen(ds->ds_snapname) >= max_snap_len) {
2174+
err = SET_ERROR(ENAMETOOLONG);
2175+
goto out;
2176+
}
21712177
err = dsl_dataset_snap_lookup(hds, ds->ds_snapname, &val);
21722178
if (err == 0) {
21732179
(void) strcpy(ddpa->err_ds, snap->ds->ds_snapname);

0 commit comments

Comments
 (0)