提交 9d49df69 编写于 作者: N Namjae Jeon 提交者: Zhong Jinghua

cifsd: remove wrappers of kvmalloc/kvfree

mainline inclusion
from mainline-5.15-rc1
commit 79f6b11a
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I60T7G
CVE: NA

Reference: https://git.kernel.org/torvalds/linux/c/79f6b11a104f

-------------------------------

Do directly call kvmalloc/kvfree().
Signed-off-by: NNamjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: NSteve French <stfrench@microsoft.com>
Signed-off-by: NJason Yan <yanaijie@huawei.com>
Signed-off-by: NZhong Jinghua <zhongjinghua@huawei.com>
上级 3f08c89d
...@@ -709,7 +709,7 @@ int ksmbd_krb5_authenticate(struct ksmbd_session *sess, char *in_blob, ...@@ -709,7 +709,7 @@ int ksmbd_krb5_authenticate(struct ksmbd_session *sess, char *in_blob,
*out_len = resp->spnego_blob_len; *out_len = resp->spnego_blob_len;
retval = 0; retval = 0;
out: out:
ksmbd_free(resp); kvfree(resp);
return retval; return retval;
} }
#else #else
......
...@@ -37,16 +37,6 @@ struct wm_list { ...@@ -37,16 +37,6 @@ struct wm_list {
static LIST_HEAD(wm_lists); static LIST_HEAD(wm_lists);
static DEFINE_RWLOCK(wm_lists_lock); static DEFINE_RWLOCK(wm_lists_lock);
void *ksmbd_alloc(size_t size)
{
return kvmalloc(size, GFP_KERNEL | __GFP_ZERO);
}
void ksmbd_free(void *ptr)
{
kvfree(ptr);
}
static struct wm *wm_alloc(size_t sz, gfp_t flags) static struct wm *wm_alloc(size_t sz, gfp_t flags)
{ {
struct wm *wm; struct wm *wm;
...@@ -169,7 +159,7 @@ static void release_wm(struct wm *wm, struct wm_list *wm_list) ...@@ -169,7 +159,7 @@ static void release_wm(struct wm *wm, struct wm_list *wm_list)
wm_list->avail_wm--; wm_list->avail_wm--;
spin_unlock(&wm_list->wm_lock); spin_unlock(&wm_list->wm_lock);
ksmbd_free(wm); kvfree(wm);
} }
static void wm_list_free(struct wm_list *l) static void wm_list_free(struct wm_list *l)
...@@ -195,26 +185,6 @@ static void wm_lists_destroy(void) ...@@ -195,26 +185,6 @@ static void wm_lists_destroy(void)
} }
} }
void ksmbd_free_request(void *addr)
{
kvfree(addr);
}
void *ksmbd_alloc_request(size_t size)
{
return kvmalloc(size, GFP_KERNEL);
}
void ksmbd_free_response(void *buffer)
{
kvfree(buffer);
}
void *ksmbd_alloc_response(size_t size)
{
return kvmalloc(size, GFP_KERNEL | __GFP_ZERO);
}
void *ksmbd_find_buffer(size_t size) void *ksmbd_find_buffer(size_t size)
{ {
struct wm *wm; struct wm *wm;
...@@ -247,11 +217,11 @@ void *ksmbd_realloc_response(void *ptr, size_t old_sz, size_t new_sz) ...@@ -247,11 +217,11 @@ void *ksmbd_realloc_response(void *ptr, size_t old_sz, size_t new_sz)
size_t sz = min(old_sz, new_sz); size_t sz = min(old_sz, new_sz);
void *nptr; void *nptr;
nptr = ksmbd_alloc_response(new_sz); nptr = kvmalloc(new_sz, GFP_KERNEL | __GFP_ZERO);
if (!nptr) if (!nptr)
return ptr; return ptr;
memcpy(nptr, ptr, sz); memcpy(nptr, ptr, sz);
ksmbd_free_response(ptr); kvfree(ptr);
return nptr; return nptr;
} }
......
...@@ -9,14 +9,6 @@ ...@@ -9,14 +9,6 @@
void *ksmbd_find_buffer(size_t size); void *ksmbd_find_buffer(size_t size);
void ksmbd_release_buffer(void *buffer); void ksmbd_release_buffer(void *buffer);
void *ksmbd_alloc(size_t size);
void ksmbd_free(void *ptr);
void ksmbd_free_request(void *addr);
void *ksmbd_alloc_request(size_t size);
void ksmbd_free_response(void *buffer);
void *ksmbd_alloc_response(size_t size);
void *ksmbd_realloc_response(void *ptr, size_t old_sz, size_t new_sz); void *ksmbd_realloc_response(void *ptr, size_t old_sz, size_t new_sz);
void ksmbd_free_file_struct(void *filp); void ksmbd_free_file_struct(void *filp);
......
...@@ -37,7 +37,7 @@ void ksmbd_conn_free(struct ksmbd_conn *conn) ...@@ -37,7 +37,7 @@ void ksmbd_conn_free(struct ksmbd_conn *conn)
list_del(&conn->conns_list); list_del(&conn->conns_list);
write_unlock(&conn_list_lock); write_unlock(&conn_list_lock);
ksmbd_free_request(conn->request_buf); kvfree(conn->request_buf);
ksmbd_ida_free(conn->async_ida); ksmbd_ida_free(conn->async_ida);
kfree(conn->preauth_info); kfree(conn->preauth_info);
kfree(conn); kfree(conn);
...@@ -284,7 +284,7 @@ int ksmbd_conn_handler_loop(void *p) ...@@ -284,7 +284,7 @@ int ksmbd_conn_handler_loop(void *p)
if (try_to_freeze()) if (try_to_freeze())
continue; continue;
ksmbd_free_request(conn->request_buf); kvfree(conn->request_buf);
conn->request_buf = NULL; conn->request_buf = NULL;
size = t->ops->read(t, hdr_buf, sizeof(hdr_buf)); size = t->ops->read(t, hdr_buf, sizeof(hdr_buf));
...@@ -303,7 +303,7 @@ int ksmbd_conn_handler_loop(void *p) ...@@ -303,7 +303,7 @@ int ksmbd_conn_handler_loop(void *p)
/* 4 for rfc1002 length field */ /* 4 for rfc1002 length field */
size = pdu_size + 4; size = pdu_size + 4;
conn->request_buf = ksmbd_alloc_request(size); conn->request_buf = kvmalloc(size, GFP_KERNEL);
if (!conn->request_buf) if (!conn->request_buf)
continue; continue;
......
...@@ -105,7 +105,7 @@ static struct shash_desc *alloc_shash_desc(int id) ...@@ -105,7 +105,7 @@ static struct shash_desc *alloc_shash_desc(int id)
static struct ksmbd_crypto_ctx *ctx_alloc(void) static struct ksmbd_crypto_ctx *ctx_alloc(void)
{ {
return ksmbd_alloc(sizeof(struct ksmbd_crypto_ctx)); return kzalloc(sizeof(struct ksmbd_crypto_ctx), GFP_KERNEL);
} }
static void ctx_free(struct ksmbd_crypto_ctx *ctx) static void ctx_free(struct ksmbd_crypto_ctx *ctx)
...@@ -116,7 +116,7 @@ static void ctx_free(struct ksmbd_crypto_ctx *ctx) ...@@ -116,7 +116,7 @@ static void ctx_free(struct ksmbd_crypto_ctx *ctx)
free_shash(ctx->desc[i]); free_shash(ctx->desc[i]);
for (i = 0; i < CRYPTO_AEAD_MAX; i++) for (i = 0; i < CRYPTO_AEAD_MAX; i++)
free_aead(ctx->ccmaes[i]); free_aead(ctx->ccmaes[i]);
ksmbd_free(ctx); kfree(ctx);
} }
static struct ksmbd_crypto_ctx *ksmbd_find_crypto_ctx(void) static struct ksmbd_crypto_ctx *ksmbd_find_crypto_ctx(void)
......
...@@ -42,16 +42,16 @@ void ksmbd_free_work_struct(struct ksmbd_work *work) ...@@ -42,16 +42,16 @@ void ksmbd_free_work_struct(struct ksmbd_work *work)
work->set_trans_buf) work->set_trans_buf)
ksmbd_release_buffer(work->response_buf); ksmbd_release_buffer(work->response_buf);
else else
ksmbd_free_response(work->response_buf); kvfree(work->response_buf);
if (server_conf.flags & KSMBD_GLOBAL_FLAG_CACHE_RBUF && if (server_conf.flags & KSMBD_GLOBAL_FLAG_CACHE_RBUF &&
work->set_read_buf) work->set_read_buf)
ksmbd_release_buffer(work->aux_payload_buf); ksmbd_release_buffer(work->aux_payload_buf);
else else
ksmbd_free_response(work->aux_payload_buf); kvfree(work->aux_payload_buf);
ksmbd_free_response(work->tr_buf); kfree(work->tr_buf);
ksmbd_free_request(work->request_buf); kvfree(work->request_buf);
if (work->async_id) if (work->async_id)
ksmbd_release_id(work->conn->async_ida, work->async_id); ksmbd_release_id(work->conn->async_ida, work->async_id);
kmem_cache_free(work_cache, work); kmem_cache_free(work_cache, work);
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <linux/parser.h> #include <linux/parser.h>
#include <linux/namei.h> #include <linux/namei.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/mm.h>
#include "share_config.h" #include "share_config.h"
#include "user_config.h" #include "user_config.h"
...@@ -182,7 +183,7 @@ static struct ksmbd_share_config *share_config_request(char *name) ...@@ -182,7 +183,7 @@ static struct ksmbd_share_config *share_config_request(char *name)
up_write(&shares_table_lock); up_write(&shares_table_lock);
out: out:
ksmbd_free(resp); kvfree(resp);
return share; return share;
} }
......
...@@ -31,7 +31,7 @@ ksmbd_tree_conn_connect(struct ksmbd_session *sess, char *share_name) ...@@ -31,7 +31,7 @@ ksmbd_tree_conn_connect(struct ksmbd_session *sess, char *share_name)
if (!sc) if (!sc)
return status; return status;
tree_conn = ksmbd_alloc(sizeof(struct ksmbd_tree_connect)); tree_conn = kzalloc(sizeof(struct ksmbd_tree_connect), GFP_KERNEL);
if (!tree_conn) { if (!tree_conn) {
status.ret = -ENOMEM; status.ret = -ENOMEM;
goto out_error; goto out_error;
...@@ -68,15 +68,15 @@ ksmbd_tree_conn_connect(struct ksmbd_session *sess, char *share_name) ...@@ -68,15 +68,15 @@ ksmbd_tree_conn_connect(struct ksmbd_session *sess, char *share_name)
status.ret = -ENOMEM; status.ret = -ENOMEM;
goto out_error; goto out_error;
} }
ksmbd_free(resp); kvfree(resp);
return status; return status;
out_error: out_error:
if (tree_conn) if (tree_conn)
ksmbd_release_tree_conn_id(sess, tree_conn->id); ksmbd_release_tree_conn_id(sess, tree_conn->id);
ksmbd_share_config_put(sc); ksmbd_share_config_put(sc);
ksmbd_free(tree_conn); kfree(tree_conn);
ksmbd_free(resp); kvfree(resp);
return status; return status;
} }
...@@ -89,7 +89,7 @@ int ksmbd_tree_conn_disconnect(struct ksmbd_session *sess, ...@@ -89,7 +89,7 @@ int ksmbd_tree_conn_disconnect(struct ksmbd_session *sess,
ksmbd_release_tree_conn_id(sess, tree_conn->id); ksmbd_release_tree_conn_id(sess, tree_conn->id);
xa_erase(&sess->tree_conns, tree_conn->id); xa_erase(&sess->tree_conns, tree_conn->id);
ksmbd_share_config_put(tree_conn->share_conf); ksmbd_share_config_put(tree_conn->share_conf);
ksmbd_free(tree_conn); kfree(tree_conn);
return ret; return ret;
} }
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
*/ */
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/mm.h>
#include "user_config.h" #include "user_config.h"
#include "../buffer_pool.h" #include "../buffer_pool.h"
...@@ -23,7 +24,7 @@ struct ksmbd_user *ksmbd_login_user(const char *account) ...@@ -23,7 +24,7 @@ struct ksmbd_user *ksmbd_login_user(const char *account)
user = ksmbd_alloc_user(resp); user = ksmbd_alloc_user(resp);
out: out:
ksmbd_free(resp); kvfree(resp);
return user; return user;
} }
......
...@@ -53,7 +53,7 @@ static void __session_rpc_close(struct ksmbd_session *sess, ...@@ -53,7 +53,7 @@ static void __session_rpc_close(struct ksmbd_session *sess,
if (!resp) if (!resp)
pr_err("Unable to close RPC pipe %d\n", entry->id); pr_err("Unable to close RPC pipe %d\n", entry->id);
ksmbd_free(resp); kvfree(resp);
ksmbd_rpc_id_free(entry->id); ksmbd_rpc_id_free(entry->id);
kfree(entry); kfree(entry);
} }
...@@ -117,7 +117,7 @@ int ksmbd_session_rpc_open(struct ksmbd_session *sess, char *rpc_name) ...@@ -117,7 +117,7 @@ int ksmbd_session_rpc_open(struct ksmbd_session *sess, char *rpc_name)
if (!resp) if (!resp)
goto error; goto error;
ksmbd_free(resp); kvfree(resp);
return entry->id; return entry->id;
error: error:
list_del(&entry->list); list_del(&entry->list);
......
...@@ -563,7 +563,7 @@ int smb2_allocate_rsp_buf(struct ksmbd_work *work) ...@@ -563,7 +563,7 @@ int smb2_allocate_rsp_buf(struct ksmbd_work *work)
work->set_trans_buf) work->set_trans_buf)
work->response_buf = ksmbd_find_buffer(sz); work->response_buf = ksmbd_find_buffer(sz);
else else
work->response_buf = ksmbd_alloc_response(sz); work->response_buf = kvmalloc(sz, GFP_KERNEL | __GFP_ZERO);
if (!work->response_buf) { if (!work->response_buf) {
ksmbd_err("Failed to allocate %zu bytes buffer\n", sz); ksmbd_err("Failed to allocate %zu bytes buffer\n", sz);
...@@ -2283,7 +2283,7 @@ static int smb2_remove_smb_xattrs(struct dentry *dentry) ...@@ -2283,7 +2283,7 @@ static int smb2_remove_smb_xattrs(struct dentry *dentry)
ksmbd_debug(SMB, "remove xattr failed : %s\n", name); ksmbd_debug(SMB, "remove xattr failed : %s\n", name);
} }
out: out:
ksmbd_vfs_xattr_free(xattr_list); kvfree(xattr_list);
return err; return err;
} }
...@@ -4190,12 +4190,12 @@ static int smb2_get_ea(struct ksmbd_work *work, struct ksmbd_file *fp, ...@@ -4190,12 +4190,12 @@ static int smb2_get_ea(struct ksmbd_work *work, struct ksmbd_file *fp,
buf_free_len -= value_len; buf_free_len -= value_len;
if (buf_free_len < 0) { if (buf_free_len < 0) {
ksmbd_free(buf); kfree(buf);
break; break;
} }
memcpy(ptr, buf, value_len); memcpy(ptr, buf, value_len);
ksmbd_free(buf); kfree(buf);
ptr += value_len; ptr += value_len;
eainfo->Flags = 0; eainfo->Flags = 0;
...@@ -4240,7 +4240,7 @@ static int smb2_get_ea(struct ksmbd_work *work, struct ksmbd_file *fp, ...@@ -4240,7 +4240,7 @@ static int smb2_get_ea(struct ksmbd_work *work, struct ksmbd_file *fp,
rsp->OutputBufferLength = cpu_to_le32(rsp_data_cnt); rsp->OutputBufferLength = cpu_to_le32(rsp_data_cnt);
inc_rfc1001_len(rsp_org, rsp_data_cnt); inc_rfc1001_len(rsp_org, rsp_data_cnt);
out: out:
ksmbd_vfs_xattr_free(xattr_list); kvfree(xattr_list);
return rc; return rc;
} }
...@@ -4510,7 +4510,7 @@ static void get_file_stream_info(struct ksmbd_work *work, ...@@ -4510,7 +4510,7 @@ static void get_file_stream_info(struct ksmbd_work *work,
/* last entry offset should be 0 */ /* last entry offset should be 0 */
file_info->NextEntryOffset = 0; file_info->NextEntryOffset = 0;
out: out:
ksmbd_vfs_xattr_free(xattr_list); kvfree(xattr_list);
rsp->OutputBufferLength = cpu_to_le32(nbytes); rsp->OutputBufferLength = cpu_to_le32(nbytes);
inc_rfc1001_len(rsp_org, nbytes); inc_rfc1001_len(rsp_org, nbytes);
...@@ -5976,7 +5976,7 @@ static noinline int smb2_read_pipe(struct ksmbd_work *work) ...@@ -5976,7 +5976,7 @@ static noinline int smb2_read_pipe(struct ksmbd_work *work)
} }
work->aux_payload_buf = work->aux_payload_buf =
ksmbd_alloc_response(rpc_resp->payload_sz); kvmalloc(rpc_resp->payload_sz, GFP_KERNEL | __GFP_ZERO);
if (!work->aux_payload_buf) { if (!work->aux_payload_buf) {
err = -ENOMEM; err = -ENOMEM;
goto out; goto out;
...@@ -5988,7 +5988,7 @@ static noinline int smb2_read_pipe(struct ksmbd_work *work) ...@@ -5988,7 +5988,7 @@ static noinline int smb2_read_pipe(struct ksmbd_work *work)
nbytes = rpc_resp->payload_sz; nbytes = rpc_resp->payload_sz;
work->resp_hdr_sz = get_rfc1002_len(rsp) + 4; work->resp_hdr_sz = get_rfc1002_len(rsp) + 4;
work->aux_payload_sz = nbytes; work->aux_payload_sz = nbytes;
ksmbd_free(rpc_resp); kvfree(rpc_resp);
} }
rsp->StructureSize = cpu_to_le16(17); rsp->StructureSize = cpu_to_le16(17);
...@@ -6003,7 +6003,7 @@ static noinline int smb2_read_pipe(struct ksmbd_work *work) ...@@ -6003,7 +6003,7 @@ static noinline int smb2_read_pipe(struct ksmbd_work *work)
out: out:
rsp->hdr.Status = STATUS_UNEXPECTED_IO_ERROR; rsp->hdr.Status = STATUS_UNEXPECTED_IO_ERROR;
smb2_set_err_rsp(work); smb2_set_err_rsp(work);
ksmbd_free(rpc_resp); kvfree(rpc_resp);
return err; return err;
} }
...@@ -6094,7 +6094,7 @@ int smb2_read(struct ksmbd_work *work) ...@@ -6094,7 +6094,7 @@ int smb2_read(struct ksmbd_work *work)
ksmbd_find_buffer(conn->vals->max_read_size); ksmbd_find_buffer(conn->vals->max_read_size);
work->set_read_buf = true; work->set_read_buf = true;
} else { } else {
work->aux_payload_buf = ksmbd_alloc_response(length); work->aux_payload_buf = kvmalloc(length, GFP_KERNEL | __GFP_ZERO);
} }
if (!work->aux_payload_buf) { if (!work->aux_payload_buf) {
err = -ENOMEM; err = -ENOMEM;
...@@ -6111,7 +6111,7 @@ int smb2_read(struct ksmbd_work *work) ...@@ -6111,7 +6111,7 @@ int smb2_read(struct ksmbd_work *work)
if (server_conf.flags & KSMBD_GLOBAL_FLAG_CACHE_RBUF) if (server_conf.flags & KSMBD_GLOBAL_FLAG_CACHE_RBUF)
ksmbd_release_buffer(work->aux_payload_buf); ksmbd_release_buffer(work->aux_payload_buf);
else else
ksmbd_free_response(work->aux_payload_buf); kvfree(work->aux_payload_buf);
work->aux_payload_buf = NULL; work->aux_payload_buf = NULL;
rsp->hdr.Status = STATUS_END_OF_FILE; rsp->hdr.Status = STATUS_END_OF_FILE;
smb2_set_err_rsp(work); smb2_set_err_rsp(work);
...@@ -6130,7 +6130,7 @@ int smb2_read(struct ksmbd_work *work) ...@@ -6130,7 +6130,7 @@ int smb2_read(struct ksmbd_work *work)
if (server_conf.flags & KSMBD_GLOBAL_FLAG_CACHE_RBUF) if (server_conf.flags & KSMBD_GLOBAL_FLAG_CACHE_RBUF)
ksmbd_release_buffer(work->aux_payload_buf); ksmbd_release_buffer(work->aux_payload_buf);
else else
ksmbd_free_response(work->aux_payload_buf); kvfree(work->aux_payload_buf);
work->aux_payload_buf = NULL; work->aux_payload_buf = NULL;
nbytes = 0; nbytes = 0;
...@@ -6215,17 +6215,17 @@ static noinline int smb2_write_pipe(struct ksmbd_work *work) ...@@ -6215,17 +6215,17 @@ static noinline int smb2_write_pipe(struct ksmbd_work *work)
if (rpc_resp) { if (rpc_resp) {
if (rpc_resp->flags == KSMBD_RPC_ENOTIMPLEMENTED) { if (rpc_resp->flags == KSMBD_RPC_ENOTIMPLEMENTED) {
rsp->hdr.Status = STATUS_NOT_SUPPORTED; rsp->hdr.Status = STATUS_NOT_SUPPORTED;
ksmbd_free(rpc_resp); kvfree(rpc_resp);
smb2_set_err_rsp(work); smb2_set_err_rsp(work);
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
if (rpc_resp->flags != KSMBD_RPC_OK) { if (rpc_resp->flags != KSMBD_RPC_OK) {
rsp->hdr.Status = STATUS_INVALID_HANDLE; rsp->hdr.Status = STATUS_INVALID_HANDLE;
smb2_set_err_rsp(work); smb2_set_err_rsp(work);
ksmbd_free(rpc_resp); kvfree(rpc_resp);
return ret; return ret;
} }
ksmbd_free(rpc_resp); kvfree(rpc_resp);
} }
rsp->StructureSize = cpu_to_le16(17); rsp->StructureSize = cpu_to_le16(17);
...@@ -6271,7 +6271,7 @@ static ssize_t smb2_write_rdma_channel(struct ksmbd_work *work, ...@@ -6271,7 +6271,7 @@ static ssize_t smb2_write_rdma_channel(struct ksmbd_work *work,
(req->Channel == SMB2_CHANNEL_RDMA_V1_INVALIDATE); (req->Channel == SMB2_CHANNEL_RDMA_V1_INVALIDATE);
work->remote_key = le32_to_cpu(desc->token); work->remote_key = le32_to_cpu(desc->token);
data_buf = ksmbd_alloc_response(length); data_buf = kvmalloc(length, GFP_KERNEL | __GFP_ZERO);
if (!data_buf) if (!data_buf)
return -ENOMEM; return -ENOMEM;
...@@ -6280,12 +6280,12 @@ static ssize_t smb2_write_rdma_channel(struct ksmbd_work *work, ...@@ -6280,12 +6280,12 @@ static ssize_t smb2_write_rdma_channel(struct ksmbd_work *work,
le64_to_cpu(desc->offset), le64_to_cpu(desc->offset),
le32_to_cpu(desc->length)); le32_to_cpu(desc->length));
if (ret < 0) { if (ret < 0) {
ksmbd_free_response(data_buf); kvfree(data_buf);
return ret; return ret;
} }
ret = ksmbd_vfs_write(work, fp, data_buf, length, &offset, sync, &nbytes); ret = ksmbd_vfs_write(work, fp, data_buf, length, &offset, sync, &nbytes);
ksmbd_free_response(data_buf); kvfree(data_buf);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -7307,7 +7307,7 @@ static int fsctl_pipe_transceive(struct ksmbd_work *work, u64 id, ...@@ -7307,7 +7307,7 @@ static int fsctl_pipe_transceive(struct ksmbd_work *work, u64 id,
memcpy((char *)rsp->Buffer, rpc_resp->payload, nbytes); memcpy((char *)rsp->Buffer, rpc_resp->payload, nbytes);
} }
out: out:
ksmbd_free(rpc_resp); kvfree(rpc_resp);
return nbytes; return nbytes;
} }
......
...@@ -233,7 +233,7 @@ static struct ksmbd_ipc_msg *ipc_msg_alloc(size_t sz) ...@@ -233,7 +233,7 @@ static struct ksmbd_ipc_msg *ipc_msg_alloc(size_t sz)
struct ksmbd_ipc_msg *msg; struct ksmbd_ipc_msg *msg;
size_t msg_sz = sz + sizeof(struct ksmbd_ipc_msg); size_t msg_sz = sz + sizeof(struct ksmbd_ipc_msg);
msg = ksmbd_alloc(msg_sz); msg = kvmalloc(msg_sz, GFP_KERNEL | __GFP_ZERO);
if (msg) if (msg)
msg->sz = sz; msg->sz = sz;
return msg; return msg;
...@@ -241,7 +241,7 @@ static struct ksmbd_ipc_msg *ipc_msg_alloc(size_t sz) ...@@ -241,7 +241,7 @@ static struct ksmbd_ipc_msg *ipc_msg_alloc(size_t sz)
static void ipc_msg_free(struct ksmbd_ipc_msg *msg) static void ipc_msg_free(struct ksmbd_ipc_msg *msg)
{ {
ksmbd_free(msg); kvfree(msg);
} }
static void ipc_msg_handle_free(int handle) static void ipc_msg_handle_free(int handle)
...@@ -272,7 +272,7 @@ static int handle_response(int type, void *payload, size_t sz) ...@@ -272,7 +272,7 @@ static int handle_response(int type, void *payload, size_t sz)
entry->type + 1, type); entry->type + 1, type);
} }
entry->response = ksmbd_alloc(sz); entry->response = kvmalloc(sz, GFP_KERNEL | __GFP_ZERO);
if (!entry->response) { if (!entry->response) {
ret = -ENOMEM; ret = -ENOMEM;
break; break;
......
...@@ -244,7 +244,7 @@ static ssize_t ksmbd_vfs_getcasexattr(struct dentry *dentry, char *attr_name, ...@@ -244,7 +244,7 @@ static ssize_t ksmbd_vfs_getcasexattr(struct dentry *dentry, char *attr_name,
} }
out: out:
ksmbd_vfs_xattr_free(xattr_list); kvfree(xattr_list);
return value_len; return value_len;
} }
...@@ -401,7 +401,7 @@ static int ksmbd_vfs_stream_write(struct ksmbd_file *fp, char *buf, loff_t *pos, ...@@ -401,7 +401,7 @@ static int ksmbd_vfs_stream_write(struct ksmbd_file *fp, char *buf, loff_t *pos,
} }
if (v_len < size) { if (v_len < size) {
wbuf = ksmbd_alloc(size); wbuf = kvmalloc(size, GFP_KERNEL | __GFP_ZERO);
if (!wbuf) { if (!wbuf) {
err = -ENOMEM; err = -ENOMEM;
goto out; goto out;
...@@ -425,7 +425,7 @@ static int ksmbd_vfs_stream_write(struct ksmbd_file *fp, char *buf, loff_t *pos, ...@@ -425,7 +425,7 @@ static int ksmbd_vfs_stream_write(struct ksmbd_file *fp, char *buf, loff_t *pos,
fp->filp->f_pos = *pos; fp->filp->f_pos = *pos;
err = 0; err = 0;
out: out:
ksmbd_free(stream_buf); kvfree(stream_buf);
return err; return err;
} }
...@@ -844,7 +844,7 @@ ssize_t ksmbd_vfs_listxattr(struct dentry *dentry, char **list) ...@@ -844,7 +844,7 @@ ssize_t ksmbd_vfs_listxattr(struct dentry *dentry, char **list)
if (size <= 0) if (size <= 0)
return size; return size;
vlist = ksmbd_alloc(size); vlist = kvmalloc(size, GFP_KERNEL | __GFP_ZERO);
if (!vlist) if (!vlist)
return -ENOMEM; return -ENOMEM;
...@@ -852,7 +852,7 @@ ssize_t ksmbd_vfs_listxattr(struct dentry *dentry, char **list) ...@@ -852,7 +852,7 @@ ssize_t ksmbd_vfs_listxattr(struct dentry *dentry, char **list)
size = vfs_listxattr(dentry, vlist, size); size = vfs_listxattr(dentry, vlist, size);
if (size < 0) { if (size < 0) {
ksmbd_debug(VFS, "listxattr failed\n"); ksmbd_debug(VFS, "listxattr failed\n");
ksmbd_vfs_xattr_free(vlist); kvfree(vlist);
*list = NULL; *list = NULL;
} }
...@@ -1049,11 +1049,6 @@ int ksmbd_vfs_remove_xattr(struct dentry *dentry, char *attr_name) ...@@ -1049,11 +1049,6 @@ int ksmbd_vfs_remove_xattr(struct dentry *dentry, char *attr_name)
return vfs_removexattr(&init_user_ns, dentry, attr_name); return vfs_removexattr(&init_user_ns, dentry, attr_name);
} }
void ksmbd_vfs_xattr_free(char *xattr)
{
ksmbd_free(xattr);
}
int ksmbd_vfs_unlink(struct dentry *dir, struct dentry *dentry) int ksmbd_vfs_unlink(struct dentry *dir, struct dentry *dentry)
{ {
int err = 0; int err = 0;
...@@ -1297,7 +1292,7 @@ int ksmbd_vfs_remove_acl_xattrs(struct dentry *dentry) ...@@ -1297,7 +1292,7 @@ int ksmbd_vfs_remove_acl_xattrs(struct dentry *dentry)
} }
} }
out: out:
ksmbd_vfs_xattr_free(xattr_list); kvfree(xattr_list);
return err; return err;
} }
...@@ -1326,7 +1321,7 @@ int ksmbd_vfs_remove_sd_xattrs(struct dentry *dentry) ...@@ -1326,7 +1321,7 @@ int ksmbd_vfs_remove_sd_xattrs(struct dentry *dentry)
} }
} }
out: out:
ksmbd_vfs_xattr_free(xattr_list); kvfree(xattr_list);
return err; return err;
} }
...@@ -1558,7 +1553,7 @@ int ksmbd_vfs_get_dos_attrib_xattr(struct dentry *dentry, ...@@ -1558,7 +1553,7 @@ int ksmbd_vfs_get_dos_attrib_xattr(struct dentry *dentry,
n.length = err; n.length = err;
if (ndr_decode_dos_attr(&n, da)) if (ndr_decode_dos_attr(&n, da))
err = -EINVAL; err = -EINVAL;
ksmbd_free(n.data); kfree(n.data);
} else { } else {
ksmbd_debug(SMB, "failed to load dos attribute in xattr\n"); ksmbd_debug(SMB, "failed to load dos attribute in xattr\n");
} }
...@@ -1683,7 +1678,7 @@ ssize_t ksmbd_vfs_casexattr_len(struct dentry *dentry, char *attr_name, ...@@ -1683,7 +1678,7 @@ ssize_t ksmbd_vfs_casexattr_len(struct dentry *dentry, char *attr_name,
} }
out: out:
ksmbd_vfs_xattr_free(xattr_list); kvfree(xattr_list);
return value_len; return value_len;
} }
......
...@@ -229,7 +229,6 @@ int ksmbd_vfs_setxattr(struct dentry *dentry, const char *attr_name, ...@@ -229,7 +229,6 @@ int ksmbd_vfs_setxattr(struct dentry *dentry, const char *attr_name,
int ksmbd_vfs_xattr_stream_name(char *stream_name, char **xattr_stream_name, int ksmbd_vfs_xattr_stream_name(char *stream_name, char **xattr_stream_name,
size_t *xattr_stream_name_size, int s_type); size_t *xattr_stream_name_size, int s_type);
int ksmbd_vfs_remove_xattr(struct dentry *dentry, char *attr_name); int ksmbd_vfs_remove_xattr(struct dentry *dentry, char *attr_name);
void ksmbd_vfs_xattr_free(char *xattr);
int ksmbd_vfs_kern_path(char *name, unsigned int flags, struct path *path, int ksmbd_vfs_kern_path(char *name, unsigned int flags, struct path *path,
bool caseless); bool caseless);
int ksmbd_vfs_empty_dir(struct ksmbd_file *fp); int ksmbd_vfs_empty_dir(struct ksmbd_file *fp);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册