@@ -891,7 +891,7 @@ static unlang_action_t eap_tls_handshake_resume(request_t *request, void *uctx)
891891 * TLS proper can decide what to do, then.
892892 */
893893 if (tls_session -> dirty_out .used > 0 ) {
894- eap_tls_request (request , eap_session );
894+ if ( eap_tls_request (request , eap_session ) < 0 ) goto fail ;
895895 eap_tls_session -> state = EAP_TLS_HANDLED ;
896896 goto finish ;
897897 }
@@ -919,6 +919,7 @@ static unlang_action_t eap_tls_handshake_resume(request_t *request, void *uctx)
919919 /*
920920 * Who knows what happened...
921921 */
922+ fail :
922923 REDEBUG ("TLS failed during operation" );
923924 eap_tls_session -> state = EAP_TLS_FAIL ;
924925
@@ -970,11 +971,13 @@ static inline CC_HINT(always_inline) unlang_action_t eap_tls_handshake_push(requ
970971 * session object SHOULD be maintained even after the session is completed, for session
971972 * resumption.
972973 *
974+ * Note that we never return FAIL to the interpreter. Instead, we
975+ * send the EAP failure back to the supplicant.
976+ *
973977 * @param request the request
974978 * @param eap_session to continue.
975979 * @return
976- * - EAP_TLS_ESTABLISHED
977- * - EAP_TLS_HANDLED
980+ * - UNLANG_ACTION_CALCULATE_RESULT
978981 */
979982unlang_action_t eap_tls_process (request_t * request , eap_session_t * eap_session )
980983{
@@ -1106,8 +1109,11 @@ unlang_action_t eap_tls_process(request_t *request, eap_session_t *eap_session)
11061109 goto done ;
11071110 }
11081111
1109- eap_tls_request (request , eap_session );
1110- eap_tls_session -> state = EAP_TLS_HANDLED ;
1112+ if (eap_tls_request (request , eap_session ) < 0 ) {
1113+ eap_tls_session -> state = EAP_TLS_FAIL ;
1114+ } else {
1115+ eap_tls_session -> state = EAP_TLS_HANDLED ;
1116+ }
11111117 goto done ;
11121118
11131119 /*
0 commit comments