From 9564d0e5e7689d48b5004dfc9f0d8ded1628a6cf Mon Sep 17 00:00:00 2001 From: caozhijun Date: Mon, 18 Sep 2023 15:19:58 +0800 Subject: [PATCH] =?UTF-8?q?fixed=2045b2b40=20from=20https://gitee.com/c459?= =?UTF-8?q?517356/kernel=5Flinux=5F5.10/pulls/1042=20=E6=9B=B4=E6=94=B9loc?= =?UTF-8?q?al=E5=B1=82=E9=AA=8C=E8=AF=81symlink=5Fpath=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=8F=AF=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: c459517356 --- fs/hmdfs/inode_local.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/fs/hmdfs/inode_local.c b/fs/hmdfs/inode_local.c index ef36f5e33240..69853b8c84d4 100644 --- a/fs/hmdfs/inode_local.c +++ b/fs/hmdfs/inode_local.c @@ -742,17 +742,18 @@ int hmdfs_rename_local(struct inode *old_dir, struct dentry *old_dentry, static bool symname_is_allowed(const char *symname) { - size_t symname_len = strlen(symname); - int i; - - if (symname_len == 1) - return true; - - for (i = 0; i < symname_len - 1; i++) - if (symname[i] == '.' && symname[i + 1] == '.') { - hmdfs_err("Prohibited link path"); - return false; - } + char *p; + size_t symname_len; + + symname_len = strnlen(symname, PATH_MAX); + if (symname_len >= PATH_MAX) + return false; + + p = strstr(symname, "/../"); + if (p) + return false; + if (symname[0] == '.' && symname[1] == '.' && symname[2] == '/') + return false; return true; } -- Gitee