Description
In the Linux kernel, the following vulnerability has been resolved: xfrm: espintcp: fix UAF during close ZDI reported and analyzed a race condition during close for espintcp sockets: espintcp_close() frees emsg->skb via kfree_skb() without holding any socket lock. Concurrently, the xfrm_trans_reinject work queue invokes esp_output_tcp_finish() -> espintcp_push_skb() -> espintcp_push_msgs() -> skb_send_sock_locked(), which reads the same skb as a data source. Fix this by adding a synchronize_rcu() call after resetting sk_prot, since esp_output_tcp_finish() runs under RCU and won't use a socket with sk_prot == &tcp_prot. Simply taking the socket lock in espintcp_close() could lead to leaks, if esp_output_tcp_finish() re-adds an skb in the slot we just freed. After this, the existing barrier() is no longer needed.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
e27cca96cd68fa2c6814c90f9a1cfd36bb68c593 to < 29121c5e6591da527e8e36ddac7120dc527f574daffectede27cca96cd68fa2c6814c90f9a1cfd36bb68c593 to < ed5d9102190c45fc70121c036b0626b740040b75affectede27cca96cd68fa2c6814c90f9a1cfd36bb68c593 to < 4bc0dfa28dca6fc0084203732695968049c44072affectede27cca96cd68fa2c6814c90f9a1cfd36bb68c593 to < ff8dd7a932f34409a56e1b91a1219340f17457e9affectede27cca96cd68fa2c6814c90f9a1cfd36bb68c593 to < 4b31a875693c480c611519faca46216514e3e052affectede27cca96cd68fa2c6814c90f9a1cfd36bb68c593 to < 24efebecf415ba264adba0f0491cec436463a14faffectede27cca96cd68fa2c6814c90f9a1cfd36bb68c593 to < eb3bbf29c723fe75c0eb92be14f0ec92971fe272affectede27cca96cd68fa2c6814c90f9a1cfd36bb68c593 to < 54b41ad14da9a981131ab6e4d3f79321a503ea5daffectede27cca96cd68fa2c6814c90f9a1cfd36bb68c593 to < deb232e884877bf10b4ce2580909eedec986c284affected
Linux Linux
Default version status: affected
5.6affected0 to < 5.6unaffected5.10.269 to ≤ 5.10.*unaffected5.15.220 to ≤ 5.15.*unaffected6.1.187 to ≤ 6.1.*unaffected6.6.156 to ≤ 6.6.*unaffected6.12.108 to ≤ 6.12.*unaffected6.18.49 to ≤ 6.18.*unaffected7.1.13 to ≤ 7.1.*unaffected7.2.3 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/29121c5e6591da527e8e36ddac7120dc527f574d ↗
- https://git.kernel.org/stable/c/ed5d9102190c45fc70121c036b0626b740040b75 ↗
- https://git.kernel.org/stable/c/4bc0dfa28dca6fc0084203732695968049c44072 ↗
- https://git.kernel.org/stable/c/ff8dd7a932f34409a56e1b91a1219340f17457e9 ↗
- https://git.kernel.org/stable/c/4b31a875693c480c611519faca46216514e3e052 ↗
- https://git.kernel.org/stable/c/24efebecf415ba264adba0f0491cec436463a14f ↗
- https://git.kernel.org/stable/c/eb3bbf29c723fe75c0eb92be14f0ec92971fe272 ↗
- https://git.kernel.org/stable/c/54b41ad14da9a981131ab6e4d3f79321a503ea5d ↗
- https://git.kernel.org/stable/c/deb232e884877bf10b4ce2580909eedec986c284 ↗