Commit 6570aa1d authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'sctp-two-fixes-for-spp_ipv6_flowlabel-and-spp_dscp-sockopts'



Xin Long says:

====================
sctp: two fixes for spp_ipv6_flowlabel and spp_dscp sockopts

This patchset fixes two problems in sctp_apply_peer_addr_params()
when setting spp_ipv6_flowlabel or spp_dscp.
====================

Acked-by: default avatarMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents bf68066f 741880e1
Loading
Loading
Loading
Loading
+19 −15
Original line number Diff line number Diff line
@@ -2658,19 +2658,22 @@ static int sctp_apply_peer_addr_params(struct sctp_paddrparams *params,
	}

	if (params->spp_flags & SPP_IPV6_FLOWLABEL) {
		if (trans && trans->ipaddr.sa.sa_family == AF_INET6) {
		if (trans) {
			if (trans->ipaddr.sa.sa_family == AF_INET6) {
				trans->flowlabel = params->spp_ipv6_flowlabel &
						   SCTP_FLOWLABEL_VAL_MASK;
				trans->flowlabel |= SCTP_FLOWLABEL_SET_MASK;
			}
		} else if (asoc) {
			list_for_each_entry(trans,
					    &asoc->peer.transport_addr_list,
			struct sctp_transport *t;

			list_for_each_entry(t, &asoc->peer.transport_addr_list,
					    transports) {
				if (trans->ipaddr.sa.sa_family != AF_INET6)
				if (t->ipaddr.sa.sa_family != AF_INET6)
					continue;
				trans->flowlabel = params->spp_ipv6_flowlabel &
				t->flowlabel = params->spp_ipv6_flowlabel &
					       SCTP_FLOWLABEL_VAL_MASK;
				trans->flowlabel |= SCTP_FLOWLABEL_SET_MASK;
				t->flowlabel |= SCTP_FLOWLABEL_SET_MASK;
			}
			asoc->flowlabel = params->spp_ipv6_flowlabel &
					  SCTP_FLOWLABEL_VAL_MASK;
@@ -2687,12 +2690,13 @@ static int sctp_apply_peer_addr_params(struct sctp_paddrparams *params,
			trans->dscp = params->spp_dscp & SCTP_DSCP_VAL_MASK;
			trans->dscp |= SCTP_DSCP_SET_MASK;
		} else if (asoc) {
			list_for_each_entry(trans,
					    &asoc->peer.transport_addr_list,
			struct sctp_transport *t;

			list_for_each_entry(t, &asoc->peer.transport_addr_list,
					    transports) {
				trans->dscp = params->spp_dscp &
				t->dscp = params->spp_dscp &
					  SCTP_DSCP_VAL_MASK;
				trans->dscp |= SCTP_DSCP_SET_MASK;
				t->dscp |= SCTP_DSCP_SET_MASK;
			}
			asoc->dscp = params->spp_dscp & SCTP_DSCP_VAL_MASK;
			asoc->dscp |= SCTP_DSCP_SET_MASK;