⬢ DragonFlyBSD Kernel Audit
DF-3113 / fix.diff
← back to finding ↓ download raw
--- a/sys/vfs/hammer/hammer_ioctl.c
+++ b/sys/vfs/hammer/hammer_ioctl.c
@@ -730,10 +730,11 @@ hammer_ioc_add_snapshot(hammer_transaction_t trans, hammer_inode_t ip,
 again:
 	/*
 	 * Look for keys starting after the previous iteration, or at
 	 * the beginning if snap->count is 0.
 	 */
 	error = hammer_init_cursor(trans, &cursor, &ip->cache[0], NULL);
 	if (error) {
 		hammer_done_cursor(&cursor);
+		hammer_unlock(&hmp->snapshot_lock);
 		return(error);
 	}
@@ -807,10 +808,11 @@ hammer_ioc_del_snapshot(hammer_transaction_t trans, hammer_inode_t ip,
 again:
 	/*
 	 * Look for keys starting after the previous iteration, or at
 	 * the beginning if snap->count is 0.
 	 */
 	error = hammer_init_cursor(trans, &cursor, &ip->cache[0], NULL);
 	if (error) {
 		hammer_done_cursor(&cursor);
+		hammer_unlock(&hmp->snapshot_lock);
 		return(error);
 	}