netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
@ 2020-05-26 16:40 David Laight
  2020-05-26 16:44 ` David Laight
  0 siblings, 1 reply; 5+ messages in thread
From: David Laight @ 2020-05-26 16:40 UTC (permalink / raw)
  To: 'Vlad Yasevich', 'Neil Horman',
	'David S. Miller', 'Jakub Kicinski',
	'linux-sctp@vger.kernel.org',
	'netdev@vger.kernel.org', 'Christoph Hellwig',
	'Marcelo Ricardo Leitner'

Expand the #define foo (*foo) used to simplify the previous patch.
Doesn't change the generated code.

Signed-off-by: David Laight <david.laight@aculab.com>

---
 net/sctp/socket.c | 687 ++++++++++++++++++++++++++----------------------------
 1 file changed, 331 insertions(+), 356 deletions(-)

diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index 639d7da..b8068da 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -2585,9 +2585,8 @@ static int sctp_apply_peer_addr_params(struct sctp_paddrparams *params,
 	return 0;
 }
 
-#define params (*params)
 static int sctp_setsockopt_peer_addr_params(struct sock *sk,
-					    struct sctp_paddrparams params,
+					    struct sctp_paddrparams *params,
 					    unsigned int optlen)
 {
 	struct sctp_transport   *trans = NULL;
@@ -2596,33 +2595,33 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
 	int error;
 	int hb_change, pmtud_change, sackdelay_change;
 
-	if (optlen != sizeof(params)) {
+	if (optlen != sizeof(*params)) {
 		if (optlen != ALIGN(offsetof(struct sctp_paddrparams,
 						    spp_ipv6_flowlabel), 4))
 			return -EINVAL;
-		if (params.spp_flags & (SPP_DSCP | SPP_IPV6_FLOWLABEL))
+		if (params->spp_flags & (SPP_DSCP | SPP_IPV6_FLOWLABEL))
 			return -EINVAL;
 	}
 
 	/* Validate flags and value parameters. */
-	hb_change        = params.spp_flags & SPP_HB;
-	pmtud_change     = params.spp_flags & SPP_PMTUD;
-	sackdelay_change = params.spp_flags & SPP_SACKDELAY;
+	hb_change        = params->spp_flags & SPP_HB;
+	pmtud_change     = params->spp_flags & SPP_PMTUD;
+	sackdelay_change = params->spp_flags & SPP_SACKDELAY;
 
 	if (hb_change        == SPP_HB ||
 	    pmtud_change     == SPP_PMTUD ||
 	    sackdelay_change == SPP_SACKDELAY ||
-	    params.spp_sackdelay > 500 ||
-	    (params.spp_pathmtu &&
-	     params.spp_pathmtu < SCTP_DEFAULT_MINSEGMENT))
+	    params->spp_sackdelay > 500 ||
+	    (params->spp_pathmtu &&
+	     params->spp_pathmtu < SCTP_DEFAULT_MINSEGMENT))
 		return -EINVAL;
 
 	/* If an address other than INADDR_ANY is specified, and
 	 * no transport is found, then the request is invalid.
 	 */
-	if (!sctp_is_any(sk, (union sctp_addr *)&params.spp_address)) {
-		trans = sctp_addr_id2transport(sk, &params.spp_address,
-					       params.spp_assoc_id);
+	if (!sctp_is_any(sk, (union sctp_addr *)&params->spp_address)) {
+		trans = sctp_addr_id2transport(sk, &params->spp_address,
+					       params->spp_assoc_id);
 		if (!trans)
 			return -EINVAL;
 	}
@@ -2631,19 +2630,19 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
 	 * socket is a one to many style socket, and an association
 	 * was not found, then the id was invalid.
 	 */
-	asoc = sctp_id2assoc(sk, params.spp_assoc_id);
-	if (!asoc && params.spp_assoc_id != SCTP_FUTURE_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->spp_assoc_id);
+	if (!asoc && params->spp_assoc_id != SCTP_FUTURE_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
 	/* Heartbeat demand can only be sent on a transport or
 	 * association, but not a socket.
 	 */
-	if (params.spp_flags & SPP_HB_DEMAND && !trans && !asoc)
+	if (params->spp_flags & SPP_HB_DEMAND && !trans && !asoc)
 		return -EINVAL;
 
 	/* Process parameters. */
-	error = sctp_apply_peer_addr_params(&params, trans, asoc, sp,
+	error = sctp_apply_peer_addr_params(params, trans, asoc, sp,
 					    hb_change, pmtud_change,
 					    sackdelay_change);
 
@@ -2656,7 +2655,7 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
 	if (!trans && asoc) {
 		list_for_each_entry(trans, &asoc->peer.transport_addr_list,
 				transports) {
-			sctp_apply_peer_addr_params(&params, trans, asoc, sp,
+			sctp_apply_peer_addr_params(params, trans, asoc, sp,
 						    hb_change, pmtud_change,
 						    sackdelay_change);
 		}
@@ -2664,7 +2663,6 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
 
 	return 0;
 }
-#undef params
 
 static inline __u32 sctp_spp_sackdelay_enable(__u32 param_flags)
 {
@@ -2749,16 +2747,15 @@ static void sctp_apply_asoc_delayed_ack(struct sctp_sack_info *params,
  *    value to 1 will disable the delayed sack algorithm.
  */
 
-#define params (*params)
 static int sctp_setsockopt_delayed_ack(struct sock *sk,
-				       struct sctp_sack_info params,
+				       struct sctp_sack_info *params,
 				       unsigned int optlen)
 {
 	struct sctp_sock *sp = sctp_sk(sk);
 	struct sctp_association *asoc;
 
 	if (optlen == sizeof(struct sctp_sack_info)) {
-		if (params.sack_delay == 0 && params.sack_freq == 0)
+		if (params->sack_delay == 0 && params->sack_freq == 0)
 			return 0;
 	} else if (optlen == sizeof(struct sctp_assoc_value)) {
 		pr_warn_ratelimited(DEPRECATED
@@ -2766,56 +2763,56 @@ static int sctp_setsockopt_delayed_ack(struct sock *sk,
 				    "Use of struct sctp_assoc_value in delayed_ack socket option.\n"
 				    "Use struct sctp_sack_info instead\n",
 				    current->comm, task_pid_nr(current));
-		if (params.sack_delay == 0)
-			params.sack_freq = 1;
+		if (params->sack_delay == 0)
+			params->sack_freq = 1;
 		else
-			params.sack_freq = 0;
+			params->sack_freq = 0;
 	} else
 		return -EINVAL;
 
 	/* Validate value parameter. */
-	if (params.sack_delay > 500)
+	if (params->sack_delay > 500)
 		return -EINVAL;
 
 	/* Get association, if sack_assoc_id != SCTP_FUTURE_ASSOC and the
 	 * socket is a one to many style socket, and an association
 	 * was not found, then the id was invalid.
 	 */
-	asoc = sctp_id2assoc(sk, params.sack_assoc_id);
-	if (!asoc && params.sack_assoc_id > SCTP_ALL_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->sack_assoc_id);
+	if (!asoc && params->sack_assoc_id > SCTP_ALL_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
 	if (asoc) {
-		sctp_apply_asoc_delayed_ack(&params, asoc);
+		sctp_apply_asoc_delayed_ack(params, asoc);
 
 		return 0;
 	}
 
 	if (sctp_style(sk, TCP))
-		params.sack_assoc_id = SCTP_FUTURE_ASSOC;
+		params->sack_assoc_id = SCTP_FUTURE_ASSOC;
 
-	if (params.sack_assoc_id == SCTP_FUTURE_ASSOC ||
-	    params.sack_assoc_id == SCTP_ALL_ASSOC) {
-		if (params.sack_delay) {
-			sp->sackdelay = params.sack_delay;
+	if (params->sack_assoc_id == SCTP_FUTURE_ASSOC ||
+	    params->sack_assoc_id == SCTP_ALL_ASSOC) {
+		if (params->sack_delay) {
+			sp->sackdelay = params->sack_delay;
 			sp->param_flags =
 				sctp_spp_sackdelay_enable(sp->param_flags);
 		}
-		if (params.sack_freq == 1) {
+		if (params->sack_freq == 1) {
 			sp->param_flags =
 				sctp_spp_sackdelay_disable(sp->param_flags);
-		} else if (params.sack_freq > 1) {
-			sp->sackfreq = params.sack_freq;
+		} else if (params->sack_freq > 1) {
+			sp->sackfreq = params->sack_freq;
 			sp->param_flags =
 				sctp_spp_sackdelay_enable(sp->param_flags);
 		}
 	}
 
-	if (params.sack_assoc_id == SCTP_CURRENT_ASSOC ||
-	    params.sack_assoc_id == SCTP_ALL_ASSOC)
+	if (params->sack_assoc_id == SCTP_CURRENT_ASSOC ||
+	    params->sack_assoc_id == SCTP_ALL_ASSOC)
 		list_for_each_entry(asoc, &sp->ep->asocs, asocs)
-			sctp_apply_asoc_delayed_ack(&params, asoc);
+			sctp_apply_asoc_delayed_ack(params, asoc);
 
 	return 0;
 }
@@ -2831,8 +2828,7 @@ static int sctp_setsockopt_delayed_ack(struct sock *sk,
  * by the change).  With TCP-style sockets, this option is inherited by
  * sockets derived from a listener socket.
  */
-#define sinit (*sinit)
-static int sctp_setsockopt_initmsg(struct sock *sk, struct sctp_initmsg sinit,
+static int sctp_setsockopt_initmsg(struct sock *sk, struct sctp_initmsg *sinit,
 				   unsigned int optlen)
 {
 	struct sctp_sock *sp = sctp_sk(sk);
@@ -2840,18 +2836,17 @@ static int sctp_setsockopt_initmsg(struct sock *sk, struct sctp_initmsg sinit,
 	if (optlen != sizeof(struct sctp_initmsg))
 		return -EINVAL;
 
-	if (sinit.sinit_num_ostreams)
-		sp->initmsg.sinit_num_ostreams = sinit.sinit_num_ostreams;
-	if (sinit.sinit_max_instreams)
-		sp->initmsg.sinit_max_instreams = sinit.sinit_max_instreams;
-	if (sinit.sinit_max_attempts)
-		sp->initmsg.sinit_max_attempts = sinit.sinit_max_attempts;
-	if (sinit.sinit_max_init_timeo)
-		sp->initmsg.sinit_max_init_timeo = sinit.sinit_max_init_timeo;
+	if (sinit->sinit_num_ostreams)
+		sp->initmsg.sinit_num_ostreams = sinit->sinit_num_ostreams;
+	if (sinit->sinit_max_instreams)
+		sp->initmsg.sinit_max_instreams = sinit->sinit_max_instreams;
+	if (sinit->sinit_max_attempts)
+		sp->initmsg.sinit_max_attempts = sinit->sinit_max_attempts;
+	if (sinit->sinit_max_init_timeo)
+		sp->initmsg.sinit_max_init_timeo = sinit->sinit_max_init_timeo;
 
 	return 0;
 }
-#undef sinit
 
 /*
  * 7.1.14 Set default send parameters (SCTP_DEFAULT_SEND_PARAM)
@@ -2867,56 +2862,55 @@ static int sctp_setsockopt_initmsg(struct sock *sk, struct sctp_initmsg sinit,
  *   sinfo_timetolive.  The user must provide the sinfo_assoc_id field in
  *   to this call if the caller is using the UDP model.
  */
-#define info (*info)
 static int sctp_setsockopt_default_send_param(struct sock *sk,
-					      struct sctp_sndrcvinfo info,
+					      struct sctp_sndrcvinfo *info,
 					      unsigned int optlen)
 {
 	struct sctp_sock *sp = sctp_sk(sk);
 	struct sctp_association *asoc;
 
-	if (optlen != sizeof(info))
+	if (optlen != sizeof(*info))
 		return -EINVAL;
-	if (info.sinfo_flags &
+	if (info->sinfo_flags &
 	    ~(SCTP_UNORDERED | SCTP_ADDR_OVER |
 	      SCTP_ABORT | SCTP_EOF))
 		return -EINVAL;
 
-	asoc = sctp_id2assoc(sk, info.sinfo_assoc_id);
-	if (!asoc && info.sinfo_assoc_id > SCTP_ALL_ASSOC &&
+	asoc = sctp_id2assoc(sk, info->sinfo_assoc_id);
+	if (!asoc && info->sinfo_assoc_id > SCTP_ALL_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
 	if (asoc) {
-		asoc->default_stream = info.sinfo_stream;
-		asoc->default_flags = info.sinfo_flags;
-		asoc->default_ppid = info.sinfo_ppid;
-		asoc->default_context = info.sinfo_context;
-		asoc->default_timetolive = info.sinfo_timetolive;
+		asoc->default_stream = info->sinfo_stream;
+		asoc->default_flags = info->sinfo_flags;
+		asoc->default_ppid = info->sinfo_ppid;
+		asoc->default_context = info->sinfo_context;
+		asoc->default_timetolive = info->sinfo_timetolive;
 
 		return 0;
 	}
 
 	if (sctp_style(sk, TCP))
-		info.sinfo_assoc_id = SCTP_FUTURE_ASSOC;
+		info->sinfo_assoc_id = SCTP_FUTURE_ASSOC;
 
-	if (info.sinfo_assoc_id == SCTP_FUTURE_ASSOC ||
-	    info.sinfo_assoc_id == SCTP_ALL_ASSOC) {
-		sp->default_stream = info.sinfo_stream;
-		sp->default_flags = info.sinfo_flags;
-		sp->default_ppid = info.sinfo_ppid;
-		sp->default_context = info.sinfo_context;
-		sp->default_timetolive = info.sinfo_timetolive;
+	if (info->sinfo_assoc_id == SCTP_FUTURE_ASSOC ||
+	    info->sinfo_assoc_id == SCTP_ALL_ASSOC) {
+		sp->default_stream = info->sinfo_stream;
+		sp->default_flags = info->sinfo_flags;
+		sp->default_ppid = info->sinfo_ppid;
+		sp->default_context = info->sinfo_context;
+		sp->default_timetolive = info->sinfo_timetolive;
 	}
 
-	if (info.sinfo_assoc_id == SCTP_CURRENT_ASSOC ||
-	    info.sinfo_assoc_id == SCTP_ALL_ASSOC) {
+	if (info->sinfo_assoc_id == SCTP_CURRENT_ASSOC ||
+	    info->sinfo_assoc_id == SCTP_ALL_ASSOC) {
 		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
-			asoc->default_stream = info.sinfo_stream;
-			asoc->default_flags = info.sinfo_flags;
-			asoc->default_ppid = info.sinfo_ppid;
-			asoc->default_context = info.sinfo_context;
-			asoc->default_timetolive = info.sinfo_timetolive;
+			asoc->default_stream = info->sinfo_stream;
+			asoc->default_flags = info->sinfo_flags;
+			asoc->default_ppid = info->sinfo_ppid;
+			asoc->default_context = info->sinfo_context;
+			asoc->default_timetolive = info->sinfo_timetolive;
 		}
 	}
 
@@ -2927,51 +2921,51 @@ static int sctp_setsockopt_default_send_param(struct sock *sk,
  * (SCTP_DEFAULT_SNDINFO)
  */
 static int sctp_setsockopt_default_sndinfo(struct sock *sk,
-					   struct sctp_sndinfo info,
+					   struct sctp_sndinfo *info,
 					   unsigned int optlen)
 {
 	struct sctp_sock *sp = sctp_sk(sk);
 	struct sctp_association *asoc;
 
-	if (optlen != sizeof(info))
+	if (optlen != sizeof(*info))
 		return -EINVAL;
-	if (info.snd_flags &
+	if (info->snd_flags &
 	    ~(SCTP_UNORDERED | SCTP_ADDR_OVER |
 	      SCTP_ABORT | SCTP_EOF))
 		return -EINVAL;
 
-	asoc = sctp_id2assoc(sk, info.snd_assoc_id);
-	if (!asoc && info.snd_assoc_id > SCTP_ALL_ASSOC &&
+	asoc = sctp_id2assoc(sk, info->snd_assoc_id);
+	if (!asoc && info->snd_assoc_id > SCTP_ALL_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
 	if (asoc) {
-		asoc->default_stream = info.snd_sid;
-		asoc->default_flags = info.snd_flags;
-		asoc->default_ppid = info.snd_ppid;
-		asoc->default_context = info.snd_context;
+		asoc->default_stream = info->snd_sid;
+		asoc->default_flags = info->snd_flags;
+		asoc->default_ppid = info->snd_ppid;
+		asoc->default_context = info->snd_context;
 
 		return 0;
 	}
 
 	if (sctp_style(sk, TCP))
-		info.snd_assoc_id = SCTP_FUTURE_ASSOC;
+		info->snd_assoc_id = SCTP_FUTURE_ASSOC;
 
-	if (info.snd_assoc_id == SCTP_FUTURE_ASSOC ||
-	    info.snd_assoc_id == SCTP_ALL_ASSOC) {
-		sp->default_stream = info.snd_sid;
-		sp->default_flags = info.snd_flags;
-		sp->default_ppid = info.snd_ppid;
-		sp->default_context = info.snd_context;
+	if (info->snd_assoc_id == SCTP_FUTURE_ASSOC ||
+	    info->snd_assoc_id == SCTP_ALL_ASSOC) {
+		sp->default_stream = info->snd_sid;
+		sp->default_flags = info->snd_flags;
+		sp->default_ppid = info->snd_ppid;
+		sp->default_context = info->snd_context;
 	}
 
-	if (info.snd_assoc_id == SCTP_CURRENT_ASSOC ||
-	    info.snd_assoc_id == SCTP_ALL_ASSOC) {
+	if (info->snd_assoc_id == SCTP_CURRENT_ASSOC ||
+	    info->snd_assoc_id == SCTP_ALL_ASSOC) {
 		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
-			asoc->default_stream = info.snd_sid;
-			asoc->default_flags = info.snd_flags;
-			asoc->default_ppid = info.snd_ppid;
-			asoc->default_context = info.snd_context;
+			asoc->default_stream = info->snd_sid;
+			asoc->default_flags = info->snd_flags;
+			asoc->default_ppid = info->snd_ppid;
+			asoc->default_context = info->snd_context;
 		}
 	}
 
@@ -2984,8 +2978,7 @@ static int sctp_setsockopt_default_sndinfo(struct sock *sk,
  * the association primary.  The enclosed address must be one of the
  * association peer's addresses.
  */
-#define prim (*prim)
-static int sctp_setsockopt_primary_addr(struct sock *sk, struct sctp_prim prim,
+static int sctp_setsockopt_primary_addr(struct sock *sk, struct sctp_prim *prim,
 					unsigned int optlen)
 {
 	struct sctp_transport *trans;
@@ -2996,17 +2989,17 @@ static int sctp_setsockopt_primary_addr(struct sock *sk, struct sctp_prim prim,
 		return -EINVAL;
 
 	/* Allow security module to validate address but need address len. */
-	af = sctp_get_af_specific(prim.ssp_addr.ss_family);
+	af = sctp_get_af_specific(prim->ssp_addr.ss_family);
 	if (!af)
 		return -EINVAL;
 
 	err = security_sctp_bind_connect(sk, SCTP_PRIMARY_ADDR,
-					 (struct sockaddr *)&prim.ssp_addr,
+					 (struct sockaddr *)&prim->ssp_addr,
 					 af->sockaddr_len);
 	if (err)
 		return err;
 
-	trans = sctp_addr_id2transport(sk, &prim.ssp_addr, prim.ssp_assoc_id);
+	trans = sctp_addr_id2transport(sk, &prim->ssp_addr, prim->ssp_assoc_id);
 	if (!trans)
 		return -EINVAL;
 
@@ -3014,7 +3007,6 @@ static int sctp_setsockopt_primary_addr(struct sock *sk, struct sctp_prim prim,
 
 	return 0;
 }
-#undef prim
 
 /*
  * 7.1.5 SCTP_NODELAY
@@ -3047,7 +3039,7 @@ static int sctp_setsockopt_nodelay(struct sock *sk, int *optval,
  *
  */
 static int sctp_setsockopt_rtoinfo(struct sock *sk,
-				   struct sctp_rtoinfo params,
+				   struct sctp_rtoinfo *params,
 				   unsigned int optlen)
 {
 	struct sctp_association *asoc;
@@ -3057,15 +3049,15 @@ static int sctp_setsockopt_rtoinfo(struct sock *sk,
 	if (optlen != sizeof (struct sctp_rtoinfo))
 		return -EINVAL;
 
-	asoc = sctp_id2assoc(sk, params.srto_assoc_id);
+	asoc = sctp_id2assoc(sk, params->srto_assoc_id);
 
 	/* Set the values to the specific association */
-	if (!asoc && params.srto_assoc_id != SCTP_FUTURE_ASSOC &&
+	if (!asoc && params->srto_assoc_id != SCTP_FUTURE_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
-	rto_max = params.srto_max;
-	rto_min = params.srto_min;
+	rto_max = params->srto_max;
+	rto_min = params->srto_min;
 
 	if (rto_max)
 		rto_max = asoc ? msecs_to_jiffies(rto_max) : rto_max;
@@ -3081,17 +3073,17 @@ static int sctp_setsockopt_rtoinfo(struct sock *sk,
 		return -EINVAL;
 
 	if (asoc) {
-		if (params.srto_initial != 0)
+		if (params->srto_initial != 0)
 			asoc->rto_initial =
-				msecs_to_jiffies(params.srto_initial);
+				msecs_to_jiffies(params->srto_initial);
 		asoc->rto_max = rto_max;
 		asoc->rto_min = rto_min;
 	} else {
 		/* If there is no association or the association-id = 0
 		 * set the values to the endpoint.
 		 */
-		if (params.srto_initial != 0)
-			sp->rtoinfo.srto_initial = params.srto_initial;
+		if (params->srto_initial != 0)
+			sp->rtoinfo.srto_initial = params->srto_initial;
 		sp->rtoinfo.srto_max = rto_max;
 		sp->rtoinfo.srto_min = rto_min;
 	}
@@ -3111,7 +3103,7 @@ static int sctp_setsockopt_rtoinfo(struct sock *sk,
  *
  */
 static int sctp_setsockopt_associnfo(struct sock *sk,
-				     struct sctp_assocparams params,
+				     struct sctp_assocparams *params,
 				     unsigned int optlen)
 {
 
@@ -3120,15 +3112,15 @@ static int sctp_setsockopt_associnfo(struct sock *sk,
 	if (optlen != sizeof(struct sctp_assocparams))
 		return -EINVAL;
 
-	asoc = sctp_id2assoc(sk, params.sasoc_assoc_id);
+	asoc = sctp_id2assoc(sk, params->sasoc_assoc_id);
 
-	if (!asoc && params.sasoc_assoc_id != SCTP_FUTURE_ASSOC &&
+	if (!asoc && params->sasoc_assoc_id != SCTP_FUTURE_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
 	/* Set the values to the specific association */
 	if (asoc) {
-		if (params.sasoc_asocmaxrxt != 0) {
+		if (params->sasoc_asocmaxrxt != 0) {
 			__u32 path_sum = 0;
 			int   paths = 0;
 			struct sctp_transport *peer_addr;
@@ -3145,24 +3137,24 @@ static int sctp_setsockopt_associnfo(struct sock *sk,
 			 * then one path.
 			 */
 			if (paths > 1 &&
-			    params.sasoc_asocmaxrxt > path_sum)
+			    params->sasoc_asocmaxrxt > path_sum)
 				return -EINVAL;
 
-			asoc->max_retrans = params.sasoc_asocmaxrxt;
+			asoc->max_retrans = params->sasoc_asocmaxrxt;
 		}
 
-		if (params.sasoc_cookie_life != 0)
-			asoc->cookie_life = ms_to_ktime(params.sasoc_cookie_life);
+		if (params->sasoc_cookie_life != 0)
+			asoc->cookie_life = ms_to_ktime(params->sasoc_cookie_life);
 	} else {
 		/* Set the values to the endpoint */
 		struct sctp_sock *sp = sctp_sk(sk);
 
-		if (params.sasoc_asocmaxrxt != 0)
+		if (params->sasoc_asocmaxrxt != 0)
 			sp->assocparams.sasoc_asocmaxrxt =
-						params.sasoc_asocmaxrxt;
-		if (params.sasoc_cookie_life != 0)
+						params->sasoc_asocmaxrxt;
+		if (params->sasoc_cookie_life != 0)
 			sp->assocparams.sasoc_cookie_life =
-						params.sasoc_cookie_life;
+						params->sasoc_cookie_life;
 	}
 	return 0;
 }
@@ -3220,7 +3212,7 @@ static int sctp_setsockopt_mappedv4(struct sock *sk, int *optval,
  * assoc_value:  This parameter specifies the maximum size in bytes.
  */
 static int sctp_setsockopt_maxseg(struct sock *sk,
-				  struct sctp_assoc_value params,
+				  struct sctp_assoc_value *params,
 				  unsigned int optlen)
 {
 	struct sctp_sock *sp = sctp_sk(sk);
@@ -3233,16 +3225,16 @@ static int sctp_setsockopt_maxseg(struct sock *sk,
 				    "Use of int in maxseg socket option.\n"
 				    "Use struct sctp_assoc_value instead\n",
 				    current->comm, task_pid_nr(current));
-		val = *(int *)&params;
-		params.assoc_id = SCTP_FUTURE_ASSOC;
+		val = *(int *)params;
+		params->assoc_id = SCTP_FUTURE_ASSOC;
 	} else if (optlen != sizeof(struct sctp_assoc_value)) {
-		val = params.assoc_value;
+		val = params->assoc_value;
 	} else {
 		return -EINVAL;
 	}
 
-	asoc = sctp_id2assoc(sk, params.assoc_id);
-	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->assoc_id);
+	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
@@ -3277,9 +3269,8 @@ static int sctp_setsockopt_maxseg(struct sock *sk,
  *   locally bound addresses. The following structure is used to make a
  *   set primary request:
  */
-#define prim (*prim)
 static int sctp_setsockopt_peer_primary_addr(struct sock *sk,
-					     struct sctp_setpeerprim prim,
+					     struct sctp_setpeerprim *prim,
 					     unsigned int optlen)
 {
 	struct sctp_sock	*sp;
@@ -3296,7 +3287,7 @@ static int sctp_setsockopt_peer_primary_addr(struct sock *sk,
 	if (optlen != sizeof(struct sctp_setpeerprim))
 		return -EINVAL;
 
-	asoc = sctp_id2assoc(sk, prim.sspp_assoc_id);
+	asoc = sctp_id2assoc(sk, prim->sspp_assoc_id);
 	if (!asoc)
 		return -EINVAL;
 
@@ -3309,26 +3300,26 @@ static int sctp_setsockopt_peer_primary_addr(struct sock *sk,
 	if (!sctp_state(asoc, ESTABLISHED))
 		return -ENOTCONN;
 
-	af = sctp_get_af_specific(prim.sspp_addr.ss_family);
+	af = sctp_get_af_specific(prim->sspp_addr.ss_family);
 	if (!af)
 		return -EINVAL;
 
-	if (!af->addr_valid((union sctp_addr *)&prim.sspp_addr, sp, NULL))
+	if (!af->addr_valid((union sctp_addr *)&prim->sspp_addr, sp, NULL))
 		return -EADDRNOTAVAIL;
 
-	if (!sctp_assoc_lookup_laddr(asoc, (union sctp_addr *)&prim.sspp_addr))
+	if (!sctp_assoc_lookup_laddr(asoc, (union sctp_addr *)&prim->sspp_addr))
 		return -EADDRNOTAVAIL;
 
 	/* Allow security module to validate address. */
 	err = security_sctp_bind_connect(sk, SCTP_SET_PEER_PRIMARY_ADDR,
-					 (struct sockaddr *)&prim.sspp_addr,
+					 (struct sockaddr *)&prim->sspp_addr,
 					 af->sockaddr_len);
 	if (err)
 		return err;
 
 	/* Create an ASCONF chunk with SET_PRIMARY parameter	*/
 	chunk = sctp_make_asconf_set_prim(asoc,
-					  (union sctp_addr *)&prim.sspp_addr);
+					  (union sctp_addr *)&prim->sspp_addr);
 	if (!chunk)
 		return -ENOMEM;
 
@@ -3338,7 +3329,6 @@ static int sctp_setsockopt_peer_primary_addr(struct sock *sk,
 
 	return err;
 }
-#undef prim
 
 static int sctp_setsockopt_adaptation_layer(struct sock *sk,
 					    struct sctp_setadaptation *adaptation,
@@ -3367,7 +3357,7 @@ static int sctp_setsockopt_adaptation_layer(struct sock *sk,
  * saved with outbound messages.
  */
 static int sctp_setsockopt_context(struct sock *sk,
-				   struct sctp_assoc_value params,
+				   struct sctp_assoc_value *params,
 				   unsigned int optlen)
 {
 	struct sctp_sock *sp = sctp_sk(sk);
@@ -3376,28 +3366,28 @@ static int sctp_setsockopt_context(struct sock *sk,
 	if (optlen != sizeof(struct sctp_assoc_value))
 		return -EINVAL;
 
-	asoc = sctp_id2assoc(sk, params.assoc_id);
-	if (!asoc && params.assoc_id > SCTP_ALL_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->assoc_id);
+	if (!asoc && params->assoc_id > SCTP_ALL_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
 	if (asoc) {
-		asoc->default_rcv_context = params.assoc_value;
+		asoc->default_rcv_context = params->assoc_value;
 
 		return 0;
 	}
 
 	if (sctp_style(sk, TCP))
-		params.assoc_id = SCTP_FUTURE_ASSOC;
+		params->assoc_id = SCTP_FUTURE_ASSOC;
 
-	if (params.assoc_id == SCTP_FUTURE_ASSOC ||
-	    params.assoc_id == SCTP_ALL_ASSOC)
-		sp->default_rcv_context = params.assoc_value;
+	if (params->assoc_id == SCTP_FUTURE_ASSOC ||
+	    params->assoc_id == SCTP_ALL_ASSOC)
+		sp->default_rcv_context = params->assoc_value;
 
-	if (params.assoc_id == SCTP_CURRENT_ASSOC ||
-	    params.assoc_id == SCTP_ALL_ASSOC)
+	if (params->assoc_id == SCTP_CURRENT_ASSOC ||
+	    params->assoc_id == SCTP_ALL_ASSOC)
 		list_for_each_entry(asoc, &sp->ep->asocs, asocs)
-			asoc->default_rcv_context = params.assoc_value;
+			asoc->default_rcv_context = params->assoc_value;
 
 	return 0;
 }
@@ -3488,7 +3478,7 @@ static int sctp_setsockopt_partial_delivery_point(struct sock *sk,
  * future associations inheriting the socket value.
  */
 static int sctp_setsockopt_maxburst(struct sock *sk,
-				    struct sctp_assoc_value params,
+				    struct sctp_assoc_value *params,
 				    unsigned int optlen)
 {
 	struct sctp_sock *sp = sctp_sk(sk);
@@ -3500,34 +3490,34 @@ static int sctp_setsockopt_maxburst(struct sock *sk,
 				    "Use of int in max_burst socket option deprecated.\n"
 				    "Use struct sctp_assoc_value instead\n",
 				    current->comm, task_pid_nr(current));
-		params.assoc_value = *(int *)&params;
-		params.assoc_id = SCTP_FUTURE_ASSOC;
+		params->assoc_value = *(int *)params;
+		params->assoc_id = SCTP_FUTURE_ASSOC;
 	} else if (optlen != sizeof(struct sctp_assoc_value)) {
 		return -EINVAL;
 	}
 
-	asoc = sctp_id2assoc(sk, params.assoc_id);
-	if (!asoc && params.assoc_id > SCTP_ALL_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->assoc_id);
+	if (!asoc && params->assoc_id > SCTP_ALL_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
 	if (asoc) {
-		asoc->max_burst = params.assoc_value;
+		asoc->max_burst = params->assoc_value;
 
 		return 0;
 	}
 
 	if (sctp_style(sk, TCP))
-		params.assoc_id = SCTP_FUTURE_ASSOC;
+		params->assoc_id = SCTP_FUTURE_ASSOC;
 
-	if (params.assoc_id == SCTP_FUTURE_ASSOC ||
-	    params.assoc_id == SCTP_ALL_ASSOC)
-		sp->max_burst = params.assoc_value;
+	if (params->assoc_id == SCTP_FUTURE_ASSOC ||
+	    params->assoc_id == SCTP_ALL_ASSOC)
+		sp->max_burst = params->assoc_value;
 
-	if (params.assoc_id == SCTP_CURRENT_ASSOC ||
-	    params.assoc_id == SCTP_ALL_ASSOC)
+	if (params->assoc_id == SCTP_CURRENT_ASSOC ||
+	    params->assoc_id == SCTP_ALL_ASSOC)
 		list_for_each_entry(asoc, &sp->ep->asocs, asocs)
-			asoc->max_burst = params.assoc_value;
+			asoc->max_burst = params->assoc_value;
 
 	return 0;
 }
@@ -3539,9 +3529,8 @@ static int sctp_setsockopt_maxburst(struct sock *sk,
  * received only in an authenticated way.  Changes to the list of chunks
  * will only effect future associations on the socket.
  */
-#define val (*val)
 static int sctp_setsockopt_auth_chunk(struct sock *sk,
-				      struct sctp_authchunk val,
+				      struct sctp_authchunk *val,
 				      unsigned int optlen)
 {
 	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
@@ -3552,7 +3541,7 @@ static int sctp_setsockopt_auth_chunk(struct sock *sk,
 	if (optlen != sizeof(struct sctp_authchunk))
 		return -EINVAL;
 
-	switch (val.sauth_chunk) {
+	switch (val->sauth_chunk) {
 	case SCTP_CID_INIT:
 	case SCTP_CID_INIT_ACK:
 	case SCTP_CID_SHUTDOWN_COMPLETE:
@@ -3561,7 +3550,7 @@ static int sctp_setsockopt_auth_chunk(struct sock *sk,
 	}
 
 	/* add this chunk id to the endpoint */
-	return sctp_auth_ep_add_chunkid(ep, val.sauth_chunk);
+	return sctp_auth_ep_add_chunkid(ep, val->sauth_chunk);
 }
 
 /*
@@ -3666,7 +3655,7 @@ static int sctp_setsockopt_auth_key(struct sock *sk,
  * the association shared key.
  */
 static int sctp_setsockopt_active_key(struct sock *sk,
-				      struct sctp_authkeyid val,
+				      struct sctp_authkeyid *val,
 				      unsigned int optlen)
 {
 	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
@@ -3676,29 +3665,29 @@ static int sctp_setsockopt_active_key(struct sock *sk,
 	if (optlen != sizeof(struct sctp_authkeyid))
 		return -EINVAL;
 
-	asoc = sctp_id2assoc(sk, val.scact_assoc_id);
-	if (!asoc && val.scact_assoc_id > SCTP_ALL_ASSOC &&
+	asoc = sctp_id2assoc(sk, val->scact_assoc_id);
+	if (!asoc && val->scact_assoc_id > SCTP_ALL_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
 	if (asoc)
-		return sctp_auth_set_active_key(ep, asoc, val.scact_keynumber);
+		return sctp_auth_set_active_key(ep, asoc, val->scact_keynumber);
 
 	if (sctp_style(sk, TCP))
-		val.scact_assoc_id = SCTP_FUTURE_ASSOC;
+		val->scact_assoc_id = SCTP_FUTURE_ASSOC;
 
-	if (val.scact_assoc_id == SCTP_FUTURE_ASSOC ||
-	    val.scact_assoc_id == SCTP_ALL_ASSOC) {
-		ret = sctp_auth_set_active_key(ep, asoc, val.scact_keynumber);
+	if (val->scact_assoc_id == SCTP_FUTURE_ASSOC ||
+	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
+		ret = sctp_auth_set_active_key(ep, asoc, val->scact_keynumber);
 		if (ret)
 			return ret;
 	}
 
-	if (val.scact_assoc_id == SCTP_CURRENT_ASSOC ||
-	    val.scact_assoc_id == SCTP_ALL_ASSOC) {
+	if (val->scact_assoc_id == SCTP_CURRENT_ASSOC ||
+	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
 		list_for_each_entry(asoc, &ep->asocs, asocs) {
 			int res = sctp_auth_set_active_key(ep, asoc,
-							   val.scact_keynumber);
+							   val->scact_keynumber);
 
 			if (res && !ret)
 				ret = res;
@@ -3714,7 +3703,7 @@ static int sctp_setsockopt_active_key(struct sock *sk,
  * This set option will delete a shared secret key from use.
  */
 static int sctp_setsockopt_del_key(struct sock *sk,
-				   struct sctp_authkeyid val,
+				   struct sctp_authkeyid *val,
 				   unsigned int optlen)
 {
 	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
@@ -3724,29 +3713,29 @@ static int sctp_setsockopt_del_key(struct sock *sk,
 	if (optlen != sizeof(struct sctp_authkeyid))
 		return -EINVAL;
 
-	asoc = sctp_id2assoc(sk, val.scact_assoc_id);
-	if (!asoc && val.scact_assoc_id > SCTP_ALL_ASSOC &&
+	asoc = sctp_id2assoc(sk, val->scact_assoc_id);
+	if (!asoc && val->scact_assoc_id > SCTP_ALL_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
 	if (asoc)
-		return sctp_auth_del_key_id(ep, asoc, val.scact_keynumber);
+		return sctp_auth_del_key_id(ep, asoc, val->scact_keynumber);
 
 	if (sctp_style(sk, TCP))
-		val.scact_assoc_id = SCTP_FUTURE_ASSOC;
+		val->scact_assoc_id = SCTP_FUTURE_ASSOC;
 
-	if (val.scact_assoc_id == SCTP_FUTURE_ASSOC ||
-	    val.scact_assoc_id == SCTP_ALL_ASSOC) {
-		ret = sctp_auth_del_key_id(ep, asoc, val.scact_keynumber);
+	if (val->scact_assoc_id == SCTP_FUTURE_ASSOC ||
+	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
+		ret = sctp_auth_del_key_id(ep, asoc, val->scact_keynumber);
 		if (ret)
 			return ret;
 	}
 
-	if (val.scact_assoc_id == SCTP_CURRENT_ASSOC ||
-	    val.scact_assoc_id == SCTP_ALL_ASSOC) {
+	if (val->scact_assoc_id == SCTP_CURRENT_ASSOC ||
+	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
 		list_for_each_entry(asoc, &ep->asocs, asocs) {
 			int res = sctp_auth_del_key_id(ep, asoc,
-						       val.scact_keynumber);
+						       val->scact_keynumber);
 
 			if (res && !ret)
 				ret = res;
@@ -3762,7 +3751,7 @@ static int sctp_setsockopt_del_key(struct sock *sk,
  * This set option will deactivate a shared secret key.
  */
 static int sctp_setsockopt_deactivate_key(struct sock *sk,
-					  struct sctp_authkeyid val,
+					  struct sctp_authkeyid *val,
 					  unsigned int optlen)
 {
 	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
@@ -3772,29 +3761,29 @@ static int sctp_setsockopt_deactivate_key(struct sock *sk,
 	if (optlen != sizeof(struct sctp_authkeyid))
 		return -EINVAL;
 
-	asoc = sctp_id2assoc(sk, val.scact_assoc_id);
-	if (!asoc && val.scact_assoc_id > SCTP_ALL_ASSOC &&
+	asoc = sctp_id2assoc(sk, val->scact_assoc_id);
+	if (!asoc && val->scact_assoc_id > SCTP_ALL_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
 	if (asoc)
-		return sctp_auth_deact_key_id(ep, asoc, val.scact_keynumber);
+		return sctp_auth_deact_key_id(ep, asoc, val->scact_keynumber);
 
 	if (sctp_style(sk, TCP))
-		val.scact_assoc_id = SCTP_FUTURE_ASSOC;
+		val->scact_assoc_id = SCTP_FUTURE_ASSOC;
 
-	if (val.scact_assoc_id == SCTP_FUTURE_ASSOC ||
-	    val.scact_assoc_id == SCTP_ALL_ASSOC) {
-		ret = sctp_auth_deact_key_id(ep, asoc, val.scact_keynumber);
+	if (val->scact_assoc_id == SCTP_FUTURE_ASSOC ||
+	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
+		ret = sctp_auth_deact_key_id(ep, asoc, val->scact_keynumber);
 		if (ret)
 			return ret;
 	}
 
-	if (val.scact_assoc_id == SCTP_CURRENT_ASSOC ||
-	    val.scact_assoc_id == SCTP_ALL_ASSOC) {
+	if (val->scact_assoc_id == SCTP_CURRENT_ASSOC ||
+	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
 		list_for_each_entry(asoc, &ep->asocs, asocs) {
 			int res = sctp_auth_deact_key_id(ep, asoc,
-							 val.scact_keynumber);
+							 val->scact_keynumber);
 
 			if (res && !ret)
 				ret = res;
@@ -3803,7 +3792,6 @@ static int sctp_setsockopt_deactivate_key(struct sock *sk,
 
 	return ret;
 }
-#undef val
 
 /*
  * 8.1.23 SCTP_AUTO_ASCONF
@@ -3819,24 +3807,23 @@ static int sctp_setsockopt_deactivate_key(struct sock *sk,
  * Note. In this implementation, socket operation overrides default parameter
  * being set by sysctl as well as FreeBSD implementation
  */
-#define val (*optval)
-static int sctp_setsockopt_auto_asconf(struct sock *sk, int val,
+static int sctp_setsockopt_auto_asconf(struct sock *sk, int *optval,
 				       unsigned int optlen)
 {
 	struct sctp_sock *sp = sctp_sk(sk);
 
 	if (optlen < sizeof(int))
 		return -EINVAL;
-	if (!sctp_is_ep_boundall(sk) && val)
+	if (!sctp_is_ep_boundall(sk) && (*optval))
 		return -EINVAL;
-	if ((val && sp->do_auto_asconf) || (!val && !sp->do_auto_asconf))
+	if (((*optval) && sp->do_auto_asconf) || (!(*optval) && !sp->do_auto_asconf))
 		return 0;
 
 	spin_lock_bh(&sock_net(sk)->sctp.addr_wq_lock);
-	if (val == 0 && sp->do_auto_asconf) {
+	if ((*optval) == 0 && sp->do_auto_asconf) {
 		list_del(&sp->auto_asconf_list);
 		sp->do_auto_asconf = 0;
-	} else if (val && !sp->do_auto_asconf) {
+	} else if ((*optval) && !sp->do_auto_asconf) {
 		list_add_tail(&sp->auto_asconf_list,
 		    &sock_net(sk)->sctp.auto_asconf_splist);
 		sp->do_auto_asconf = 1;
@@ -3844,7 +3831,6 @@ static int sctp_setsockopt_auto_asconf(struct sock *sk, int val,
 	spin_unlock_bh(&sock_net(sk)->sctp.addr_wq_lock);
 	return 0;
 }
-#undef val
 
 /*
  * SCTP_PEER_ADDR_THLDS
@@ -3853,70 +3839,68 @@ static int sctp_setsockopt_auto_asconf(struct sock *sk, int val,
  * transports in an association.  See Section 6.1 of:
  * http://www.ietf.org/id/draft-nishida-tsvwg-sctp-failover-05.txt
  */
-#define val (*val)
 static int sctp_setsockopt_paddr_thresholds(struct sock *sk,
-					    struct sctp_paddrthlds_v2 val,
+					    struct sctp_paddrthlds_v2 *val,
 					    unsigned int optlen, bool v2)
 {
 	struct sctp_transport *trans;
 	struct sctp_association *asoc;
 	int len;
 
-	len = v2 ? sizeof(val) : sizeof(struct sctp_paddrthlds);
+	len = v2 ? sizeof(*val) : sizeof(struct sctp_paddrthlds);
 	if (optlen < len)
 		return -EINVAL;
 
-	if (v2 && val.spt_pathpfthld > val.spt_pathcpthld)
+	if (v2 && val->spt_pathpfthld > val->spt_pathcpthld)
 		return -EINVAL;
 
-	if (!sctp_is_any(sk, (const union sctp_addr *)&val.spt_address)) {
-		trans = sctp_addr_id2transport(sk, &val.spt_address,
-					       val.spt_assoc_id);
+	if (!sctp_is_any(sk, (const union sctp_addr *)&val->spt_address)) {
+		trans = sctp_addr_id2transport(sk, &val->spt_address,
+					       val->spt_assoc_id);
 		if (!trans)
 			return -ENOENT;
 
-		if (val.spt_pathmaxrxt)
-			trans->pathmaxrxt = val.spt_pathmaxrxt;
+		if (val->spt_pathmaxrxt)
+			trans->pathmaxrxt = val->spt_pathmaxrxt;
 		if (v2)
-			trans->ps_retrans = val.spt_pathcpthld;
-		trans->pf_retrans = val.spt_pathpfthld;
+			trans->ps_retrans = val->spt_pathcpthld;
+		trans->pf_retrans = val->spt_pathpfthld;
 
 		return 0;
 	}
 
-	asoc = sctp_id2assoc(sk, val.spt_assoc_id);
-	if (!asoc && val.spt_assoc_id != SCTP_FUTURE_ASSOC &&
+	asoc = sctp_id2assoc(sk, val->spt_assoc_id);
+	if (!asoc && val->spt_assoc_id != SCTP_FUTURE_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
 	if (asoc) {
 		list_for_each_entry(trans, &asoc->peer.transport_addr_list,
 				    transports) {
-			if (val.spt_pathmaxrxt)
-				trans->pathmaxrxt = val.spt_pathmaxrxt;
+			if (val->spt_pathmaxrxt)
+				trans->pathmaxrxt = val->spt_pathmaxrxt;
 			if (v2)
-				trans->ps_retrans = val.spt_pathcpthld;
-			trans->pf_retrans = val.spt_pathpfthld;
+				trans->ps_retrans = val->spt_pathcpthld;
+			trans->pf_retrans = val->spt_pathpfthld;
 		}
 
-		if (val.spt_pathmaxrxt)
-			asoc->pathmaxrxt = val.spt_pathmaxrxt;
+		if (val->spt_pathmaxrxt)
+			asoc->pathmaxrxt = val->spt_pathmaxrxt;
 		if (v2)
-			asoc->ps_retrans = val.spt_pathcpthld;
-		asoc->pf_retrans = val.spt_pathpfthld;
+			asoc->ps_retrans = val->spt_pathcpthld;
+		asoc->pf_retrans = val->spt_pathpfthld;
 	} else {
 		struct sctp_sock *sp = sctp_sk(sk);
 
-		if (val.spt_pathmaxrxt)
-			sp->pathmaxrxt = val.spt_pathmaxrxt;
+		if (val->spt_pathmaxrxt)
+			sp->pathmaxrxt = val->spt_pathmaxrxt;
 		if (v2)
-			sp->ps_retrans = val.spt_pathcpthld;
-		sp->pf_retrans = val.spt_pathpfthld;
+			sp->ps_retrans = val->spt_pathcpthld;
+		sp->pf_retrans = val->spt_pathpfthld;
 	}
 
 	return 0;
 }
-#undef val
 
 static int sctp_setsockopt_recvrcvinfo(struct sock *sk, int *optval,
 				       unsigned int optlen)
@@ -3941,92 +3925,91 @@ static int sctp_setsockopt_recvnxtinfo(struct sock *sk, int *optval,
 }
 
 static int sctp_setsockopt_pr_supported(struct sock *sk,
-					struct sctp_assoc_value params,
+					struct sctp_assoc_value *params,
 					unsigned int optlen)
 {
 	struct sctp_association *asoc;
 
-	if (optlen != sizeof(params))
+	if (optlen != sizeof(*params))
 		return -EINVAL;
 
-	asoc = sctp_id2assoc(sk, params.assoc_id);
-	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->assoc_id);
+	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
-	sctp_sk(sk)->ep->prsctp_enable = !!params.assoc_value;
+	sctp_sk(sk)->ep->prsctp_enable = !!params->assoc_value;
 
 	return 0;
 }
 
 static int sctp_setsockopt_default_prinfo(struct sock *sk,
-					  struct sctp_default_prinfo info,
+					  struct sctp_default_prinfo *info,
 					  unsigned int optlen)
 {
 	struct sctp_sock *sp = sctp_sk(sk);
 	struct sctp_association *asoc;
 	int retval = -EINVAL;
 
-	if (optlen != sizeof(info))
+	if (optlen != sizeof(*info))
 		goto out;
 
-	if (info.pr_policy & ~SCTP_PR_SCTP_MASK)
+	if (info->pr_policy & ~SCTP_PR_SCTP_MASK)
 		goto out;
 
-	if (info.pr_policy == SCTP_PR_SCTP_NONE)
-		info.pr_value = 0;
+	if (info->pr_policy == SCTP_PR_SCTP_NONE)
+		info->pr_value = 0;
 
-	asoc = sctp_id2assoc(sk, info.pr_assoc_id);
-	if (!asoc && info.pr_assoc_id > SCTP_ALL_ASSOC &&
+	asoc = sctp_id2assoc(sk, info->pr_assoc_id);
+	if (!asoc && info->pr_assoc_id > SCTP_ALL_ASSOC &&
 	    sctp_style(sk, UDP))
 		goto out;
 
 	retval = 0;
 
 	if (asoc) {
-		SCTP_PR_SET_POLICY(asoc->default_flags, info.pr_policy);
-		asoc->default_timetolive = info.pr_value;
+		SCTP_PR_SET_POLICY(asoc->default_flags, info->pr_policy);
+		asoc->default_timetolive = info->pr_value;
 		goto out;
 	}
 
 	if (sctp_style(sk, TCP))
-		info.pr_assoc_id = SCTP_FUTURE_ASSOC;
+		info->pr_assoc_id = SCTP_FUTURE_ASSOC;
 
-	if (info.pr_assoc_id == SCTP_FUTURE_ASSOC ||
-	    info.pr_assoc_id == SCTP_ALL_ASSOC) {
-		SCTP_PR_SET_POLICY(sp->default_flags, info.pr_policy);
-		sp->default_timetolive = info.pr_value;
+	if (info->pr_assoc_id == SCTP_FUTURE_ASSOC ||
+	    info->pr_assoc_id == SCTP_ALL_ASSOC) {
+		SCTP_PR_SET_POLICY(sp->default_flags, info->pr_policy);
+		sp->default_timetolive = info->pr_value;
 	}
 
-	if (info.pr_assoc_id == SCTP_CURRENT_ASSOC ||
-	    info.pr_assoc_id == SCTP_ALL_ASSOC) {
+	if (info->pr_assoc_id == SCTP_CURRENT_ASSOC ||
+	    info->pr_assoc_id == SCTP_ALL_ASSOC) {
 		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
-			SCTP_PR_SET_POLICY(asoc->default_flags, info.pr_policy);
-			asoc->default_timetolive = info.pr_value;
+			SCTP_PR_SET_POLICY(asoc->default_flags, info->pr_policy);
+			asoc->default_timetolive = info->pr_value;
 		}
 	}
 
 out:
 	return retval;
 }
-#undef info
 
 static int sctp_setsockopt_reconfig_supported(struct sock *sk,
-					      struct sctp_assoc_value params,
+					      struct sctp_assoc_value *params,
 					      unsigned int optlen)
 {
 	struct sctp_association *asoc;
 	int retval = -EINVAL;
 
-	if (optlen != sizeof(params))
+	if (optlen != sizeof(*params))
 		goto out;
 
-	asoc = sctp_id2assoc(sk, params.assoc_id);
-	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->assoc_id);
+	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
 	    sctp_style(sk, UDP))
 		goto out;
 
-	sctp_sk(sk)->ep->reconf_enable = !!params.assoc_value;
+	sctp_sk(sk)->ep->reconf_enable = !!params->assoc_value;
 
 	retval = 0;
 
@@ -4035,48 +4018,47 @@ static int sctp_setsockopt_reconfig_supported(struct sock *sk,
 }
 
 static int sctp_setsockopt_enable_strreset(struct sock *sk,
-					   struct sctp_assoc_value params,
+					   struct sctp_assoc_value *params,
 					   unsigned int optlen)
 {
 	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
 	struct sctp_association *asoc;
 	int retval = -EINVAL;
 
-	if (optlen != sizeof(params))
+	if (optlen != sizeof(*params))
 		goto out;
 
-	if (params.assoc_value & (~SCTP_ENABLE_STRRESET_MASK))
+	if (params->assoc_value & (~SCTP_ENABLE_STRRESET_MASK))
 		goto out;
 
-	asoc = sctp_id2assoc(sk, params.assoc_id);
-	if (!asoc && params.assoc_id > SCTP_ALL_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->assoc_id);
+	if (!asoc && params->assoc_id > SCTP_ALL_ASSOC &&
 	    sctp_style(sk, UDP))
 		goto out;
 
 	retval = 0;
 
 	if (asoc) {
-		asoc->strreset_enable = params.assoc_value;
+		asoc->strreset_enable = params->assoc_value;
 		goto out;
 	}
 
 	if (sctp_style(sk, TCP))
-		params.assoc_id = SCTP_FUTURE_ASSOC;
+		params->assoc_id = SCTP_FUTURE_ASSOC;
 
-	if (params.assoc_id == SCTP_FUTURE_ASSOC ||
-	    params.assoc_id == SCTP_ALL_ASSOC)
-		ep->strreset_enable = params.assoc_value;
+	if (params->assoc_id == SCTP_FUTURE_ASSOC ||
+	    params->assoc_id == SCTP_ALL_ASSOC)
+		ep->strreset_enable = params->assoc_value;
 
-	if (params.assoc_id == SCTP_CURRENT_ASSOC ||
-	    params.assoc_id == SCTP_ALL_ASSOC)
+	if (params->assoc_id == SCTP_CURRENT_ASSOC ||
+	    params->assoc_id == SCTP_ALL_ASSOC)
 		list_for_each_entry(asoc, &ep->asocs, asocs)
-			asoc->strreset_enable = params.assoc_value;
+			asoc->strreset_enable = params->assoc_value;
 
 out:
 	return retval;
 }
 
-#undef params
 static int sctp_setsockopt_reset_streams(struct sock *sk,
 					 struct sctp_reset_streams *params,
 					 unsigned int optlen)
@@ -4103,20 +4085,17 @@ static int sctp_setsockopt_reset_streams(struct sock *sk,
 out:
 	return retval;
 }
-#define params (*params)
 
-
-#define associd (*associd)
-static int sctp_setsockopt_reset_assoc(struct sock *sk, sctp_assoc_t associd,
+static int sctp_setsockopt_reset_assoc(struct sock *sk, sctp_assoc_t *associd,
 				       unsigned int optlen)
 {
 	struct sctp_association *asoc;
 	int retval = -EINVAL;
 
-	if (optlen != sizeof(associd))
+	if (optlen != sizeof(*associd))
 		goto out;
 
-	asoc = sctp_id2assoc(sk, associd);
+	asoc = sctp_id2assoc(sk, (*associd));
 	if (!asoc)
 		goto out;
 
@@ -4125,62 +4104,61 @@ static int sctp_setsockopt_reset_assoc(struct sock *sk, sctp_assoc_t associd,
 out:
 	return retval;
 }
-#undef associd
 
 static int sctp_setsockopt_add_streams(struct sock *sk,
-				       struct sctp_add_streams params,
+				       struct sctp_add_streams *params,
 				       unsigned int optlen)
 {
 	struct sctp_association *asoc;
 	int retval = -EINVAL;
 
-	if (optlen != sizeof(params))
+	if (optlen != sizeof(*params))
 		goto out;
 
-	asoc = sctp_id2assoc(sk, params.sas_assoc_id);
+	asoc = sctp_id2assoc(sk, params->sas_assoc_id);
 	if (!asoc)
 		goto out;
 
-	retval = sctp_send_add_streams(asoc, &params);
+	retval = sctp_send_add_streams(asoc, params);
 
 out:
 	return retval;
 }
 
 static int sctp_setsockopt_scheduler(struct sock *sk,
-				     struct sctp_assoc_value params,
+				     struct sctp_assoc_value *params,
 				     unsigned int optlen)
 {
 	struct sctp_sock *sp = sctp_sk(sk);
 	struct sctp_association *asoc;
 	int retval = 0;
 
-	if (optlen < sizeof(params))
+	if (optlen < sizeof(*params))
 		return -EINVAL;
 
-	if (params.assoc_value > SCTP_SS_MAX)
+	if (params->assoc_value > SCTP_SS_MAX)
 		return -EINVAL;
 
-	asoc = sctp_id2assoc(sk, params.assoc_id);
-	if (!asoc && params.assoc_id > SCTP_ALL_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->assoc_id);
+	if (!asoc && params->assoc_id > SCTP_ALL_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
 	if (asoc)
-		return sctp_sched_set_sched(asoc, params.assoc_value);
+		return sctp_sched_set_sched(asoc, params->assoc_value);
 
 	if (sctp_style(sk, TCP))
-		params.assoc_id = SCTP_FUTURE_ASSOC;
+		params->assoc_id = SCTP_FUTURE_ASSOC;
 
-	if (params.assoc_id == SCTP_FUTURE_ASSOC ||
-	    params.assoc_id == SCTP_ALL_ASSOC)
-		sp->default_ss = params.assoc_value;
+	if (params->assoc_id == SCTP_FUTURE_ASSOC ||
+	    params->assoc_id == SCTP_ALL_ASSOC)
+		sp->default_ss = params->assoc_value;
 
-	if (params.assoc_id == SCTP_CURRENT_ASSOC ||
-	    params.assoc_id == SCTP_ALL_ASSOC) {
+	if (params->assoc_id == SCTP_CURRENT_ASSOC ||
+	    params->assoc_id == SCTP_ALL_ASSOC) {
 		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
 			int ret = sctp_sched_set_sched(asoc,
-						       params.assoc_value);
+						       params->assoc_value);
 
 			if (ret && !retval)
 				retval = ret;
@@ -4191,31 +4169,31 @@ static int sctp_setsockopt_scheduler(struct sock *sk,
 }
 
 static int sctp_setsockopt_scheduler_value(struct sock *sk,
-					   struct sctp_stream_value params,
+					   struct sctp_stream_value *params,
 					   unsigned int optlen)
 {
 	struct sctp_association *asoc;
 	int retval = -EINVAL;
 
-	if (optlen < sizeof(params))
+	if (optlen < sizeof(*params))
 		goto out;
 
-	asoc = sctp_id2assoc(sk, params.assoc_id);
-	if (!asoc && params.assoc_id != SCTP_CURRENT_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->assoc_id);
+	if (!asoc && params->assoc_id != SCTP_CURRENT_ASSOC &&
 	    sctp_style(sk, UDP))
 		goto out;
 
 	if (asoc) {
-		retval = sctp_sched_set_value(asoc, params.stream_id,
-					      params.stream_value, GFP_KERNEL);
+		retval = sctp_sched_set_value(asoc, params->stream_id,
+					      params->stream_value, GFP_KERNEL);
 		goto out;
 	}
 
 	retval = 0;
 
 	list_for_each_entry(asoc, &sctp_sk(sk)->ep->asocs, asocs) {
-		int ret = sctp_sched_set_value(asoc, params.stream_id,
-					       params.stream_value, GFP_KERNEL);
+		int ret = sctp_sched_set_value(asoc, params->stream_id,
+					       params->stream_value, GFP_KERNEL);
 		if (ret && !retval) /* try to return the 1st error. */
 			retval = ret;
 	}
@@ -4225,18 +4203,18 @@ static int sctp_setsockopt_scheduler_value(struct sock *sk,
 }
 
 static int sctp_setsockopt_interleaving_supported(struct sock *sk,
-						  struct sctp_assoc_value params,
+						  struct sctp_assoc_value *params,
 						  unsigned int optlen)
 {
 	struct sctp_sock *sp = sctp_sk(sk);
 	struct sctp_association *asoc;
 	int retval = -EINVAL;
 
-	if (optlen < sizeof(params))
+	if (optlen < sizeof(*params))
 		goto out;
 
-	asoc = sctp_id2assoc(sk, params.assoc_id);
-	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->assoc_id);
+	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
 	    sctp_style(sk, UDP))
 		goto out;
 
@@ -4245,7 +4223,7 @@ static int sctp_setsockopt_interleaving_supported(struct sock *sk,
 		goto out;
 	}
 
-	sp->ep->intl_enable = !!params.assoc_value;
+	sp->ep->intl_enable = !!params->assoc_value;
 
 	retval = 0;
 
@@ -4291,41 +4269,40 @@ static int sctp_assoc_ulpevent_type_set(struct sctp_event *param,
 	return 0;
 }
 
-#define param (*param)
-static int sctp_setsockopt_event(struct sock *sk, struct sctp_event param,
+static int sctp_setsockopt_event(struct sock *sk, struct sctp_event *param,
 				 unsigned int optlen)
 {
 	struct sctp_sock *sp = sctp_sk(sk);
 	struct sctp_association *asoc;
 	int retval = 0;
 
-	if (optlen < sizeof(param))
+	if (optlen < sizeof(*param))
 		return -EINVAL;
 
-	if (param.se_type < SCTP_SN_TYPE_BASE ||
-	    param.se_type > SCTP_SN_TYPE_MAX)
+	if (param->se_type < SCTP_SN_TYPE_BASE ||
+	    param->se_type > SCTP_SN_TYPE_MAX)
 		return -EINVAL;
 
-	asoc = sctp_id2assoc(sk, param.se_assoc_id);
-	if (!asoc && param.se_assoc_id > SCTP_ALL_ASSOC &&
+	asoc = sctp_id2assoc(sk, param->se_assoc_id);
+	if (!asoc && param->se_assoc_id > SCTP_ALL_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
 	if (asoc)
-		return sctp_assoc_ulpevent_type_set(&param, asoc);
+		return sctp_assoc_ulpevent_type_set(param, asoc);
 
 	if (sctp_style(sk, TCP))
-		param.se_assoc_id = SCTP_FUTURE_ASSOC;
+		param->se_assoc_id = SCTP_FUTURE_ASSOC;
 
-	if (param.se_assoc_id == SCTP_FUTURE_ASSOC ||
-	    param.se_assoc_id == SCTP_ALL_ASSOC)
+	if (param->se_assoc_id == SCTP_FUTURE_ASSOC ||
+	    param->se_assoc_id == SCTP_ALL_ASSOC)
 		sctp_ulpevent_type_set(&sp->subscribe,
-				       param.se_type, param.se_on);
+				       param->se_type, param->se_on);
 
-	if (param.se_assoc_id == SCTP_CURRENT_ASSOC ||
-	    param.se_assoc_id == SCTP_ALL_ASSOC) {
+	if (param->se_assoc_id == SCTP_CURRENT_ASSOC ||
+	    param->se_assoc_id == SCTP_ALL_ASSOC) {
 		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
-			int ret = sctp_assoc_ulpevent_type_set(&param, asoc);
+			int ret = sctp_assoc_ulpevent_type_set(param, asoc);
 
 			if (ret && !retval)
 				retval = ret;
@@ -4334,26 +4311,25 @@ static int sctp_setsockopt_event(struct sock *sk, struct sctp_event param,
 
 	return retval;
 }
-#undef param
 
 static int sctp_setsockopt_asconf_supported(struct sock *sk,
-					    struct sctp_assoc_value params,
+					    struct sctp_assoc_value *params,
 					    unsigned int optlen)
 {
 	struct sctp_association *asoc;
 	struct sctp_endpoint *ep;
 	int retval = -EINVAL;
 
-	if (optlen != sizeof(params))
+	if (optlen != sizeof(*params))
 		goto out;
 
-	asoc = sctp_id2assoc(sk, params.assoc_id);
-	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->assoc_id);
+	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
 	    sctp_style(sk, UDP))
 		goto out;
 
 	ep = sctp_sk(sk)->ep;
-	ep->asconf_enable = !!params.assoc_value;
+	ep->asconf_enable = !!params->assoc_value;
 
 	if (ep->asconf_enable && ep->auth_enable) {
 		sctp_auth_ep_add_chunkid(ep, SCTP_CID_ASCONF);
@@ -4367,23 +4343,23 @@ static int sctp_setsockopt_asconf_supported(struct sock *sk,
 }
 
 static int sctp_setsockopt_auth_supported(struct sock *sk,
-					  struct sctp_assoc_value params,
+					  struct sctp_assoc_value *params,
 					  unsigned int optlen)
 {
 	struct sctp_association *asoc;
 	struct sctp_endpoint *ep;
 	int retval = -EINVAL;
 
-	if (optlen != sizeof(params))
+	if (optlen != sizeof(*params))
 		goto out;
 
-	asoc = sctp_id2assoc(sk, params.assoc_id);
-	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->assoc_id);
+	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
 	    sctp_style(sk, UDP))
 		goto out;
 
 	ep = sctp_sk(sk)->ep;
-	if (params.assoc_value) {
+	if (params->assoc_value) {
 		retval = sctp_auth_init(ep, GFP_KERNEL);
 		if (retval)
 			goto out;
@@ -4393,7 +4369,7 @@ static int sctp_setsockopt_auth_supported(struct sock *sk,
 		}
 	}
 
-	ep->auth_enable = !!params.assoc_value;
+	ep->auth_enable = !!params->assoc_value;
 	retval = 0;
 
 out:
@@ -4401,21 +4377,21 @@ static int sctp_setsockopt_auth_supported(struct sock *sk,
 }
 
 static int sctp_setsockopt_ecn_supported(struct sock *sk,
-					 struct sctp_assoc_value params,
+					 struct sctp_assoc_value *params,
 					 unsigned int optlen)
 {
 	struct sctp_association *asoc;
 	int retval = -EINVAL;
 
-	if (optlen != sizeof(params))
+	if (optlen != sizeof(*params))
 		goto out;
 
-	asoc = sctp_id2assoc(sk, params.assoc_id);
-	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->assoc_id);
+	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
 	    sctp_style(sk, UDP))
 		goto out;
 
-	sctp_sk(sk)->ep->ecn_enable = !!params.assoc_value;
+	sctp_sk(sk)->ep->ecn_enable = !!params->assoc_value;
 	retval = 0;
 
 out:
@@ -4423,33 +4399,32 @@ static int sctp_setsockopt_ecn_supported(struct sock *sk,
 }
 
 static int sctp_setsockopt_pf_expose(struct sock *sk,
-				     struct sctp_assoc_value params,
+				     struct sctp_assoc_value *params,
 				     unsigned int optlen)
 {
 	struct sctp_association *asoc;
 	int retval = -EINVAL;
 
-	if (optlen != sizeof(params))
+	if (optlen != sizeof(*params))
 		goto out;
 
-	if (params.assoc_value > SCTP_PF_EXPOSE_MAX)
+	if (params->assoc_value > SCTP_PF_EXPOSE_MAX)
 		goto out;
 
-	asoc = sctp_id2assoc(sk, params.assoc_id);
-	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
+	asoc = sctp_id2assoc(sk, params->assoc_id);
+	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
 	    sctp_style(sk, UDP))
 		goto out;
 
 	if (asoc)
-		asoc->pf_expose = params.assoc_value;
+		asoc->pf_expose = params->assoc_value;
 	else
-		sctp_sk(sk)->pf_expose = params.assoc_value;
+		sctp_sk(sk)->pf_expose = params->assoc_value;
 	retval = 0;
 
 out:
 	return retval;
 }
-#undef params
 
 static int kernel_sctp_setsockopt(struct sock *sk, int optname, void *optval,
 			   int optlen)
-- 
1.8.1.2

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* RE: [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
  2020-05-26 16:40 [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines David Laight
@ 2020-05-26 16:44 ` David Laight
  2020-05-26 22:36   ` David Miller
  0 siblings, 1 reply; 5+ messages in thread
From: David Laight @ 2020-05-26 16:44 UTC (permalink / raw)
  To: David Laight, 'Vlad Yasevich', 'Neil Horman',
	'David S. Miller', 'Jakub Kicinski',
	'linux-sctp@vger.kernel.org',
	'netdev@vger.kernel.org', 'Christoph Hellwig',
	'Marcelo Ricardo Leitner'

This should be 3/8.

> -----Original Message-----
> From: netdev-owner@vger.kernel.org <netdev-owner@vger.kernel.org> On Behalf Of David Laight
> Sent: 26 May 2020 17:40
> To: 'Vlad Yasevich' <vyasevich@gmail.com>; 'Neil Horman' <nhorman@tuxdriver.com>; 'David S. Miller'
> <davem@davemloft.net>; 'Jakub Kicinski' <kuba@kernel.org>; 'linux-sctp@vger.kernel.org' <linux-
> sctp@vger.kernel.org>; 'netdev@vger.kernel.org' <netdev@vger.kernel.org>; 'Christoph Hellwig'
> <hch@lst.de>; 'Marcelo Ricardo Leitner' <marcelo.leitner@gmail.com>
> Subject: [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
> 
> Expand the #define foo (*foo) used to simplify the previous patch.
> Doesn't change the generated code.
> 
> Signed-off-by: David Laight <david.laight@aculab.com>
> 
> ---
>  net/sctp/socket.c | 687 ++++++++++++++++++++++++++----------------------------
>  1 file changed, 331 insertions(+), 356 deletions(-)
> 
> diff --git a/net/sctp/socket.c b/net/sctp/socket.c
> index 639d7da..b8068da 100644
> --- a/net/sctp/socket.c
> +++ b/net/sctp/socket.c
> @@ -2585,9 +2585,8 @@ static int sctp_apply_peer_addr_params(struct sctp_paddrparams *params,
>  	return 0;
>  }
> 
> -#define params (*params)
>  static int sctp_setsockopt_peer_addr_params(struct sock *sk,
> -					    struct sctp_paddrparams params,
> +					    struct sctp_paddrparams *params,
>  					    unsigned int optlen)
>  {
>  	struct sctp_transport   *trans = NULL;
> @@ -2596,33 +2595,33 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
>  	int error;
>  	int hb_change, pmtud_change, sackdelay_change;
> 
> -	if (optlen != sizeof(params)) {
> +	if (optlen != sizeof(*params)) {
>  		if (optlen != ALIGN(offsetof(struct sctp_paddrparams,
>  						    spp_ipv6_flowlabel), 4))
>  			return -EINVAL;
> -		if (params.spp_flags & (SPP_DSCP | SPP_IPV6_FLOWLABEL))
> +		if (params->spp_flags & (SPP_DSCP | SPP_IPV6_FLOWLABEL))
>  			return -EINVAL;
>  	}
> 
>  	/* Validate flags and value parameters. */
> -	hb_change        = params.spp_flags & SPP_HB;
> -	pmtud_change     = params.spp_flags & SPP_PMTUD;
> -	sackdelay_change = params.spp_flags & SPP_SACKDELAY;
> +	hb_change        = params->spp_flags & SPP_HB;
> +	pmtud_change     = params->spp_flags & SPP_PMTUD;
> +	sackdelay_change = params->spp_flags & SPP_SACKDELAY;
> 
>  	if (hb_change        == SPP_HB ||
>  	    pmtud_change     == SPP_PMTUD ||
>  	    sackdelay_change == SPP_SACKDELAY ||
> -	    params.spp_sackdelay > 500 ||
> -	    (params.spp_pathmtu &&
> -	     params.spp_pathmtu < SCTP_DEFAULT_MINSEGMENT))
> +	    params->spp_sackdelay > 500 ||
> +	    (params->spp_pathmtu &&
> +	     params->spp_pathmtu < SCTP_DEFAULT_MINSEGMENT))
>  		return -EINVAL;
> 
>  	/* If an address other than INADDR_ANY is specified, and
>  	 * no transport is found, then the request is invalid.
>  	 */
> -	if (!sctp_is_any(sk, (union sctp_addr *)&params.spp_address)) {
> -		trans = sctp_addr_id2transport(sk, &params.spp_address,
> -					       params.spp_assoc_id);
> +	if (!sctp_is_any(sk, (union sctp_addr *)&params->spp_address)) {
> +		trans = sctp_addr_id2transport(sk, &params->spp_address,
> +					       params->spp_assoc_id);
>  		if (!trans)
>  			return -EINVAL;
>  	}
> @@ -2631,19 +2630,19 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
>  	 * socket is a one to many style socket, and an association
>  	 * was not found, then the id was invalid.
>  	 */
> -	asoc = sctp_id2assoc(sk, params.spp_assoc_id);
> -	if (!asoc && params.spp_assoc_id != SCTP_FUTURE_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->spp_assoc_id);
> +	if (!asoc && params->spp_assoc_id != SCTP_FUTURE_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
>  	/* Heartbeat demand can only be sent on a transport or
>  	 * association, but not a socket.
>  	 */
> -	if (params.spp_flags & SPP_HB_DEMAND && !trans && !asoc)
> +	if (params->spp_flags & SPP_HB_DEMAND && !trans && !asoc)
>  		return -EINVAL;
> 
>  	/* Process parameters. */
> -	error = sctp_apply_peer_addr_params(&params, trans, asoc, sp,
> +	error = sctp_apply_peer_addr_params(params, trans, asoc, sp,
>  					    hb_change, pmtud_change,
>  					    sackdelay_change);
> 
> @@ -2656,7 +2655,7 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
>  	if (!trans && asoc) {
>  		list_for_each_entry(trans, &asoc->peer.transport_addr_list,
>  				transports) {
> -			sctp_apply_peer_addr_params(&params, trans, asoc, sp,
> +			sctp_apply_peer_addr_params(params, trans, asoc, sp,
>  						    hb_change, pmtud_change,
>  						    sackdelay_change);
>  		}
> @@ -2664,7 +2663,6 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
> 
>  	return 0;
>  }
> -#undef params
> 
>  static inline __u32 sctp_spp_sackdelay_enable(__u32 param_flags)
>  {
> @@ -2749,16 +2747,15 @@ static void sctp_apply_asoc_delayed_ack(struct sctp_sack_info *params,
>   *    value to 1 will disable the delayed sack algorithm.
>   */
> 
> -#define params (*params)
>  static int sctp_setsockopt_delayed_ack(struct sock *sk,
> -				       struct sctp_sack_info params,
> +				       struct sctp_sack_info *params,
>  				       unsigned int optlen)
>  {
>  	struct sctp_sock *sp = sctp_sk(sk);
>  	struct sctp_association *asoc;
> 
>  	if (optlen == sizeof(struct sctp_sack_info)) {
> -		if (params.sack_delay == 0 && params.sack_freq == 0)
> +		if (params->sack_delay == 0 && params->sack_freq == 0)
>  			return 0;
>  	} else if (optlen == sizeof(struct sctp_assoc_value)) {
>  		pr_warn_ratelimited(DEPRECATED
> @@ -2766,56 +2763,56 @@ static int sctp_setsockopt_delayed_ack(struct sock *sk,
>  				    "Use of struct sctp_assoc_value in delayed_ack socket option.\n"
>  				    "Use struct sctp_sack_info instead\n",
>  				    current->comm, task_pid_nr(current));
> -		if (params.sack_delay == 0)
> -			params.sack_freq = 1;
> +		if (params->sack_delay == 0)
> +			params->sack_freq = 1;
>  		else
> -			params.sack_freq = 0;
> +			params->sack_freq = 0;
>  	} else
>  		return -EINVAL;
> 
>  	/* Validate value parameter. */
> -	if (params.sack_delay > 500)
> +	if (params->sack_delay > 500)
>  		return -EINVAL;
> 
>  	/* Get association, if sack_assoc_id != SCTP_FUTURE_ASSOC and the
>  	 * socket is a one to many style socket, and an association
>  	 * was not found, then the id was invalid.
>  	 */
> -	asoc = sctp_id2assoc(sk, params.sack_assoc_id);
> -	if (!asoc && params.sack_assoc_id > SCTP_ALL_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->sack_assoc_id);
> +	if (!asoc && params->sack_assoc_id > SCTP_ALL_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
>  	if (asoc) {
> -		sctp_apply_asoc_delayed_ack(&params, asoc);
> +		sctp_apply_asoc_delayed_ack(params, asoc);
> 
>  		return 0;
>  	}
> 
>  	if (sctp_style(sk, TCP))
> -		params.sack_assoc_id = SCTP_FUTURE_ASSOC;
> +		params->sack_assoc_id = SCTP_FUTURE_ASSOC;
> 
> -	if (params.sack_assoc_id == SCTP_FUTURE_ASSOC ||
> -	    params.sack_assoc_id == SCTP_ALL_ASSOC) {
> -		if (params.sack_delay) {
> -			sp->sackdelay = params.sack_delay;
> +	if (params->sack_assoc_id == SCTP_FUTURE_ASSOC ||
> +	    params->sack_assoc_id == SCTP_ALL_ASSOC) {
> +		if (params->sack_delay) {
> +			sp->sackdelay = params->sack_delay;
>  			sp->param_flags =
>  				sctp_spp_sackdelay_enable(sp->param_flags);
>  		}
> -		if (params.sack_freq == 1) {
> +		if (params->sack_freq == 1) {
>  			sp->param_flags =
>  				sctp_spp_sackdelay_disable(sp->param_flags);
> -		} else if (params.sack_freq > 1) {
> -			sp->sackfreq = params.sack_freq;
> +		} else if (params->sack_freq > 1) {
> +			sp->sackfreq = params->sack_freq;
>  			sp->param_flags =
>  				sctp_spp_sackdelay_enable(sp->param_flags);
>  		}
>  	}
> 
> -	if (params.sack_assoc_id == SCTP_CURRENT_ASSOC ||
> -	    params.sack_assoc_id == SCTP_ALL_ASSOC)
> +	if (params->sack_assoc_id == SCTP_CURRENT_ASSOC ||
> +	    params->sack_assoc_id == SCTP_ALL_ASSOC)
>  		list_for_each_entry(asoc, &sp->ep->asocs, asocs)
> -			sctp_apply_asoc_delayed_ack(&params, asoc);
> +			sctp_apply_asoc_delayed_ack(params, asoc);
> 
>  	return 0;
>  }
> @@ -2831,8 +2828,7 @@ static int sctp_setsockopt_delayed_ack(struct sock *sk,
>   * by the change).  With TCP-style sockets, this option is inherited by
>   * sockets derived from a listener socket.
>   */
> -#define sinit (*sinit)
> -static int sctp_setsockopt_initmsg(struct sock *sk, struct sctp_initmsg sinit,
> +static int sctp_setsockopt_initmsg(struct sock *sk, struct sctp_initmsg *sinit,
>  				   unsigned int optlen)
>  {
>  	struct sctp_sock *sp = sctp_sk(sk);
> @@ -2840,18 +2836,17 @@ static int sctp_setsockopt_initmsg(struct sock *sk, struct sctp_initmsg sinit,
>  	if (optlen != sizeof(struct sctp_initmsg))
>  		return -EINVAL;
> 
> -	if (sinit.sinit_num_ostreams)
> -		sp->initmsg.sinit_num_ostreams = sinit.sinit_num_ostreams;
> -	if (sinit.sinit_max_instreams)
> -		sp->initmsg.sinit_max_instreams = sinit.sinit_max_instreams;
> -	if (sinit.sinit_max_attempts)
> -		sp->initmsg.sinit_max_attempts = sinit.sinit_max_attempts;
> -	if (sinit.sinit_max_init_timeo)
> -		sp->initmsg.sinit_max_init_timeo = sinit.sinit_max_init_timeo;
> +	if (sinit->sinit_num_ostreams)
> +		sp->initmsg.sinit_num_ostreams = sinit->sinit_num_ostreams;
> +	if (sinit->sinit_max_instreams)
> +		sp->initmsg.sinit_max_instreams = sinit->sinit_max_instreams;
> +	if (sinit->sinit_max_attempts)
> +		sp->initmsg.sinit_max_attempts = sinit->sinit_max_attempts;
> +	if (sinit->sinit_max_init_timeo)
> +		sp->initmsg.sinit_max_init_timeo = sinit->sinit_max_init_timeo;
> 
>  	return 0;
>  }
> -#undef sinit
> 
>  /*
>   * 7.1.14 Set default send parameters (SCTP_DEFAULT_SEND_PARAM)
> @@ -2867,56 +2862,55 @@ static int sctp_setsockopt_initmsg(struct sock *sk, struct sctp_initmsg sinit,
>   *   sinfo_timetolive.  The user must provide the sinfo_assoc_id field in
>   *   to this call if the caller is using the UDP model.
>   */
> -#define info (*info)
>  static int sctp_setsockopt_default_send_param(struct sock *sk,
> -					      struct sctp_sndrcvinfo info,
> +					      struct sctp_sndrcvinfo *info,
>  					      unsigned int optlen)
>  {
>  	struct sctp_sock *sp = sctp_sk(sk);
>  	struct sctp_association *asoc;
> 
> -	if (optlen != sizeof(info))
> +	if (optlen != sizeof(*info))
>  		return -EINVAL;
> -	if (info.sinfo_flags &
> +	if (info->sinfo_flags &
>  	    ~(SCTP_UNORDERED | SCTP_ADDR_OVER |
>  	      SCTP_ABORT | SCTP_EOF))
>  		return -EINVAL;
> 
> -	asoc = sctp_id2assoc(sk, info.sinfo_assoc_id);
> -	if (!asoc && info.sinfo_assoc_id > SCTP_ALL_ASSOC &&
> +	asoc = sctp_id2assoc(sk, info->sinfo_assoc_id);
> +	if (!asoc && info->sinfo_assoc_id > SCTP_ALL_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
>  	if (asoc) {
> -		asoc->default_stream = info.sinfo_stream;
> -		asoc->default_flags = info.sinfo_flags;
> -		asoc->default_ppid = info.sinfo_ppid;
> -		asoc->default_context = info.sinfo_context;
> -		asoc->default_timetolive = info.sinfo_timetolive;
> +		asoc->default_stream = info->sinfo_stream;
> +		asoc->default_flags = info->sinfo_flags;
> +		asoc->default_ppid = info->sinfo_ppid;
> +		asoc->default_context = info->sinfo_context;
> +		asoc->default_timetolive = info->sinfo_timetolive;
> 
>  		return 0;
>  	}
> 
>  	if (sctp_style(sk, TCP))
> -		info.sinfo_assoc_id = SCTP_FUTURE_ASSOC;
> +		info->sinfo_assoc_id = SCTP_FUTURE_ASSOC;
> 
> -	if (info.sinfo_assoc_id == SCTP_FUTURE_ASSOC ||
> -	    info.sinfo_assoc_id == SCTP_ALL_ASSOC) {
> -		sp->default_stream = info.sinfo_stream;
> -		sp->default_flags = info.sinfo_flags;
> -		sp->default_ppid = info.sinfo_ppid;
> -		sp->default_context = info.sinfo_context;
> -		sp->default_timetolive = info.sinfo_timetolive;
> +	if (info->sinfo_assoc_id == SCTP_FUTURE_ASSOC ||
> +	    info->sinfo_assoc_id == SCTP_ALL_ASSOC) {
> +		sp->default_stream = info->sinfo_stream;
> +		sp->default_flags = info->sinfo_flags;
> +		sp->default_ppid = info->sinfo_ppid;
> +		sp->default_context = info->sinfo_context;
> +		sp->default_timetolive = info->sinfo_timetolive;
>  	}
> 
> -	if (info.sinfo_assoc_id == SCTP_CURRENT_ASSOC ||
> -	    info.sinfo_assoc_id == SCTP_ALL_ASSOC) {
> +	if (info->sinfo_assoc_id == SCTP_CURRENT_ASSOC ||
> +	    info->sinfo_assoc_id == SCTP_ALL_ASSOC) {
>  		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
> -			asoc->default_stream = info.sinfo_stream;
> -			asoc->default_flags = info.sinfo_flags;
> -			asoc->default_ppid = info.sinfo_ppid;
> -			asoc->default_context = info.sinfo_context;
> -			asoc->default_timetolive = info.sinfo_timetolive;
> +			asoc->default_stream = info->sinfo_stream;
> +			asoc->default_flags = info->sinfo_flags;
> +			asoc->default_ppid = info->sinfo_ppid;
> +			asoc->default_context = info->sinfo_context;
> +			asoc->default_timetolive = info->sinfo_timetolive;
>  		}
>  	}
> 
> @@ -2927,51 +2921,51 @@ static int sctp_setsockopt_default_send_param(struct sock *sk,
>   * (SCTP_DEFAULT_SNDINFO)
>   */
>  static int sctp_setsockopt_default_sndinfo(struct sock *sk,
> -					   struct sctp_sndinfo info,
> +					   struct sctp_sndinfo *info,
>  					   unsigned int optlen)
>  {
>  	struct sctp_sock *sp = sctp_sk(sk);
>  	struct sctp_association *asoc;
> 
> -	if (optlen != sizeof(info))
> +	if (optlen != sizeof(*info))
>  		return -EINVAL;
> -	if (info.snd_flags &
> +	if (info->snd_flags &
>  	    ~(SCTP_UNORDERED | SCTP_ADDR_OVER |
>  	      SCTP_ABORT | SCTP_EOF))
>  		return -EINVAL;
> 
> -	asoc = sctp_id2assoc(sk, info.snd_assoc_id);
> -	if (!asoc && info.snd_assoc_id > SCTP_ALL_ASSOC &&
> +	asoc = sctp_id2assoc(sk, info->snd_assoc_id);
> +	if (!asoc && info->snd_assoc_id > SCTP_ALL_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
>  	if (asoc) {
> -		asoc->default_stream = info.snd_sid;
> -		asoc->default_flags = info.snd_flags;
> -		asoc->default_ppid = info.snd_ppid;
> -		asoc->default_context = info.snd_context;
> +		asoc->default_stream = info->snd_sid;
> +		asoc->default_flags = info->snd_flags;
> +		asoc->default_ppid = info->snd_ppid;
> +		asoc->default_context = info->snd_context;
> 
>  		return 0;
>  	}
> 
>  	if (sctp_style(sk, TCP))
> -		info.snd_assoc_id = SCTP_FUTURE_ASSOC;
> +		info->snd_assoc_id = SCTP_FUTURE_ASSOC;
> 
> -	if (info.snd_assoc_id == SCTP_FUTURE_ASSOC ||
> -	    info.snd_assoc_id == SCTP_ALL_ASSOC) {
> -		sp->default_stream = info.snd_sid;
> -		sp->default_flags = info.snd_flags;
> -		sp->default_ppid = info.snd_ppid;
> -		sp->default_context = info.snd_context;
> +	if (info->snd_assoc_id == SCTP_FUTURE_ASSOC ||
> +	    info->snd_assoc_id == SCTP_ALL_ASSOC) {
> +		sp->default_stream = info->snd_sid;
> +		sp->default_flags = info->snd_flags;
> +		sp->default_ppid = info->snd_ppid;
> +		sp->default_context = info->snd_context;
>  	}
> 
> -	if (info.snd_assoc_id == SCTP_CURRENT_ASSOC ||
> -	    info.snd_assoc_id == SCTP_ALL_ASSOC) {
> +	if (info->snd_assoc_id == SCTP_CURRENT_ASSOC ||
> +	    info->snd_assoc_id == SCTP_ALL_ASSOC) {
>  		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
> -			asoc->default_stream = info.snd_sid;
> -			asoc->default_flags = info.snd_flags;
> -			asoc->default_ppid = info.snd_ppid;
> -			asoc->default_context = info.snd_context;
> +			asoc->default_stream = info->snd_sid;
> +			asoc->default_flags = info->snd_flags;
> +			asoc->default_ppid = info->snd_ppid;
> +			asoc->default_context = info->snd_context;
>  		}
>  	}
> 
> @@ -2984,8 +2978,7 @@ static int sctp_setsockopt_default_sndinfo(struct sock *sk,
>   * the association primary.  The enclosed address must be one of the
>   * association peer's addresses.
>   */
> -#define prim (*prim)
> -static int sctp_setsockopt_primary_addr(struct sock *sk, struct sctp_prim prim,
> +static int sctp_setsockopt_primary_addr(struct sock *sk, struct sctp_prim *prim,
>  					unsigned int optlen)
>  {
>  	struct sctp_transport *trans;
> @@ -2996,17 +2989,17 @@ static int sctp_setsockopt_primary_addr(struct sock *sk, struct sctp_prim
> prim,
>  		return -EINVAL;
> 
>  	/* Allow security module to validate address but need address len. */
> -	af = sctp_get_af_specific(prim.ssp_addr.ss_family);
> +	af = sctp_get_af_specific(prim->ssp_addr.ss_family);
>  	if (!af)
>  		return -EINVAL;
> 
>  	err = security_sctp_bind_connect(sk, SCTP_PRIMARY_ADDR,
> -					 (struct sockaddr *)&prim.ssp_addr,
> +					 (struct sockaddr *)&prim->ssp_addr,
>  					 af->sockaddr_len);
>  	if (err)
>  		return err;
> 
> -	trans = sctp_addr_id2transport(sk, &prim.ssp_addr, prim.ssp_assoc_id);
> +	trans = sctp_addr_id2transport(sk, &prim->ssp_addr, prim->ssp_assoc_id);
>  	if (!trans)
>  		return -EINVAL;
> 
> @@ -3014,7 +3007,6 @@ static int sctp_setsockopt_primary_addr(struct sock *sk, struct sctp_prim prim,
> 
>  	return 0;
>  }
> -#undef prim
> 
>  /*
>   * 7.1.5 SCTP_NODELAY
> @@ -3047,7 +3039,7 @@ static int sctp_setsockopt_nodelay(struct sock *sk, int *optval,
>   *
>   */
>  static int sctp_setsockopt_rtoinfo(struct sock *sk,
> -				   struct sctp_rtoinfo params,
> +				   struct sctp_rtoinfo *params,
>  				   unsigned int optlen)
>  {
>  	struct sctp_association *asoc;
> @@ -3057,15 +3049,15 @@ static int sctp_setsockopt_rtoinfo(struct sock *sk,
>  	if (optlen != sizeof (struct sctp_rtoinfo))
>  		return -EINVAL;
> 
> -	asoc = sctp_id2assoc(sk, params.srto_assoc_id);
> +	asoc = sctp_id2assoc(sk, params->srto_assoc_id);
> 
>  	/* Set the values to the specific association */
> -	if (!asoc && params.srto_assoc_id != SCTP_FUTURE_ASSOC &&
> +	if (!asoc && params->srto_assoc_id != SCTP_FUTURE_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
> -	rto_max = params.srto_max;
> -	rto_min = params.srto_min;
> +	rto_max = params->srto_max;
> +	rto_min = params->srto_min;
> 
>  	if (rto_max)
>  		rto_max = asoc ? msecs_to_jiffies(rto_max) : rto_max;
> @@ -3081,17 +3073,17 @@ static int sctp_setsockopt_rtoinfo(struct sock *sk,
>  		return -EINVAL;
> 
>  	if (asoc) {
> -		if (params.srto_initial != 0)
> +		if (params->srto_initial != 0)
>  			asoc->rto_initial =
> -				msecs_to_jiffies(params.srto_initial);
> +				msecs_to_jiffies(params->srto_initial);
>  		asoc->rto_max = rto_max;
>  		asoc->rto_min = rto_min;
>  	} else {
>  		/* If there is no association or the association-id = 0
>  		 * set the values to the endpoint.
>  		 */
> -		if (params.srto_initial != 0)
> -			sp->rtoinfo.srto_initial = params.srto_initial;
> +		if (params->srto_initial != 0)
> +			sp->rtoinfo.srto_initial = params->srto_initial;
>  		sp->rtoinfo.srto_max = rto_max;
>  		sp->rtoinfo.srto_min = rto_min;
>  	}
> @@ -3111,7 +3103,7 @@ static int sctp_setsockopt_rtoinfo(struct sock *sk,
>   *
>   */
>  static int sctp_setsockopt_associnfo(struct sock *sk,
> -				     struct sctp_assocparams params,
> +				     struct sctp_assocparams *params,
>  				     unsigned int optlen)
>  {
> 
> @@ -3120,15 +3112,15 @@ static int sctp_setsockopt_associnfo(struct sock *sk,
>  	if (optlen != sizeof(struct sctp_assocparams))
>  		return -EINVAL;
> 
> -	asoc = sctp_id2assoc(sk, params.sasoc_assoc_id);
> +	asoc = sctp_id2assoc(sk, params->sasoc_assoc_id);
> 
> -	if (!asoc && params.sasoc_assoc_id != SCTP_FUTURE_ASSOC &&
> +	if (!asoc && params->sasoc_assoc_id != SCTP_FUTURE_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
>  	/* Set the values to the specific association */
>  	if (asoc) {
> -		if (params.sasoc_asocmaxrxt != 0) {
> +		if (params->sasoc_asocmaxrxt != 0) {
>  			__u32 path_sum = 0;
>  			int   paths = 0;
>  			struct sctp_transport *peer_addr;
> @@ -3145,24 +3137,24 @@ static int sctp_setsockopt_associnfo(struct sock *sk,
>  			 * then one path.
>  			 */
>  			if (paths > 1 &&
> -			    params.sasoc_asocmaxrxt > path_sum)
> +			    params->sasoc_asocmaxrxt > path_sum)
>  				return -EINVAL;
> 
> -			asoc->max_retrans = params.sasoc_asocmaxrxt;
> +			asoc->max_retrans = params->sasoc_asocmaxrxt;
>  		}
> 
> -		if (params.sasoc_cookie_life != 0)
> -			asoc->cookie_life = ms_to_ktime(params.sasoc_cookie_life);
> +		if (params->sasoc_cookie_life != 0)
> +			asoc->cookie_life = ms_to_ktime(params->sasoc_cookie_life);
>  	} else {
>  		/* Set the values to the endpoint */
>  		struct sctp_sock *sp = sctp_sk(sk);
> 
> -		if (params.sasoc_asocmaxrxt != 0)
> +		if (params->sasoc_asocmaxrxt != 0)
>  			sp->assocparams.sasoc_asocmaxrxt =
> -						params.sasoc_asocmaxrxt;
> -		if (params.sasoc_cookie_life != 0)
> +						params->sasoc_asocmaxrxt;
> +		if (params->sasoc_cookie_life != 0)
>  			sp->assocparams.sasoc_cookie_life =
> -						params.sasoc_cookie_life;
> +						params->sasoc_cookie_life;
>  	}
>  	return 0;
>  }
> @@ -3220,7 +3212,7 @@ static int sctp_setsockopt_mappedv4(struct sock *sk, int *optval,
>   * assoc_value:  This parameter specifies the maximum size in bytes.
>   */
>  static int sctp_setsockopt_maxseg(struct sock *sk,
> -				  struct sctp_assoc_value params,
> +				  struct sctp_assoc_value *params,
>  				  unsigned int optlen)
>  {
>  	struct sctp_sock *sp = sctp_sk(sk);
> @@ -3233,16 +3225,16 @@ static int sctp_setsockopt_maxseg(struct sock *sk,
>  				    "Use of int in maxseg socket option.\n"
>  				    "Use struct sctp_assoc_value instead\n",
>  				    current->comm, task_pid_nr(current));
> -		val = *(int *)&params;
> -		params.assoc_id = SCTP_FUTURE_ASSOC;
> +		val = *(int *)params;
> +		params->assoc_id = SCTP_FUTURE_ASSOC;
>  	} else if (optlen != sizeof(struct sctp_assoc_value)) {
> -		val = params.assoc_value;
> +		val = params->assoc_value;
>  	} else {
>  		return -EINVAL;
>  	}
> 
> -	asoc = sctp_id2assoc(sk, params.assoc_id);
> -	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->assoc_id);
> +	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
> @@ -3277,9 +3269,8 @@ static int sctp_setsockopt_maxseg(struct sock *sk,
>   *   locally bound addresses. The following structure is used to make a
>   *   set primary request:
>   */
> -#define prim (*prim)
>  static int sctp_setsockopt_peer_primary_addr(struct sock *sk,
> -					     struct sctp_setpeerprim prim,
> +					     struct sctp_setpeerprim *prim,
>  					     unsigned int optlen)
>  {
>  	struct sctp_sock	*sp;
> @@ -3296,7 +3287,7 @@ static int sctp_setsockopt_peer_primary_addr(struct sock *sk,
>  	if (optlen != sizeof(struct sctp_setpeerprim))
>  		return -EINVAL;
> 
> -	asoc = sctp_id2assoc(sk, prim.sspp_assoc_id);
> +	asoc = sctp_id2assoc(sk, prim->sspp_assoc_id);
>  	if (!asoc)
>  		return -EINVAL;
> 
> @@ -3309,26 +3300,26 @@ static int sctp_setsockopt_peer_primary_addr(struct sock *sk,
>  	if (!sctp_state(asoc, ESTABLISHED))
>  		return -ENOTCONN;
> 
> -	af = sctp_get_af_specific(prim.sspp_addr.ss_family);
> +	af = sctp_get_af_specific(prim->sspp_addr.ss_family);
>  	if (!af)
>  		return -EINVAL;
> 
> -	if (!af->addr_valid((union sctp_addr *)&prim.sspp_addr, sp, NULL))
> +	if (!af->addr_valid((union sctp_addr *)&prim->sspp_addr, sp, NULL))
>  		return -EADDRNOTAVAIL;
> 
> -	if (!sctp_assoc_lookup_laddr(asoc, (union sctp_addr *)&prim.sspp_addr))
> +	if (!sctp_assoc_lookup_laddr(asoc, (union sctp_addr *)&prim->sspp_addr))
>  		return -EADDRNOTAVAIL;
> 
>  	/* Allow security module to validate address. */
>  	err = security_sctp_bind_connect(sk, SCTP_SET_PEER_PRIMARY_ADDR,
> -					 (struct sockaddr *)&prim.sspp_addr,
> +					 (struct sockaddr *)&prim->sspp_addr,
>  					 af->sockaddr_len);
>  	if (err)
>  		return err;
> 
>  	/* Create an ASCONF chunk with SET_PRIMARY parameter	*/
>  	chunk = sctp_make_asconf_set_prim(asoc,
> -					  (union sctp_addr *)&prim.sspp_addr);
> +					  (union sctp_addr *)&prim->sspp_addr);
>  	if (!chunk)
>  		return -ENOMEM;
> 
> @@ -3338,7 +3329,6 @@ static int sctp_setsockopt_peer_primary_addr(struct sock *sk,
> 
>  	return err;
>  }
> -#undef prim
> 
>  static int sctp_setsockopt_adaptation_layer(struct sock *sk,
>  					    struct sctp_setadaptation *adaptation,
> @@ -3367,7 +3357,7 @@ static int sctp_setsockopt_adaptation_layer(struct sock *sk,
>   * saved with outbound messages.
>   */
>  static int sctp_setsockopt_context(struct sock *sk,
> -				   struct sctp_assoc_value params,
> +				   struct sctp_assoc_value *params,
>  				   unsigned int optlen)
>  {
>  	struct sctp_sock *sp = sctp_sk(sk);
> @@ -3376,28 +3366,28 @@ static int sctp_setsockopt_context(struct sock *sk,
>  	if (optlen != sizeof(struct sctp_assoc_value))
>  		return -EINVAL;
> 
> -	asoc = sctp_id2assoc(sk, params.assoc_id);
> -	if (!asoc && params.assoc_id > SCTP_ALL_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->assoc_id);
> +	if (!asoc && params->assoc_id > SCTP_ALL_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
>  	if (asoc) {
> -		asoc->default_rcv_context = params.assoc_value;
> +		asoc->default_rcv_context = params->assoc_value;
> 
>  		return 0;
>  	}
> 
>  	if (sctp_style(sk, TCP))
> -		params.assoc_id = SCTP_FUTURE_ASSOC;
> +		params->assoc_id = SCTP_FUTURE_ASSOC;
> 
> -	if (params.assoc_id == SCTP_FUTURE_ASSOC ||
> -	    params.assoc_id == SCTP_ALL_ASSOC)
> -		sp->default_rcv_context = params.assoc_value;
> +	if (params->assoc_id == SCTP_FUTURE_ASSOC ||
> +	    params->assoc_id == SCTP_ALL_ASSOC)
> +		sp->default_rcv_context = params->assoc_value;
> 
> -	if (params.assoc_id == SCTP_CURRENT_ASSOC ||
> -	    params.assoc_id == SCTP_ALL_ASSOC)
> +	if (params->assoc_id == SCTP_CURRENT_ASSOC ||
> +	    params->assoc_id == SCTP_ALL_ASSOC)
>  		list_for_each_entry(asoc, &sp->ep->asocs, asocs)
> -			asoc->default_rcv_context = params.assoc_value;
> +			asoc->default_rcv_context = params->assoc_value;
> 
>  	return 0;
>  }
> @@ -3488,7 +3478,7 @@ static int sctp_setsockopt_partial_delivery_point(struct sock *sk,
>   * future associations inheriting the socket value.
>   */
>  static int sctp_setsockopt_maxburst(struct sock *sk,
> -				    struct sctp_assoc_value params,
> +				    struct sctp_assoc_value *params,
>  				    unsigned int optlen)
>  {
>  	struct sctp_sock *sp = sctp_sk(sk);
> @@ -3500,34 +3490,34 @@ static int sctp_setsockopt_maxburst(struct sock *sk,
>  				    "Use of int in max_burst socket option deprecated.\n"
>  				    "Use struct sctp_assoc_value instead\n",
>  				    current->comm, task_pid_nr(current));
> -		params.assoc_value = *(int *)&params;
> -		params.assoc_id = SCTP_FUTURE_ASSOC;
> +		params->assoc_value = *(int *)params;
> +		params->assoc_id = SCTP_FUTURE_ASSOC;
>  	} else if (optlen != sizeof(struct sctp_assoc_value)) {
>  		return -EINVAL;
>  	}
> 
> -	asoc = sctp_id2assoc(sk, params.assoc_id);
> -	if (!asoc && params.assoc_id > SCTP_ALL_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->assoc_id);
> +	if (!asoc && params->assoc_id > SCTP_ALL_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
>  	if (asoc) {
> -		asoc->max_burst = params.assoc_value;
> +		asoc->max_burst = params->assoc_value;
> 
>  		return 0;
>  	}
> 
>  	if (sctp_style(sk, TCP))
> -		params.assoc_id = SCTP_FUTURE_ASSOC;
> +		params->assoc_id = SCTP_FUTURE_ASSOC;
> 
> -	if (params.assoc_id == SCTP_FUTURE_ASSOC ||
> -	    params.assoc_id == SCTP_ALL_ASSOC)
> -		sp->max_burst = params.assoc_value;
> +	if (params->assoc_id == SCTP_FUTURE_ASSOC ||
> +	    params->assoc_id == SCTP_ALL_ASSOC)
> +		sp->max_burst = params->assoc_value;
> 
> -	if (params.assoc_id == SCTP_CURRENT_ASSOC ||
> -	    params.assoc_id == SCTP_ALL_ASSOC)
> +	if (params->assoc_id == SCTP_CURRENT_ASSOC ||
> +	    params->assoc_id == SCTP_ALL_ASSOC)
>  		list_for_each_entry(asoc, &sp->ep->asocs, asocs)
> -			asoc->max_burst = params.assoc_value;
> +			asoc->max_burst = params->assoc_value;
> 
>  	return 0;
>  }
> @@ -3539,9 +3529,8 @@ static int sctp_setsockopt_maxburst(struct sock *sk,
>   * received only in an authenticated way.  Changes to the list of chunks
>   * will only effect future associations on the socket.
>   */
> -#define val (*val)
>  static int sctp_setsockopt_auth_chunk(struct sock *sk,
> -				      struct sctp_authchunk val,
> +				      struct sctp_authchunk *val,
>  				      unsigned int optlen)
>  {
>  	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
> @@ -3552,7 +3541,7 @@ static int sctp_setsockopt_auth_chunk(struct sock *sk,
>  	if (optlen != sizeof(struct sctp_authchunk))
>  		return -EINVAL;
> 
> -	switch (val.sauth_chunk) {
> +	switch (val->sauth_chunk) {
>  	case SCTP_CID_INIT:
>  	case SCTP_CID_INIT_ACK:
>  	case SCTP_CID_SHUTDOWN_COMPLETE:
> @@ -3561,7 +3550,7 @@ static int sctp_setsockopt_auth_chunk(struct sock *sk,
>  	}
> 
>  	/* add this chunk id to the endpoint */
> -	return sctp_auth_ep_add_chunkid(ep, val.sauth_chunk);
> +	return sctp_auth_ep_add_chunkid(ep, val->sauth_chunk);
>  }
> 
>  /*
> @@ -3666,7 +3655,7 @@ static int sctp_setsockopt_auth_key(struct sock *sk,
>   * the association shared key.
>   */
>  static int sctp_setsockopt_active_key(struct sock *sk,
> -				      struct sctp_authkeyid val,
> +				      struct sctp_authkeyid *val,
>  				      unsigned int optlen)
>  {
>  	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
> @@ -3676,29 +3665,29 @@ static int sctp_setsockopt_active_key(struct sock *sk,
>  	if (optlen != sizeof(struct sctp_authkeyid))
>  		return -EINVAL;
> 
> -	asoc = sctp_id2assoc(sk, val.scact_assoc_id);
> -	if (!asoc && val.scact_assoc_id > SCTP_ALL_ASSOC &&
> +	asoc = sctp_id2assoc(sk, val->scact_assoc_id);
> +	if (!asoc && val->scact_assoc_id > SCTP_ALL_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
>  	if (asoc)
> -		return sctp_auth_set_active_key(ep, asoc, val.scact_keynumber);
> +		return sctp_auth_set_active_key(ep, asoc, val->scact_keynumber);
> 
>  	if (sctp_style(sk, TCP))
> -		val.scact_assoc_id = SCTP_FUTURE_ASSOC;
> +		val->scact_assoc_id = SCTP_FUTURE_ASSOC;
> 
> -	if (val.scact_assoc_id == SCTP_FUTURE_ASSOC ||
> -	    val.scact_assoc_id == SCTP_ALL_ASSOC) {
> -		ret = sctp_auth_set_active_key(ep, asoc, val.scact_keynumber);
> +	if (val->scact_assoc_id == SCTP_FUTURE_ASSOC ||
> +	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
> +		ret = sctp_auth_set_active_key(ep, asoc, val->scact_keynumber);
>  		if (ret)
>  			return ret;
>  	}
> 
> -	if (val.scact_assoc_id == SCTP_CURRENT_ASSOC ||
> -	    val.scact_assoc_id == SCTP_ALL_ASSOC) {
> +	if (val->scact_assoc_id == SCTP_CURRENT_ASSOC ||
> +	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
>  		list_for_each_entry(asoc, &ep->asocs, asocs) {
>  			int res = sctp_auth_set_active_key(ep, asoc,
> -							   val.scact_keynumber);
> +							   val->scact_keynumber);
> 
>  			if (res && !ret)
>  				ret = res;
> @@ -3714,7 +3703,7 @@ static int sctp_setsockopt_active_key(struct sock *sk,
>   * This set option will delete a shared secret key from use.
>   */
>  static int sctp_setsockopt_del_key(struct sock *sk,
> -				   struct sctp_authkeyid val,
> +				   struct sctp_authkeyid *val,
>  				   unsigned int optlen)
>  {
>  	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
> @@ -3724,29 +3713,29 @@ static int sctp_setsockopt_del_key(struct sock *sk,
>  	if (optlen != sizeof(struct sctp_authkeyid))
>  		return -EINVAL;
> 
> -	asoc = sctp_id2assoc(sk, val.scact_assoc_id);
> -	if (!asoc && val.scact_assoc_id > SCTP_ALL_ASSOC &&
> +	asoc = sctp_id2assoc(sk, val->scact_assoc_id);
> +	if (!asoc && val->scact_assoc_id > SCTP_ALL_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
>  	if (asoc)
> -		return sctp_auth_del_key_id(ep, asoc, val.scact_keynumber);
> +		return sctp_auth_del_key_id(ep, asoc, val->scact_keynumber);
> 
>  	if (sctp_style(sk, TCP))
> -		val.scact_assoc_id = SCTP_FUTURE_ASSOC;
> +		val->scact_assoc_id = SCTP_FUTURE_ASSOC;
> 
> -	if (val.scact_assoc_id == SCTP_FUTURE_ASSOC ||
> -	    val.scact_assoc_id == SCTP_ALL_ASSOC) {
> -		ret = sctp_auth_del_key_id(ep, asoc, val.scact_keynumber);
> +	if (val->scact_assoc_id == SCTP_FUTURE_ASSOC ||
> +	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
> +		ret = sctp_auth_del_key_id(ep, asoc, val->scact_keynumber);
>  		if (ret)
>  			return ret;
>  	}
> 
> -	if (val.scact_assoc_id == SCTP_CURRENT_ASSOC ||
> -	    val.scact_assoc_id == SCTP_ALL_ASSOC) {
> +	if (val->scact_assoc_id == SCTP_CURRENT_ASSOC ||
> +	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
>  		list_for_each_entry(asoc, &ep->asocs, asocs) {
>  			int res = sctp_auth_del_key_id(ep, asoc,
> -						       val.scact_keynumber);
> +						       val->scact_keynumber);
> 
>  			if (res && !ret)
>  				ret = res;
> @@ -3762,7 +3751,7 @@ static int sctp_setsockopt_del_key(struct sock *sk,
>   * This set option will deactivate a shared secret key.
>   */
>  static int sctp_setsockopt_deactivate_key(struct sock *sk,
> -					  struct sctp_authkeyid val,
> +					  struct sctp_authkeyid *val,
>  					  unsigned int optlen)
>  {
>  	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
> @@ -3772,29 +3761,29 @@ static int sctp_setsockopt_deactivate_key(struct sock *sk,
>  	if (optlen != sizeof(struct sctp_authkeyid))
>  		return -EINVAL;
> 
> -	asoc = sctp_id2assoc(sk, val.scact_assoc_id);
> -	if (!asoc && val.scact_assoc_id > SCTP_ALL_ASSOC &&
> +	asoc = sctp_id2assoc(sk, val->scact_assoc_id);
> +	if (!asoc && val->scact_assoc_id > SCTP_ALL_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
>  	if (asoc)
> -		return sctp_auth_deact_key_id(ep, asoc, val.scact_keynumber);
> +		return sctp_auth_deact_key_id(ep, asoc, val->scact_keynumber);
> 
>  	if (sctp_style(sk, TCP))
> -		val.scact_assoc_id = SCTP_FUTURE_ASSOC;
> +		val->scact_assoc_id = SCTP_FUTURE_ASSOC;
> 
> -	if (val.scact_assoc_id == SCTP_FUTURE_ASSOC ||
> -	    val.scact_assoc_id == SCTP_ALL_ASSOC) {
> -		ret = sctp_auth_deact_key_id(ep, asoc, val.scact_keynumber);
> +	if (val->scact_assoc_id == SCTP_FUTURE_ASSOC ||
> +	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
> +		ret = sctp_auth_deact_key_id(ep, asoc, val->scact_keynumber);
>  		if (ret)
>  			return ret;
>  	}
> 
> -	if (val.scact_assoc_id == SCTP_CURRENT_ASSOC ||
> -	    val.scact_assoc_id == SCTP_ALL_ASSOC) {
> +	if (val->scact_assoc_id == SCTP_CURRENT_ASSOC ||
> +	    val->scact_assoc_id == SCTP_ALL_ASSOC) {
>  		list_for_each_entry(asoc, &ep->asocs, asocs) {
>  			int res = sctp_auth_deact_key_id(ep, asoc,
> -							 val.scact_keynumber);
> +							 val->scact_keynumber);
> 
>  			if (res && !ret)
>  				ret = res;
> @@ -3803,7 +3792,6 @@ static int sctp_setsockopt_deactivate_key(struct sock *sk,
> 
>  	return ret;
>  }
> -#undef val
> 
>  /*
>   * 8.1.23 SCTP_AUTO_ASCONF
> @@ -3819,24 +3807,23 @@ static int sctp_setsockopt_deactivate_key(struct sock *sk,
>   * Note. In this implementation, socket operation overrides default parameter
>   * being set by sysctl as well as FreeBSD implementation
>   */
> -#define val (*optval)
> -static int sctp_setsockopt_auto_asconf(struct sock *sk, int val,
> +static int sctp_setsockopt_auto_asconf(struct sock *sk, int *optval,
>  				       unsigned int optlen)
>  {
>  	struct sctp_sock *sp = sctp_sk(sk);
> 
>  	if (optlen < sizeof(int))
>  		return -EINVAL;
> -	if (!sctp_is_ep_boundall(sk) && val)
> +	if (!sctp_is_ep_boundall(sk) && (*optval))
>  		return -EINVAL;
> -	if ((val && sp->do_auto_asconf) || (!val && !sp->do_auto_asconf))
> +	if (((*optval) && sp->do_auto_asconf) || (!(*optval) && !sp->do_auto_asconf))
>  		return 0;
> 
>  	spin_lock_bh(&sock_net(sk)->sctp.addr_wq_lock);
> -	if (val == 0 && sp->do_auto_asconf) {
> +	if ((*optval) == 0 && sp->do_auto_asconf) {
>  		list_del(&sp->auto_asconf_list);
>  		sp->do_auto_asconf = 0;
> -	} else if (val && !sp->do_auto_asconf) {
> +	} else if ((*optval) && !sp->do_auto_asconf) {
>  		list_add_tail(&sp->auto_asconf_list,
>  		    &sock_net(sk)->sctp.auto_asconf_splist);
>  		sp->do_auto_asconf = 1;
> @@ -3844,7 +3831,6 @@ static int sctp_setsockopt_auto_asconf(struct sock *sk, int val,
>  	spin_unlock_bh(&sock_net(sk)->sctp.addr_wq_lock);
>  	return 0;
>  }
> -#undef val
> 
>  /*
>   * SCTP_PEER_ADDR_THLDS
> @@ -3853,70 +3839,68 @@ static int sctp_setsockopt_auto_asconf(struct sock *sk, int val,
>   * transports in an association.  See Section 6.1 of:
>   * http://www.ietf.org/id/draft-nishida-tsvwg-sctp-failover-05.txt
>   */
> -#define val (*val)
>  static int sctp_setsockopt_paddr_thresholds(struct sock *sk,
> -					    struct sctp_paddrthlds_v2 val,
> +					    struct sctp_paddrthlds_v2 *val,
>  					    unsigned int optlen, bool v2)
>  {
>  	struct sctp_transport *trans;
>  	struct sctp_association *asoc;
>  	int len;
> 
> -	len = v2 ? sizeof(val) : sizeof(struct sctp_paddrthlds);
> +	len = v2 ? sizeof(*val) : sizeof(struct sctp_paddrthlds);
>  	if (optlen < len)
>  		return -EINVAL;
> 
> -	if (v2 && val.spt_pathpfthld > val.spt_pathcpthld)
> +	if (v2 && val->spt_pathpfthld > val->spt_pathcpthld)
>  		return -EINVAL;
> 
> -	if (!sctp_is_any(sk, (const union sctp_addr *)&val.spt_address)) {
> -		trans = sctp_addr_id2transport(sk, &val.spt_address,
> -					       val.spt_assoc_id);
> +	if (!sctp_is_any(sk, (const union sctp_addr *)&val->spt_address)) {
> +		trans = sctp_addr_id2transport(sk, &val->spt_address,
> +					       val->spt_assoc_id);
>  		if (!trans)
>  			return -ENOENT;
> 
> -		if (val.spt_pathmaxrxt)
> -			trans->pathmaxrxt = val.spt_pathmaxrxt;
> +		if (val->spt_pathmaxrxt)
> +			trans->pathmaxrxt = val->spt_pathmaxrxt;
>  		if (v2)
> -			trans->ps_retrans = val.spt_pathcpthld;
> -		trans->pf_retrans = val.spt_pathpfthld;
> +			trans->ps_retrans = val->spt_pathcpthld;
> +		trans->pf_retrans = val->spt_pathpfthld;
> 
>  		return 0;
>  	}
> 
> -	asoc = sctp_id2assoc(sk, val.spt_assoc_id);
> -	if (!asoc && val.spt_assoc_id != SCTP_FUTURE_ASSOC &&
> +	asoc = sctp_id2assoc(sk, val->spt_assoc_id);
> +	if (!asoc && val->spt_assoc_id != SCTP_FUTURE_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
>  	if (asoc) {
>  		list_for_each_entry(trans, &asoc->peer.transport_addr_list,
>  				    transports) {
> -			if (val.spt_pathmaxrxt)
> -				trans->pathmaxrxt = val.spt_pathmaxrxt;
> +			if (val->spt_pathmaxrxt)
> +				trans->pathmaxrxt = val->spt_pathmaxrxt;
>  			if (v2)
> -				trans->ps_retrans = val.spt_pathcpthld;
> -			trans->pf_retrans = val.spt_pathpfthld;
> +				trans->ps_retrans = val->spt_pathcpthld;
> +			trans->pf_retrans = val->spt_pathpfthld;
>  		}
> 
> -		if (val.spt_pathmaxrxt)
> -			asoc->pathmaxrxt = val.spt_pathmaxrxt;
> +		if (val->spt_pathmaxrxt)
> +			asoc->pathmaxrxt = val->spt_pathmaxrxt;
>  		if (v2)
> -			asoc->ps_retrans = val.spt_pathcpthld;
> -		asoc->pf_retrans = val.spt_pathpfthld;
> +			asoc->ps_retrans = val->spt_pathcpthld;
> +		asoc->pf_retrans = val->spt_pathpfthld;
>  	} else {
>  		struct sctp_sock *sp = sctp_sk(sk);
> 
> -		if (val.spt_pathmaxrxt)
> -			sp->pathmaxrxt = val.spt_pathmaxrxt;
> +		if (val->spt_pathmaxrxt)
> +			sp->pathmaxrxt = val->spt_pathmaxrxt;
>  		if (v2)
> -			sp->ps_retrans = val.spt_pathcpthld;
> -		sp->pf_retrans = val.spt_pathpfthld;
> +			sp->ps_retrans = val->spt_pathcpthld;
> +		sp->pf_retrans = val->spt_pathpfthld;
>  	}
> 
>  	return 0;
>  }
> -#undef val
> 
>  static int sctp_setsockopt_recvrcvinfo(struct sock *sk, int *optval,
>  				       unsigned int optlen)
> @@ -3941,92 +3925,91 @@ static int sctp_setsockopt_recvnxtinfo(struct sock *sk, int *optval,
>  }
> 
>  static int sctp_setsockopt_pr_supported(struct sock *sk,
> -					struct sctp_assoc_value params,
> +					struct sctp_assoc_value *params,
>  					unsigned int optlen)
>  {
>  	struct sctp_association *asoc;
> 
> -	if (optlen != sizeof(params))
> +	if (optlen != sizeof(*params))
>  		return -EINVAL;
> 
> -	asoc = sctp_id2assoc(sk, params.assoc_id);
> -	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->assoc_id);
> +	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
> -	sctp_sk(sk)->ep->prsctp_enable = !!params.assoc_value;
> +	sctp_sk(sk)->ep->prsctp_enable = !!params->assoc_value;
> 
>  	return 0;
>  }
> 
>  static int sctp_setsockopt_default_prinfo(struct sock *sk,
> -					  struct sctp_default_prinfo info,
> +					  struct sctp_default_prinfo *info,
>  					  unsigned int optlen)
>  {
>  	struct sctp_sock *sp = sctp_sk(sk);
>  	struct sctp_association *asoc;
>  	int retval = -EINVAL;
> 
> -	if (optlen != sizeof(info))
> +	if (optlen != sizeof(*info))
>  		goto out;
> 
> -	if (info.pr_policy & ~SCTP_PR_SCTP_MASK)
> +	if (info->pr_policy & ~SCTP_PR_SCTP_MASK)
>  		goto out;
> 
> -	if (info.pr_policy == SCTP_PR_SCTP_NONE)
> -		info.pr_value = 0;
> +	if (info->pr_policy == SCTP_PR_SCTP_NONE)
> +		info->pr_value = 0;
> 
> -	asoc = sctp_id2assoc(sk, info.pr_assoc_id);
> -	if (!asoc && info.pr_assoc_id > SCTP_ALL_ASSOC &&
> +	asoc = sctp_id2assoc(sk, info->pr_assoc_id);
> +	if (!asoc && info->pr_assoc_id > SCTP_ALL_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		goto out;
> 
>  	retval = 0;
> 
>  	if (asoc) {
> -		SCTP_PR_SET_POLICY(asoc->default_flags, info.pr_policy);
> -		asoc->default_timetolive = info.pr_value;
> +		SCTP_PR_SET_POLICY(asoc->default_flags, info->pr_policy);
> +		asoc->default_timetolive = info->pr_value;
>  		goto out;
>  	}
> 
>  	if (sctp_style(sk, TCP))
> -		info.pr_assoc_id = SCTP_FUTURE_ASSOC;
> +		info->pr_assoc_id = SCTP_FUTURE_ASSOC;
> 
> -	if (info.pr_assoc_id == SCTP_FUTURE_ASSOC ||
> -	    info.pr_assoc_id == SCTP_ALL_ASSOC) {
> -		SCTP_PR_SET_POLICY(sp->default_flags, info.pr_policy);
> -		sp->default_timetolive = info.pr_value;
> +	if (info->pr_assoc_id == SCTP_FUTURE_ASSOC ||
> +	    info->pr_assoc_id == SCTP_ALL_ASSOC) {
> +		SCTP_PR_SET_POLICY(sp->default_flags, info->pr_policy);
> +		sp->default_timetolive = info->pr_value;
>  	}
> 
> -	if (info.pr_assoc_id == SCTP_CURRENT_ASSOC ||
> -	    info.pr_assoc_id == SCTP_ALL_ASSOC) {
> +	if (info->pr_assoc_id == SCTP_CURRENT_ASSOC ||
> +	    info->pr_assoc_id == SCTP_ALL_ASSOC) {
>  		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
> -			SCTP_PR_SET_POLICY(asoc->default_flags, info.pr_policy);
> -			asoc->default_timetolive = info.pr_value;
> +			SCTP_PR_SET_POLICY(asoc->default_flags, info->pr_policy);
> +			asoc->default_timetolive = info->pr_value;
>  		}
>  	}
> 
>  out:
>  	return retval;
>  }
> -#undef info
> 
>  static int sctp_setsockopt_reconfig_supported(struct sock *sk,
> -					      struct sctp_assoc_value params,
> +					      struct sctp_assoc_value *params,
>  					      unsigned int optlen)
>  {
>  	struct sctp_association *asoc;
>  	int retval = -EINVAL;
> 
> -	if (optlen != sizeof(params))
> +	if (optlen != sizeof(*params))
>  		goto out;
> 
> -	asoc = sctp_id2assoc(sk, params.assoc_id);
> -	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->assoc_id);
> +	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		goto out;
> 
> -	sctp_sk(sk)->ep->reconf_enable = !!params.assoc_value;
> +	sctp_sk(sk)->ep->reconf_enable = !!params->assoc_value;
> 
>  	retval = 0;
> 
> @@ -4035,48 +4018,47 @@ static int sctp_setsockopt_reconfig_supported(struct sock *sk,
>  }
> 
>  static int sctp_setsockopt_enable_strreset(struct sock *sk,
> -					   struct sctp_assoc_value params,
> +					   struct sctp_assoc_value *params,
>  					   unsigned int optlen)
>  {
>  	struct sctp_endpoint *ep = sctp_sk(sk)->ep;
>  	struct sctp_association *asoc;
>  	int retval = -EINVAL;
> 
> -	if (optlen != sizeof(params))
> +	if (optlen != sizeof(*params))
>  		goto out;
> 
> -	if (params.assoc_value & (~SCTP_ENABLE_STRRESET_MASK))
> +	if (params->assoc_value & (~SCTP_ENABLE_STRRESET_MASK))
>  		goto out;
> 
> -	asoc = sctp_id2assoc(sk, params.assoc_id);
> -	if (!asoc && params.assoc_id > SCTP_ALL_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->assoc_id);
> +	if (!asoc && params->assoc_id > SCTP_ALL_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		goto out;
> 
>  	retval = 0;
> 
>  	if (asoc) {
> -		asoc->strreset_enable = params.assoc_value;
> +		asoc->strreset_enable = params->assoc_value;
>  		goto out;
>  	}
> 
>  	if (sctp_style(sk, TCP))
> -		params.assoc_id = SCTP_FUTURE_ASSOC;
> +		params->assoc_id = SCTP_FUTURE_ASSOC;
> 
> -	if (params.assoc_id == SCTP_FUTURE_ASSOC ||
> -	    params.assoc_id == SCTP_ALL_ASSOC)
> -		ep->strreset_enable = params.assoc_value;
> +	if (params->assoc_id == SCTP_FUTURE_ASSOC ||
> +	    params->assoc_id == SCTP_ALL_ASSOC)
> +		ep->strreset_enable = params->assoc_value;
> 
> -	if (params.assoc_id == SCTP_CURRENT_ASSOC ||
> -	    params.assoc_id == SCTP_ALL_ASSOC)
> +	if (params->assoc_id == SCTP_CURRENT_ASSOC ||
> +	    params->assoc_id == SCTP_ALL_ASSOC)
>  		list_for_each_entry(asoc, &ep->asocs, asocs)
> -			asoc->strreset_enable = params.assoc_value;
> +			asoc->strreset_enable = params->assoc_value;
> 
>  out:
>  	return retval;
>  }
> 
> -#undef params
>  static int sctp_setsockopt_reset_streams(struct sock *sk,
>  					 struct sctp_reset_streams *params,
>  					 unsigned int optlen)
> @@ -4103,20 +4085,17 @@ static int sctp_setsockopt_reset_streams(struct sock *sk,
>  out:
>  	return retval;
>  }
> -#define params (*params)
> 
> -
> -#define associd (*associd)
> -static int sctp_setsockopt_reset_assoc(struct sock *sk, sctp_assoc_t associd,
> +static int sctp_setsockopt_reset_assoc(struct sock *sk, sctp_assoc_t *associd,
>  				       unsigned int optlen)
>  {
>  	struct sctp_association *asoc;
>  	int retval = -EINVAL;
> 
> -	if (optlen != sizeof(associd))
> +	if (optlen != sizeof(*associd))
>  		goto out;
> 
> -	asoc = sctp_id2assoc(sk, associd);
> +	asoc = sctp_id2assoc(sk, (*associd));
>  	if (!asoc)
>  		goto out;
> 
> @@ -4125,62 +4104,61 @@ static int sctp_setsockopt_reset_assoc(struct sock *sk, sctp_assoc_t associd,
>  out:
>  	return retval;
>  }
> -#undef associd
> 
>  static int sctp_setsockopt_add_streams(struct sock *sk,
> -				       struct sctp_add_streams params,
> +				       struct sctp_add_streams *params,
>  				       unsigned int optlen)
>  {
>  	struct sctp_association *asoc;
>  	int retval = -EINVAL;
> 
> -	if (optlen != sizeof(params))
> +	if (optlen != sizeof(*params))
>  		goto out;
> 
> -	asoc = sctp_id2assoc(sk, params.sas_assoc_id);
> +	asoc = sctp_id2assoc(sk, params->sas_assoc_id);
>  	if (!asoc)
>  		goto out;
> 
> -	retval = sctp_send_add_streams(asoc, &params);
> +	retval = sctp_send_add_streams(asoc, params);
> 
>  out:
>  	return retval;
>  }
> 
>  static int sctp_setsockopt_scheduler(struct sock *sk,
> -				     struct sctp_assoc_value params,
> +				     struct sctp_assoc_value *params,
>  				     unsigned int optlen)
>  {
>  	struct sctp_sock *sp = sctp_sk(sk);
>  	struct sctp_association *asoc;
>  	int retval = 0;
> 
> -	if (optlen < sizeof(params))
> +	if (optlen < sizeof(*params))
>  		return -EINVAL;
> 
> -	if (params.assoc_value > SCTP_SS_MAX)
> +	if (params->assoc_value > SCTP_SS_MAX)
>  		return -EINVAL;
> 
> -	asoc = sctp_id2assoc(sk, params.assoc_id);
> -	if (!asoc && params.assoc_id > SCTP_ALL_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->assoc_id);
> +	if (!asoc && params->assoc_id > SCTP_ALL_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
>  	if (asoc)
> -		return sctp_sched_set_sched(asoc, params.assoc_value);
> +		return sctp_sched_set_sched(asoc, params->assoc_value);
> 
>  	if (sctp_style(sk, TCP))
> -		params.assoc_id = SCTP_FUTURE_ASSOC;
> +		params->assoc_id = SCTP_FUTURE_ASSOC;
> 
> -	if (params.assoc_id == SCTP_FUTURE_ASSOC ||
> -	    params.assoc_id == SCTP_ALL_ASSOC)
> -		sp->default_ss = params.assoc_value;
> +	if (params->assoc_id == SCTP_FUTURE_ASSOC ||
> +	    params->assoc_id == SCTP_ALL_ASSOC)
> +		sp->default_ss = params->assoc_value;
> 
> -	if (params.assoc_id == SCTP_CURRENT_ASSOC ||
> -	    params.assoc_id == SCTP_ALL_ASSOC) {
> +	if (params->assoc_id == SCTP_CURRENT_ASSOC ||
> +	    params->assoc_id == SCTP_ALL_ASSOC) {
>  		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
>  			int ret = sctp_sched_set_sched(asoc,
> -						       params.assoc_value);
> +						       params->assoc_value);
> 
>  			if (ret && !retval)
>  				retval = ret;
> @@ -4191,31 +4169,31 @@ static int sctp_setsockopt_scheduler(struct sock *sk,
>  }
> 
>  static int sctp_setsockopt_scheduler_value(struct sock *sk,
> -					   struct sctp_stream_value params,
> +					   struct sctp_stream_value *params,
>  					   unsigned int optlen)
>  {
>  	struct sctp_association *asoc;
>  	int retval = -EINVAL;
> 
> -	if (optlen < sizeof(params))
> +	if (optlen < sizeof(*params))
>  		goto out;
> 
> -	asoc = sctp_id2assoc(sk, params.assoc_id);
> -	if (!asoc && params.assoc_id != SCTP_CURRENT_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->assoc_id);
> +	if (!asoc && params->assoc_id != SCTP_CURRENT_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		goto out;
> 
>  	if (asoc) {
> -		retval = sctp_sched_set_value(asoc, params.stream_id,
> -					      params.stream_value, GFP_KERNEL);
> +		retval = sctp_sched_set_value(asoc, params->stream_id,
> +					      params->stream_value, GFP_KERNEL);
>  		goto out;
>  	}
> 
>  	retval = 0;
> 
>  	list_for_each_entry(asoc, &sctp_sk(sk)->ep->asocs, asocs) {
> -		int ret = sctp_sched_set_value(asoc, params.stream_id,
> -					       params.stream_value, GFP_KERNEL);
> +		int ret = sctp_sched_set_value(asoc, params->stream_id,
> +					       params->stream_value, GFP_KERNEL);
>  		if (ret && !retval) /* try to return the 1st error. */
>  			retval = ret;
>  	}
> @@ -4225,18 +4203,18 @@ static int sctp_setsockopt_scheduler_value(struct sock *sk,
>  }
> 
>  static int sctp_setsockopt_interleaving_supported(struct sock *sk,
> -						  struct sctp_assoc_value params,
> +						  struct sctp_assoc_value *params,
>  						  unsigned int optlen)
>  {
>  	struct sctp_sock *sp = sctp_sk(sk);
>  	struct sctp_association *asoc;
>  	int retval = -EINVAL;
> 
> -	if (optlen < sizeof(params))
> +	if (optlen < sizeof(*params))
>  		goto out;
> 
> -	asoc = sctp_id2assoc(sk, params.assoc_id);
> -	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->assoc_id);
> +	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		goto out;
> 
> @@ -4245,7 +4223,7 @@ static int sctp_setsockopt_interleaving_supported(struct sock *sk,
>  		goto out;
>  	}
> 
> -	sp->ep->intl_enable = !!params.assoc_value;
> +	sp->ep->intl_enable = !!params->assoc_value;
> 
>  	retval = 0;
> 
> @@ -4291,41 +4269,40 @@ static int sctp_assoc_ulpevent_type_set(struct sctp_event *param,
>  	return 0;
>  }
> 
> -#define param (*param)
> -static int sctp_setsockopt_event(struct sock *sk, struct sctp_event param,
> +static int sctp_setsockopt_event(struct sock *sk, struct sctp_event *param,
>  				 unsigned int optlen)
>  {
>  	struct sctp_sock *sp = sctp_sk(sk);
>  	struct sctp_association *asoc;
>  	int retval = 0;
> 
> -	if (optlen < sizeof(param))
> +	if (optlen < sizeof(*param))
>  		return -EINVAL;
> 
> -	if (param.se_type < SCTP_SN_TYPE_BASE ||
> -	    param.se_type > SCTP_SN_TYPE_MAX)
> +	if (param->se_type < SCTP_SN_TYPE_BASE ||
> +	    param->se_type > SCTP_SN_TYPE_MAX)
>  		return -EINVAL;
> 
> -	asoc = sctp_id2assoc(sk, param.se_assoc_id);
> -	if (!asoc && param.se_assoc_id > SCTP_ALL_ASSOC &&
> +	asoc = sctp_id2assoc(sk, param->se_assoc_id);
> +	if (!asoc && param->se_assoc_id > SCTP_ALL_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		return -EINVAL;
> 
>  	if (asoc)
> -		return sctp_assoc_ulpevent_type_set(&param, asoc);
> +		return sctp_assoc_ulpevent_type_set(param, asoc);
> 
>  	if (sctp_style(sk, TCP))
> -		param.se_assoc_id = SCTP_FUTURE_ASSOC;
> +		param->se_assoc_id = SCTP_FUTURE_ASSOC;
> 
> -	if (param.se_assoc_id == SCTP_FUTURE_ASSOC ||
> -	    param.se_assoc_id == SCTP_ALL_ASSOC)
> +	if (param->se_assoc_id == SCTP_FUTURE_ASSOC ||
> +	    param->se_assoc_id == SCTP_ALL_ASSOC)
>  		sctp_ulpevent_type_set(&sp->subscribe,
> -				       param.se_type, param.se_on);
> +				       param->se_type, param->se_on);
> 
> -	if (param.se_assoc_id == SCTP_CURRENT_ASSOC ||
> -	    param.se_assoc_id == SCTP_ALL_ASSOC) {
> +	if (param->se_assoc_id == SCTP_CURRENT_ASSOC ||
> +	    param->se_assoc_id == SCTP_ALL_ASSOC) {
>  		list_for_each_entry(asoc, &sp->ep->asocs, asocs) {
> -			int ret = sctp_assoc_ulpevent_type_set(&param, asoc);
> +			int ret = sctp_assoc_ulpevent_type_set(param, asoc);
> 
>  			if (ret && !retval)
>  				retval = ret;
> @@ -4334,26 +4311,25 @@ static int sctp_setsockopt_event(struct sock *sk, struct sctp_event param,
> 
>  	return retval;
>  }
> -#undef param
> 
>  static int sctp_setsockopt_asconf_supported(struct sock *sk,
> -					    struct sctp_assoc_value params,
> +					    struct sctp_assoc_value *params,
>  					    unsigned int optlen)
>  {
>  	struct sctp_association *asoc;
>  	struct sctp_endpoint *ep;
>  	int retval = -EINVAL;
> 
> -	if (optlen != sizeof(params))
> +	if (optlen != sizeof(*params))
>  		goto out;
> 
> -	asoc = sctp_id2assoc(sk, params.assoc_id);
> -	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->assoc_id);
> +	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		goto out;
> 
>  	ep = sctp_sk(sk)->ep;
> -	ep->asconf_enable = !!params.assoc_value;
> +	ep->asconf_enable = !!params->assoc_value;
> 
>  	if (ep->asconf_enable && ep->auth_enable) {
>  		sctp_auth_ep_add_chunkid(ep, SCTP_CID_ASCONF);
> @@ -4367,23 +4343,23 @@ static int sctp_setsockopt_asconf_supported(struct sock *sk,
>  }
> 
>  static int sctp_setsockopt_auth_supported(struct sock *sk,
> -					  struct sctp_assoc_value params,
> +					  struct sctp_assoc_value *params,
>  					  unsigned int optlen)
>  {
>  	struct sctp_association *asoc;
>  	struct sctp_endpoint *ep;
>  	int retval = -EINVAL;
> 
> -	if (optlen != sizeof(params))
> +	if (optlen != sizeof(*params))
>  		goto out;
> 
> -	asoc = sctp_id2assoc(sk, params.assoc_id);
> -	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->assoc_id);
> +	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		goto out;
> 
>  	ep = sctp_sk(sk)->ep;
> -	if (params.assoc_value) {
> +	if (params->assoc_value) {
>  		retval = sctp_auth_init(ep, GFP_KERNEL);
>  		if (retval)
>  			goto out;
> @@ -4393,7 +4369,7 @@ static int sctp_setsockopt_auth_supported(struct sock *sk,
>  		}
>  	}
> 
> -	ep->auth_enable = !!params.assoc_value;
> +	ep->auth_enable = !!params->assoc_value;
>  	retval = 0;
> 
>  out:
> @@ -4401,21 +4377,21 @@ static int sctp_setsockopt_auth_supported(struct sock *sk,
>  }
> 
>  static int sctp_setsockopt_ecn_supported(struct sock *sk,
> -					 struct sctp_assoc_value params,
> +					 struct sctp_assoc_value *params,
>  					 unsigned int optlen)
>  {
>  	struct sctp_association *asoc;
>  	int retval = -EINVAL;
> 
> -	if (optlen != sizeof(params))
> +	if (optlen != sizeof(*params))
>  		goto out;
> 
> -	asoc = sctp_id2assoc(sk, params.assoc_id);
> -	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->assoc_id);
> +	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		goto out;
> 
> -	sctp_sk(sk)->ep->ecn_enable = !!params.assoc_value;
> +	sctp_sk(sk)->ep->ecn_enable = !!params->assoc_value;
>  	retval = 0;
> 
>  out:
> @@ -4423,33 +4399,32 @@ static int sctp_setsockopt_ecn_supported(struct sock *sk,
>  }
> 
>  static int sctp_setsockopt_pf_expose(struct sock *sk,
> -				     struct sctp_assoc_value params,
> +				     struct sctp_assoc_value *params,
>  				     unsigned int optlen)
>  {
>  	struct sctp_association *asoc;
>  	int retval = -EINVAL;
> 
> -	if (optlen != sizeof(params))
> +	if (optlen != sizeof(*params))
>  		goto out;
> 
> -	if (params.assoc_value > SCTP_PF_EXPOSE_MAX)
> +	if (params->assoc_value > SCTP_PF_EXPOSE_MAX)
>  		goto out;
> 
> -	asoc = sctp_id2assoc(sk, params.assoc_id);
> -	if (!asoc && params.assoc_id != SCTP_FUTURE_ASSOC &&
> +	asoc = sctp_id2assoc(sk, params->assoc_id);
> +	if (!asoc && params->assoc_id != SCTP_FUTURE_ASSOC &&
>  	    sctp_style(sk, UDP))
>  		goto out;
> 
>  	if (asoc)
> -		asoc->pf_expose = params.assoc_value;
> +		asoc->pf_expose = params->assoc_value;
>  	else
> -		sctp_sk(sk)->pf_expose = params.assoc_value;
> +		sctp_sk(sk)->pf_expose = params->assoc_value;
>  	retval = 0;
> 
>  out:
>  	return retval;
>  }
> -#undef params
> 
>  static int kernel_sctp_setsockopt(struct sock *sk, int optname, void *optval,
>  			   int optlen)
> --
> 1.8.1.2
> 
> -
> Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
> Registration No: 1397386 (Wales)

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
  2020-05-26 16:44 ` David Laight
