Subject: CVE-2023-52480: ksmbd: fix race condition between session lookup and expire

From: Greg Kroah-Hartman <[email-masked]>

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

ksmbd: fix race condition between session lookup and expire

 Thread A                        +  Thread B
 ksmbd_session_lookup            |  smb2_sess_setup
   sess = xa_load                |
                                 |
                                 |    xa_erase(&conn->sessions, sess->id);
                                 |
                                 |    ksmbd_session_destroy(sess) --> kfree(sess)
                                 |
   // UAF!                       |
   sess->last_active = jiffies   |
                                 +

This patch add rwsem to fix race condition between ksmbd_session_lookup
and ksmbd_expire_session.

The Linux kernel CVE team has assigned CVE-2023-52480 to this issue.

Affected and fixed versions
===========================

	Fixed in 5.15.145 with commit c77fd3e25a51
	Fixed in 6.1.57 with commit a2ca5fd3dbcc
	Fixed in 6.5.7 with commit 18ced78b0ebc
	Fixed in 6.6 with commit 53ff5cf89142

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2023-52480
will be updated if fixes are backported, please check that for the most
up to date information about this issue.

Affected files
==============

The file(s) affected by this issue are:
	fs/smb/server/connection.c
	fs/smb/server/connection.h
	fs/smb/server/mgmt/user_session.c

Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/c77fd3e25a51ac92b0f1b347a96eff6a0b4f066f
	https://git.kernel.org/stable/c/a2ca5fd3dbcc665e1169044fa0c9e3eba779202b
	https://git.kernel.org/stable/c/18ced78b0ebccc2d16f426143dc56ab3aad666be
	https://git.kernel.org/stable/c/53ff5cf89142b978b1a5ca8dc4d4425e6a09745f