On Tue, Mar 24, 2026 at 11:26 PM Namjae Jeon <[email protected]> wrote:
>
> On Fri, Mar 6, 2026 at 3:35 PM Rosen Penev <[email protected]> wrote:
> >
> > 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;
> We don't need to manually set msg->sz if the flexible array member is
> properly annotated with __counted_by(sz) ?
> kvmalloc_flex() automatically sets the counter via internal
> __set_flex_counter().
Needs GCC15.