summaryrefslogtreecommitdiff
path: root/mysql-test/t/symlink-aria-11902.test
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2017-02-15 18:45:19 +0100
committerSergei Golubchik <serg@mariadb.org>2017-02-27 12:35:10 +0100
commitb27fd90ad36f4194665744cc1dcdd05f2d0b47ef (patch)
treea48e90c7facfabf56074685a342fabf7584b8b48 /mysql-test/t/symlink-aria-11902.test
parentd78d0d459d10dd12069de82d6735f1acf183c631 (diff)
downloadmariadb-git-b27fd90ad36f4194665744cc1dcdd05f2d0b47ef.tar.gz
MDEV-11902 mi_open race condition
TOCTOU bug. The path is checked to be valid, symlinks are resolved. Then the resolved path is opened. Between the check and the open, there's a window when one can replace some path component with a symlink, bypassing validity checks. Fix: after we resolved all symlinks in the path, don't allow open() to resolve symlinks, there should be none. Compared to the old MyISAM/Aria code: * fastpath. Opening of not-symlinked files is just one open(), no fn_format() and lstat() anymore. * opening of symlinked tables doesn't do fn_format() and lstat() either. it also doesn't to realpath() (which was lstat-ing every path component), instead if opens every path component with O_PATH. * share->data_file_name stores realpath(path) not readlink(path). So, SHOW CREATE TABLE needs to do lstat/readlink() now (see ::info()), and certain error messages (cannot open file "XXX") show the real file path with all symlinks resolved.
Diffstat (limited to 'mysql-test/t/symlink-aria-11902.test')
-rw-r--r--mysql-test/t/symlink-aria-11902.test6
1 files changed, 6 insertions, 0 deletions
diff --git a/mysql-test/t/symlink-aria-11902.test b/mysql-test/t/symlink-aria-11902.test
new file mode 100644
index 00000000000..a2a266cbb25
--- /dev/null
+++ b/mysql-test/t/symlink-aria-11902.test
@@ -0,0 +1,6 @@
+#
+# MDEV-11902 mi_open race condition
+#
+source include/have_maria.inc;
+set default_storage_engine=Aria;
+source symlink-myisam-11902.test;