diff options
| author | Thorsten Blum <thorsten.blum@linux.dev> | 2026-02-05 16:24:51 +0300 |
|---|---|---|
| committer | Tyler Hicks <code@tyhicks.com> | 2026-03-26 06:39:27 +0300 |
| commit | 8b9bf58bc3a6f148d990bb697a3b6dbb11672f86 (patch) | |
| tree | 4b3f31cba6326d6aabac9aae6e10340ea810c18c | |
| parent | f7a1c0283f135833db164cc0fac8d422fed2079e (diff) | |
| download | linux-8b9bf58bc3a6f148d990bb697a3b6dbb11672f86.tar.xz | |
ecryptfs: Use struct_size to improve process_response + send_miscdev
Use struct_size(), which provides additional compile-time checks for
structures with flexible array members (e.g., __must_be_array()), to
determine the allocation size for a new 'struct ecryptfs_message'.
In send_miscdev(), reuse 'msg_size' instead of recalculating it.
Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
Signed-off-by: Tyler Hicks <code@tyhicks.com>
| -rw-r--r-- | fs/ecryptfs/messaging.c | 3 | ||||
| -rw-r--r-- | fs/ecryptfs/miscdev.c | 7 |
2 files changed, 7 insertions, 3 deletions
diff --git a/fs/ecryptfs/messaging.c b/fs/ecryptfs/messaging.c index 30c8e15d87b5..03c60f0850ca 100644 --- a/fs/ecryptfs/messaging.c +++ b/fs/ecryptfs/messaging.c @@ -6,6 +6,7 @@ * Author(s): Michael A. Halcrow <mhalcrow@us.ibm.com> * Tyler Hicks <code@tyhicks.com> */ +#include <linux/overflow.h> #include <linux/sched.h> #include <linux/slab.h> #include <linux/user_namespace.h> @@ -232,7 +233,7 @@ int ecryptfs_process_response(struct ecryptfs_daemon *daemon, msg_ctx->counter, seq); goto unlock; } - msg_size = (sizeof(*msg) + msg->data_len); + msg_size = struct_size(msg, data, msg->data_len); msg_ctx->msg = kmemdup(msg, msg_size, GFP_KERNEL); if (!msg_ctx->msg) { rc = -ENOMEM; diff --git a/fs/ecryptfs/miscdev.c b/fs/ecryptfs/miscdev.c index 4e62c3cef70f..5a7d08149922 100644 --- a/fs/ecryptfs/miscdev.c +++ b/fs/ecryptfs/miscdev.c @@ -10,6 +10,7 @@ #include <linux/hash.h> #include <linux/random.h> #include <linux/miscdevice.h> +#include <linux/overflow.h> #include <linux/poll.h> #include <linux/slab.h> #include <linux/wait.h> @@ -148,8 +149,10 @@ int ecryptfs_send_miscdev(char *data, size_t data_size, u16 msg_flags, struct ecryptfs_daemon *daemon) { struct ecryptfs_message *msg; + size_t msg_size; - msg = kmalloc((sizeof(*msg) + data_size), GFP_KERNEL); + msg_size = struct_size(msg, data, data_size); + msg = kmalloc(msg_size, GFP_KERNEL); if (!msg) return -ENOMEM; @@ -159,7 +162,7 @@ int ecryptfs_send_miscdev(char *data, size_t data_size, msg_ctx->msg->data_len = data_size; msg_ctx->type = msg_type; memcpy(msg_ctx->msg->data, data, data_size); - msg_ctx->msg_size = (sizeof(*msg_ctx->msg) + data_size); + msg_ctx->msg_size = msg_size; list_add_tail(&msg_ctx->daemon_out_list, &daemon->msg_ctx_out_queue); mutex_unlock(&msg_ctx->mux); |
