summaryrefslogtreecommitdiff
path: root/accel-pppd/radius/dm_coa.c
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
commite014cb2cb46f9a5778fbf8a819a1ad263a911c84 (patch)
treedae3e1642b3a7924802a99b9204a20708fc22b7b /accel-pppd/radius/dm_coa.c
parentbd51fe8dbec25b1f130db3b4859895124841cfe8 (diff)
downloadaccel-ppp-e014cb2cb46f9a5778fbf8a819a1ad263a911c84.tar.gz
accel-ppp-e014cb2cb46f9a5778fbf8a819a1ad263a911c84.zip
radius: validate VRF names through Access-Accept and CoA
Reject oversized and embedded-NUL VRF attributes and allocation failures. Keep explicit CoA lengths, restrict removal to literal 0, and bound the session API and shared interface lookup. Preserve default VRF removal. Adapted from Ritika Chopra's accel-ppp-ng PR #40, T8611, with the same validation boundary extended to the CoA path. Co-authored-by: Ritika Chopra <r.chopra@vyos.io>
Diffstat (limited to 'accel-pppd/radius/dm_coa.c')
-rw-r--r--accel-pppd/radius/dm_coa.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/accel-pppd/radius/dm_coa.c b/accel-pppd/radius/dm_coa.c
index df8cdf3e..728fd938 100644
--- a/accel-pppd/radius/dm_coa.c
+++ b/accel-pppd/radius/dm_coa.c
@@ -146,16 +146,16 @@ static void disconnect_request(struct radius_pd_t *rpd)
}
#ifdef HAVE_VRF
-int rad_update_vrf(struct radius_pd_t *rpd, const char *vrf_name)
+static int rad_update_vrf(struct radius_pd_t *rpd, const char *vrf_name, int len)
{
- if (*vrf_name == '0') {
+ if (len == 1 && *vrf_name == '0') {
// Delete interface from VRF
if (!ap_session_vrf(rpd->ses, NULL, 0))
return 1;
}
else {
// Add interface to VRF
- if(!ap_session_vrf(rpd->ses, vrf_name, -1))
+ if(!ap_session_vrf(rpd->ses, vrf_name, len))
return 1;
}
@@ -215,7 +215,7 @@ static void coa_request(struct radius_pd_t *rpd)
#ifdef HAVE_VRF
attr = rad_packet_find_attr(rpd->dm_coa_req, "Accel-PPP", "Accel-VRF-Name");
if (attr){
- if(!rad_update_vrf(rpd, attr->val.string)){
+ if(!rad_update_vrf(rpd, attr->val.string, attr->len)){
goto out;
}
}