Whenever new parameter is added to smb configuration, It is possible to break the execution of the IPC daemon by mismatch size of request/response. This patch tries to reserve space in ipc request/response in advance to prevent that. Signed-off-by: Namjae Jeon <linkinjeon@xxxxxxxxxx> --- include/linux/ksmbd_server.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/include/linux/ksmbd_server.h b/include/linux/ksmbd_server.h index 647cfee..78ae6e7 100644 --- a/include/linux/ksmbd_server.h +++ b/include/linux/ksmbd_server.h @@ -47,6 +47,7 @@ struct ksmbd_startup_request { __u32 share_fake_fscaps; __u32 sub_auth[3]; __u32 smb2_max_credits; + __u32 reserved[128]; /* Reserved room */ __u32 ifc_list_sz; __s8 ____payload[]; }; @@ -54,12 +55,13 @@ struct ksmbd_startup_request { #define KSMBD_STARTUP_CONFIG_INTERFACES(s) ((s)->____payload) struct ksmbd_shutdown_request { - __s32 reserved; + __s32 reserved[16]; }; struct ksmbd_login_request { __u32 handle; __s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; + __u32 reserved[16]; /* Reserved room */ }; struct ksmbd_login_response { @@ -70,11 +72,13 @@ struct ksmbd_login_response { __u16 status; __u16 hash_sz; __s8 hash[KSMBD_REQ_MAX_HASH_SZ]; + __u32 reserved[16]; /* Reserved room */ }; struct ksmbd_share_config_request { __u32 handle; __s8 share_name[KSMBD_REQ_MAX_SHARE_NAME]; + __u32 reserved[16]; /* Reserved room */ }; struct ksmbd_share_config_response { @@ -86,6 +90,7 @@ struct ksmbd_share_config_response { __u16 force_directory_mode; __u16 force_uid; __u16 force_gid; + __u32 reserved[128]; /* Reserved room */ __u32 veto_list_sz; __s8 ____payload[]; }; @@ -108,22 +113,26 @@ struct ksmbd_tree_connect_request { __s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; __s8 share[KSMBD_REQ_MAX_SHARE_NAME]; __s8 peer_addr[64]; + __u32 reserved[16]; /* Reserved room */ }; struct ksmbd_tree_connect_response { __u32 handle; __u16 status; __u16 connection_flags; + __u32 reserved[16]; /* Reserved room */ }; struct ksmbd_tree_disconnect_request { __u64 session_id; __u64 connect_id; + __u32 reserved[16]; /* Reserved room */ }; struct ksmbd_logout_request { __s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; __u32 account_flags; + __u32 reserved[16]; /* Reserved room */ }; struct ksmbd_rpc_command { -- 2.25.1