In the Linux kernel, the following vulnerability has been resolved: Revert
“tty: n_gsm: fix UAF in gsm_cleanup_mux” This reverts commit
9b9c8195f3f0d74a826077fc1c01b9ee74907239. The commit above is reverted as
it did not solve the original issue. gsm_cleanup_mux() tries to free up the
virtual ttys by calling gsm_dlci_release() for each available DLCI. There,
dlci_put() is called to decrease the reference counter for the DLCI via
tty_port_put() which finally calls gsm_dlci_free(). This already clears the
pointer which is being checked in gsm_cleanup_mux() before calling
gsm_dlci_release(). Therefore, it is not necessary to clear this pointer in
gsm_cleanup_mux() as done in the reverted commit. The commit introduces a
null pointer dereference: <TASK> ? __die+0x1f/0x70 ?
page_fault_oops+0x156/0x420 ? search_exception_tables+0x37/0x50 ?
fixup_exception+0x21/0x310 ? exc_page_fault+0x69/0x150 ?
asm_exc_page_fault+0x26/0x30 ? tty_port_put+0x19/0xa0
gsmtty_cleanup+0x29/0x80 [n_gsm] release_one_tty+0x37/0xe0
process_one_work+0x1e6/0x3e0 worker_thread+0x4c/0x3d0 ?
__pfx_worker_thread+0x10/0x10 kthread+0xe1/0x110 ? __pfx_kthread+0x10/0x10
ret_from_fork+0x2f/0x50 ? __pfx_kthread+0x10/0x10
ret_from_fork_asm+0x1b/0x30 </TASK> The actual issue is that nothing guards
dlci_put() from being called multiple times while the tty driver was
triggered but did not yet finished calling gsm_dlci_free().
OS | Version | Architecture | Package | Version | Filename |
---|---|---|---|---|---|
ubuntu | 22.04 | noarch | linux | < 5.15.0-94.104 | UNKNOWN |
ubuntu | 23.10 | noarch | linux | < 6.5.0-17.17 | UNKNOWN |
ubuntu | 22.04 | noarch | linux-aws | < 5.15.0-1053.58 | UNKNOWN |
ubuntu | 23.10 | noarch | linux-aws | < 6.5.0-1013.13 | UNKNOWN |
ubuntu | 20.04 | noarch | linux-aws-5.15 | < 5.15.0-1053.58~20.04.1 | UNKNOWN |
ubuntu | 22.04 | noarch | linux-aws-6.5 | < 6.5.0-1013.13~22.04.1 | UNKNOWN |
ubuntu | 22.04 | noarch | linux-azure | < 5.15.0-1056.64 | UNKNOWN |
ubuntu | 23.10 | noarch | linux-azure | < 6.5.0-1013.13 | UNKNOWN |
ubuntu | 20.04 | noarch | linux-azure-5.15 | < 5.15.0-1056.64~20.04.1 | UNKNOWN |
ubuntu | 22.04 | noarch | linux-azure-6.5 | < 6.5.0-1013.13~22.04.1 | UNKNOWN |