The former is just a nice macro and the latter allows runtime analysis
of the allocation and its size.

Signed-off-by: Rosen Penev <[email protected]>
---
 fs/smb/server/transport_ipc.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/fs/smb/server/transport_ipc.c b/fs/smb/server/transport_ipc.c
index 2dbabe2d8005..f7aa427a06fe 100644
--- a/fs/smb/server/transport_ipc.c
+++ b/fs/smb/server/transport_ipc.c
@@ -55,7 +55,7 @@ static bool ksmbd_ipc_validate_version(struct genl_info *m)
 struct ksmbd_ipc_msg {
        unsigned int            type;
        unsigned int            sz;
-       unsigned char           payload[];
+       unsigned char           payload[] __counted_by(sz);
 };
 
 struct ipc_msg_table_entry {
@@ -242,9 +242,8 @@ static void ipc_update_last_active(void)
 static struct ksmbd_ipc_msg *ipc_msg_alloc(size_t sz)
 {
        struct ksmbd_ipc_msg *msg;
-       size_t msg_sz = sz + sizeof(struct ksmbd_ipc_msg);
 
-       msg = kvzalloc(msg_sz, KSMBD_DEFAULT_GFP);
+       msg = kvzalloc_flex(*msg, payload, sz, KSMBD_DEFAULT_GFP);
        if (msg)
                msg->sz = sz;
        return msg;
-- 
2.53.0


Reply via email to