mirror-linux/drivers/net/ppp
Qingfang Deng 0417adf367 ppp: fix race conditions in ppp_fill_forward_path
ppp_fill_forward_path() has two race conditions:

1. The ppp->channels list can change between list_empty() and
   list_first_entry(), as ppp_lock() is not held. If the only channel
   is deleted in ppp_disconnect_channel(), list_first_entry() may
   access an empty head or a freed entry, and trigger a panic.

2. pch->chan can be NULL. When ppp_unregister_channel() is called,
   pch->chan is set to NULL before pch is removed from ppp->channels.

Fix these by using a lockless RCU approach:
- Use list_first_or_null_rcu() to safely test and access the first list
  entry.
- Convert list modifications on ppp->channels to their RCU variants and
  add synchronize_net() after removal.
- Check for a NULL pch->chan before dereferencing it.

Fixes: f6efc675c9 ("net: ppp: resolve forwarding path for bridge pppoe devices")
Signed-off-by: Qingfang Deng <dqfext@gmail.com>
Link: https://patch.msgid.link/20250814012559.3705-2-dqfext@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2025-08-19 11:25:32 +02:00
..
Kconfig
Makefile
bsd_comp.c net: fill in MODULE_DESCRIPTION()s for ppp 2024-02-15 08:03:46 -08:00
ppp_async.c ppp: fix ppp_async_encode() illegal access 2024-10-10 08:47:13 -07:00
ppp_deflate.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
ppp_generic.c ppp: fix race conditions in ppp_fill_forward_path 2025-08-19 11:25:32 +02:00
ppp_mppe.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
ppp_mppe.h
ppp_synctty.c net: ppp: Add bound checking for skb data on ppp_sync_txmung 2025-04-10 11:24:17 +02:00
pppoe.c pppoe: drop PACKET_OTHERHOST before skb_share_check() 2025-06-24 16:37:02 -07:00
pppox.c
pptp.c pptp: fix pptp_xmit() error path 2025-08-07 07:47:04 -07:00