From 63cfc3cdfd817d8f794c83bc39f86ab8b910fe71 Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Mon, 3 Oct 2016 15:19:08 +0200 Subject: libdiskfs: Fix short-circuiting translators. * libdiskfs/file-set-trans.c (diskfs_S_file_set_translator): When setting a short-circuited translator, clear the translator record first. Improve error handling. This notably fixes a crash in ext2fs when setting a symlink on a node with an existing translator record. --- libdiskfs/file-set-trans.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'libdiskfs') diff --git a/libdiskfs/file-set-trans.c b/libdiskfs/file-set-trans.c index 6e1a61d2..3238037a 100644 --- a/libdiskfs/file-set-trans.c +++ b/libdiskfs/file-set-trans.c @@ -168,7 +168,20 @@ diskfs_S_file_set_translator (struct protid *cred, np->dn_stat.st_rdev = makedev (major, minor); } - diskfs_truncate (np, 0); + err = diskfs_truncate (np, 0); + if (err) + { + pthread_mutex_unlock (&np->lock); + return err; + } + + err = diskfs_set_translator (np, NULL, 0, cred); + if (err) + { + pthread_mutex_unlock (&np->lock); + return err; + } + if (newmode == S_IFLNK) { char *arg = passive + strlen (passive) + 1; -- cgit v1.2.3