Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6444f42 authored by Samuel Jero's avatar Samuel Jero Committed by Gerrit Renker
Browse files

dccp: send Confirm options only once



If a connection is in the OPEN state, remove feature negotiation Confirm
options from the list of options after sending them once; as such options
are NOT supposed to be retransmitted and are ONLY supposed to be sent in
response to a Change option (RFC 4340 6.2).

Signed-off-by: default avatarSamuel Jero <sj323707@ohio.edu>
Acked-by: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
parent 44e6fd9e
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -665,12 +665,23 @@ int dccp_feat_insert_opts(struct dccp_sock *dp, struct dccp_request_sock *dreq,
			return -1;
		if (pos->needs_mandatory && dccp_insert_option_mandatory(skb))
			return -1;

		if (skb->sk->sk_state == DCCP_OPEN &&
		    (opt == DCCPO_CONFIRM_R || opt == DCCPO_CONFIRM_L)) {
			/*
		 * Enter CHANGING after transmitting the Change option (6.6.2).
			 * Confirms don't get retransmitted (6.6.3) once the
			 * connection is in state OPEN
			 */
			dccp_feat_list_pop(pos);
		} else {
			/*
			 * Enter CHANGING after transmitting the Change
			 * option (6.6.2).
			 */
			if (pos->state == FEAT_INITIALISING)
				pos->state = FEAT_CHANGING;
		}
	}
	return 0;
}