[PATCH 4/5] Treat Protocol-Error as Access-Reject in 802.1X

aland at deployingradius.com aland at deployingradius.com
Wed Oct 21 07:46:59 PDT 2026


From: "Alan T. DeKok" <aland at freeradius.org>

Signed-off-by: Alan DeKok <alan.dekok at inkbridge.io>
---
 src/ap/ieee802_1x.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/ap/ieee802_1x.c b/src/ap/ieee802_1x.c
index 91e501ef3..346bc59a2 100644
--- a/src/ap/ieee802_1x.c
+++ b/src/ap/ieee802_1x.c
@@ -2060,7 +2060,8 @@ ieee802_1x_receive_auth(struct radius_msg *msg, struct radius_msg *req,
 
 	if (hdr->code != RADIUS_CODE_ACCESS_ACCEPT &&
 	    hdr->code != RADIUS_CODE_ACCESS_REJECT &&
-	    hdr->code != RADIUS_CODE_ACCESS_CHALLENGE) {
+	    hdr->code != RADIUS_CODE_ACCESS_CHALLENGE &&
+	    hdr->code != RADIUS_CODE_PROTOCOL_ERROR) {
 		wpa_printf(MSG_INFO, "Unknown RADIUS message code");
 		return RADIUS_RX_UNKNOWN;
 	}
@@ -2166,6 +2167,23 @@ ieee802_1x_receive_auth(struct radius_msg *msg, struct radius_msg *req,
 			sm->eap_if->aaaMethodTimeout = 0;
 		}
 		break;
+	case RADIUS_CODE_PROTOCOL_ERROR:
+		sm->eap_if->aaaFail = true;
+		override_eapReq = 1;
+		if (radius_msg_get_attr_int32(msg, RADIUS_ATTR_WLAN_REASON_CODE,
+					      &reason_code) == 0) {
+			wpa_printf(MSG_DEBUG,
+				   "RADIUS server indicated WLAN-Reason-Code %u in Protocol-Error for "
+				   MACSTR, reason_code, MAC2STR(sta->addr));
+			sta->disconnect_reason_code = reason_code;
+		}
+		if (radius_msg_get_attr_int32(msg, RADIUS_ATTR_ERROR_CAUSE,
+					      &reason_code) == 0) {
+			wpa_printf(MSG_DEBUG,
+				   "RADIUS server indicated Error-Cause %u in Protocol-Error for "
+				   MACSTR, reason_code, MAC2STR(sta->addr));
+		}
+		break;
 	}
 
 	ieee802_1x_decapsulate_radius(hapd, sta);
-- 
2.49.0




More information about the Hostap mailing list