Skip to content

Commit ee998af

Browse files
Dan Carpenternamjaejeon
authored andcommitted
ksmbd: fix integer overflows on 32 bit systems
On 32bit systems the addition operations in ipc_msg_alloc() can potentially overflow leading to memory corruption. Add bounds checking using KSMBD_IPC_MAX_PAYLOAD to avoid overflow. Fixes: 0626e6641f6b ("cifsd: add server handler for central processing and tranport layers") Cc: stable@vger.kernel.org Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org> Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
1 parent 88e6e7f commit ee998af

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

transport_ipc.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,9 @@ ksmbd_ipc_spnego_authen_request(const char *spnego_blob, int blob_len)
628628
struct ksmbd_spnego_authen_request *req;
629629
struct ksmbd_spnego_authen_response *resp;
630630

631+
if (blob_len > KSMBD_IPC_MAX_PAYLOAD)
632+
return NULL;
633+
631634
msg = ipc_msg_alloc(sizeof(struct ksmbd_spnego_authen_request) +
632635
blob_len + 1);
633636
if (!msg)
@@ -807,6 +810,9 @@ struct ksmbd_rpc_command *ksmbd_rpc_write(struct ksmbd_session *sess, int handle
807810
struct ksmbd_rpc_command *req;
808811
struct ksmbd_rpc_command *resp;
809812

813+
if (payload_sz > KSMBD_IPC_MAX_PAYLOAD)
814+
return NULL;
815+
810816
msg = ipc_msg_alloc(sizeof(struct ksmbd_rpc_command) + payload_sz + 1);
811817
if (!msg)
812818
return NULL;
@@ -855,6 +861,9 @@ struct ksmbd_rpc_command *ksmbd_rpc_ioctl(struct ksmbd_session *sess, int handle
855861
struct ksmbd_rpc_command *req;
856862
struct ksmbd_rpc_command *resp;
857863

864+
if (payload_sz > KSMBD_IPC_MAX_PAYLOAD)
865+
return NULL;
866+
858867
msg = ipc_msg_alloc(sizeof(struct ksmbd_rpc_command) + payload_sz + 1);
859868
if (!msg)
860869
return NULL;
@@ -880,6 +889,9 @@ struct ksmbd_rpc_command *ksmbd_rpc_rap(struct ksmbd_session *sess, void *payloa
880889
struct ksmbd_rpc_command *req;
881890
struct ksmbd_rpc_command *resp;
882891

892+
if (payload_sz > KSMBD_IPC_MAX_PAYLOAD)
893+
return NULL;
894+
883895
msg = ipc_msg_alloc(sizeof(struct ksmbd_rpc_command) + payload_sz + 1);
884896
if (!msg)
885897
return NULL;

0 commit comments

Comments
 (0)