Linux: mptcp: pm: kernel: drop pending ADD_ADDR when removing ID0
What fixes it
- 189d60057e5f3d6a62e3d71a3cc428c9150bc14fLinuxCVE List
- 545616b4e7325be3c61fc082538cb06d14f7b1dbLinuxCVE List
- 2ac7d6e620764f1fc79eb4edd3610a7a661981caLinuxCVE List
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:
mptcp: pm: kernel: drop pending ADD_ADDR when removing ID0
The in-kernel MPTCP path manager can leave a stale ADD_ADDR announcement entry alive when removing the id 0 endpoint. This happens because the id 0 removal path does not tear down pending announcements, unlike the non-zero id path.
When the PM later reselects id 0 after adding another signal endpoint, it finds the stale anno_list entry and hits WARN_ON_ONCE(mptcp_pm_is_kernel()) in mptcp_pm_announced_alloc().
Root cause: asymmetry between removal paths.
- Non-zero id path: mptcp_nl_remove_subflow_and_signal_addr() calls
mptcp_pm_remove_announced() to clean up.
- Id 0 path: mptcp_nl_remove_id_zero_address() skips cleanup entirely.
Fix by making the id 0 path symmetric: call mptcp_pm_announced_remove() and decrement add_addr_signaled before queuing the RM_ADDR.
Subtle detail: signal endpoints are stored in anno_list with port 0, but msk_local carries the connection's local port. In other words, entries linked to ID0 paths should have port == 0. A follow-up patch will ensure that. mptcp_pm_announced_remove() uses use_port=true for comparison. So clear the port before the lookup.
Text from CVE List
Affected versions 12
- Linuxaffected: 740d798e8767d8a449902b1a1bbc70facfce19b5 before 189d60057e5f3d6a62e3d71a3cc428c9150bc14fCVE List
- Linuxaffected: 740d798e8767d8a449902b1a1bbc70facfce19b5 before bacf23e7c9876c9f4170166b3597cb22ea3ed39bCVE List
- Linuxaffected: 740d798e8767d8a449902b1a1bbc70facfce19b5 before d4a67a880654e1bfe318a31bea0bdbb026a09adeCVE List
- Linuxaffected: 740d798e8767d8a449902b1a1bbc70facfce19b5 before 545616b4e7325be3c61fc082538cb06d14f7b1dbCVE List
- Linuxaffected: 740d798e8767d8a449902b1a1bbc70facfce19b5 before 2ac7d6e620764f1fc79eb4edd3610a7a661981caCVE List
- Linuxaffected: 5.13CVE List
- Linuxunaffected: all versions before 5.13CVE List
- Linuxunaffected: 6.6.160 through 6.6.*CVE List
- Linuxunaffected: 6.12.112 through 6.12.*CVE List
- Linuxunaffected: 6.18.53 through 6.18.*CVE List
- Linuxunaffected: 7.2.7 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 5
- git.kernel.org/stable/c/189d60057e5f3d6a62e3d71a3cc428c9150bc14fReferencevia CVE List
- git.kernel.org/stable/c/bacf23e7c9876c9f4170166b3597cb22ea3ed39bReferencevia CVE List
- git.kernel.org/stable/c/d4a67a880654e1bfe318a31bea0bdbb026a09adeReferencevia CVE List
- git.kernel.org/stable/c/545616b4e7325be3c61fc082538cb06d14f7b1dbReferencevia CVE List
- git.kernel.org/stable/c/2ac7d6e620764f1fc79eb4edd3610a7a661981caReferencevia CVE List