Page MenuHomeVyOS Platform

accel-ppp: accel-pppd aborts when a VPP PPPoE session ends (EBADF in epoll_ctl, since T9238)
Open, LowPublic

Description

With the VPP dataplane for PPPoE, accel-pppd aborts every time one session ends and takes all other sessions with it: systemd restarts the daemon, all users are disconnected and reconnect.

I reproduced it on 2026.10.16-0024-rolling with VPP 25.10.0 and three sessions (local authentication, three users):

  • reset pppoe-server username <name>: accel-pppd: Main process exited, code=killed, status=6/ABRT, all three sessions gone
  • disconnect interface pppoe1 on the client: the same, all three sessions gone

An idle or session timeout ends a session through the same code, I did not run those two. It matters for T9211, where the timeouts are the reason for the report.

Cause: since 2fc996b (T9238) destablish_ppp() closes unit_fd after the session cleanup. For a non-dev ppp session (VPP, is_non_dev_ppp) unit_fd is the same file descriptor as ppp->fd and the channel handler, which destroy_ppp_channel() unregisters afterwards. epoll_ctl(EPOLL_CTL_DEL) on the closed descriptor fails with EBADF and triton calls abort():

close(21)                                    = 0
epoll_ctl(7, EPOLL_CTL_DEL, 21, NULL)        = -1 EBADF (Bad file descriptor)
+++ killed by SIGABRT (core dumped) +++

Fix: do not close unit_fd there for a non-dev ppp session (accel-ppp-ng PR to follow). With it only the ended session is gone, terminate all leaves the daemon up, a client side disconnect leaves the other sessions up.

The accel-ppp-ng version that rolling builds (commit_id in scripts/package-build/linux-kernel/package.toml, dd07b23) has the bug, the build has to pick up the fix once it is merged.

Details

Version
rolling
Is it a breaking change?
Unspecified (possibly destroys the router)
Issue type
Unspecified (please specify)