Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
commit 82e3175 upstream. There are race conditions that may lead to UAF bugs in ax25_heartbeat_expiry(), ax25_t1timer_expiry(), ax25_t2timer_expiry(), ax25_t3timer_expiry() and ax25_idletimer_expiry(), when we call ax25_release() to deallocate ax25_dev. One of the UAF bugs caused by ax25_release() is shown below: (Thread 1) | (Thread 2) ax25_dev_device_up() //(1) | ... | ax25_kill_by_device() ax25_bind() //(2) | ax25_connect() | ... ax25_std_establish_data_link() | ax25_start_t1timer() | ax25_dev_device_down() //(3) mod_timer(&ax25->t1timer,..) | | ax25_release() (wait a time) | ... | ax25_dev_put(ax25_dev) //(4)FREE ax25_t1timer_expiry() | ax25->ax25_dev->values[..] //USE| ... ... | We increase the refcount of ax25_dev in position (1) and (2), and decrease the refcount of ax25_dev in position (3) and (4). The ax25_dev will be freed in position (4) and be used in ax25_t1timer_expiry(). The fail log is shown below: ============================================================== [ 106.116942] BUG: KASAN: use-after-free in ax25_t1timer_expiry+0x1c/0x60 [ 106.116942] Read of size 8 at addr ffff88800bda9028 by task swapper/0/0 [ 106.116942] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.17.0-06123-g0905eec574 [ 106.116942] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-14 [ 106.116942] Call Trace: ... [ 106.116942] ax25_t1timer_expiry+0x1c/0x60 [ 106.116942] call_timer_fn+0x122/0x3d0 [ 106.116942] __run_timers.part.0+0x3f6/0x520 [ 106.116942] run_timer_softirq+0x4f/0xb0 [ 106.116942] __do_softirq+0x1c2/0x651 ... This patch adds del_timer_sync() in ax25_release(), which could ensure that all timers stop before we deallocate ax25_dev. Signed-off-by: Duoming Zhou <duoming@zju.edu.cn> Signed-off-by: Paolo Abeni <pabeni@redhat.com> [OP: backport to 5.15: adjust context] Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
- linux-5.15.100-mpi
- linux-5.15.101-mpi
- linux-5.15.102-mpi
- linux-5.15.103-mpi
- linux-5.15.104-mpi
- linux-5.15.105-mpi
- linux-5.15.106-mpi
- linux-5.15.107-mpi
- linux-5.15.108-mpi
- linux-5.15.109-mpi
- linux-5.15.110-mpi
- linux-5.15.111-mpi
- linux-5.15.112-mpi
- linux-5.15.113-mpi
- linux-5.15.114-mpi
- linux-5.15.115-mpi
- linux-5.15.116-mpi
- linux-5.15.117-mpi
- linux-5.15.118-mpi
- linux-5.15.119-mpi
- linux-5.15.120-mpi
- linux-5.15.121-mpi
- linux-5.15.122-mpi
- linux-5.15.123-mpi
- linux-5.15.124-mpi
- linux-5.15.125-mpi
- linux-5.15.126-mpi
- linux-5.15.127-mpi
- linux-5.15.128-mpi
- linux-5.15.129-mpi
- linux-5.15.130-mpi
- linux-5.15.131-mpi
- linux-5.15.132-mpi
- linux-5.15.133-mpi
- linux-5.15.134-mpi
- linux-5.15.135-mpi
- linux-5.15.136-mpi
- linux-5.15.137-mpi
- linux-5.15.138-mpi
- linux-5.15.139-mpi
- linux-5.15.140-mpi
- linux-5.15.141-mpi
- linux-5.15.142-mpi
- linux-5.15.143-mpi
- linux-5.15.144-mpi
- linux-5.15.145-mpi
- linux-5.15.146-mpi
- linux-5.15.147-mpi
- linux-5.15.148-mpi
- linux-5.15.149-mpi
- linux-5.15.150-mpi
- linux-5.15.151-mpi
- linux-5.15.152-mpi
- linux-5.15.153-mpi
- linux-5.15.154-mpi
- linux-5.15.155-mpi
- linux-5.15.156-mpi
- linux-5.15.157-mpi
- linux-5.15.158-mpi
- linux-5.15.159-mpi
- linux-5.15.160-mpi
- linux-5.15.161-mpi
- linux-5.15.162-mpi
- linux-5.15.163-mpi
- linux-5.15.164-mpi
- linux-5.15.165-mpi
- linux-5.15.166-mpi
- linux-5.15.167-mpi
- linux-5.15.168-mpi
- linux-5.15.169-mpi
- linux-5.15.170-mpi
- linux-5.15.171-mpi
- linux-5.15.172-mpi
- linux-5.15.173-mpi
- linux-5.15.174-mpi
- linux-5.15.175-mpi
- linux-5.15.176-mpi
- linux-5.15.177-mpi
- linux-5.15.178-mpi
- linux-5.15.179-mpi
- linux-5.15.180-mpi
- linux-5.15.181-mpi
- linux-5.15.182-mpi
- linux-5.15.183-mpi
- linux-5.15.184-mpi
- linux-5.15.185-mpi
- linux-5.15.186-mpi
- linux-5.15.187-mpi
- linux-5.15.188-mpi
- linux-5.15.189-mpi
- linux-5.15.53-mpi
- linux-5.15.69-mpi
- linux-5.15.70-mpi
- linux-5.15.71-mpi
- linux-5.15.72-mpi
- linux-5.15.73-mpi
- linux-5.15.74-mpi
- linux-5.15.75-mpi
- linux-5.15.76-mpi
- linux-5.15.77-mpi
- linux-5.15.78-mpi
- linux-5.15.79-mpi
- linux-5.15.80-mpi
- linux-5.15.81-mpi
- linux-5.15.82-mpi
- linux-5.15.83-mpi
- linux-5.15.84-mpi
- linux-5.15.85-mpi
- linux-5.15.86-mpi
- linux-5.15.87-mpi
- linux-5.15.88-mpi
- linux-5.15.89-mpi
- linux-5.15.90-mpi
- linux-5.15.91-mpi
- linux-5.15.92-mpi
- linux-5.15.93-mpi
- linux-5.15.94-mpi
- linux-5.15.95-mpi
- linux-5.15.96-mpi
- linux-5.15.97-mpi
- linux-5.15.98-mpi
- linux-5.15.99-mpi