diff options
Diffstat (limited to 'debian/patches/libdiskfs-rename.patch')
-rw-r--r-- | debian/patches/libdiskfs-rename.patch | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/debian/patches/libdiskfs-rename.patch b/debian/patches/libdiskfs-rename.patch new file mode 100644 index 00000000..2809e562 --- /dev/null +++ b/debian/patches/libdiskfs-rename.patch @@ -0,0 +1,27 @@ +Avoid a mutex deadlock by simply preventing '.' or '..' in source or target +operands. +--- + libdiskfs/dir-rename.c | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/libdiskfs/dir-rename.c ++++ b/libdiskfs/dir-rename.c +@@ -19,6 +19,7 @@ + + #include "priv.h" + #include "fs_S.h" ++#include <string.h> + + /* To avoid races in checkpath, and to prevent a directory from being + simultaneously renamed by two processes, we serialize all renames of +@@ -44,6 +45,10 @@ diskfs_S_dir_rename (struct protid *from + if (! tocred) + return EXDEV; + ++ if (!strcmp (fromname, ".") || !strcmp (fromname, "..") ++ || !strcmp (toname, ".") || !strcmp (toname, "..")) ++ return EINVAL; ++ + if (tocred->po->shadow_root != fromcred->po->shadow_root) + /* Same translator, but in different shadow trees. */ + return EXDEV; |