Linux: RDMA/ucma: Serialize join and leave on copy_to_user failure
What fixes it
- 29b9ed83d8bfab5c6e11fcbf1aa836aa4ae26cb9LinuxCVE List
- 52172e11bd074ccaded21740ffeb67123f01dd00LinuxCVE List
- 01e29d0d78a8f66f221625720a04939eef5ec1f6LinuxCVE List
- 43c4e24bd10370fc976f6220518049ce71419399LinuxCVE List
- 01cbdb724c584d7772fd25af2e4dfdf8527ce0d5LinuxCVE List
- 83610ee5e498fa5bfcb80031d2b959baea276bf6LinuxCVE List
Show all 9 fixed versions
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
RDMA/ucma: Serialize join and leave on copy_to_user failure
rdma_join_multicast() queues RoCE work that later reads the ucma_multicast through event->param.ud.private_data, then list_add()s the CMA multicast at the head of id_priv->mc_list. rdma_leave_multicast() matches only by sockaddr and destroys the first hit.
ucma_process_join() used to drop ctx->mutex after a successful join and retake it only if copy_to_user() failed. Two concurrent JOIN_MCAST calls with the same address can therefore insert a second CMA entry before the first thread's leave. leave then cancels the newer work and the older worker still dereferences the ucma_multicast that the first thread frees.
Keep ctx->mutex held from rdma_join_multicast() through copy_to_user() and, on -EFAULT, through rdma_leave_multicast() so leave cannot miss this join. Do not leave if join itself failed: that path never published this address on mc_list, and a leave-by-addr would destroy an earlier successful join.
Text from CVE List
Affected versions 21
- Linuxaffected: 60d613b39e8d0c9f3b526e9c96445422b4562d76 before 29b9ed83d8bfab5c6e11fcbf1aa836aa4ae26cb9CVE List
- Linuxaffected: fe454dc31e84f8c14cb8942fcb61666c9f40745b before 52172e11bd074ccaded21740ffeb67123f01dd00CVE List
- Linuxaffected: fe454dc31e84f8c14cb8942fcb61666c9f40745b before 01e29d0d78a8f66f221625720a04939eef5ec1f6CVE List
- Linuxaffected: fe454dc31e84f8c14cb8942fcb61666c9f40745b before ae805d204cf1f15b87d1bf3529b4c649f3519420CVE List
- Linuxaffected: fe454dc31e84f8c14cb8942fcb61666c9f40745b before 43c4e24bd10370fc976f6220518049ce71419399CVE List
- Linuxaffected: fe454dc31e84f8c14cb8942fcb61666c9f40745b before 01cbdb724c584d7772fd25af2e4dfdf8527ce0d5CVE List
- Linuxaffected: fe454dc31e84f8c14cb8942fcb61666c9f40745b before 83610ee5e498fa5bfcb80031d2b959baea276bf6CVE List
- Linuxaffected: fe454dc31e84f8c14cb8942fcb61666c9f40745b before 662ade4de9ff5eceb0820a9f8e9fac70ba6a815bCVE List
- Linuxaffected: a3262b3884dd67b4c5632ce7cdf9cff9d1a575d4CVE List
- Linuxaffected: 5.10.20 before 5.10.271CVE List
- Linuxaffected: 5.11.3 before 5.12CVE List
- Linuxaffected: 5.12CVE List
- Linuxunaffected: all versions before 5.12CVE List
- Linuxunaffected: 5.10.271 through 5.10.*CVE List
- Linuxunaffected: 5.15.222 through 5.15.*CVE List
- Linuxunaffected: 6.1.189 through 6.1.*CVE List
- Linuxunaffected: 6.6.158 through 6.6.*CVE List
- Linuxunaffected: 6.12.112 through 6.12.*CVE List
- Linuxunaffected: 6.18.54 through 6.18.*CVE List
- Linuxunaffected: 7.2.8 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 8
- git.kernel.org/stable/c/29b9ed83d8bfab5c6e11fcbf1aa836aa4ae26cb9Referencevia CVE List
- git.kernel.org/stable/c/52172e11bd074ccaded21740ffeb67123f01dd00Referencevia CVE List
- git.kernel.org/stable/c/01e29d0d78a8f66f221625720a04939eef5ec1f6Referencevia CVE List
- git.kernel.org/stable/c/ae805d204cf1f15b87d1bf3529b4c649f3519420Referencevia CVE List
- git.kernel.org/stable/c/43c4e24bd10370fc976f6220518049ce71419399Referencevia CVE List
- git.kernel.org/stable/c/01cbdb724c584d7772fd25af2e4dfdf8527ce0d5Referencevia CVE List
- git.kernel.org/stable/c/83610ee5e498fa5bfcb80031d2b959baea276bf6Referencevia CVE List
- git.kernel.org/stable/c/662ade4de9ff5eceb0820a9f8e9fac70ba6a815bReferencevia CVE List