forked from immortalwrt/immortalwrt
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Original patch: cifsd-team/ksmbd-tools#227 adapted for ksmbd kernel module v3.4.3 by me. Fixes crash in v3.4.3 only. Use original patch when updating to v3.4.4 as this one will fail hunk immortalwrt#1. Signed-off-by: Marius Dinu <[email protected]>
- Loading branch information
Showing
1 changed file
with
99 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
From 41dbda16a0902798e732abc6599de256b9dc3b27 Mon Sep 17 00:00:00 2001 | ||
From: Namjae Jeon <[email protected]> | ||
Date: Thu, 6 Jan 2022 10:30:31 +0900 | ||
Subject: ksmbd: add reserved room in ipc request/response | ||
|
||
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 <[email protected]> | ||
Signed-off-by: Steve French <[email protected]> | ||
--- | ||
fs/ksmbd/ksmbd_netlink.h | 11 ++++++++++- | ||
1 file changed, 10 insertions(+), 1 deletion(-) | ||
|
||
--- a/ksmbd_netlink.h | ||
+++ b/ksmbd_netlink.h | ||
@@ -103,6 +103,7 @@ struct ksmbd_startup_request { | ||
* we set the SPARSE_FILES bit (0x40). | ||
*/ | ||
__u32 sub_auth[3]; /* Subauth value for Security ID */ | ||
+ __u32 reserved[128]; /* Reserved room */ | ||
__u32 ifc_list_sz; /* interfaces list size */ | ||
__s8 ____payload[]; | ||
}; | ||
@@ -113,7 +114,7 @@ struct ksmbd_startup_request { | ||
* IPC request to shutdown ksmbd server. | ||
*/ | ||
struct ksmbd_shutdown_request { | ||
- __s32 reserved; | ||
+ __s32 reserved[16]; | ||
}; | ||
|
||
/* | ||
@@ -122,6 +123,7 @@ struct ksmbd_shutdown_request { | ||
struct ksmbd_login_request { | ||
__u32 handle; | ||
__s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; /* user account name */ | ||
+ __u32 reserved[16]; /* Reserved room */ | ||
}; | ||
|
||
/* | ||
@@ -135,6 +137,7 @@ struct ksmbd_login_response { | ||
__u16 status; | ||
__u16 hash_sz; /* hash size */ | ||
__s8 hash[KSMBD_REQ_MAX_HASH_SZ]; /* password hash */ | ||
+ __u32 reserved[16]; /* Reserved room */ | ||
}; | ||
|
||
/* | ||
@@ -143,6 +146,7 @@ struct ksmbd_login_response { | ||
struct ksmbd_share_config_request { | ||
__u32 handle; | ||
__s8 share_name[KSMBD_REQ_MAX_SHARE_NAME]; /* share name */ | ||
+ __u32 reserved[16]; /* Reserved room */ | ||
}; | ||
|
||
/* | ||
@@ -157,6 +161,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[]; | ||
}; | ||
@@ -187,6 +192,7 @@ 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 */ | ||
}; | ||
|
||
/* | ||
@@ -196,6 +202,7 @@ struct ksmbd_tree_connect_response { | ||
__u32 handle; | ||
__u16 status; | ||
__u16 connection_flags; | ||
+ __u32 reserved[16]; /* Reserved room */ | ||
}; | ||
|
||
/* | ||
@@ -204,6 +211,7 @@ struct ksmbd_tree_connect_response { | ||
struct ksmbd_tree_disconnect_request { | ||
__u64 session_id; /* session id */ | ||
__u64 connect_id; /* tree connection id */ | ||
+ __u32 reserved[16]; /* Reserved room */ | ||
}; | ||
|
||
/* | ||
@@ -212,6 +220,7 @@ struct ksmbd_tree_disconnect_request { | ||
struct ksmbd_logout_request { | ||
__s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; /* user account name */ | ||
__u32 account_flags; | ||
+ __u32 reserved[16]; /* Reserved room */ | ||
}; | ||
|
||
/* |