diff --git a/qtfs/include/log.h b/qtfs/include/log.h index 284464e1eddd1cc433aff9bdfab804b8e8946dac..cc17168e57a9527faf024c7d1bf4538ff7a66989 100644 --- a/qtfs/include/log.h +++ b/qtfs/include/log.h @@ -71,7 +71,7 @@ extern int log_level; #define qtfs_crit(fmt, ...) \ {\ - pr_crit("[%s::%s:%4d] " fmt,\ + pr_crit("[%s::%s:%4d] " fmt "\n",\ KBUILD_MODNAME, kbasename(__FILE__), __LINE__, ##__VA_ARGS__);\ } @@ -79,7 +79,7 @@ extern int log_level; ( \ { \ if (likely(log_level >= LOG_ERROR)) { \ - pr_err("[%s::%s:%4d] " fmt, \ + pr_err("[%s::%s:%4d] " fmt "\n", \ KBUILD_MODNAME, kbasename(__FILE__), __LINE__, ##__VA_ARGS__); \ } \ } \ @@ -108,7 +108,7 @@ static inline int qtfs_log_init(char *level, int len) { ( \ { \ if (unlikely(log_level >= LOG_WARN)) { \ - pr_warn("[%s::%s:%4d] " fmt, \ + pr_warn("[%s::%s:%4d] " fmt "\n", \ KBUILD_MODNAME, kbasename(__FILE__), __LINE__, ##__VA_ARGS__); \ } \ } \ @@ -118,7 +118,7 @@ static inline int qtfs_log_init(char *level, int len) { ( \ { \ if (unlikely(log_level >= LOG_INFO)) { \ - pr_info("[%s::%s:%4d] " fmt, \ + pr_info("[%s::%s:%4d] " fmt "\n", \ KBUILD_MODNAME, kbasename(__FILE__), __LINE__, ##__VA_ARGS__); \ } \ } \ @@ -128,7 +128,7 @@ static inline int qtfs_log_init(char *level, int len) { ( \ { \ if (unlikely(log_level >= LOG_DEBUG)) { \ - pr_info("[%s::%s:%4d] " fmt, \ + pr_info("[%s::%s:%4d] " fmt "\n", \ KBUILD_MODNAME, kbasename(__FILE__), __LINE__, ##__VA_ARGS__); \ } \ } \ @@ -138,7 +138,7 @@ static inline int qtfs_log_init(char *level, int len) { ( \ { \ if (likely(log_level >= LOG_ERROR)) { \ - pr_err_ratelimited("[%s::%s:%4d] " fmt, \ + pr_err_ratelimited("[%s::%s:%4d] " fmt "\n", \ KBUILD_MODNAME, kbasename(__FILE__), __LINE__, ##__VA_ARGS__); \ } \ } \ @@ -148,7 +148,7 @@ static inline int qtfs_log_init(char *level, int len) { ( \ { \ if (unlikely(log_level >= LOG_INFO)) { \ - pr_info_ratelimited("[%s::%s:%4d] " fmt, \ + pr_info_ratelimited("[%s::%s:%4d] " fmt "\n", \ KBUILD_MODNAME, kbasename(__FILE__), __LINE__, ##__VA_ARGS__); \ } \ } \ @@ -158,7 +158,7 @@ static inline int qtfs_log_init(char *level, int len) { ( \ { \ if (unlikely(log_level >= LOG_WARN)) { \ - pr_warn_ratelimited("[%s::%s:%4d] " fmt, \ + pr_warn_ratelimited("[%s::%s:%4d] " fmt "\n", \ KBUILD_MODNAME, kbasename(__FILE__), __LINE__, ##__VA_ARGS__); \ } \ } \ diff --git a/qtfs/qtfs/syscall.c b/qtfs/qtfs/syscall.c index aab2b621cf8581cd3b546961b25cb8bf3922278f..a02a2256304d51c8061d0237df5aa7d252006630 100644 --- a/qtfs/qtfs/syscall.c +++ b/qtfs/qtfs/syscall.c @@ -46,14 +46,21 @@ static void *qtfs_copy_dir_and_data(const void __user *dir, const void __user *d long dir_len; long data_len; int ret; - dir_len = strnlen_user(dir, MAX_PATH_LEN); + dir_len = strnlen_user(dir, PAGE_SIZE); if (!dir_len) return ERR_PTR(-EFAULT); - data_len = strnlen_user(data, MAX_PATH_LEN - dir_len - 1); - data_ret = memdup_user(dir, data_len + dir_len); + data_len = strnlen_user(data, PAGE_SIZE - dir_len - 1); + + data_ret = kmalloc(PAGE_SIZE, GFP_KERNEL); if (IS_ERR_OR_NULL(data_ret)) { return ERR_PTR(-ENOMEM); } + memset(data_ret, 0, PAGE_SIZE); + ret = copy_from_user(data_ret, dir, dir_len); + if (ret) { + kfree(data_ret); + return ERR_PTR(-EFAULT); + } dir_data = (char *)data_ret; if (data_len == 0) return data_ret;