diff options
author | Sergei Golubchik <serg@mariadb.org> | 2017-02-15 18:45:19 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2017-02-27 12:35:10 +0100 |
commit | b27fd90ad36f4194665744cc1dcdd05f2d0b47ef (patch) | |
tree | a48e90c7facfabf56074685a342fabf7584b8b48 /mysql-test/t/symlink-aria-11902.test | |
parent | d78d0d459d10dd12069de82d6735f1acf183c631 (diff) | |
download | mariadb-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.test | 6 |
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; |