02-ipc-reserved-memory.patch 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. From 41dbda16a0902798e732abc6599de256b9dc3b27 Mon Sep 17 00:00:00 2001
  2. From: Namjae Jeon <[email protected]>
  3. Date: Thu, 6 Jan 2022 10:30:31 +0900
  4. Subject: ksmbd: add reserved room in ipc request/response
  5. Whenever new parameter is added to smb configuration, It is possible
  6. to break the execution of the IPC daemon by mismatch size of
  7. request/response. This patch tries to reserve space in ipc request/response
  8. in advance to prevent that.
  9. Signed-off-by: Namjae Jeon <[email protected]>
  10. Signed-off-by: Steve French <[email protected]>
  11. ---
  12. fs/ksmbd/ksmbd_netlink.h | 11 ++++++++++-
  13. 1 file changed, 10 insertions(+), 1 deletion(-)
  14. --- a/ksmbd_netlink.h
  15. +++ b/ksmbd_netlink.h
  16. @@ -103,6 +103,7 @@ struct ksmbd_startup_request {
  17. * we set the SPARSE_FILES bit (0x40).
  18. */
  19. __u32 sub_auth[3]; /* Subauth value for Security ID */
  20. + __u32 reserved[128]; /* Reserved room */
  21. __u32 ifc_list_sz; /* interfaces list size */
  22. __s8 ____payload[];
  23. };
  24. @@ -113,7 +114,7 @@ struct ksmbd_startup_request {
  25. * IPC request to shutdown ksmbd server.
  26. */
  27. struct ksmbd_shutdown_request {
  28. - __s32 reserved;
  29. + __s32 reserved[16];
  30. };
  31. /*
  32. @@ -122,6 +123,7 @@ struct ksmbd_shutdown_request {
  33. struct ksmbd_login_request {
  34. __u32 handle;
  35. __s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; /* user account name */
  36. + __u32 reserved[16]; /* Reserved room */
  37. };
  38. /*
  39. @@ -135,6 +137,7 @@ struct ksmbd_login_response {
  40. __u16 status;
  41. __u16 hash_sz; /* hash size */
  42. __s8 hash[KSMBD_REQ_MAX_HASH_SZ]; /* password hash */
  43. + __u32 reserved[16]; /* Reserved room */
  44. };
  45. /*
  46. @@ -143,6 +146,7 @@ struct ksmbd_login_response {
  47. struct ksmbd_share_config_request {
  48. __u32 handle;
  49. __s8 share_name[KSMBD_REQ_MAX_SHARE_NAME]; /* share name */
  50. + __u32 reserved[16]; /* Reserved room */
  51. };
  52. /*
  53. @@ -157,6 +161,7 @@ struct ksmbd_share_config_response {
  54. __u16 force_directory_mode;
  55. __u16 force_uid;
  56. __u16 force_gid;
  57. + __u32 reserved[128]; /* Reserved room */
  58. __u32 veto_list_sz;
  59. __s8 ____payload[];
  60. };
  61. @@ -187,6 +192,7 @@ struct ksmbd_tree_connect_request {
  62. __s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ];
  63. __s8 share[KSMBD_REQ_MAX_SHARE_NAME];
  64. __s8 peer_addr[64];
  65. + __u32 reserved[16]; /* Reserved room */
  66. };
  67. /*
  68. @@ -196,6 +202,7 @@ struct ksmbd_tree_connect_response {
  69. __u32 handle;
  70. __u16 status;
  71. __u16 connection_flags;
  72. + __u32 reserved[16]; /* Reserved room */
  73. };
  74. /*
  75. @@ -204,6 +211,7 @@ struct ksmbd_tree_connect_response {
  76. struct ksmbd_tree_disconnect_request {
  77. __u64 session_id; /* session id */
  78. __u64 connect_id; /* tree connection id */
  79. + __u32 reserved[16]; /* Reserved room */
  80. };
  81. /*
  82. @@ -212,6 +220,7 @@ struct ksmbd_tree_disconnect_request {
  83. struct ksmbd_logout_request {
  84. __s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; /* user account name */
  85. __u32 account_flags;
  86. + __u32 reserved[16]; /* Reserved room */
  87. };
  88. /*