From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Namjae Jeon <linkinjeon@kernel.org>,
zdi-disclosures@trendmicro.com,
Steve French <stfrench@microsoft.com>,
Sasha Levin <sashal@kernel.org>,
sfrench@samba.org, linux-cifs@vger.kernel.org
Subject: [PATCH AUTOSEL 6.1 12/47] ksmbd: fix out of bounds in init_smb2_rsp_hdr()
Date: Sun, 13 Aug 2023 11:59:07 -0400 [thread overview]
Message-ID: <20230813160006.1073695-12-sashal@kernel.org> (raw)
In-Reply-To: <20230813160006.1073695-1-sashal@kernel.org>
From: Namjae Jeon <linkinjeon@kernel.org>
[ Upstream commit 536bb492d39bb6c080c92f31e8a55fe9934f452b ]
If client send smb2 negotiate request and then send smb1 negotiate
request, init_smb2_rsp_hdr is called for smb1 negotiate request since
need_neg is set to false. This patch ignore smb1 packets after ->need_neg
is set to false.
Reported-by: zdi-disclosures@trendmicro.com # ZDI-CAN-21541
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
fs/smb/server/server.c | 7 ++++++-
fs/smb/server/smb_common.c | 19 +++++++++++--------
fs/smb/server/smb_common.h | 2 +-
3 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/fs/smb/server/server.c b/fs/smb/server/server.c
index 847ee62afb8a1..9804cabe72a84 100644
--- a/fs/smb/server/server.c
+++ b/fs/smb/server/server.c
@@ -286,6 +286,7 @@ static void handle_ksmbd_work(struct work_struct *wk)
static int queue_ksmbd_work(struct ksmbd_conn *conn)
{
struct ksmbd_work *work;
+ int err;
work = ksmbd_alloc_work_struct();
if (!work) {
@@ -297,7 +298,11 @@ static int queue_ksmbd_work(struct ksmbd_conn *conn)
work->request_buf = conn->request_buf;
conn->request_buf = NULL;
- ksmbd_init_smb_server(work);
+ err = ksmbd_init_smb_server(work);
+ if (err) {
+ ksmbd_free_work_struct(work);
+ return 0;
+ }
ksmbd_conn_enqueue_request(work);
atomic_inc(&conn->r_count);
diff --git a/fs/smb/server/smb_common.c b/fs/smb/server/smb_common.c
index d937e2f45c829..a4421d9458d90 100644
--- a/fs/smb/server/smb_common.c
+++ b/fs/smb/server/smb_common.c
@@ -388,26 +388,29 @@ static struct smb_version_cmds smb1_server_cmds[1] = {
[SMB_COM_NEGOTIATE_EX] = { .proc = smb1_negotiate, },
};
-static void init_smb1_server(struct ksmbd_conn *conn)
+static int init_smb1_server(struct ksmbd_conn *conn)
{
conn->ops = &smb1_server_ops;
conn->cmds = smb1_server_cmds;
conn->max_cmds = ARRAY_SIZE(smb1_server_cmds);
+ return 0;
}
-void ksmbd_init_smb_server(struct ksmbd_work *work)
+int ksmbd_init_smb_server(struct ksmbd_work *work)
{
struct ksmbd_conn *conn = work->conn;
__le32 proto;
- if (conn->need_neg == false)
- return;
-
proto = *(__le32 *)((struct smb_hdr *)work->request_buf)->Protocol;
+ if (conn->need_neg == false) {
+ if (proto == SMB1_PROTO_NUMBER)
+ return -EINVAL;
+ return 0;
+ }
+
if (proto == SMB1_PROTO_NUMBER)
- init_smb1_server(conn);
- else
- init_smb3_11_server(conn);
+ return init_smb1_server(conn);
+ return init_smb3_11_server(conn);
}
int ksmbd_populate_dot_dotdot_entries(struct ksmbd_work *work, int info_level,
diff --git a/fs/smb/server/smb_common.h b/fs/smb/server/smb_common.h
index e63d2a4f466b5..1cbb492cdefec 100644
--- a/fs/smb/server/smb_common.h
+++ b/fs/smb/server/smb_common.h
@@ -427,7 +427,7 @@ bool ksmbd_smb_request(struct ksmbd_conn *conn);
int ksmbd_lookup_dialect_by_id(__le16 *cli_dialects, __le16 dialects_count);
-void ksmbd_init_smb_server(struct ksmbd_work *work);
+int ksmbd_init_smb_server(struct ksmbd_work *work);
struct ksmbd_kstat;
int ksmbd_populate_dot_dotdot_entries(struct ksmbd_work *work,
--
2.40.1
next prev parent reply other threads:[~2023-08-13 16:01 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-13 15:58 [PATCH AUTOSEL 6.1 01/47] phy: qcom-snps-femto-v2: keep cfg_ahb_clk enabled during runtime suspend Sasha Levin
2023-08-13 15:58 ` [PATCH AUTOSEL 6.1 02/47] phy: qcom-snps-femto-v2: use qcom_snps_hsphy_suspend/resume error code Sasha Levin
2023-08-13 15:58 ` [PATCH AUTOSEL 6.1 03/47] media: amphion: use dev_err_probe Sasha Levin
2023-08-13 15:58 ` [PATCH AUTOSEL 6.1 04/47] media: pulse8-cec: handle possible ping error Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 05/47] media: pci: cx23885: fix error handling for cx23885 ATSC boards Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 06/47] platform/x86: serial-multi-instantiate: Auto detect IRQ resource for CSC3551 Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 07/47] 9p: virtio: fix unlikely null pointer deref in handle_rerror Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 08/47] 9p: virtio: make sure 'offs' is initialized in zc_request Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 09/47] ksmbd: fix out of bounds in smb3_decrypt_req() Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 10/47] ksmbd: validate session id and tree id in compound request Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 11/47] ksmbd: no response from compound read Sasha Levin
2023-08-13 15:59 ` Sasha Levin [this message]
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 13/47] ASoC: da7219: Flush pending AAD IRQ when suspending Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 14/47] ASoC: da7219: Check for failure reading AAD IRQ events Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 15/47] ASoC: nau8821: Add DMI quirk mechanism for active-high jack-detect Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 16/47] thermal: core: constify params in thermal_zone_device_register Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 17/47] ethernet: atheros: fix return value check in atl1c_tso_csum() Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 18/47] vxlan: generalize vxlan_parse_gpe_hdr and remove unused args Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 19/47] m68k: Fix invalid .section syntax Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 20/47] btrfs: remove BUG_ON()'s in add_new_free_space() Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 21/47] s390/dasd: use correct number of retries for ERP requests Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 22/47] s390/dasd: fix hanging device after request requeue Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 23/47] fs/nls: make load_nls() take a const parameter Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 24/47] ASoC: rt5682-sdw: fix for JD event handling in ClockStop Mode0 Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 25/47] ASoc: codecs: ES8316: Fix DMIC config Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 26/47] ASoC: rt711: fix for JD event handling in ClockStop Mode0 Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 27/47] ASoC: rt711-sdca: " Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 28/47] ASoC: atmel: Fix the 8K sample parameter in I2SC master Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 29/47] ALSA: usb-audio: Add quirk for Microsoft Modern Wireless Headset Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 30/47] platform/x86/amd/pmf: reduce verbosity of apmf_get_system_params Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 31/47] platform/x86/amd/pmf: Notify OS power slider update Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 32/47] platform/x86: intel: hid: Always call BTNL ACPI method Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 33/47] platform/x86/intel/hid: Add HP Dragonfly G2 to VGBS DMI quirks Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 34/47] platform/x86: think-lmi: Use kfree_sensitive instead of kfree Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 35/47] platform/x86: asus-wmi: Fix setting RGB mode on some TUF laptops Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 36/47] platform/x86: huawei-wmi: Silence ambient light sensor Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 37/47] drm/amd/smu: use AverageGfxclkFrequency* to replace previous GFX Curr Clock Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 38/47] drm/amd/display: Guard DCN31 PHYD32CLK logic against chip family Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 39/47] drm/amd/display: Exit idle optimizations before attempt to access PHY Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 40/47] ovl: Always reevaluate the file signature for IMA Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 41/47] ata: pata_arasan_cf: Use dev_err_probe() instead dev_err() in data_xfer() Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 42/47] rbd: make get_lock_owner_info() return a single locker or NULL Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 43/47] rbd: harden get_lock_owner_info() a bit Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 44/47] ALSA: usb-audio: Update for native DSD support quirks Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 45/47] staging: fbtft: ili9341: use macro FBTFT_REGISTER_SPI_DRIVER Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 46/47] security: keys: perform capable check only on privileged operations Sasha Levin
2023-08-13 15:59 ` [PATCH AUTOSEL 6.1 47/47] kprobes: Prohibit probing on CFI preamble symbol Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230813160006.1073695-12-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=linkinjeon@kernel.org \
--cc=linux-cifs@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sfrench@samba.org \
--cc=stable@vger.kernel.org \
--cc=stfrench@microsoft.com \
--cc=zdi-disclosures@trendmicro.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®