summaryrefslogtreecommitdiff
path: root/accel-pppd/ctrl
diff options
context:
space:
mode:
authorDenys Fedoryshchenko <denys.f@collabora.com>2026-09-07 22:08:04 +0300
committerDenys Fedoryshchenko <denys.f@collabora.com>2026-09-07 22:08:04 +0300
commit7cf7432017bf5386e8b8907aa3abb9e6c45f12bb (patch)
tree74c0c60d71426e8f9f47dee3dbe0e48bd2bbc812 /accel-pppd/ctrl
parente014cb2cb46f9a5778fbf8a819a1ad263a911c84 (diff)
downloadaccel-ppp-7cf7432017bf5386e8b8907aa3abb9e6c45f12bb.tar.gz
accel-ppp-7cf7432017bf5386e8b8907aa3abb9e6c45f12bb.zip
ppp: add remaining discovery and buffer reuse safeguards
Require exactly one PADR Service-Name, drop Echo-Requests exceeding the negotiated MTU, and clear pooled payloads before reuse. Retain upstream's silent malformed-PADR rejection and received-packet length checks. Adapted from Ritika Chopra's accel-ppp-ng PR #40, T8464/T8830. Co-authored-by: Ritika Chopra <r.chopra@vyos.io>
Diffstat (limited to 'accel-pppd/ctrl')
-rw-r--r--accel-pppd/ctrl/pppoe/pppoe.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/accel-pppd/ctrl/pppoe/pppoe.c b/accel-pppd/ctrl/pppoe/pppoe.c
index bd92cbf8..6161cc03 100644
--- a/accel-pppd/ctrl/pppoe/pppoe.c
+++ b/accel-pppd/ctrl/pppoe/pppoe.c
@@ -1156,6 +1156,7 @@ static void pppoe_recv_PADR(struct pppoe_serv_t *serv, uint8_t *pack, int size)
struct pppoe_tag *service_name_tag = NULL;
struct pppoe_tag *tr101_tag = NULL;
int n, service_match = 0;
+ int service_name_count = 0;
struct pppoe_conn_t *conn;
int vendor_id;
uint16_t ppp_max_payload = 0;
@@ -1204,6 +1205,7 @@ static void pppoe_recv_PADR(struct pppoe_serv_t *serv, uint8_t *pack, int size)
goto padr_tags_done;
case TAG_SERVICE_NAME:
service_name_tag = tag;
+ service_name_count++;
if (tag->tag_len == 0)
service_match = 1;
else if (conf_service_name[0]) {
@@ -1251,9 +1253,9 @@ padr_tags_done:
return;
}
- if (!service_name_tag) {
+ if (service_name_count != 1) {
if (conf_verbose)
- log_warn("pppoe: discard PADR packet (no Service-Name tag present)\n");
+ log_warn("pppoe: discard PADR packet (expected exactly one Service-Name tag)\n");
return;
}