@ 2020-05-26 22:36   ` David Miller
  2020-05-27  8:31     ` David Laight
  2020-05-29 16:12     ` Marcelo Ricardo Leitner
  0 siblings, 2 replies; 5+ messages in thread
From: David Miller @ 2020-05-26 22:36 UTC (permalink / raw)
  To: David.Laight
  Cc: vyasevich, nhorman, kuba, linux-sctp, netdev, hch, marcelo.leitner

From: David Laight <David.Laight@ACULAB.COM>
Date: Tue, 26 May 2020 16:44:07 +0000

> This should be 3/8.

David just respin this at some point and with this fixed and also the
header posting saying "0/8" properly instead of "0/1", this is really
messy.

Thanks.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
  2020-05-26 22:36   ` David Miller
@ 2020-05-27  8:31     ` David Laight
  2020-05-29 16:12     ` Marcelo Ricardo Leitner
  1 sibling, 0 replies; 5+ messages in thread
From: David Laight @ 2020-05-27  8:31 UTC (permalink / raw)
  To: 'David Miller'; +Cc: netdev

From: David Miller
> Sent: 26 May 2020 23:37
> > This should be 3/8.
> 
> David just respin this at some point and with this fixed and also the
> header posting saying "0/8" properly instead of "0/1", this is really
> messy.

I have to copy patches onto a windows box.
Then open them in wordpad so I can cut&paste the tabs into outlook.
Then find the correct 'to' address list.

It is somewhat too manual and error prone.

But I'll fix the masters for the next respin (bound to be one).

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
  2020-05-26 22:36   ` David Miller
  2020-05-27  8:31     ` David Laight
@ 2020-05-29 16:12     ` Marcelo Ricardo Leitner
  1 sibling, 0 replies; 5+ messages in thread
From: Marcelo Ricardo Leitner @ 2020-05-29 16:12 UTC (permalink / raw)
  To: David Miller
  Cc: David.Laight, vyasevich, nhorman, kuba, linux-sctp, netdev, hch

On Tue, May 26, 2020 at 03:36:31PM -0700, David Miller wrote:
> From: David Laight <David.Laight@ACULAB.COM>
> Date: Tue, 26 May 2020 16:44:07 +0000
> 
> > This should be 3/8.
> 
> David just respin this at some point and with this fixed and also the
> header posting saying "0/8" properly instead of "0/1", this is really
> messy.
> 
> Thanks.

I don't know why David's workflow is that cumbersome. I'll try to
respin this myself, on top of Christoph's latest changes.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-05-29 16:12 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-26 16:40 [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines David Laight
2020-05-26 16:44 ` David Laight
2020-05-26 22:36   ` David Miller
2020-05-27  8:31     ` David Laight
2020-05-29 16:12     ` Marcelo Ricardo Leitner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).