All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 net-next 1/8] sctp: setsockopt, rename some locals.
@ 2020-05-26 16:39 ` David Laight
  0 siblings, 0 replies; 11+ messages in thread
From: David Laight @ 2020-05-26 16:39 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'

Rename locals to avoid clash with structure fields in next patch.

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

---
 net/sctp/socket.c | 46 +++++++++++++++++++++++-----------------------
 1 file changed, 23 insertions(+), 23 deletions(-)

diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index 1b56fc4..c1c8215 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -3088,7 +3088,7 @@ static int sctp_setsockopt_nodelay(struct sock *sk, char __user *optval,
  */
 static int sctp_setsockopt_rtoinfo(struct sock *sk, char __user *optval, unsigned int optlen)
 {
-	struct sctp_rtoinfo rtoinfo;
+	struct sctp_rtoinfo params;
 	struct sctp_association *asoc;
 	unsigned long rto_min, rto_max;
 	struct sctp_sock *sp = sctp_sk(sk);
@@ -3096,18 +3096,18 @@ static int sctp_setsockopt_rtoinfo(struct sock *sk, char __user *optval, unsigne
 	if (optlen != sizeof (struct sctp_rtoinfo))
 		return -EINVAL;
 
-	if (copy_from_user(&rtoinfo, optval, optlen))
+	if (copy_from_user(&params, optval, optlen))
 		return -EFAULT;
 
-	asoc = sctp_id2assoc(sk, rtoinfo.srto_assoc_id);
+	asoc = sctp_id2assoc(sk, params.srto_assoc_id);
 
 	/* Set the values to the specific association */
-	if (!asoc && rtoinfo.srto_assoc_id != SCTP_FUTURE_ASSOC &&
+	if (!asoc && params.srto_assoc_id != SCTP_FUTURE_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
-	rto_max = rtoinfo.srto_max;
-	rto_min = rtoinfo.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;
@@ -3123,17 +3123,17 @@ static int sctp_setsockopt_rtoinfo(struct sock *sk, char __user *optval, unsigne
 		return -EINVAL;
 
 	if (asoc) {
-		if (rtoinfo.srto_initial != 0)
+		if (params.srto_initial != 0)
 			asoc->rto_initial =
-				msecs_to_jiffies(rtoinfo.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 (rtoinfo.srto_initial != 0)
-			sp->rtoinfo.srto_initial = rtoinfo.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;
 	}
@@ -3155,23 +3155,23 @@ static int sctp_setsockopt_rtoinfo(struct sock *sk, char __user *optval, unsigne
 static int sctp_setsockopt_associnfo(struct sock *sk, char __user *optval, unsigned int optlen)
 {
 
-	struct sctp_assocparams assocparams;
+	struct sctp_assocparams params;
 	struct sctp_association *asoc;
 
 	if (optlen != sizeof(struct sctp_assocparams))
 		return -EINVAL;
-	if (copy_from_user(&assocparams, optval, optlen))
+	if (copy_from_user(&params, optval, optlen))
 		return -EFAULT;
 
-	asoc = sctp_id2assoc(sk, assocparams.sasoc_assoc_id);
+	asoc = sctp_id2assoc(sk, params.sasoc_assoc_id);
 
-	if (!asoc && assocparams.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 (assocparams.sasoc_asocmaxrxt != 0) {
+		if (params.sasoc_asocmaxrxt != 0) {
 			__u32 path_sum = 0;
 			int   paths = 0;
 			struct sctp_transport *peer_addr;
@@ -3188,24 +3188,24 @@ static int sctp_setsockopt_associnfo(struct sock *sk, char __user *optval, unsig
 			 * then one path.
 			 */
 			if (paths > 1 &&
-			    assocparams.sasoc_asocmaxrxt > path_sum)
+			    params.sasoc_asocmaxrxt > path_sum)
 				return -EINVAL;
 
-			asoc->max_retrans = assocparams.sasoc_asocmaxrxt;
+			asoc->max_retrans = params.sasoc_asocmaxrxt;
 		}
 
-		if (assocparams.sasoc_cookie_life != 0)
-			asoc->cookie_life = ms_to_ktime(assocparams.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 (assocparams.sasoc_asocmaxrxt != 0)
+		if (params.sasoc_asocmaxrxt != 0)
 			sp->assocparams.sasoc_asocmaxrxt =
-						assocparams.sasoc_asocmaxrxt;
-		if (assocparams.sasoc_cookie_life != 0)
+						params.sasoc_asocmaxrxt;
+		if (params.sasoc_cookie_life != 0)
 			sp->assocparams.sasoc_cookie_life =
-						assocparams.sasoc_cookie_life;
+						params.sasoc_cookie_life;
 	}
 	return 0;
 }
-- 
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] 11+ messages in thread

* [PATCH v3 net-next 1/8] sctp: setsockopt, rename some locals.
@ 2020-05-26 16:39 ` David Laight
  0 siblings, 0 replies; 11+ messages in thread
From: David Laight @ 2020-05-26 16:39 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'

Rename locals to avoid clash with structure fields in next patch.

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

---
 net/sctp/socket.c | 46 +++++++++++++++++++++++-----------------------
 1 file changed, 23 insertions(+), 23 deletions(-)

diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index 1b56fc4..c1c8215 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -3088,7 +3088,7 @@ static int sctp_setsockopt_nodelay(struct sock *sk, char __user *optval,
  */
 static int sctp_setsockopt_rtoinfo(struct sock *sk, char __user *optval, unsigned int optlen)
 {
-	struct sctp_rtoinfo rtoinfo;
+	struct sctp_rtoinfo params;
 	struct sctp_association *asoc;
 	unsigned long rto_min, rto_max;
 	struct sctp_sock *sp = sctp_sk(sk);
@@ -3096,18 +3096,18 @@ static int sctp_setsockopt_rtoinfo(struct sock *sk, char __user *optval, unsigne
 	if (optlen != sizeof (struct sctp_rtoinfo))
 		return -EINVAL;
 
-	if (copy_from_user(&rtoinfo, optval, optlen))
+	if (copy_from_user(&params, optval, optlen))
 		return -EFAULT;
 
-	asoc = sctp_id2assoc(sk, rtoinfo.srto_assoc_id);
+	asoc = sctp_id2assoc(sk, params.srto_assoc_id);
 
 	/* Set the values to the specific association */
-	if (!asoc && rtoinfo.srto_assoc_id != SCTP_FUTURE_ASSOC &&
+	if (!asoc && params.srto_assoc_id != SCTP_FUTURE_ASSOC &&
 	    sctp_style(sk, UDP))
 		return -EINVAL;
 
-	rto_max = rtoinfo.srto_max;
-	rto_min = rtoinfo.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;
@@ -3123,17 +3123,17 @@ static int sctp_setsockopt_rtoinfo(struct sock *sk, char __user *optval, unsigne
 		return -EINVAL;
 
 	if (asoc) {
-		if (rtoinfo.srto_initial != 0)
+		if (params.srto_initial != 0)
 			asoc->rto_initial -				msecs_to_jiffies(rtoinfo.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 (rtoinfo.srto_initial != 0)
-			sp->rtoinfo.srto_initial = rtoinfo.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;
 	}
@@ -3155,23 +3155,23 @@ static int sctp_setsockopt_rtoinfo(struct sock *sk, char __user *optval, unsigne
 static int sctp_setsockopt_associnfo(struct sock *sk, char __user *optval, unsigned int optlen)
 {
 
-	struct sctp_assocparams assocparams;
+	struct sctp_assocparams params;
 	struct sctp_association *asoc;
 
 	if (optlen != sizeof(struct sctp_assocparams))
 		return -EINVAL;
-	if (copy_from_user(&assocparams, optval, optlen))
+	if (copy_from_user(&params, optval, optlen))
 		return -EFAULT;
 
-	asoc = sctp_id2assoc(sk, assocparams.sasoc_assoc_id);
+	asoc = sctp_id2assoc(sk, params.sasoc_assoc_id);
 
-	if (!asoc && assocparams.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 (assocparams.sasoc_asocmaxrxt != 0) {
+		if (params.sasoc_asocmaxrxt != 0) {
 			__u32 path_sum = 0;
 			int   paths = 0;
 			struct sctp_transport *peer_addr;
@@ -3188,24 +3188,24 @@ static int sctp_setsockopt_associnfo(struct sock *sk, char __user *optval, unsig
 			 * then one path.
 			 */
 			if (paths > 1 &&
-			    assocparams.sasoc_asocmaxrxt > path_sum)
+			    params.sasoc_asocmaxrxt > path_sum)
 				return -EINVAL;
 
-			asoc->max_retrans = assocparams.sasoc_asocmaxrxt;
+			asoc->max_retrans = params.sasoc_asocmaxrxt;
 		}
 
-		if (assocparams.sasoc_cookie_life != 0)
-			asoc->cookie_life = ms_to_ktime(assocparams.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 (assocparams.sasoc_asocmaxrxt != 0)
+		if (params.sasoc_asocmaxrxt != 0)
 			sp->assocparams.sasoc_asocmaxrxt -						assocparams.sasoc_asocmaxrxt;
-		if (assocparams.sasoc_cookie_life != 0)
+						params.sasoc_asocmaxrxt;
+		if (params.sasoc_cookie_life != 0)
 			sp->assocparams.sasoc_cookie_life -						assocparams.sasoc_cookie_life;
+						params.sasoc_cookie_life;
 	}
 	return 0;
 }
-- 
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] 11+ messages in thread

* [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
  2020-05-26 16:39 ` David Laight
@ 2020-05-26 16:40 ` David Laight
  -1 siblings, 0 replies; 11+ 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] 11+ messages in thread

* [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
@ 2020-05-26 16:40 ` David Laight
  0 siblings, 0 replies; 11+ 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] 11+ messages in thread

* RE: [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
  -1 siblings, 0 replies; 11+ 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] 11+ messages in thread

* RE: [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
@ 2020-05-26 16:44   ` David Laight
  0 siblings, 0 replies; 11+ 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'

VGhpcyBzaG91bGQgYmUgMy84Lg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZy
b206IG5ldGRldi1vd25lckB2Z2VyLmtlcm5lbC5vcmcgPG5ldGRldi1vd25lckB2Z2VyLmtlcm5l
bC5vcmc+IE9uIEJlaGFsZiBPZiBEYXZpZCBMYWlnaHQNCj4gU2VudDogMjYgTWF5IDIwMjAgMTc6
NDANCj4gVG86ICdWbGFkIFlhc2V2aWNoJyA8dnlhc2V2aWNoQGdtYWlsLmNvbT47ICdOZWlsIEhv
cm1hbicgPG5ob3JtYW5AdHV4ZHJpdmVyLmNvbT47ICdEYXZpZCBTLiBNaWxsZXInDQo+IDxkYXZl
bUBkYXZlbWxvZnQubmV0PjsgJ0pha3ViIEtpY2luc2tpJyA8a3ViYUBrZXJuZWwub3JnPjsgJ2xp
bnV4LXNjdHBAdmdlci5rZXJuZWwub3JnJyA8bGludXgtDQo+IHNjdHBAdmdlci5rZXJuZWwub3Jn
PjsgJ25ldGRldkB2Z2VyLmtlcm5lbC5vcmcnIDxuZXRkZXZAdmdlci5rZXJuZWwub3JnPjsgJ0No
cmlzdG9waCBIZWxsd2lnJw0KPiA8aGNoQGxzdC5kZT47ICdNYXJjZWxvIFJpY2FyZG8gTGVpdG5l
cicgPG1hcmNlbG8ubGVpdG5lckBnbWFpbC5jb20+DQo+IFN1YmplY3Q6IFtQQVRDSCB2MyBuZXQt
bmV4dCAxLzhdIHNjdHA6IHNldHNvY2tvcHQsIGV4cGFuZCBzb21lICNkZWZpbmVzDQo+IA0KPiBF
eHBhbmQgdGhlICNkZWZpbmUgZm9vICgqZm9vKSB1c2VkIHRvIHNpbXBsaWZ5IHRoZSBwcmV2aW91
cyBwYXRjaC4NCj4gRG9lc24ndCBjaGFuZ2UgdGhlIGdlbmVyYXRlZCBjb2RlLg0KPiANCj4gU2ln
bmVkLW9mZi1ieTogRGF2aWQgTGFpZ2h0IDxkYXZpZC5sYWlnaHRAYWN1bGFiLmNvbT4NCj4gDQo+
IC0tLQ0KPiAgbmV0L3NjdHAvc29ja2V0LmMgfCA2ODcgKysrKysrKysrKysrKysrKysrKysrKysr
KystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICAxIGZpbGUgY2hhbmdlZCwgMzMxIGlu
c2VydGlvbnMoKyksIDM1NiBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9uZXQvc2N0
cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jDQo+IGluZGV4IDYzOWQ3ZGEuLmI4MDY4ZGEg
MTAwNjQ0DQo+IC0tLSBhL25ldC9zY3RwL3NvY2tldC5jDQo+ICsrKyBiL25ldC9zY3RwL3NvY2tl
dC5jDQo+IEBAIC0yNTg1LDkgKzI1ODUsOCBAQCBzdGF0aWMgaW50IHNjdHBfYXBwbHlfcGVlcl9h
ZGRyX3BhcmFtcyhzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyAqcGFyYW1zLA0KPiAgCXJldHVybiAw
Ow0KPiAgfQ0KPiANCj4gLSNkZWZpbmUgcGFyYW1zICgqcGFyYW1zKQ0KPiAgc3RhdGljIGludCBz
Y3RwX3NldHNvY2tvcHRfcGVlcl9hZGRyX3BhcmFtcyhzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJ
CSAgICBzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyBwYXJhbXMsDQo+ICsJCQkJCSAgICBzdHJ1Y3Qg
c2N0cF9wYWRkcnBhcmFtcyAqcGFyYW1zLA0KPiAgCQkJCQkgICAgdW5zaWduZWQgaW50IG9wdGxl
bikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgICAqdHJhbnMgPSBOVUxMOw0KPiBA
QCAtMjU5NiwzMyArMjU5NSwzMyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9wZWVyX2Fk
ZHJfcGFyYW1zKHN0cnVjdCBzb2NrICpzaywNCj4gIAlpbnQgZXJyb3I7DQo+ICAJaW50IGhiX2No
YW5nZSwgcG10dWRfY2hhbmdlLCBzYWNrZGVsYXlfY2hhbmdlOw0KPiANCj4gLQlpZiAob3B0bGVu
ICE9IHNpemVvZihwYXJhbXMpKSB7DQo+ICsJaWYgKG9wdGxlbiAhPSBzaXplb2YoKnBhcmFtcykp
IHsNCj4gIAkJaWYgKG9wdGxlbiAhPSBBTElHTihvZmZzZXRvZihzdHJ1Y3Qgc2N0cF9wYWRkcnBh
cmFtcywNCj4gIAkJCQkJCSAgICBzcHBfaXB2Nl9mbG93bGFiZWwpLCA0KSkNCj4gIAkJCXJldHVy
biAtRUlOVkFMOw0KPiAtCQlpZiAocGFyYW1zLnNwcF9mbGFncyAmIChTUFBfRFNDUCB8IFNQUF9J
UFY2X0ZMT1dMQUJFTCkpDQo+ICsJCWlmIChwYXJhbXMtPnNwcF9mbGFncyAmIChTUFBfRFNDUCB8
IFNQUF9JUFY2X0ZMT1dMQUJFTCkpDQo+ICAJCQlyZXR1cm4gLUVJTlZBTDsNCj4gIAl9DQo+IA0K
PiAgCS8qIFZhbGlkYXRlIGZsYWdzIGFuZCB2YWx1ZSBwYXJhbWV0ZXJzLiAqLw0KPiAtCWhiX2No
YW5nZSAgICAgICAgPSBwYXJhbXMuc3BwX2ZsYWdzICYgU1BQX0hCOw0KPiAtCXBtdHVkX2NoYW5n
ZSAgICAgPSBwYXJhbXMuc3BwX2ZsYWdzICYgU1BQX1BNVFVEOw0KPiAtCXNhY2tkZWxheV9jaGFu
Z2UgPSBwYXJhbXMuc3BwX2ZsYWdzICYgU1BQX1NBQ0tERUxBWTsNCj4gKwloYl9jaGFuZ2UgICAg
ICAgID0gcGFyYW1zLT5zcHBfZmxhZ3MgJiBTUFBfSEI7DQo+ICsJcG10dWRfY2hhbmdlICAgICA9
IHBhcmFtcy0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEOw0KPiArCXNhY2tkZWxheV9jaGFuZ2UgPSBw
YXJhbXMtPnNwcF9mbGFncyAmIFNQUF9TQUNLREVMQVk7DQo+IA0KPiAgCWlmIChoYl9jaGFuZ2Ug
ICAgICAgID09IFNQUF9IQiB8fA0KPiAgCSAgICBwbXR1ZF9jaGFuZ2UgICAgID09IFNQUF9QTVRV
RCB8fA0KPiAgCSAgICBzYWNrZGVsYXlfY2hhbmdlID09IFNQUF9TQUNLREVMQVkgfHwNCj4gLQkg
ICAgcGFyYW1zLnNwcF9zYWNrZGVsYXkgPiA1MDAgfHwNCj4gLQkgICAgKHBhcmFtcy5zcHBfcGF0
aG10dSAmJg0KPiAtCSAgICAgcGFyYW1zLnNwcF9wYXRobXR1IDwgU0NUUF9ERUZBVUxUX01JTlNF
R01FTlQpKQ0KPiArCSAgICBwYXJhbXMtPnNwcF9zYWNrZGVsYXkgPiA1MDAgfHwNCj4gKwkgICAg
KHBhcmFtcy0+c3BwX3BhdGhtdHUgJiYNCj4gKwkgICAgIHBhcmFtcy0+c3BwX3BhdGhtdHUgPCBT
Q1RQX0RFRkFVTFRfTUlOU0VHTUVOVCkpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAkv
KiBJZiBhbiBhZGRyZXNzIG90aGVyIHRoYW4gSU5BRERSX0FOWSBpcyBzcGVjaWZpZWQsIGFuZA0K
PiAgCSAqIG5vIHRyYW5zcG9ydCBpcyBmb3VuZCwgdGhlbiB0aGUgcmVxdWVzdCBpcyBpbnZhbGlk
Lg0KPiAgCSAqLw0KPiAtCWlmICghc2N0cF9pc19hbnkoc2ssICh1bmlvbiBzY3RwX2FkZHIgKikm
cGFyYW1zLnNwcF9hZGRyZXNzKSkgew0KPiAtCQl0cmFucyA9IHNjdHBfYWRkcl9pZDJ0cmFuc3Bv
cnQoc2ssICZwYXJhbXMuc3BwX2FkZHJlc3MsDQo+IC0JCQkJCSAgICAgICBwYXJhbXMuc3BwX2Fz
c29jX2lkKTsNCj4gKwlpZiAoIXNjdHBfaXNfYW55KHNrLCAodW5pb24gc2N0cF9hZGRyICopJnBh
cmFtcy0+c3BwX2FkZHJlc3MpKSB7DQo+ICsJCXRyYW5zID0gc2N0cF9hZGRyX2lkMnRyYW5zcG9y
dChzaywgJnBhcmFtcy0+c3BwX2FkZHJlc3MsDQo+ICsJCQkJCSAgICAgICBwYXJhbXMtPnNwcF9h
c3NvY19pZCk7DQo+ICAJCWlmICghdHJhbnMpDQo+ICAJCQlyZXR1cm4gLUVJTlZBTDsNCj4gIAl9
DQo+IEBAIC0yNjMxLDE5ICsyNjMwLDE5IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3Bl
ZXJfYWRkcl9wYXJhbXMoc3RydWN0IHNvY2sgKnNrLA0KPiAgCSAqIHNvY2tldCBpcyBhIG9uZSB0
byBtYW55IHN0eWxlIHNvY2tldCwgYW5kIGFuIGFzc29jaWF0aW9uDQo+ICAJICogd2FzIG5vdCBm
b3VuZCwgdGhlbiB0aGUgaWQgd2FzIGludmFsaWQuDQo+ICAJICovDQo+IC0JYXNvYyA9IHNjdHBf
aWQyYXNzb2Moc2ssIHBhcmFtcy5zcHBfYXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiBwYXJh
bXMuc3BwX2Fzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBf
aWQyYXNzb2Moc2ssIHBhcmFtcy0+c3BwX2Fzc29jX2lkKTsNCj4gKwlpZiAoIWFzb2MgJiYgcGFy
YW1zLT5zcHBfYXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNTT0MgJiYNCj4gIAkgICAgc2N0cF9z
dHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCS8qIEhlYXJ0YmVh
dCBkZW1hbmQgY2FuIG9ubHkgYmUgc2VudCBvbiBhIHRyYW5zcG9ydCBvcg0KPiAgCSAqIGFzc29j
aWF0aW9uLCBidXQgbm90IGEgc29ja2V0Lg0KPiAgCSAqLw0KPiAtCWlmIChwYXJhbXMuc3BwX2Zs
YWdzICYgU1BQX0hCX0RFTUFORCAmJiAhdHJhbnMgJiYgIWFzb2MpDQo+ICsJaWYgKHBhcmFtcy0+
c3BwX2ZsYWdzICYgU1BQX0hCX0RFTUFORCAmJiAhdHJhbnMgJiYgIWFzb2MpDQo+ICAJCXJldHVy
biAtRUlOVkFMOw0KPiANCj4gIAkvKiBQcm9jZXNzIHBhcmFtZXRlcnMuICovDQo+IC0JZXJyb3Ig
PSBzY3RwX2FwcGx5X3BlZXJfYWRkcl9wYXJhbXMoJnBhcmFtcywgdHJhbnMsIGFzb2MsIHNwLA0K
PiArCWVycm9yID0gc2N0cF9hcHBseV9wZWVyX2FkZHJfcGFyYW1zKHBhcmFtcywgdHJhbnMsIGFz
b2MsIHNwLA0KPiAgCQkJCQkgICAgaGJfY2hhbmdlLCBwbXR1ZF9jaGFuZ2UsDQo+ICAJCQkJCSAg
ICBzYWNrZGVsYXlfY2hhbmdlKTsNCj4gDQo+IEBAIC0yNjU2LDcgKzI2NTUsNyBAQCBzdGF0aWMg
aW50IHNjdHBfc2V0c29ja29wdF9wZWVyX2FkZHJfcGFyYW1zKHN0cnVjdCBzb2NrICpzaywNCj4g
IAlpZiAoIXRyYW5zICYmIGFzb2MpIHsNCj4gIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywg
JmFzb2MtPnBlZXIudHJhbnNwb3J0X2FkZHJfbGlzdCwNCj4gIAkJCQl0cmFuc3BvcnRzKSB7DQo+
IC0JCQlzY3RwX2FwcGx5X3BlZXJfYWRkcl9wYXJhbXMoJnBhcmFtcywgdHJhbnMsIGFzb2MsIHNw
LA0KPiArCQkJc2N0cF9hcHBseV9wZWVyX2FkZHJfcGFyYW1zKHBhcmFtcywgdHJhbnMsIGFzb2Ms
IHNwLA0KPiAgCQkJCQkJICAgIGhiX2NoYW5nZSwgcG10dWRfY2hhbmdlLA0KPiAgCQkJCQkJICAg
IHNhY2tkZWxheV9jaGFuZ2UpOw0KPiAgCQl9DQo+IEBAIC0yNjY0LDcgKzI2NjMsNiBAQCBzdGF0
aWMgaW50IHNjdHBfc2V0c29ja29wdF9wZWVyX2FkZHJfcGFyYW1zKHN0cnVjdCBzb2NrICpzaywN
Cj4gDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IC0jdW5kZWYgcGFyYW1zDQo+IA0KPiAgc3RhdGlj
IGlubGluZSBfX3UzMiBzY3RwX3NwcF9zYWNrZGVsYXlfZW5hYmxlKF9fdTMyIHBhcmFtX2ZsYWdz
KQ0KPiAgew0KPiBAQCAtMjc0OSwxNiArMjc0NywxNSBAQCBzdGF0aWMgdm9pZCBzY3RwX2FwcGx5
X2Fzb2NfZGVsYXllZF9hY2soc3RydWN0IHNjdHBfc2Fja19pbmZvICpwYXJhbXMsDQo+ICAgKiAg
ICB2YWx1ZSB0byAxIHdpbGwgZGlzYWJsZSB0aGUgZGVsYXllZCBzYWNrIGFsZ29yaXRobS4NCj4g
ICAqLw0KPiANCj4gLSNkZWZpbmUgcGFyYW1zICgqcGFyYW1zKQ0KPiAgc3RhdGljIGludCBzY3Rw
X3NldHNvY2tvcHRfZGVsYXllZF9hY2soc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCSAgICAgICBz
dHJ1Y3Qgc2N0cF9zYWNrX2luZm8gcGFyYW1zLA0KPiArCQkJCSAgICAgICBzdHJ1Y3Qgc2N0cF9z
YWNrX2luZm8gKnBhcmFtcywNCj4gIAkJCQkgICAgICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4g
IHsNCj4gIAlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiAgCXN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiANCj4gIAlpZiAob3B0bGVuID09IHNpemVvZihzdHJ1
Y3Qgc2N0cF9zYWNrX2luZm8pKSB7DQo+IC0JCWlmIChwYXJhbXMuc2Fja19kZWxheSA9PSAwICYm
IHBhcmFtcy5zYWNrX2ZyZXEgPT0gMCkNCj4gKwkJaWYgKHBhcmFtcy0+c2Fja19kZWxheSA9PSAw
ICYmIHBhcmFtcy0+c2Fja19mcmVxID09IDApDQo+ICAJCQlyZXR1cm4gMDsNCj4gIAl9IGVsc2Ug
aWYgKG9wdGxlbiA9PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSB7DQo+ICAJCXBy
X3dhcm5fcmF0ZWxpbWl0ZWQoREVQUkVDQVRFRA0KPiBAQCAtMjc2Niw1NiArMjc2Myw1NiBAQCBz
dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWxheWVkX2FjayhzdHJ1Y3Qgc29jayAqc2ssDQo+
ICAJCQkJICAgICJVc2Ugb2Ygc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW4gZGVsYXllZF9hY2sg
c29ja2V0IG9wdGlvbi5cbiINCj4gIAkJCQkgICAgIlVzZSBzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8g
aW5zdGVhZFxuIiwNCj4gIAkJCQkgICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVu
dCkpOw0KPiAtCQlpZiAocGFyYW1zLnNhY2tfZGVsYXkgPT0gMCkNCj4gLQkJCXBhcmFtcy5zYWNr
X2ZyZXEgPSAxOw0KPiArCQlpZiAocGFyYW1zLT5zYWNrX2RlbGF5ID09IDApDQo+ICsJCQlwYXJh
bXMtPnNhY2tfZnJlcSA9IDE7DQo+ICAJCWVsc2UNCj4gLQkJCXBhcmFtcy5zYWNrX2ZyZXEgPSAw
Ow0KPiArCQkJcGFyYW1zLT5zYWNrX2ZyZXEgPSAwOw0KPiAgCX0gZWxzZQ0KPiAgCQlyZXR1cm4g
LUVJTlZBTDsNCj4gDQo+ICAJLyogVmFsaWRhdGUgdmFsdWUgcGFyYW1ldGVyLiAqLw0KPiAtCWlm
IChwYXJhbXMuc2Fja19kZWxheSA+IDUwMCkNCj4gKwlpZiAocGFyYW1zLT5zYWNrX2RlbGF5ID4g
NTAwKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+ICAJLyogR2V0IGFzc29jaWF0aW9uLCBp
ZiBzYWNrX2Fzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DIGFuZCB0aGUNCj4gIAkgKiBzb2Nr
ZXQgaXMgYSBvbmUgdG8gbWFueSBzdHlsZSBzb2NrZXQsIGFuZCBhbiBhc3NvY2lhdGlvbg0KPiAg
CSAqIHdhcyBub3QgZm91bmQsIHRoZW4gdGhlIGlkIHdhcyBpbnZhbGlkLg0KPiAgCSAqLw0KPiAt
CWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMuc2Fja19hc3NvY19pZCk7DQo+IC0JaWYg
KCFhc29jICYmIHBhcmFtcy5zYWNrX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4gKwlh
c29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5zYWNrX2Fzc29jX2lkKTsNCj4gKwlpZiAo
IWFzb2MgJiYgcGFyYW1zLT5zYWNrX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4gIAkg
ICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCWlm
IChhc29jKSB7DQo+IC0JCXNjdHBfYXBwbHlfYXNvY19kZWxheWVkX2FjaygmcGFyYW1zLCBhc29j
KTsNCj4gKwkJc2N0cF9hcHBseV9hc29jX2RlbGF5ZWRfYWNrKHBhcmFtcywgYXNvYyk7DQo+IA0K
PiAgCQlyZXR1cm4gMDsNCj4gIAl9DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApKQ0K
PiAtCQlwYXJhbXMuc2Fja19hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQlwYXJh
bXMtPnNhY2tfYXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gDQo+IC0JaWYgKHBhcmFt
cy5zYWNrX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtcy5z
YWNrX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+IC0JCWlmIChwYXJhbXMuc2Fja19k
ZWxheSkgew0KPiAtCQkJc3AtPnNhY2tkZWxheSA9IHBhcmFtcy5zYWNrX2RlbGF5Ow0KPiArCWlm
IChwYXJhbXMtPnNhY2tfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gKwkgICAg
cGFyYW1zLT5zYWNrX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICsJCWlmIChwYXJh
bXMtPnNhY2tfZGVsYXkpIHsNCj4gKwkJCXNwLT5zYWNrZGVsYXkgPSBwYXJhbXMtPnNhY2tfZGVs
YXk7DQo+ICAJCQlzcC0+cGFyYW1fZmxhZ3MgPQ0KPiAgCQkJCXNjdHBfc3BwX3NhY2tkZWxheV9l
bmFibGUoc3AtPnBhcmFtX2ZsYWdzKTsNCj4gIAkJfQ0KPiAtCQlpZiAocGFyYW1zLnNhY2tfZnJl
cSA9PSAxKSB7DQo+ICsJCWlmIChwYXJhbXMtPnNhY2tfZnJlcSA9PSAxKSB7DQo+ICAJCQlzcC0+
cGFyYW1fZmxhZ3MgPQ0KPiAgCQkJCXNjdHBfc3BwX3NhY2tkZWxheV9kaXNhYmxlKHNwLT5wYXJh
bV9mbGFncyk7DQo+IC0JCX0gZWxzZSBpZiAocGFyYW1zLnNhY2tfZnJlcSA+IDEpIHsNCj4gLQkJ
CXNwLT5zYWNrZnJlcSA9IHBhcmFtcy5zYWNrX2ZyZXE7DQo+ICsJCX0gZWxzZSBpZiAocGFyYW1z
LT5zYWNrX2ZyZXEgPiAxKSB7DQo+ICsJCQlzcC0+c2Fja2ZyZXEgPSBwYXJhbXMtPnNhY2tfZnJl
cTsNCj4gIAkJCXNwLT5wYXJhbV9mbGFncyA9DQo+ICAJCQkJc2N0cF9zcHBfc2Fja2RlbGF5X2Vu
YWJsZShzcC0+cGFyYW1fZmxhZ3MpOw0KPiAgCQl9DQo+ICAJfQ0KPiANCj4gLQlpZiAocGFyYW1z
LnNhY2tfYXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtcy5z
YWNrX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiArCWlmIChwYXJhbXMtPnNhY2tfYXNz
b2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DIHx8DQo+ICsJICAgIHBhcmFtcy0+c2Fja19hc3Nv
Y19pZCA9PSBTQ1RQX0FMTF9BU1NPQykNCj4gIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShhc29jLCAm
c3AtPmVwLT5hc29jcywgYXNvY3MpDQo+IC0JCQlzY3RwX2FwcGx5X2Fzb2NfZGVsYXllZF9hY2so
JnBhcmFtcywgYXNvYyk7DQo+ICsJCQlzY3RwX2FwcGx5X2Fzb2NfZGVsYXllZF9hY2socGFyYW1z
LCBhc29jKTsNCj4gDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IEBAIC0yODMxLDggKzI4MjgsNyBA
QCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWxheWVkX2FjayhzdHJ1Y3Qgc29jayAqc2ss
DQo+ICAgKiBieSB0aGUgY2hhbmdlKS4gIFdpdGggVENQLXN0eWxlIHNvY2tldHMsIHRoaXMgb3B0
aW9uIGlzIGluaGVyaXRlZCBieQ0KPiAgICogc29ja2V0cyBkZXJpdmVkIGZyb20gYSBsaXN0ZW5l
ciBzb2NrZXQuDQo+ICAgKi8NCj4gLSNkZWZpbmUgc2luaXQgKCpzaW5pdCkNCj4gLXN0YXRpYyBp
bnQgc2N0cF9zZXRzb2Nrb3B0X2luaXRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2N0cF9p
bml0bXNnIHNpbml0LA0KPiArc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaW5pdG1zZyhzdHJ1
Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX2luaXRtc2cgKnNpbml0LA0KPiAgCQkJCSAgIHVuc2ln
bmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3Nr
KHNrKTsNCj4gQEAgLTI4NDAsMTggKzI4MzYsMTcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tv
cHRfaW5pdG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX2luaXRtc2cgc2luaXQsDQo+
ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdG1zZykpDQo+ICAJCXJldHVy
biAtRUlOVkFMOw0KPiANCj4gLQlpZiAoc2luaXQuc2luaXRfbnVtX29zdHJlYW1zKQ0KPiAtCQlz
cC0+aW5pdG1zZy5zaW5pdF9udW1fb3N0cmVhbXMgPSBzaW5pdC5zaW5pdF9udW1fb3N0cmVhbXM7
DQo+IC0JaWYgKHNpbml0LnNpbml0X21heF9pbnN0cmVhbXMpDQo+IC0JCXNwLT5pbml0bXNnLnNp
bml0X21heF9pbnN0cmVhbXMgPSBzaW5pdC5zaW5pdF9tYXhfaW5zdHJlYW1zOw0KPiAtCWlmIChz
aW5pdC5zaW5pdF9tYXhfYXR0ZW1wdHMpDQo+IC0JCXNwLT5pbml0bXNnLnNpbml0X21heF9hdHRl
bXB0cyA9IHNpbml0LnNpbml0X21heF9hdHRlbXB0czsNCj4gLQlpZiAoc2luaXQuc2luaXRfbWF4
X2luaXRfdGltZW8pDQo+IC0JCXNwLT5pbml0bXNnLnNpbml0X21heF9pbml0X3RpbWVvID0gc2lu
aXQuc2luaXRfbWF4X2luaXRfdGltZW87DQo+ICsJaWYgKHNpbml0LT5zaW5pdF9udW1fb3N0cmVh
bXMpDQo+ICsJCXNwLT5pbml0bXNnLnNpbml0X251bV9vc3RyZWFtcyA9IHNpbml0LT5zaW5pdF9u
dW1fb3N0cmVhbXM7DQo+ICsJaWYgKHNpbml0LT5zaW5pdF9tYXhfaW5zdHJlYW1zKQ0KPiArCQlz
cC0+aW5pdG1zZy5zaW5pdF9tYXhfaW5zdHJlYW1zID0gc2luaXQtPnNpbml0X21heF9pbnN0cmVh
bXM7DQo+ICsJaWYgKHNpbml0LT5zaW5pdF9tYXhfYXR0ZW1wdHMpDQo+ICsJCXNwLT5pbml0bXNn
LnNpbml0X21heF9hdHRlbXB0cyA9IHNpbml0LT5zaW5pdF9tYXhfYXR0ZW1wdHM7DQo+ICsJaWYg
KHNpbml0LT5zaW5pdF9tYXhfaW5pdF90aW1lbykNCj4gKwkJc3AtPmluaXRtc2cuc2luaXRfbWF4
X2luaXRfdGltZW8gPSBzaW5pdC0+c2luaXRfbWF4X2luaXRfdGltZW87DQo+IA0KPiAgCXJldHVy
biAwOw0KPiAgfQ0KPiAtI3VuZGVmIHNpbml0DQo+IA0KPiAgLyoNCj4gICAqIDcuMS4xNCBTZXQg
ZGVmYXVsdCBzZW5kIHBhcmFtZXRlcnMgKFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNKQ0KPiBAQCAt
Mjg2Nyw1NiArMjg2Miw1NSBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9pbml0bXNnKHN0
cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfaW5pdG1zZyBzaW5pdCwNCj4gICAqICAgc2luZm9f
dGltZXRvbGl2ZS4gIFRoZSB1c2VyIG11c3QgcHJvdmlkZSB0aGUgc2luZm9fYXNzb2NfaWQgZmll
bGQgaW4NCj4gICAqICAgdG8gdGhpcyBjYWxsIGlmIHRoZSBjYWxsZXIgaXMgdXNpbmcgdGhlIFVE
UCBtb2RlbC4NCj4gICAqLw0KPiAtI2RlZmluZSBpbmZvICgqaW5mbykNCj4gIHN0YXRpYyBpbnQg
c2N0cF9zZXRzb2Nrb3B0X2RlZmF1bHRfc2VuZF9wYXJhbShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0J
CQkJCSAgICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gaW5mbywNCj4gKwkJCQkJICAgICAgc3Ry
dWN0IHNjdHBfc25kcmN2aW5mbyAqaW5mbywNCj4gIAkJCQkJICAgICAgdW5zaWduZWQgaW50IG9w
dGxlbikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiAg
CXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiANCj4gLQlpZiAob3B0bGVuICE9IHNp
emVvZihpbmZvKSkNCj4gKwlpZiAob3B0bGVuICE9IHNpemVvZigqaW5mbykpDQo+ICAJCXJldHVy
biAtRUlOVkFMOw0KPiAtCWlmIChpbmZvLnNpbmZvX2ZsYWdzICYNCj4gKwlpZiAoaW5mby0+c2lu
Zm9fZmxhZ3MgJg0KPiAgCSAgICB+KFNDVFBfVU5PUkRFUkVEIHwgU0NUUF9BRERSX09WRVIgfA0K
PiAgCSAgICAgIFNDVFBfQUJPUlQgfCBTQ1RQX0VPRikpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0K
PiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgaW5mby5zaW5mb19hc3NvY19pZCk7DQo+
IC0JaWYgKCFhc29jICYmIGluZm8uc2luZm9fYXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0K
PiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBpbmZvLT5zaW5mb19hc3NvY19pZCk7DQo+ICsJ
aWYgKCFhc29jICYmIGluZm8tPnNpbmZvX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4g
IAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAg
CWlmIChhc29jKSB7DQo+IC0JCWFzb2MtPmRlZmF1bHRfc3RyZWFtID0gaW5mby5zaW5mb19zdHJl
YW07DQo+IC0JCWFzb2MtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLnNpbmZvX2ZsYWdzOw0KPiAtCQlh
c29jLT5kZWZhdWx0X3BwaWQgPSBpbmZvLnNpbmZvX3BwaWQ7DQo+IC0JCWFzb2MtPmRlZmF1bHRf
Y29udGV4dCA9IGluZm8uc2luZm9fY29udGV4dDsNCj4gLQkJYXNvYy0+ZGVmYXVsdF90aW1ldG9s
aXZlID0gaW5mby5zaW5mb190aW1ldG9saXZlOw0KPiArCQlhc29jLT5kZWZhdWx0X3N0cmVhbSA9
IGluZm8tPnNpbmZvX3N0cmVhbTsNCj4gKwkJYXNvYy0+ZGVmYXVsdF9mbGFncyA9IGluZm8tPnNp
bmZvX2ZsYWdzOw0KPiArCQlhc29jLT5kZWZhdWx0X3BwaWQgPSBpbmZvLT5zaW5mb19wcGlkOw0K
PiArCQlhc29jLT5kZWZhdWx0X2NvbnRleHQgPSBpbmZvLT5zaW5mb19jb250ZXh0Ow0KPiArCQlh
c29jLT5kZWZhdWx0X3RpbWV0b2xpdmUgPSBpbmZvLT5zaW5mb190aW1ldG9saXZlOw0KPiANCj4g
IAkJcmV0dXJuIDA7DQo+ICAJfQ0KPiANCj4gIAlpZiAoc2N0cF9zdHlsZShzaywgVENQKSkNCj4g
LQkJaW5mby5zaW5mb19hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQlpbmZvLT5z
aW5mb19hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiANCj4gLQlpZiAoaW5mby5zaW5m
b19hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQyB8fA0KPiAtCSAgICBpbmZvLnNpbmZvX2Fz
c29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+IC0JCXNwLT5kZWZhdWx0X3N0cmVhbSA9IGlu
Zm8uc2luZm9fc3RyZWFtOw0KPiAtCQlzcC0+ZGVmYXVsdF9mbGFncyA9IGluZm8uc2luZm9fZmxh
Z3M7DQo+IC0JCXNwLT5kZWZhdWx0X3BwaWQgPSBpbmZvLnNpbmZvX3BwaWQ7DQo+IC0JCXNwLT5k
ZWZhdWx0X2NvbnRleHQgPSBpbmZvLnNpbmZvX2NvbnRleHQ7DQo+IC0JCXNwLT5kZWZhdWx0X3Rp
bWV0b2xpdmUgPSBpbmZvLnNpbmZvX3RpbWV0b2xpdmU7DQo+ICsJaWYgKGluZm8tPnNpbmZvX2Fz
c29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+ICsJICAgIGluZm8tPnNpbmZvX2Fzc29j
X2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICsJCXNwLT5kZWZhdWx0X3N0cmVhbSA9IGluZm8t
PnNpbmZvX3N0cmVhbTsNCj4gKwkJc3AtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLT5zaW5mb19mbGFn
czsNCj4gKwkJc3AtPmRlZmF1bHRfcHBpZCA9IGluZm8tPnNpbmZvX3BwaWQ7DQo+ICsJCXNwLT5k
ZWZhdWx0X2NvbnRleHQgPSBpbmZvLT5zaW5mb19jb250ZXh0Ow0KPiArCQlzcC0+ZGVmYXVsdF90
aW1ldG9saXZlID0gaW5mby0+c2luZm9fdGltZXRvbGl2ZTsNCj4gIAl9DQo+IA0KPiAtCWlmIChp
bmZvLnNpbmZvX2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiAtCSAgICBpbmZv
LnNpbmZvX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICsJaWYgKGluZm8tPnNpbmZv
X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICBpbmZvLT5zaW5mb19h
c3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFz
b2MsICZzcC0+ZXAtPmFzb2NzLCBhc29jcykgew0KPiAtCQkJYXNvYy0+ZGVmYXVsdF9zdHJlYW0g
PSBpbmZvLnNpbmZvX3N0cmVhbTsNCj4gLQkJCWFzb2MtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLnNp
bmZvX2ZsYWdzOw0KPiAtCQkJYXNvYy0+ZGVmYXVsdF9wcGlkID0gaW5mby5zaW5mb19wcGlkOw0K
PiAtCQkJYXNvYy0+ZGVmYXVsdF9jb250ZXh0ID0gaW5mby5zaW5mb19jb250ZXh0Ow0KPiAtCQkJ
YXNvYy0+ZGVmYXVsdF90aW1ldG9saXZlID0gaW5mby5zaW5mb190aW1ldG9saXZlOw0KPiArCQkJ
YXNvYy0+ZGVmYXVsdF9zdHJlYW0gPSBpbmZvLT5zaW5mb19zdHJlYW07DQo+ICsJCQlhc29jLT5k
ZWZhdWx0X2ZsYWdzID0gaW5mby0+c2luZm9fZmxhZ3M7DQo+ICsJCQlhc29jLT5kZWZhdWx0X3Bw
aWQgPSBpbmZvLT5zaW5mb19wcGlkOw0KPiArCQkJYXNvYy0+ZGVmYXVsdF9jb250ZXh0ID0gaW5m
by0+c2luZm9fY29udGV4dDsNCj4gKwkJCWFzb2MtPmRlZmF1bHRfdGltZXRvbGl2ZSA9IGluZm8t
PnNpbmZvX3RpbWV0b2xpdmU7DQo+ICAJCX0NCj4gIAl9DQo+IA0KPiBAQCAtMjkyNyw1MSArMjky
MSw1MSBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWZhdWx0X3NlbmRfcGFyYW0oc3Ry
dWN0IHNvY2sgKnNrLA0KPiAgICogKFNDVFBfREVGQVVMVF9TTkRJTkZPKQ0KPiAgICovDQo+ICBz
dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWZhdWx0X3NuZGluZm8oc3RydWN0IHNvY2sgKnNr
LA0KPiAtCQkJCQkgICBzdHJ1Y3Qgc2N0cF9zbmRpbmZvIGluZm8sDQo+ICsJCQkJCSAgIHN0cnVj
dCBzY3RwX3NuZGluZm8gKmluZm8sDQo+ICAJCQkJCSAgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+
ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsNCj4gIAlzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsNCj4gDQo+IC0JaWYgKG9wdGxlbiAhPSBzaXplb2YoaW5m
bykpDQo+ICsJaWYgKG9wdGxlbiAhPSBzaXplb2YoKmluZm8pKQ0KPiAgCQlyZXR1cm4gLUVJTlZB
TDsNCj4gLQlpZiAoaW5mby5zbmRfZmxhZ3MgJg0KPiArCWlmIChpbmZvLT5zbmRfZmxhZ3MgJg0K
PiAgCSAgICB+KFNDVFBfVU5PUkRFUkVEIHwgU0NUUF9BRERSX09WRVIgfA0KPiAgCSAgICAgIFND
VFBfQUJPUlQgfCBTQ1RQX0VPRikpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gLQlhc29j
ID0gc2N0cF9pZDJhc3NvYyhzaywgaW5mby5zbmRfYXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAm
JiBpbmZvLnNuZF9hc3NvY19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBf
aWQyYXNzb2Moc2ssIGluZm8tPnNuZF9hc3NvY19pZCk7DQo+ICsJaWYgKCFhc29jICYmIGluZm8t
PnNuZF9hc3NvY19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ss
IFVEUCkpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAlpZiAoYXNvYykgew0KPiAtCQlh
c29jLT5kZWZhdWx0X3N0cmVhbSA9IGluZm8uc25kX3NpZDsNCj4gLQkJYXNvYy0+ZGVmYXVsdF9m
bGFncyA9IGluZm8uc25kX2ZsYWdzOw0KPiAtCQlhc29jLT5kZWZhdWx0X3BwaWQgPSBpbmZvLnNu
ZF9wcGlkOw0KPiAtCQlhc29jLT5kZWZhdWx0X2NvbnRleHQgPSBpbmZvLnNuZF9jb250ZXh0Ow0K
PiArCQlhc29jLT5kZWZhdWx0X3N0cmVhbSA9IGluZm8tPnNuZF9zaWQ7DQo+ICsJCWFzb2MtPmRl
ZmF1bHRfZmxhZ3MgPSBpbmZvLT5zbmRfZmxhZ3M7DQo+ICsJCWFzb2MtPmRlZmF1bHRfcHBpZCA9
IGluZm8tPnNuZF9wcGlkOw0KPiArCQlhc29jLT5kZWZhdWx0X2NvbnRleHQgPSBpbmZvLT5zbmRf
Y29udGV4dDsNCj4gDQo+ICAJCXJldHVybiAwOw0KPiAgCX0NCj4gDQo+ICAJaWYgKHNjdHBfc3R5
bGUoc2ssIFRDUCkpDQo+IC0JCWluZm8uc25kX2Fzc29jX2lkID0gU0NUUF9GVVRVUkVfQVNTT0M7
DQo+ICsJCWluZm8tPnNuZF9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiANCj4gLQlp
ZiAoaW5mby5zbmRfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gLQkgICAgaW5m
by5zbmRfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpIHsNCj4gLQkJc3AtPmRlZmF1bHRfc3Ry
ZWFtID0gaW5mby5zbmRfc2lkOw0KPiAtCQlzcC0+ZGVmYXVsdF9mbGFncyA9IGluZm8uc25kX2Zs
YWdzOw0KPiAtCQlzcC0+ZGVmYXVsdF9wcGlkID0gaW5mby5zbmRfcHBpZDsNCj4gLQkJc3AtPmRl
ZmF1bHRfY29udGV4dCA9IGluZm8uc25kX2NvbnRleHQ7DQo+ICsJaWYgKGluZm8tPnNuZF9hc3Nv
Y19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQyB8fA0KPiArCSAgICBpbmZvLT5zbmRfYXNzb2NfaWQg
PT0gU0NUUF9BTExfQVNTT0MpIHsNCj4gKwkJc3AtPmRlZmF1bHRfc3RyZWFtID0gaW5mby0+c25k
X3NpZDsNCj4gKwkJc3AtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLT5zbmRfZmxhZ3M7DQo+ICsJCXNw
LT5kZWZhdWx0X3BwaWQgPSBpbmZvLT5zbmRfcHBpZDsNCj4gKwkJc3AtPmRlZmF1bHRfY29udGV4
dCA9IGluZm8tPnNuZF9jb250ZXh0Ow0KPiAgCX0NCj4gDQo+IC0JaWYgKGluZm8uc25kX2Fzc29j
X2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiAtCSAgICBpbmZvLnNuZF9hc3NvY19pZCA9
PSBTQ1RQX0FMTF9BU1NPQykgew0KPiArCWlmIChpbmZvLT5zbmRfYXNzb2NfaWQgPT0gU0NUUF9D
VVJSRU5UX0FTU09DIHx8DQo+ICsJICAgIGluZm8tPnNuZF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9B
U1NPQykgew0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICZzcC0+ZXAtPmFzb2NzLCBh
c29jcykgew0KPiAtCQkJYXNvYy0+ZGVmYXVsdF9zdHJlYW0gPSBpbmZvLnNuZF9zaWQ7DQo+IC0J
CQlhc29jLT5kZWZhdWx0X2ZsYWdzID0gaW5mby5zbmRfZmxhZ3M7DQo+IC0JCQlhc29jLT5kZWZh
dWx0X3BwaWQgPSBpbmZvLnNuZF9wcGlkOw0KPiAtCQkJYXNvYy0+ZGVmYXVsdF9jb250ZXh0ID0g
aW5mby5zbmRfY29udGV4dDsNCj4gKwkJCWFzb2MtPmRlZmF1bHRfc3RyZWFtID0gaW5mby0+c25k
X3NpZDsNCj4gKwkJCWFzb2MtPmRlZmF1bHRfZmxhZ3MgPSBpbmZvLT5zbmRfZmxhZ3M7DQo+ICsJ
CQlhc29jLT5kZWZhdWx0X3BwaWQgPSBpbmZvLT5zbmRfcHBpZDsNCj4gKwkJCWFzb2MtPmRlZmF1
bHRfY29udGV4dCA9IGluZm8tPnNuZF9jb250ZXh0Ow0KPiAgCQl9DQo+ICAJfQ0KPiANCj4gQEAg
LTI5ODQsOCArMjk3OCw3IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2RlZmF1bHRfc25k
aW5mbyhzdHJ1Y3Qgc29jayAqc2ssDQo+ICAgKiB0aGUgYXNzb2NpYXRpb24gcHJpbWFyeS4gIFRo
ZSBlbmNsb3NlZCBhZGRyZXNzIG11c3QgYmUgb25lIG9mIHRoZQ0KPiAgICogYXNzb2NpYXRpb24g
cGVlcidzIGFkZHJlc3Nlcy4NCj4gICAqLw0KPiAtI2RlZmluZSBwcmltICgqcHJpbSkNCj4gLXN0
YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3ByaW1hcnlfYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0
cnVjdCBzY3RwX3ByaW0gcHJpbSwNCj4gK3N0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3ByaW1h
cnlfYWRkcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX3ByaW0gKnByaW0sDQo+ICAJCQkJ
CXVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0
cmFuczsNCj4gQEAgLTI5OTYsMTcgKzI5ODksMTcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tv
cHRfcHJpbWFyeV9hZGRyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfcHJpbQ0KPiBwcmlt
LA0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+ICAJLyogQWxsb3cgc2VjdXJpdHkgbW9kdWxl
IHRvIHZhbGlkYXRlIGFkZHJlc3MgYnV0IG5lZWQgYWRkcmVzcyBsZW4uICovDQo+IC0JYWYgPSBz
Y3RwX2dldF9hZl9zcGVjaWZpYyhwcmltLnNzcF9hZGRyLnNzX2ZhbWlseSk7DQo+ICsJYWYgPSBz
Y3RwX2dldF9hZl9zcGVjaWZpYyhwcmltLT5zc3BfYWRkci5zc19mYW1pbHkpOw0KPiAgCWlmICgh
YWYpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAllcnIgPSBzZWN1cml0eV9zY3RwX2Jp
bmRfY29ubmVjdChzaywgU0NUUF9QUklNQVJZX0FERFIsDQo+IC0JCQkJCSAoc3RydWN0IHNvY2th
ZGRyICopJnByaW0uc3NwX2FkZHIsDQo+ICsJCQkJCSAoc3RydWN0IHNvY2thZGRyICopJnByaW0t
PnNzcF9hZGRyLA0KPiAgCQkJCQkgYWYtPnNvY2thZGRyX2xlbik7DQo+ICAJaWYgKGVycikNCj4g
IAkJcmV0dXJuIGVycjsNCj4gDQo+IC0JdHJhbnMgPSBzY3RwX2FkZHJfaWQydHJhbnNwb3J0KHNr
LCAmcHJpbS5zc3BfYWRkciwgcHJpbS5zc3BfYXNzb2NfaWQpOw0KPiArCXRyYW5zID0gc2N0cF9h
ZGRyX2lkMnRyYW5zcG9ydChzaywgJnByaW0tPnNzcF9hZGRyLCBwcmltLT5zc3BfYXNzb2NfaWQp
Ow0KPiAgCWlmICghdHJhbnMpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gQEAgLTMwMTQs
NyArMzAwNyw2IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3ByaW1hcnlfYWRkcihzdHJ1
Y3Qgc29jayAqc2ssIHN0cnVjdCBzY3RwX3ByaW0gcHJpbSwNCj4gDQo+ICAJcmV0dXJuIDA7DQo+
ICB9DQo+IC0jdW5kZWYgcHJpbQ0KPiANCj4gIC8qDQo+ICAgKiA3LjEuNSBTQ1RQX05PREVMQVkN
Cj4gQEAgLTMwNDcsNyArMzAzOSw3IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X25vZGVs
YXkoc3RydWN0IHNvY2sgKnNrLCBpbnQgKm9wdHZhbCwNCj4gICAqDQo+ICAgKi8NCj4gIHN0YXRp
YyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3J0b2luZm8oc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCSAg
IHN0cnVjdCBzY3RwX3J0b2luZm8gcGFyYW1zLA0KPiArCQkJCSAgIHN0cnVjdCBzY3RwX3J0b2lu
Zm8gKnBhcmFtcywNCj4gIAkJCQkgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiBAQCAtMzA1NywxNSArMzA0OSwxNSBAQCBz
dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9ydG9pbmZvKHN0cnVjdCBzb2NrICpzaywNCj4gIAlp
ZiAob3B0bGVuICE9IHNpemVvZiAoc3RydWN0IHNjdHBfcnRvaW5mbykpDQo+ICAJCXJldHVybiAt
RUlOVkFMOw0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLnNydG9fYXNz
b2NfaWQpOw0KPiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMtPnNydG9fYXNzb2Nf
aWQpOw0KPiANCj4gIAkvKiBTZXQgdGhlIHZhbHVlcyB0byB0aGUgc3BlY2lmaWMgYXNzb2NpYXRp
b24gKi8NCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLnNydG9fYXNzb2NfaWQgIT0gU0NUUF9GVVRV
UkVfQVNTT0MgJiYNCj4gKwlpZiAoIWFzb2MgJiYgcGFyYW1zLT5zcnRvX2Fzc29jX2lkICE9IFND
VFBfRlVUVVJFX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJCXJl
dHVybiAtRUlOVkFMOw0KPiANCj4gLQlydG9fbWF4ID0gcGFyYW1zLnNydG9fbWF4Ow0KPiAtCXJ0
b19taW4gPSBwYXJhbXMuc3J0b19taW47DQo+ICsJcnRvX21heCA9IHBhcmFtcy0+c3J0b19tYXg7
DQo+ICsJcnRvX21pbiA9IHBhcmFtcy0+c3J0b19taW47DQo+IA0KPiAgCWlmIChydG9fbWF4KQ0K
PiAgCQlydG9fbWF4ID0gYXNvYyA/IG1zZWNzX3RvX2ppZmZpZXMocnRvX21heCkgOiBydG9fbWF4
Ow0KPiBAQCAtMzA4MSwxNyArMzA3MywxNyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9y
dG9pbmZvKHN0cnVjdCBzb2NrICpzaywNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCWlm
IChhc29jKSB7DQo+IC0JCWlmIChwYXJhbXMuc3J0b19pbml0aWFsICE9IDApDQo+ICsJCWlmIChw
YXJhbXMtPnNydG9faW5pdGlhbCAhPSAwKQ0KPiAgCQkJYXNvYy0+cnRvX2luaXRpYWwgPQ0KPiAt
CQkJCW1zZWNzX3RvX2ppZmZpZXMocGFyYW1zLnNydG9faW5pdGlhbCk7DQo+ICsJCQkJbXNlY3Nf
dG9famlmZmllcyhwYXJhbXMtPnNydG9faW5pdGlhbCk7DQo+ICAJCWFzb2MtPnJ0b19tYXggPSBy
dG9fbWF4Ow0KPiAgCQlhc29jLT5ydG9fbWluID0gcnRvX21pbjsNCj4gIAl9IGVsc2Ugew0KPiAg
CQkvKiBJZiB0aGVyZSBpcyBubyBhc3NvY2lhdGlvbiBvciB0aGUgYXNzb2NpYXRpb24taWQgPSAw
DQo+ICAJCSAqIHNldCB0aGUgdmFsdWVzIHRvIHRoZSBlbmRwb2ludC4NCj4gIAkJICovDQo+IC0J
CWlmIChwYXJhbXMuc3J0b19pbml0aWFsICE9IDApDQo+IC0JCQlzcC0+cnRvaW5mby5zcnRvX2lu
aXRpYWwgPSBwYXJhbXMuc3J0b19pbml0aWFsOw0KPiArCQlpZiAocGFyYW1zLT5zcnRvX2luaXRp
YWwgIT0gMCkNCj4gKwkJCXNwLT5ydG9pbmZvLnNydG9faW5pdGlhbCA9IHBhcmFtcy0+c3J0b19p
bml0aWFsOw0KPiAgCQlzcC0+cnRvaW5mby5zcnRvX21heCA9IHJ0b19tYXg7DQo+ICAJCXNwLT5y
dG9pbmZvLnNydG9fbWluID0gcnRvX21pbjsNCj4gIAl9DQo+IEBAIC0zMTExLDcgKzMxMDMsNyBA
QCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9ydG9pbmZvKHN0cnVjdCBzb2NrICpzaywNCj4g
ICAqDQo+ICAgKi8NCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Fzc29jaW5mbyhzdHJ1
Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyBwYXJhbXMs
DQo+ICsJCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyAqcGFyYW1zLA0KPiAgCQkJCSAg
ICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gDQo+IEBAIC0zMTIwLDE1ICszMTEyLDE1
IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Fzc29jaW5mbyhzdHJ1Y3Qgc29jayAqc2ss
DQo+ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NwYXJhbXMpKQ0KPiAg
CQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFt
cy5zYXNvY19hc3NvY19pZCk7DQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+
c2Fzb2NfYXNzb2NfaWQpOw0KPiANCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLnNhc29jX2Fzc29j
X2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJaWYgKCFhc29jICYmIHBhcmFtcy0+c2Fz
b2NfYXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNTT0MgJiYNCj4gIAkgICAgc2N0cF9zdHlsZShz
aywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCS8qIFNldCB0aGUgdmFsdWVz
IHRvIHRoZSBzcGVjaWZpYyBhc3NvY2lhdGlvbiAqLw0KPiAgCWlmIChhc29jKSB7DQo+IC0JCWlm
IChwYXJhbXMuc2Fzb2NfYXNvY21heHJ4dCAhPSAwKSB7DQo+ICsJCWlmIChwYXJhbXMtPnNhc29j
X2Fzb2NtYXhyeHQgIT0gMCkgew0KPiAgCQkJX191MzIgcGF0aF9zdW0gPSAwOw0KPiAgCQkJaW50
ICAgcGF0aHMgPSAwOw0KPiAgCQkJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpwZWVyX2FkZHI7DQo+
IEBAIC0zMTQ1LDI0ICszMTM3LDI0IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Fzc29j
aW5mbyhzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJCQkgKiB0aGVuIG9uZSBwYXRoLg0KPiAgCQkJICov
DQo+ICAJCQlpZiAocGF0aHMgPiAxICYmDQo+IC0JCQkgICAgcGFyYW1zLnNhc29jX2Fzb2NtYXhy
eHQgPiBwYXRoX3N1bSkNCj4gKwkJCSAgICBwYXJhbXMtPnNhc29jX2Fzb2NtYXhyeHQgPiBwYXRo
X3N1bSkNCj4gIAkJCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JCQlhc29jLT5tYXhfcmV0cmFu
cyA9IHBhcmFtcy5zYXNvY19hc29jbWF4cnh0Ow0KPiArCQkJYXNvYy0+bWF4X3JldHJhbnMgPSBw
YXJhbXMtPnNhc29jX2Fzb2NtYXhyeHQ7DQo+ICAJCX0NCj4gDQo+IC0JCWlmIChwYXJhbXMuc2Fz
b2NfY29va2llX2xpZmUgIT0gMCkNCj4gLQkJCWFzb2MtPmNvb2tpZV9saWZlID0gbXNfdG9fa3Rp
bWUocGFyYW1zLnNhc29jX2Nvb2tpZV9saWZlKTsNCj4gKwkJaWYgKHBhcmFtcy0+c2Fzb2NfY29v
a2llX2xpZmUgIT0gMCkNCj4gKwkJCWFzb2MtPmNvb2tpZV9saWZlID0gbXNfdG9fa3RpbWUocGFy
YW1zLT5zYXNvY19jb29raWVfbGlmZSk7DQo+ICAJfSBlbHNlIHsNCj4gIAkJLyogU2V0IHRoZSB2
YWx1ZXMgdG8gdGhlIGVuZHBvaW50ICovDQo+ICAJCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0
cF9zayhzayk7DQo+IA0KPiAtCQlpZiAocGFyYW1zLnNhc29jX2Fzb2NtYXhyeHQgIT0gMCkNCj4g
KwkJaWYgKHBhcmFtcy0+c2Fzb2NfYXNvY21heHJ4dCAhPSAwKQ0KPiAgCQkJc3AtPmFzc29jcGFy
YW1zLnNhc29jX2Fzb2NtYXhyeHQgPQ0KPiAtCQkJCQkJcGFyYW1zLnNhc29jX2Fzb2NtYXhyeHQ7
DQo+IC0JCWlmIChwYXJhbXMuc2Fzb2NfY29va2llX2xpZmUgIT0gMCkNCj4gKwkJCQkJCXBhcmFt
cy0+c2Fzb2NfYXNvY21heHJ4dDsNCj4gKwkJaWYgKHBhcmFtcy0+c2Fzb2NfY29va2llX2xpZmUg
IT0gMCkNCj4gIAkJCXNwLT5hc3NvY3BhcmFtcy5zYXNvY19jb29raWVfbGlmZSA9DQo+IC0JCQkJ
CQlwYXJhbXMuc2Fzb2NfY29va2llX2xpZmU7DQo+ICsJCQkJCQlwYXJhbXMtPnNhc29jX2Nvb2tp
ZV9saWZlOw0KPiAgCX0NCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gQEAgLTMyMjAsNyArMzIxMiw3
IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X21hcHBlZHY0KHN0cnVjdCBzb2NrICpzaywg
aW50ICpvcHR2YWwsDQo+ICAgKiBhc3NvY192YWx1ZTogIFRoaXMgcGFyYW1ldGVyIHNwZWNpZmll
cyB0aGUgbWF4aW11bSBzaXplIGluIGJ5dGVzLg0KPiAgICovDQo+ICBzdGF0aWMgaW50IHNjdHBf
c2V0c29ja29wdF9tYXhzZWcoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCSAgc3RydWN0IHNjdHBf
YXNzb2NfdmFsdWUgcGFyYW1zLA0KPiArCQkJCSAgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKnBh
cmFtcywNCj4gIAkJCQkgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNj
dHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsNCj4gQEAgLTMyMzMsMTYgKzMyMjUsMTYgQEAgc3Rh
dGljIGludCBzY3RwX3NldHNvY2tvcHRfbWF4c2VnKHN0cnVjdCBzb2NrICpzaywNCj4gIAkJCQkg
ICAgIlVzZSBvZiBpbnQgaW4gbWF4c2VnIHNvY2tldCBvcHRpb24uXG4iDQo+ICAJCQkJICAgICJV
c2Ugc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW5zdGVhZFxuIiwNCj4gIAkJCQkgICAgY3VycmVu
dC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOw0KPiAtCQl2YWwgPSAqKGludCAqKSZwYXJh
bXM7DQo+IC0JCXBhcmFtcy5hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQl2YWwg
PSAqKGludCAqKXBhcmFtczsNCj4gKwkJcGFyYW1zLT5hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FT
U09DOw0KPiAgCX0gZWxzZSBpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSkpIHsNCj4gLQkJdmFsID0gcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCQl2YWwgPSBwYXJh
bXMtPmFzc29jX3ZhbHVlOw0KPiAgCX0gZWxzZSB7DQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiAg
CX0NCj4gDQo+IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy5hc3NvY19pZCk7DQo+
IC0JaWYgKCFhc29jICYmIHBhcmFtcy5hc3NvY19pZCAhPSBTQ1RQX0ZVVFVSRV9BU1NPQyAmJg0K
PiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMtPmFzc29jX2lkKTsNCj4gKwlpZiAo
IWFzb2MgJiYgcGFyYW1zLT5hc3NvY19pZCAhPSBTQ1RQX0ZVVFVSRV9BU1NPQyAmJg0KPiAgCSAg
ICBzY3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IEBAIC0z
Mjc3LDkgKzMyNjksOCBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9tYXhzZWcoc3RydWN0
IHNvY2sgKnNrLA0KPiAgICogICBsb2NhbGx5IGJvdW5kIGFkZHJlc3Nlcy4gVGhlIGZvbGxvd2lu
ZyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBtYWtlIGENCj4gICAqICAgc2V0IHByaW1hcnkgcmVxdWVz
dDoNCj4gICAqLw0KPiAtI2RlZmluZSBwcmltICgqcHJpbSkNCj4gIHN0YXRpYyBpbnQgc2N0cF9z
ZXRzb2Nrb3B0X3BlZXJfcHJpbWFyeV9hZGRyKHN0cnVjdCBzb2NrICpzaywNCj4gLQkJCQkJICAg
ICBzdHJ1Y3Qgc2N0cF9zZXRwZWVycHJpbSBwcmltLA0KPiArCQkJCQkgICAgIHN0cnVjdCBzY3Rw
X3NldHBlZXJwcmltICpwcmltLA0KPiAgCQkJCQkgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+
ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jawkqc3A7DQo+IEBAIC0zMjk2LDcgKzMyODcsNyBAQCBz
dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9wZWVyX3ByaW1hcnlfYWRkcihzdHJ1Y3Qgc29jayAq
c2ssDQo+ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfc2V0cGVlcnByaW0pKQ0K
PiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBy
aW0uc3NwcF9hc3NvY19pZCk7DQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHByaW0tPnNz
cHBfYXNzb2NfaWQpOw0KPiAgCWlmICghYXNvYykNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0K
PiBAQCAtMzMwOSwyNiArMzMwMCwyNiBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9wZWVy
X3ByaW1hcnlfYWRkcihzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJaWYgKCFzY3RwX3N0YXRlKGFzb2Ms
IEVTVEFCTElTSEVEKSkNCj4gIAkJcmV0dXJuIC1FTk9UQ09OTjsNCj4gDQo+IC0JYWYgPSBzY3Rw
X2dldF9hZl9zcGVjaWZpYyhwcmltLnNzcHBfYWRkci5zc19mYW1pbHkpOw0KPiArCWFmID0gc2N0
cF9nZXRfYWZfc3BlY2lmaWMocHJpbS0+c3NwcF9hZGRyLnNzX2ZhbWlseSk7DQo+ICAJaWYgKCFh
ZikNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAtCWlmICghYWYtPmFkZHJfdmFsaWQoKHVu
aW9uIHNjdHBfYWRkciAqKSZwcmltLnNzcHBfYWRkciwgc3AsIE5VTEwpKQ0KPiArCWlmICghYWYt
PmFkZHJfdmFsaWQoKHVuaW9uIHNjdHBfYWRkciAqKSZwcmltLT5zc3BwX2FkZHIsIHNwLCBOVUxM
KSkNCj4gIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOw0KPiANCj4gLQlpZiAoIXNjdHBfYXNzb2Nf
bG9va3VwX2xhZGRyKGFzb2MsICh1bmlvbiBzY3RwX2FkZHIgKikmcHJpbS5zc3BwX2FkZHIpKQ0K
PiArCWlmICghc2N0cF9hc3NvY19sb29rdXBfbGFkZHIoYXNvYywgKHVuaW9uIHNjdHBfYWRkciAq
KSZwcmltLT5zc3BwX2FkZHIpKQ0KPiAgCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7DQo+IA0KPiAg
CS8qIEFsbG93IHNlY3VyaXR5IG1vZHVsZSB0byB2YWxpZGF0ZSBhZGRyZXNzLiAqLw0KPiAgCWVy
ciA9IHNlY3VyaXR5X3NjdHBfYmluZF9jb25uZWN0KHNrLCBTQ1RQX1NFVF9QRUVSX1BSSU1BUllf
QUREUiwNCj4gLQkJCQkJIChzdHJ1Y3Qgc29ja2FkZHIgKikmcHJpbS5zc3BwX2FkZHIsDQo+ICsJ
CQkJCSAoc3RydWN0IHNvY2thZGRyICopJnByaW0tPnNzcHBfYWRkciwNCj4gIAkJCQkJIGFmLT5z
b2NrYWRkcl9sZW4pOw0KPiAgCWlmIChlcnIpDQo+ICAJCXJldHVybiBlcnI7DQo+IA0KPiAgCS8q
IENyZWF0ZSBhbiBBU0NPTkYgY2h1bmsgd2l0aCBTRVRfUFJJTUFSWSBwYXJhbWV0ZXIJKi8NCj4g
IAljaHVuayA9IHNjdHBfbWFrZV9hc2NvbmZfc2V0X3ByaW0oYXNvYywNCj4gLQkJCQkJICAodW5p
b24gc2N0cF9hZGRyICopJnByaW0uc3NwcF9hZGRyKTsNCj4gKwkJCQkJICAodW5pb24gc2N0cF9h
ZGRyICopJnByaW0tPnNzcHBfYWRkcik7DQo+ICAJaWYgKCFjaHVuaykNCj4gIAkJcmV0dXJuIC1F
Tk9NRU07DQo+IA0KPiBAQCAtMzMzOCw3ICszMzI5LDYgQEAgc3RhdGljIGludCBzY3RwX3NldHNv
Y2tvcHRfcGVlcl9wcmltYXJ5X2FkZHIoc3RydWN0IHNvY2sgKnNrLA0KPiANCj4gIAlyZXR1cm4g
ZXJyOw0KPiAgfQ0KPiAtI3VuZGVmIHByaW0NCj4gDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0c29j
a29wdF9hZGFwdGF0aW9uX2xheWVyKHN0cnVjdCBzb2NrICpzaywNCj4gIAkJCQkJICAgIHN0cnVj
dCBzY3RwX3NldGFkYXB0YXRpb24gKmFkYXB0YXRpb24sDQo+IEBAIC0zMzY3LDcgKzMzNTcsNyBA
QCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hZGFwdGF0aW9uX2xheWVyKHN0cnVjdCBzb2Nr
ICpzaywNCj4gICAqIHNhdmVkIHdpdGggb3V0Ym91bmQgbWVzc2FnZXMuDQo+ICAgKi8NCj4gIHN0
YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2NvbnRleHQoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJ
CSAgIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkgICBzdHJ1Y3Qgc2N0
cF9hc3NvY192YWx1ZSAqcGFyYW1zLA0KPiAgCQkJCSAgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+
ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsNCj4gQEAgLTMzNzYs
MjggKzMzNjYsMjggQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfY29udGV4dChzdHJ1Y3Qg
c29jayAqc2ssDQo+ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUpKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Mo
c2ssIHBhcmFtcy5hc3NvY19pZCk7DQo+IC0JaWYgKCFhc29jICYmIHBhcmFtcy5hc3NvY19pZCA+
IFNDVFBfQUxMX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+
YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkID4gU0NUUF9BTExf
QVNTT0MgJiYNCj4gIAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5W
QUw7DQo+IA0KPiAgCWlmIChhc29jKSB7DQo+IC0JCWFzb2MtPmRlZmF1bHRfcmN2X2NvbnRleHQg
PSBwYXJhbXMuYXNzb2NfdmFsdWU7DQo+ICsJCWFzb2MtPmRlZmF1bHRfcmN2X2NvbnRleHQgPSBw
YXJhbXMtPmFzc29jX3ZhbHVlOw0KPiANCj4gIAkJcmV0dXJuIDA7DQo+ICAJfQ0KPiANCj4gIAlp
ZiAoc2N0cF9zdHlsZShzaywgVENQKSkNCj4gLQkJcGFyYW1zLmFzc29jX2lkID0gU0NUUF9GVVRV
UkVfQVNTT0M7DQo+ICsJCXBhcmFtcy0+YXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4g
DQo+IC0JaWYgKHBhcmFtcy5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQyB8fA0KPiAtCSAg
ICBwYXJhbXMuYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpDQo+IC0JCXNwLT5kZWZhdWx0X3Jj
dl9jb250ZXh0ID0gcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCWlmIChwYXJhbXMtPmFzc29jX2lk
ID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+ICsJICAgIHBhcmFtcy0+YXNzb2NfaWQgPT0gU0NU
UF9BTExfQVNTT0MpDQo+ICsJCXNwLT5kZWZhdWx0X3Jjdl9jb250ZXh0ID0gcGFyYW1zLT5hc3Nv
Y192YWx1ZTsNCj4gDQo+IC0JaWYgKHBhcmFtcy5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNT
T0MgfHwNCj4gLQkgICAgcGFyYW1zLmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiArCWlm
IChwYXJhbXMtPmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICBwYXJh
bXMtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5
KGFzb2MsICZzcC0+ZXAtPmFzb2NzLCBhc29jcykNCj4gLQkJCWFzb2MtPmRlZmF1bHRfcmN2X2Nv
bnRleHQgPSBwYXJhbXMuYXNzb2NfdmFsdWU7DQo+ICsJCQlhc29jLT5kZWZhdWx0X3Jjdl9jb250
ZXh0ID0gcGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IEBA
IC0zNDg4LDcgKzM0NzgsNyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9wYXJ0aWFsX2Rl
bGl2ZXJ5X3BvaW50KHN0cnVjdCBzb2NrICpzaywNCj4gICAqIGZ1dHVyZSBhc3NvY2lhdGlvbnMg
aW5oZXJpdGluZyB0aGUgc29ja2V0IHZhbHVlLg0KPiAgICovDQo+ICBzdGF0aWMgaW50IHNjdHBf
c2V0c29ja29wdF9tYXhidXJzdChzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAgIHN0cnVjdCBz
Y3RwX2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkgICAgc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUgKnBhcmFtcywNCj4gIAkJCQkgICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gIAlz
dHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiBAQCAtMzUwMCwzNCArMzQ5MCwz
NCBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9tYXhidXJzdChzdHJ1Y3Qgc29jayAqc2ss
DQo+ICAJCQkJICAgICJVc2Ugb2YgaW50IGluIG1heF9idXJzdCBzb2NrZXQgb3B0aW9uIGRlcHJl
Y2F0ZWQuXG4iDQo+ICAJCQkJICAgICJVc2Ugc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgaW5zdGVh
ZFxuIiwNCj4gIAkJCQkgICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOw0K
PiAtCQlwYXJhbXMuYXNzb2NfdmFsdWUgPSAqKGludCAqKSZwYXJhbXM7DQo+IC0JCXBhcmFtcy5h
c3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQlwYXJhbXMtPmFzc29jX3ZhbHVlID0g
KihpbnQgKilwYXJhbXM7DQo+ICsJCXBhcmFtcy0+YXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NP
QzsNCj4gIAl9IGVsc2UgaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUpKSB7DQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiAgCX0NCj4gDQo+IC0JYXNvYyA9IHNjdHBf
aWQyYXNzb2Moc2ssIHBhcmFtcy5hc3NvY19pZCk7DQo+IC0JaWYgKCFhc29jICYmIHBhcmFtcy5h
c3NvY19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ss
IHBhcmFtcy0+YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkID4g
U0NUUF9BTExfQVNTT0MgJiYNCj4gIAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0
dXJuIC1FSU5WQUw7DQo+IA0KPiAgCWlmIChhc29jKSB7DQo+IC0JCWFzb2MtPm1heF9idXJzdCA9
IHBhcmFtcy5hc3NvY192YWx1ZTsNCj4gKwkJYXNvYy0+bWF4X2J1cnN0ID0gcGFyYW1zLT5hc3Nv
Y192YWx1ZTsNCj4gDQo+ICAJCXJldHVybiAwOw0KPiAgCX0NCj4gDQo+ICAJaWYgKHNjdHBfc3R5
bGUoc2ssIFRDUCkpDQo+IC0JCXBhcmFtcy5hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0K
PiArCQlwYXJhbXMtPmFzc29jX2lkID0gU0NUUF9GVVRVUkVfQVNTT0M7DQo+IA0KPiAtCWlmIChw
YXJhbXMuYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gLQkgICAgcGFyYW1zLmFz
c29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiAtCQlzcC0+bWF4X2J1cnN0ID0gcGFyYW1zLmFz
c29jX3ZhbHVlOw0KPiArCWlmIChwYXJhbXMtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09D
IHx8DQo+ICsJICAgIHBhcmFtcy0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpDQo+ICsJCXNw
LT5tYXhfYnVyc3QgPSBwYXJhbXMtPmFzc29jX3ZhbHVlOw0KPiANCj4gLQlpZiAocGFyYW1zLmFz
c29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiAtCSAgICBwYXJhbXMuYXNzb2NfaWQg
PT0gU0NUUF9BTExfQVNTT0MpDQo+ICsJaWYgKHBhcmFtcy0+YXNzb2NfaWQgPT0gU0NUUF9DVVJS
RU5UX0FTU09DIHx8DQo+ICsJICAgIHBhcmFtcy0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0Mp
DQo+ICAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYXNvYywgJnNwLT5lcC0+YXNvY3MsIGFzb2NzKQ0K
PiAtCQkJYXNvYy0+bWF4X2J1cnN0ID0gcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCQkJYXNvYy0+
bWF4X2J1cnN0ID0gcGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gDQo+ICAJcmV0dXJuIDA7DQo+ICB9
DQo+IEBAIC0zNTM5LDkgKzM1MjksOCBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9tYXhi
dXJzdChzdHJ1Y3Qgc29jayAqc2ssDQo+ICAgKiByZWNlaXZlZCBvbmx5IGluIGFuIGF1dGhlbnRp
Y2F0ZWQgd2F5LiAgQ2hhbmdlcyB0byB0aGUgbGlzdCBvZiBjaHVua3MNCj4gICAqIHdpbGwgb25s
eSBlZmZlY3QgZnV0dXJlIGFzc29jaWF0aW9ucyBvbiB0aGUgc29ja2V0Lg0KPiAgICovDQo+IC0j
ZGVmaW5lIHZhbCAoKnZhbCkNCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2F1dGhfY2h1
bmsoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCSAgICAgIHN0cnVjdCBzY3RwX2F1dGhjaHVuayB2
YWwsDQo+ICsJCQkJICAgICAgc3RydWN0IHNjdHBfYXV0aGNodW5rICp2YWwsDQo+ICAJCQkJICAg
ICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAq
ZXAgPSBzY3RwX3NrKHNrKS0+ZXA7DQo+IEBAIC0zNTUyLDcgKzM1NDEsNyBAQCBzdGF0aWMgaW50
IHNjdHBfc2V0c29ja29wdF9hdXRoX2NodW5rKHN0cnVjdCBzb2NrICpzaywNCj4gIAlpZiAob3B0
bGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmspKQ0KPiAgCQlyZXR1cm4gLUVJTlZB
TDsNCj4gDQo+IC0Jc3dpdGNoICh2YWwuc2F1dGhfY2h1bmspIHsNCj4gKwlzd2l0Y2ggKHZhbC0+
c2F1dGhfY2h1bmspIHsNCj4gIAljYXNlIFNDVFBfQ0lEX0lOSVQ6DQo+ICAJY2FzZSBTQ1RQX0NJ
RF9JTklUX0FDSzoNCj4gIAljYXNlIFNDVFBfQ0lEX1NIVVRET1dOX0NPTVBMRVRFOg0KPiBAQCAt
MzU2MSw3ICszNTUwLDcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0aF9jaHVuayhz
dHJ1Y3Qgc29jayAqc2ssDQo+ICAJfQ0KPiANCj4gIAkvKiBhZGQgdGhpcyBjaHVuayBpZCB0byB0
aGUgZW5kcG9pbnQgKi8NCj4gLQlyZXR1cm4gc2N0cF9hdXRoX2VwX2FkZF9jaHVua2lkKGVwLCB2
YWwuc2F1dGhfY2h1bmspOw0KPiArCXJldHVybiBzY3RwX2F1dGhfZXBfYWRkX2NodW5raWQoZXAs
IHZhbC0+c2F1dGhfY2h1bmspOw0KPiAgfQ0KPiANCj4gIC8qDQo+IEBAIC0zNjY2LDcgKzM2NTUs
NyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hdXRoX2tleShzdHJ1Y3Qgc29jayAqc2ss
DQo+ICAgKiB0aGUgYXNzb2NpYXRpb24gc2hhcmVkIGtleS4NCj4gICAqLw0KPiAgc3RhdGljIGlu
dCBzY3RwX3NldHNvY2tvcHRfYWN0aXZlX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAg
ICAgc3RydWN0IHNjdHBfYXV0aGtleWlkIHZhbCwNCj4gKwkJCQkgICAgICBzdHJ1Y3Qgc2N0cF9h
dXRoa2V5aWQgKnZhbCwNCj4gIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0K
PiAgCXN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCA9IHNjdHBfc2soc2spLT5lcDsNCj4gQEAgLTM2
NzYsMjkgKzM2NjUsMjkgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYWN0aXZlX2tleShz
dHJ1Y3Qgc29jayAqc2ssDQo+ICAJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXV0
aGtleWlkKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFz
c29jKHNrLCB2YWwuc2NhY3RfYXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiB2YWwuc2NhY3Rf
YXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0KPiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNr
LCB2YWwtPnNjYWN0X2Fzc29jX2lkKTsNCj4gKwlpZiAoIWFzb2MgJiYgdmFsLT5zY2FjdF9hc3Nv
Y19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+
ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAlpZiAoYXNvYykNCj4gLQkJcmV0dXJuIHNjdHBf
YXV0aF9zZXRfYWN0aXZlX2tleShlcCwgYXNvYywgdmFsLnNjYWN0X2tleW51bWJlcik7DQo+ICsJ
CXJldHVybiBzY3RwX2F1dGhfc2V0X2FjdGl2ZV9rZXkoZXAsIGFzb2MsIHZhbC0+c2NhY3Rfa2V5
bnVtYmVyKTsNCj4gDQo+ICAJaWYgKHNjdHBfc3R5bGUoc2ssIFRDUCkpDQo+IC0JCXZhbC5zY2Fj
dF9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQl2YWwtPnNjYWN0X2Fzc29jX2lk
ID0gU0NUUF9GVVRVUkVfQVNTT0M7DQo+IA0KPiAtCWlmICh2YWwuc2NhY3RfYXNzb2NfaWQgPT0g
U0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gLQkgICAgdmFsLnNjYWN0X2Fzc29jX2lkID09IFNDVFBf
QUxMX0FTU09DKSB7DQo+IC0JCXJldCA9IHNjdHBfYXV0aF9zZXRfYWN0aXZlX2tleShlcCwgYXNv
YywgdmFsLnNjYWN0X2tleW51bWJlcik7DQo+ICsJaWYgKHZhbC0+c2NhY3RfYXNzb2NfaWQgPT0g
U0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gKwkgICAgdmFsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQ
X0FMTF9BU1NPQykgew0KPiArCQlyZXQgPSBzY3RwX2F1dGhfc2V0X2FjdGl2ZV9rZXkoZXAsIGFz
b2MsIHZhbC0+c2NhY3Rfa2V5bnVtYmVyKTsNCj4gIAkJaWYgKHJldCkNCj4gIAkJCXJldHVybiBy
ZXQ7DQo+ICAJfQ0KPiANCj4gLQlpZiAodmFsLnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVO
VF9BU1NPQyB8fA0KPiAtCSAgICB2YWwuc2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0Mp
IHsNCj4gKwlpZiAodmFsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MgfHwN
Cj4gKwkgICAgdmFsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiAgCQls
aXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICZlcC0+YXNvY3MsIGFzb2NzKSB7DQo+ICAJCQlpbnQg
cmVzID0gc2N0cF9hdXRoX3NldF9hY3RpdmVfa2V5KGVwLCBhc29jLA0KPiAtCQkJCQkJCSAgIHZh
bC5zY2FjdF9rZXludW1iZXIpOw0KPiArCQkJCQkJCSAgIHZhbC0+c2NhY3Rfa2V5bnVtYmVyKTsN
Cj4gDQo+ICAJCQlpZiAocmVzICYmICFyZXQpDQo+ICAJCQkJcmV0ID0gcmVzOw0KPiBAQCAtMzcx
NCw3ICszNzAzLDcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYWN0aXZlX2tleShzdHJ1
Y3Qgc29jayAqc2ssDQo+ICAgKiBUaGlzIHNldCBvcHRpb24gd2lsbCBkZWxldGUgYSBzaGFyZWQg
c2VjcmV0IGtleSBmcm9tIHVzZS4NCj4gICAqLw0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tv
cHRfZGVsX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAgc3RydWN0IHNjdHBfYXV0aGtl
eWlkIHZhbCwNCj4gKwkJCQkgICBzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgKnZhbCwNCj4gIAkJCQkg
ICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX2VuZHBvaW50ICpl
cCA9IHNjdHBfc2soc2spLT5lcDsNCj4gQEAgLTM3MjQsMjkgKzM3MTMsMjkgQEAgc3RhdGljIGlu
dCBzY3RwX3NldHNvY2tvcHRfZGVsX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJaWYgKG9wdGxl
biAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGtleWlkKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7
DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCB2YWwuc2NhY3RfYXNzb2NfaWQpOw0K
PiAtCWlmICghYXNvYyAmJiB2YWwuc2NhY3RfYXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0K
PiArCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCB2YWwtPnNjYWN0X2Fzc29jX2lkKTsNCj4gKwlp
ZiAoIWFzb2MgJiYgdmFsLT5zY2FjdF9hc3NvY19pZCA+IFNDVFBfQUxMX0FTU09DICYmDQo+ICAJ
ICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gIAlp
ZiAoYXNvYykNCj4gLQkJcmV0dXJuIHNjdHBfYXV0aF9kZWxfa2V5X2lkKGVwLCBhc29jLCB2YWwu
c2NhY3Rfa2V5bnVtYmVyKTsNCj4gKwkJcmV0dXJuIHNjdHBfYXV0aF9kZWxfa2V5X2lkKGVwLCBh
c29jLCB2YWwtPnNjYWN0X2tleW51bWJlcik7DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBU
Q1ApKQ0KPiAtCQl2YWwuc2NhY3RfYXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gKwkJ
dmFsLT5zY2FjdF9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiANCj4gLQlpZiAodmFs
LnNjYWN0X2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+IC0JICAgIHZhbC5zY2Fj
dF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiAtCQlyZXQgPSBzY3RwX2F1dGhfZGVs
X2tleV9pZChlcCwgYXNvYywgdmFsLnNjYWN0X2tleW51bWJlcik7DQo+ICsJaWYgKHZhbC0+c2Nh
Y3RfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gKwkgICAgdmFsLT5zY2FjdF9h
c3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiArCQlyZXQgPSBzY3RwX2F1dGhfZGVsX2tl
eV9pZChlcCwgYXNvYywgdmFsLT5zY2FjdF9rZXludW1iZXIpOw0KPiAgCQlpZiAocmV0KQ0KPiAg
CQkJcmV0dXJuIHJldDsNCj4gIAl9DQo+IA0KPiAtCWlmICh2YWwuc2NhY3RfYXNzb2NfaWQgPT0g
U0NUUF9DVVJSRU5UX0FTU09DIHx8DQo+IC0JICAgIHZhbC5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQ
X0FMTF9BU1NPQykgew0KPiArCWlmICh2YWwtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVO
VF9BU1NPQyB8fA0KPiArCSAgICB2YWwtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09D
KSB7DQo+ICAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYXNvYywgJmVwLT5hc29jcywgYXNvY3MpIHsN
Cj4gIAkJCWludCByZXMgPSBzY3RwX2F1dGhfZGVsX2tleV9pZChlcCwgYXNvYywNCj4gLQkJCQkJ
CSAgICAgICB2YWwuc2NhY3Rfa2V5bnVtYmVyKTsNCj4gKwkJCQkJCSAgICAgICB2YWwtPnNjYWN0
X2tleW51bWJlcik7DQo+IA0KPiAgCQkJaWYgKHJlcyAmJiAhcmV0KQ0KPiAgCQkJCXJldCA9IHJl
czsNCj4gQEAgLTM3NjIsNyArMzc1MSw3IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Rl
bF9rZXkoc3RydWN0IHNvY2sgKnNrLA0KPiAgICogVGhpcyBzZXQgb3B0aW9uIHdpbGwgZGVhY3Rp
dmF0ZSBhIHNoYXJlZCBzZWNyZXQga2V5Lg0KPiAgICovDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0
c29ja29wdF9kZWFjdGl2YXRlX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJCSAgc3RydWN0
IHNjdHBfYXV0aGtleWlkIHZhbCwNCj4gKwkJCQkJICBzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgKnZh
bCwNCj4gIAkJCQkJICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3Rw
X2VuZHBvaW50ICplcCA9IHNjdHBfc2soc2spLT5lcDsNCj4gQEAgLTM3NzIsMjkgKzM3NjEsMjkg
QEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfZGVhY3RpdmF0ZV9rZXkoc3RydWN0IHNvY2sg
KnNrLA0KPiAgCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlpZCkpDQo+
ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgdmFs
LnNjYWN0X2Fzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgdmFsLnNjYWN0X2Fzc29jX2lkID4g
U0NUUF9BTExfQVNTT0MgJiYNCj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgdmFsLT5zY2Fj
dF9hc3NvY19pZCk7DQo+ICsJaWYgKCFhc29jICYmIHZhbC0+c2NhY3RfYXNzb2NfaWQgPiBTQ1RQ
X0FMTF9BU1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlyZXR1cm4g
LUVJTlZBTDsNCj4gDQo+ICAJaWYgKGFzb2MpDQo+IC0JCXJldHVybiBzY3RwX2F1dGhfZGVhY3Rf
a2V5X2lkKGVwLCBhc29jLCB2YWwuc2NhY3Rfa2V5bnVtYmVyKTsNCj4gKwkJcmV0dXJuIHNjdHBf
YXV0aF9kZWFjdF9rZXlfaWQoZXAsIGFzb2MsIHZhbC0+c2NhY3Rfa2V5bnVtYmVyKTsNCj4gDQo+
ICAJaWYgKHNjdHBfc3R5bGUoc2ssIFRDUCkpDQo+IC0JCXZhbC5zY2FjdF9hc3NvY19pZCA9IFND
VFBfRlVUVVJFX0FTU09DOw0KPiArCQl2YWwtPnNjYWN0X2Fzc29jX2lkID0gU0NUUF9GVVRVUkVf
QVNTT0M7DQo+IA0KPiAtCWlmICh2YWwuc2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNT
T0MgfHwNCj4gLQkgICAgdmFsLnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+
IC0JCXJldCA9IHNjdHBfYXV0aF9kZWFjdF9rZXlfaWQoZXAsIGFzb2MsIHZhbC5zY2FjdF9rZXlu
dW1iZXIpOw0KPiArCWlmICh2YWwtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09D
IHx8DQo+ICsJICAgIHZhbC0+c2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpIHsNCj4g
KwkJcmV0ID0gc2N0cF9hdXRoX2RlYWN0X2tleV9pZChlcCwgYXNvYywgdmFsLT5zY2FjdF9rZXlu
dW1iZXIpOw0KPiAgCQlpZiAocmV0KQ0KPiAgCQkJcmV0dXJuIHJldDsNCj4gIAl9DQo+IA0KPiAt
CWlmICh2YWwuc2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DIHx8DQo+IC0JICAg
IHZhbC5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiArCWlmICh2YWwtPnNj
YWN0X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICB2YWwtPnNjYWN0
X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICAJCWxpc3RfZm9yX2VhY2hfZW50cnko
YXNvYywgJmVwLT5hc29jcywgYXNvY3MpIHsNCj4gIAkJCWludCByZXMgPSBzY3RwX2F1dGhfZGVh
Y3Rfa2V5X2lkKGVwLCBhc29jLA0KPiAtCQkJCQkJCSB2YWwuc2NhY3Rfa2V5bnVtYmVyKTsNCj4g
KwkJCQkJCQkgdmFsLT5zY2FjdF9rZXludW1iZXIpOw0KPiANCj4gIAkJCWlmIChyZXMgJiYgIXJl
dCkNCj4gIAkJCQlyZXQgPSByZXM7DQo+IEBAIC0zODAzLDcgKzM3OTIsNiBAQCBzdGF0aWMgaW50
IHNjdHBfc2V0c29ja29wdF9kZWFjdGl2YXRlX2tleShzdHJ1Y3Qgc29jayAqc2ssDQo+IA0KPiAg
CXJldHVybiByZXQ7DQo+ICB9DQo+IC0jdW5kZWYgdmFsDQo+IA0KPiAgLyoNCj4gICAqIDguMS4y
MyBTQ1RQX0FVVE9fQVNDT05GDQo+IEBAIC0zODE5LDI0ICszODA3LDIzIEBAIHN0YXRpYyBpbnQg
c2N0cF9zZXRzb2Nrb3B0X2RlYWN0aXZhdGVfa2V5KHN0cnVjdCBzb2NrICpzaywNCj4gICAqIE5v
dGUuIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIHNvY2tldCBvcGVyYXRpb24gb3ZlcnJpZGVzIGRl
ZmF1bHQgcGFyYW1ldGVyDQo+ICAgKiBiZWluZyBzZXQgYnkgc3lzY3RsIGFzIHdlbGwgYXMgRnJl
ZUJTRCBpbXBsZW1lbnRhdGlvbg0KPiAgICovDQo+IC0jZGVmaW5lIHZhbCAoKm9wdHZhbCkNCj4g
LXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2F1dG9fYXNjb25mKHN0cnVjdCBzb2NrICpzaywg
aW50IHZhbCwNCj4gK3N0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2F1dG9fYXNjb25mKHN0cnVj
dCBzb2NrICpzaywgaW50ICpvcHR2YWwsDQo+ICAJCQkJICAgICAgIHVuc2lnbmVkIGludCBvcHRs
ZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKHNrKTsNCj4gDQo+
ICAJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQlp
ZiAoIXNjdHBfaXNfZXBfYm91bmRhbGwoc2spICYmIHZhbCkNCj4gKwlpZiAoIXNjdHBfaXNfZXBf
Ym91bmRhbGwoc2spICYmICgqb3B0dmFsKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IC0JaWYg
KCh2YWwgJiYgc3AtPmRvX2F1dG9fYXNjb25mKSB8fCAoIXZhbCAmJiAhc3AtPmRvX2F1dG9fYXNj
b25mKSkNCj4gKwlpZiAoKCgqb3B0dmFsKSAmJiBzcC0+ZG9fYXV0b19hc2NvbmYpIHx8ICghKCpv
cHR2YWwpICYmICFzcC0+ZG9fYXV0b19hc2NvbmYpKQ0KPiAgCQlyZXR1cm4gMDsNCj4gDQo+ICAJ
c3Bpbl9sb2NrX2JoKCZzb2NrX25ldChzayktPnNjdHAuYWRkcl93cV9sb2NrKTsNCj4gLQlpZiAo
dmFsID09IDAgJiYgc3AtPmRvX2F1dG9fYXNjb25mKSB7DQo+ICsJaWYgKCgqb3B0dmFsKSA9PSAw
ICYmIHNwLT5kb19hdXRvX2FzY29uZikgew0KPiAgCQlsaXN0X2RlbCgmc3AtPmF1dG9fYXNjb25m
X2xpc3QpOw0KPiAgCQlzcC0+ZG9fYXV0b19hc2NvbmYgPSAwOw0KPiAtCX0gZWxzZSBpZiAodmFs
ICYmICFzcC0+ZG9fYXV0b19hc2NvbmYpIHsNCj4gKwl9IGVsc2UgaWYgKCgqb3B0dmFsKSAmJiAh
c3AtPmRvX2F1dG9fYXNjb25mKSB7DQo+ICAJCWxpc3RfYWRkX3RhaWwoJnNwLT5hdXRvX2FzY29u
Zl9saXN0LA0KPiAgCQkgICAgJnNvY2tfbmV0KHNrKS0+c2N0cC5hdXRvX2FzY29uZl9zcGxpc3Qp
Ow0KPiAgCQlzcC0+ZG9fYXV0b19hc2NvbmYgPSAxOw0KPiBAQCAtMzg0NCw3ICszODMxLDYgQEAg
c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0b19hc2NvbmYoc3RydWN0IHNvY2sgKnNrLCBp
bnQgdmFsLA0KPiAgCXNwaW5fdW5sb2NrX2JoKCZzb2NrX25ldChzayktPnNjdHAuYWRkcl93cV9s
b2NrKTsNCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gLSN1bmRlZiB2YWwNCj4gDQo+ICAvKg0KPiAg
ICogU0NUUF9QRUVSX0FERFJfVEhMRFMNCj4gQEAgLTM4NTMsNzAgKzM4MzksNjggQEAgc3RhdGlj
IGludCBzY3RwX3NldHNvY2tvcHRfYXV0b19hc2NvbmYoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFs
LA0KPiAgICogdHJhbnNwb3J0cyBpbiBhbiBhc3NvY2lhdGlvbi4gIFNlZSBTZWN0aW9uIDYuMSBv
ZjoNCj4gICAqIGh0dHA6Ly93d3cuaWV0Zi5vcmcvaWQvZHJhZnQtbmlzaGlkYS10c3Z3Zy1zY3Rw
LWZhaWxvdmVyLTA1LnR4dA0KPiAgICovDQo+IC0jZGVmaW5lIHZhbCAoKnZhbCkNCj4gIHN0YXRp
YyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3BhZGRyX3RocmVzaG9sZHMoc3RydWN0IHNvY2sgKnNrLA0K
PiAtCQkJCQkgICAgc3RydWN0IHNjdHBfcGFkZHJ0aGxkc192MiB2YWwsDQo+ICsJCQkJCSAgICBz
dHJ1Y3Qgc2N0cF9wYWRkcnRobGRzX3YyICp2YWwsDQo+ICAJCQkJCSAgICB1bnNpZ25lZCBpbnQg
b3B0bGVuLCBib29sIHYyKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnM7
DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IGxlbjsNCj4gDQo+
IC0JbGVuID0gdjIgPyBzaXplb2YodmFsKSA6IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRkcnRobGRz
KTsNCj4gKwlsZW4gPSB2MiA/IHNpemVvZigqdmFsKSA6IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRk
cnRobGRzKTsNCj4gIAlpZiAob3B0bGVuIDwgbGVuKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4g
DQo+IC0JaWYgKHYyICYmIHZhbC5zcHRfcGF0aHBmdGhsZCA+IHZhbC5zcHRfcGF0aGNwdGhsZCkN
Cj4gKwlpZiAodjIgJiYgdmFsLT5zcHRfcGF0aHBmdGhsZCA+IHZhbC0+c3B0X3BhdGhjcHRobGQp
DQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gLQlpZiAoIXNjdHBfaXNfYW55KHNrLCAoY29u
c3QgdW5pb24gc2N0cF9hZGRyICopJnZhbC5zcHRfYWRkcmVzcykpIHsNCj4gLQkJdHJhbnMgPSBz
Y3RwX2FkZHJfaWQydHJhbnNwb3J0KHNrLCAmdmFsLnNwdF9hZGRyZXNzLA0KPiAtCQkJCQkgICAg
ICAgdmFsLnNwdF9hc3NvY19pZCk7DQo+ICsJaWYgKCFzY3RwX2lzX2FueShzaywgKGNvbnN0IHVu
aW9uIHNjdHBfYWRkciAqKSZ2YWwtPnNwdF9hZGRyZXNzKSkgew0KPiArCQl0cmFucyA9IHNjdHBf
YWRkcl9pZDJ0cmFuc3BvcnQoc2ssICZ2YWwtPnNwdF9hZGRyZXNzLA0KPiArCQkJCQkgICAgICAg
dmFsLT5zcHRfYXNzb2NfaWQpOw0KPiAgCQlpZiAoIXRyYW5zKQ0KPiAgCQkJcmV0dXJuIC1FTk9F
TlQ7DQo+IA0KPiAtCQlpZiAodmFsLnNwdF9wYXRobWF4cnh0KQ0KPiAtCQkJdHJhbnMtPnBhdGht
YXhyeHQgPSB2YWwuc3B0X3BhdGhtYXhyeHQ7DQo+ICsJCWlmICh2YWwtPnNwdF9wYXRobWF4cnh0
KQ0KPiArCQkJdHJhbnMtPnBhdGhtYXhyeHQgPSB2YWwtPnNwdF9wYXRobWF4cnh0Ow0KPiAgCQlp
ZiAodjIpDQo+IC0JCQl0cmFucy0+cHNfcmV0cmFucyA9IHZhbC5zcHRfcGF0aGNwdGhsZDsNCj4g
LQkJdHJhbnMtPnBmX3JldHJhbnMgPSB2YWwuc3B0X3BhdGhwZnRobGQ7DQo+ICsJCQl0cmFucy0+
cHNfcmV0cmFucyA9IHZhbC0+c3B0X3BhdGhjcHRobGQ7DQo+ICsJCXRyYW5zLT5wZl9yZXRyYW5z
ID0gdmFsLT5zcHRfcGF0aHBmdGhsZDsNCj4gDQo+ICAJCXJldHVybiAwOw0KPiAgCX0NCj4gDQo+
IC0JYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHZhbC5zcHRfYXNzb2NfaWQpOw0KPiAtCWlmICgh
YXNvYyAmJiB2YWwuc3B0X2Fzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNv
YyA9IHNjdHBfaWQyYXNzb2Moc2ssIHZhbC0+c3B0X2Fzc29jX2lkKTsNCj4gKwlpZiAoIWFzb2Mg
JiYgdmFsLT5zcHRfYXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNTT0MgJiYNCj4gIAkgICAgc2N0
cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAgCWlmIChhc29j
KSB7DQo+ICAJCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnMsICZhc29jLT5wZWVyLnRyYW5zcG9y
dF9hZGRyX2xpc3QsDQo+ICAJCQkJICAgIHRyYW5zcG9ydHMpIHsNCj4gLQkJCWlmICh2YWwuc3B0
X3BhdGhtYXhyeHQpDQo+IC0JCQkJdHJhbnMtPnBhdGhtYXhyeHQgPSB2YWwuc3B0X3BhdGhtYXhy
eHQ7DQo+ICsJCQlpZiAodmFsLT5zcHRfcGF0aG1heHJ4dCkNCj4gKwkJCQl0cmFucy0+cGF0aG1h
eHJ4dCA9IHZhbC0+c3B0X3BhdGhtYXhyeHQ7DQo+ICAJCQlpZiAodjIpDQo+IC0JCQkJdHJhbnMt
PnBzX3JldHJhbnMgPSB2YWwuc3B0X3BhdGhjcHRobGQ7DQo+IC0JCQl0cmFucy0+cGZfcmV0cmFu
cyA9IHZhbC5zcHRfcGF0aHBmdGhsZDsNCj4gKwkJCQl0cmFucy0+cHNfcmV0cmFucyA9IHZhbC0+
c3B0X3BhdGhjcHRobGQ7DQo+ICsJCQl0cmFucy0+cGZfcmV0cmFucyA9IHZhbC0+c3B0X3BhdGhw
ZnRobGQ7DQo+ICAJCX0NCj4gDQo+IC0JCWlmICh2YWwuc3B0X3BhdGhtYXhyeHQpDQo+IC0JCQlh
c29jLT5wYXRobWF4cnh0ID0gdmFsLnNwdF9wYXRobWF4cnh0Ow0KPiArCQlpZiAodmFsLT5zcHRf
cGF0aG1heHJ4dCkNCj4gKwkJCWFzb2MtPnBhdGhtYXhyeHQgPSB2YWwtPnNwdF9wYXRobWF4cnh0
Ow0KPiAgCQlpZiAodjIpDQo+IC0JCQlhc29jLT5wc19yZXRyYW5zID0gdmFsLnNwdF9wYXRoY3B0
aGxkOw0KPiAtCQlhc29jLT5wZl9yZXRyYW5zID0gdmFsLnNwdF9wYXRocGZ0aGxkOw0KPiArCQkJ
YXNvYy0+cHNfcmV0cmFucyA9IHZhbC0+c3B0X3BhdGhjcHRobGQ7DQo+ICsJCWFzb2MtPnBmX3Jl
dHJhbnMgPSB2YWwtPnNwdF9wYXRocGZ0aGxkOw0KPiAgCX0gZWxzZSB7DQo+ICAJCXN0cnVjdCBz
Y3RwX3NvY2sgKnNwID0gc2N0cF9zayhzayk7DQo+IA0KPiAtCQlpZiAodmFsLnNwdF9wYXRobWF4
cnh0KQ0KPiAtCQkJc3AtPnBhdGhtYXhyeHQgPSB2YWwuc3B0X3BhdGhtYXhyeHQ7DQo+ICsJCWlm
ICh2YWwtPnNwdF9wYXRobWF4cnh0KQ0KPiArCQkJc3AtPnBhdGhtYXhyeHQgPSB2YWwtPnNwdF9w
YXRobWF4cnh0Ow0KPiAgCQlpZiAodjIpDQo+IC0JCQlzcC0+cHNfcmV0cmFucyA9IHZhbC5zcHRf
cGF0aGNwdGhsZDsNCj4gLQkJc3AtPnBmX3JldHJhbnMgPSB2YWwuc3B0X3BhdGhwZnRobGQ7DQo+
ICsJCQlzcC0+cHNfcmV0cmFucyA9IHZhbC0+c3B0X3BhdGhjcHRobGQ7DQo+ICsJCXNwLT5wZl9y
ZXRyYW5zID0gdmFsLT5zcHRfcGF0aHBmdGhsZDsNCj4gIAl9DQo+IA0KPiAgCXJldHVybiAwOw0K
PiAgfQ0KPiAtI3VuZGVmIHZhbA0KPiANCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3Jl
Y3ZyY3ZpbmZvKHN0cnVjdCBzb2NrICpzaywgaW50ICpvcHR2YWwsDQo+ICAJCQkJICAgICAgIHVu
c2lnbmVkIGludCBvcHRsZW4pDQo+IEBAIC0zOTQxLDkyICszOTI1LDkxIEBAIHN0YXRpYyBpbnQg
c2N0cF9zZXRzb2Nrb3B0X3JlY3ZueHRpbmZvKHN0cnVjdCBzb2NrICpzaywgaW50ICpvcHR2YWws
DQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfcHJfc3VwcG9ydGVkKHN0
cnVjdCBzb2NrICpzaywNCj4gLQkJCQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgcGFyYW1zLA0K
PiArCQkJCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqcGFyYW1zLA0KPiAgCQkJCQl1bnNpZ25l
ZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0K
PiANCj4gLQlpZiAob3B0bGVuICE9IHNpemVvZihwYXJhbXMpKQ0KPiArCWlmIChvcHRsZW4gIT0g
c2l6ZW9mKCpwYXJhbXMpKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0JYXNvYyA9IHNj
dHBfaWQyYXNzb2Moc2ssIHBhcmFtcy5hc3NvY19pZCk7DQo+IC0JaWYgKCFhc29jICYmIHBhcmFt
cy5hc3NvY19pZCAhPSBTQ1RQX0ZVVFVSRV9BU1NPQyAmJg0KPiArCWFzb2MgPSBzY3RwX2lkMmFz
c29jKHNrLCBwYXJhbXMtPmFzc29jX2lkKTsNCj4gKwlpZiAoIWFzb2MgJiYgcGFyYW1zLT5hc3Nv
Y19pZCAhPSBTQ1RQX0ZVVFVSRV9BU1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxlKHNrLCBVRFAp
KQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+IC0Jc2N0cF9zayhzayktPmVwLT5wcnNjdHBf
ZW5hYmxlID0gISFwYXJhbXMuYXNzb2NfdmFsdWU7DQo+ICsJc2N0cF9zayhzayktPmVwLT5wcnNj
dHBfZW5hYmxlID0gISFwYXJhbXMtPmFzc29jX3ZhbHVlOw0KPiANCj4gIAlyZXR1cm4gMDsNCj4g
IH0NCj4gDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9kZWZhdWx0X3ByaW5mbyhzdHJ1
Y3Qgc29jayAqc2ssDQo+IC0JCQkJCSAgc3RydWN0IHNjdHBfZGVmYXVsdF9wcmluZm8gaW5mbywN
Cj4gKwkJCQkJICBzdHJ1Y3Qgc2N0cF9kZWZhdWx0X3ByaW5mbyAqaW5mbywNCj4gIAkJCQkJICB1
bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0
cF9zayhzayk7DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IHJl
dHZhbCA9IC1FSU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKGluZm8pKQ0KPiAr
CWlmIChvcHRsZW4gIT0gc2l6ZW9mKCppbmZvKSkNCj4gIAkJZ290byBvdXQ7DQo+IA0KPiAtCWlm
IChpbmZvLnByX3BvbGljeSAmIH5TQ1RQX1BSX1NDVFBfTUFTSykNCj4gKwlpZiAoaW5mby0+cHJf
cG9saWN5ICYgflNDVFBfUFJfU0NUUF9NQVNLKQ0KPiAgCQlnb3RvIG91dDsNCj4gDQo+IC0JaWYg
KGluZm8ucHJfcG9saWN5ID09IFNDVFBfUFJfU0NUUF9OT05FKQ0KPiAtCQlpbmZvLnByX3ZhbHVl
ID0gMDsNCj4gKwlpZiAoaW5mby0+cHJfcG9saWN5ID09IFNDVFBfUFJfU0NUUF9OT05FKQ0KPiAr
CQlpbmZvLT5wcl92YWx1ZSA9IDA7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBp
bmZvLnByX2Fzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgaW5mby5wcl9hc3NvY19pZCA+IFND
VFBfQUxMX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIGluZm8tPnByX2Fz
c29jX2lkKTsNCj4gKwlpZiAoIWFzb2MgJiYgaW5mby0+cHJfYXNzb2NfaWQgPiBTQ1RQX0FMTF9B
U1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlnb3RvIG91dDsNCj4g
DQo+ICAJcmV0dmFsID0gMDsNCj4gDQo+ICAJaWYgKGFzb2MpIHsNCj4gLQkJU0NUUF9QUl9TRVRf
UE9MSUNZKGFzb2MtPmRlZmF1bHRfZmxhZ3MsIGluZm8ucHJfcG9saWN5KTsNCj4gLQkJYXNvYy0+
ZGVmYXVsdF90aW1ldG9saXZlID0gaW5mby5wcl92YWx1ZTsNCj4gKwkJU0NUUF9QUl9TRVRfUE9M
SUNZKGFzb2MtPmRlZmF1bHRfZmxhZ3MsIGluZm8tPnByX3BvbGljeSk7DQo+ICsJCWFzb2MtPmRl
ZmF1bHRfdGltZXRvbGl2ZSA9IGluZm8tPnByX3ZhbHVlOw0KPiAgCQlnb3RvIG91dDsNCj4gIAl9
DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApKQ0KPiAtCQlpbmZvLnByX2Fzc29jX2lk
ID0gU0NUUF9GVVRVUkVfQVNTT0M7DQo+ICsJCWluZm8tPnByX2Fzc29jX2lkID0gU0NUUF9GVVRV
UkVfQVNTT0M7DQo+IA0KPiAtCWlmIChpbmZvLnByX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FT
U09DIHx8DQo+IC0JICAgIGluZm8ucHJfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpIHsNCj4g
LQkJU0NUUF9QUl9TRVRfUE9MSUNZKHNwLT5kZWZhdWx0X2ZsYWdzLCBpbmZvLnByX3BvbGljeSk7
DQo+IC0JCXNwLT5kZWZhdWx0X3RpbWV0b2xpdmUgPSBpbmZvLnByX3ZhbHVlOw0KPiArCWlmIChp
bmZvLT5wcl9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQyB8fA0KPiArCSAgICBpbmZvLT5w
cl9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiArCQlTQ1RQX1BSX1NFVF9QT0xJQ1ko
c3AtPmRlZmF1bHRfZmxhZ3MsIGluZm8tPnByX3BvbGljeSk7DQo+ICsJCXNwLT5kZWZhdWx0X3Rp
bWV0b2xpdmUgPSBpbmZvLT5wcl92YWx1ZTsNCj4gIAl9DQo+IA0KPiAtCWlmIChpbmZvLnByX2Fz
c29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiAtCSAgICBpbmZvLnByX2Fzc29jX2lk
ID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICsJaWYgKGluZm8tPnByX2Fzc29jX2lkID09IFNDVFBf
Q1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICBpbmZvLT5wcl9hc3NvY19pZCA9PSBTQ1RQX0FMTF9B
U1NPQykgew0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICZzcC0+ZXAtPmFzb2NzLCBh
c29jcykgew0KPiAtCQkJU0NUUF9QUl9TRVRfUE9MSUNZKGFzb2MtPmRlZmF1bHRfZmxhZ3MsIGlu
Zm8ucHJfcG9saWN5KTsNCj4gLQkJCWFzb2MtPmRlZmF1bHRfdGltZXRvbGl2ZSA9IGluZm8ucHJf
dmFsdWU7DQo+ICsJCQlTQ1RQX1BSX1NFVF9QT0xJQ1koYXNvYy0+ZGVmYXVsdF9mbGFncywgaW5m
by0+cHJfcG9saWN5KTsNCj4gKwkJCWFzb2MtPmRlZmF1bHRfdGltZXRvbGl2ZSA9IGluZm8tPnBy
X3ZhbHVlOw0KPiAgCQl9DQo+ICAJfQ0KPiANCj4gIG91dDoNCj4gIAlyZXR1cm4gcmV0dmFsOw0K
PiAgfQ0KPiAtI3VuZGVmIGluZm8NCj4gDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9y
ZWNvbmZpZ19zdXBwb3J0ZWQoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCQkgICAgICBzdHJ1Y3Qg
c2N0cF9hc3NvY192YWx1ZSBwYXJhbXMsDQo+ICsJCQkJCSAgICAgIHN0cnVjdCBzY3RwX2Fzc29j
X3ZhbHVlICpwYXJhbXMsDQo+ICAJCQkJCSAgICAgIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7
DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IHJldHZhbCA9IC1F
SU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9w
dGxlbiAhPSBzaXplb2YoKnBhcmFtcykpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0g
c2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLmFzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFy
YW1zLmFzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQy
YXNzb2Moc2ssIHBhcmFtcy0+YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFz
c29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVE
UCkpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlzY3RwX3NrKHNrKS0+ZXAtPnJlY29uZl9lbmFi
bGUgPSAhIXBhcmFtcy5hc3NvY192YWx1ZTsNCj4gKwlzY3RwX3NrKHNrKS0+ZXAtPnJlY29uZl9l
bmFibGUgPSAhIXBhcmFtcy0+YXNzb2NfdmFsdWU7DQo+IA0KPiAgCXJldHZhbCA9IDA7DQo+IA0K
PiBAQCAtNDAzNSw0OCArNDAxOCw0NyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9yZWNv
bmZpZ19zdXBwb3J0ZWQoc3RydWN0IHNvY2sgKnNrLA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQg
c2N0cF9zZXRzb2Nrb3B0X2VuYWJsZV9zdHJyZXNldChzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJ
CSAgIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkJICAgc3RydWN0IHNj
dHBfYXNzb2NfdmFsdWUgKnBhcmFtcywNCj4gIAkJCQkJICAgdW5zaWduZWQgaW50IG9wdGxlbikN
Cj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAgPSBzY3RwX3NrKHNrKS0+ZXA7DQo+
ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IHJldHZhbCA9IC1FSU5W
QUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxl
biAhPSBzaXplb2YoKnBhcmFtcykpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlpZiAocGFyYW1z
LmFzc29jX3ZhbHVlICYgKH5TQ1RQX0VOQUJMRV9TVFJSRVNFVF9NQVNLKSkNCj4gKwlpZiAocGFy
YW1zLT5hc3NvY192YWx1ZSAmICh+U0NUUF9FTkFCTEVfU1RSUkVTRVRfTUFTSykpDQo+ICAJCWdv
dG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLmFzc29jX2lk
KTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYN
Cj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5hc3NvY19pZCk7DQo+ICsJaWYg
KCFhc29jICYmIHBhcmFtcy0+YXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0KPiAgCSAgICBz
Y3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlnb3RvIG91dDsNCj4gDQo+ICAJcmV0dmFsID0gMDsN
Cj4gDQo+ICAJaWYgKGFzb2MpIHsNCj4gLQkJYXNvYy0+c3RycmVzZXRfZW5hYmxlID0gcGFyYW1z
LmFzc29jX3ZhbHVlOw0KPiArCQlhc29jLT5zdHJyZXNldF9lbmFibGUgPSBwYXJhbXMtPmFzc29j
X3ZhbHVlOw0KPiAgCQlnb3RvIG91dDsNCj4gIAl9DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNr
LCBUQ1ApKQ0KPiAtCQlwYXJhbXMuYXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gKwkJ
cGFyYW1zLT5hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiANCj4gLQlpZiAocGFyYW1z
LmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtcy5hc3NvY19p
ZCA9PSBTQ1RQX0FMTF9BU1NPQykNCj4gLQkJZXAtPnN0cnJlc2V0X2VuYWJsZSA9IHBhcmFtcy5h
c3NvY192YWx1ZTsNCj4gKwlpZiAocGFyYW1zLT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NP
QyB8fA0KPiArCSAgICBwYXJhbXMtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiArCQll
cC0+c3RycmVzZXRfZW5hYmxlID0gcGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gDQo+IC0JaWYgKHBh
cmFtcy5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MgfHwNCj4gLQkgICAgcGFyYW1zLmFz
c29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiArCWlmIChwYXJhbXMtPmFzc29jX2lkID09IFND
VFBfQ1VSUkVOVF9BU1NPQyB8fA0KPiArCSAgICBwYXJhbXMtPmFzc29jX2lkID09IFNDVFBfQUxM
X0FTU09DKQ0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzb2MsICZlcC0+YXNvY3MsIGFzb2Nz
KQ0KPiAtCQkJYXNvYy0+c3RycmVzZXRfZW5hYmxlID0gcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiAr
CQkJYXNvYy0+c3RycmVzZXRfZW5hYmxlID0gcGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gDQo+ICBv
dXQ6DQo+ICAJcmV0dXJuIHJldHZhbDsNCj4gIH0NCj4gDQo+IC0jdW5kZWYgcGFyYW1zDQo+ICBz
dGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9yZXNldF9zdHJlYW1zKHN0cnVjdCBzb2NrICpzaywN
Cj4gIAkJCQkJIHN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMgKnBhcmFtcywNCj4gIAkJCQkJIHVu
c2lnbmVkIGludCBvcHRsZW4pDQo+IEBAIC00MTAzLDIwICs0MDg1LDE3IEBAIHN0YXRpYyBpbnQg
c2N0cF9zZXRzb2Nrb3B0X3Jlc2V0X3N0cmVhbXMoc3RydWN0IHNvY2sgKnNrLA0KPiAgb3V0Og0K
PiAgCXJldHVybiByZXR2YWw7DQo+ICB9DQo+IC0jZGVmaW5lIHBhcmFtcyAoKnBhcmFtcykNCj4g
DQo+IC0NCj4gLSNkZWZpbmUgYXNzb2NpZCAoKmFzc29jaWQpDQo+IC1zdGF0aWMgaW50IHNjdHBf
c2V0c29ja29wdF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc29jayAqc2ssIHNjdHBfYXNzb2NfdCBhc3Nv
Y2lkLA0KPiArc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfcmVzZXRfYXNzb2Moc3RydWN0IHNv
Y2sgKnNrLCBzY3RwX2Fzc29jX3QgKmFzc29jaWQsDQo+ICAJCQkJICAgICAgIHVuc2lnbmVkIGlu
dCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJ
aW50IHJldHZhbCA9IC1FSU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKGFzc29j
aWQpKQ0KPiArCWlmIChvcHRsZW4gIT0gc2l6ZW9mKCphc3NvY2lkKSkNCj4gIAkJZ290byBvdXQ7
DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBhc3NvY2lkKTsNCj4gKwlhc29jID0g
c2N0cF9pZDJhc3NvYyhzaywgKCphc3NvY2lkKSk7DQo+ICAJaWYgKCFhc29jKQ0KPiAgCQlnb3Rv
IG91dDsNCj4gDQo+IEBAIC00MTI1LDYyICs0MTA0LDYxIEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRz
b2Nrb3B0X3Jlc2V0X2Fzc29jKHN0cnVjdCBzb2NrICpzaywgc2N0cF9hc3NvY190IGFzc29jaWQs
DQo+ICBvdXQ6DQo+ICAJcmV0dXJuIHJldHZhbDsNCj4gIH0NCj4gLSN1bmRlZiBhc3NvY2lkDQo+
IA0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYWRkX3N0cmVhbXMoc3RydWN0IHNvY2sg
KnNrLA0KPiAtCQkJCSAgICAgICBzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyBwYXJhbXMsDQo+ICsJ
CQkJICAgICAgIHN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zICpwYXJhbXMsDQo+ICAJCQkJICAgICAg
IHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24g
KmFzb2M7DQo+ICAJaW50IHJldHZhbCA9IC1FSU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4gIT0g
c2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiAhPSBzaXplb2YoKnBhcmFtcykpDQo+ICAJ
CWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLnNhc19h
c3NvY19pZCk7DQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+c2FzX2Fzc29j
X2lkKTsNCj4gIAlpZiAoIWFzb2MpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlyZXR2YWwgPSBz
Y3RwX3NlbmRfYWRkX3N0cmVhbXMoYXNvYywgJnBhcmFtcyk7DQo+ICsJcmV0dmFsID0gc2N0cF9z
ZW5kX2FkZF9zdHJlYW1zKGFzb2MsIHBhcmFtcyk7DQo+IA0KPiAgb3V0Og0KPiAgCXJldHVybiBy
ZXR2YWw7DQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfc2NoZWR1bGVy
KHN0cnVjdCBzb2NrICpzaywNCj4gLQkJCQkgICAgIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBh
cmFtcywNCj4gKwkJCQkgICAgIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICpwYXJhbXMsDQo+ICAJ
CQkJICAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX3NvY2sg
KnNwID0gc2N0cF9zayhzayk7DQo+ICAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+
ICAJaW50IHJldHZhbCA9IDA7DQo+IA0KPiAtCWlmIChvcHRsZW4gPCBzaXplb2YocGFyYW1zKSkN
Cj4gKwlpZiAob3B0bGVuIDwgc2l6ZW9mKCpwYXJhbXMpKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsN
Cj4gDQo+IC0JaWYgKHBhcmFtcy5hc3NvY192YWx1ZSA+IFNDVFBfU1NfTUFYKQ0KPiArCWlmIChw
YXJhbXMtPmFzc29jX3ZhbHVlID4gU0NUUF9TU19NQVgpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0K
PiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLmFzc29jX2lkKTsNCj4gLQlp
ZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4gKwlhc29j
ID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5hc3NvY19pZCk7DQo+ICsJaWYgKCFhc29jICYm
IHBhcmFtcy0+YXNzb2NfaWQgPiBTQ1RQX0FMTF9BU1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxl
KHNrLCBVRFApKQ0KPiAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gDQo+ICAJaWYgKGFzb2MpDQo+IC0J
CXJldHVybiBzY3RwX3NjaGVkX3NldF9zY2hlZChhc29jLCBwYXJhbXMuYXNzb2NfdmFsdWUpOw0K
PiArCQlyZXR1cm4gc2N0cF9zY2hlZF9zZXRfc2NoZWQoYXNvYywgcGFyYW1zLT5hc3NvY192YWx1
ZSk7DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApKQ0KPiAtCQlwYXJhbXMuYXNzb2Nf
aWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gKwkJcGFyYW1zLT5hc3NvY19pZCA9IFNDVFBfRlVU
VVJFX0FTU09DOw0KPiANCj4gLQlpZiAocGFyYW1zLmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FT
U09DIHx8DQo+IC0JICAgIHBhcmFtcy5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykNCj4gLQkJ
c3AtPmRlZmF1bHRfc3MgPSBwYXJhbXMuYXNzb2NfdmFsdWU7DQo+ICsJaWYgKHBhcmFtcy0+YXNz
b2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MgfHwNCj4gKwkgICAgcGFyYW1zLT5hc3NvY19pZCA9
PSBTQ1RQX0FMTF9BU1NPQykNCj4gKwkJc3AtPmRlZmF1bHRfc3MgPSBwYXJhbXMtPmFzc29jX3Zh
bHVlOw0KPiANCj4gLQlpZiAocGFyYW1zLmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQyB8
fA0KPiAtCSAgICBwYXJhbXMuYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpIHsNCj4gKwlpZiAo
cGFyYW1zLT5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MgfHwNCj4gKwkgICAgcGFyYW1z
LT5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykgew0KPiAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5
KGFzb2MsICZzcC0+ZXAtPmFzb2NzLCBhc29jcykgew0KPiAgCQkJaW50IHJldCA9IHNjdHBfc2No
ZWRfc2V0X3NjaGVkKGFzb2MsDQo+IC0JCQkJCQkgICAgICAgcGFyYW1zLmFzc29jX3ZhbHVlKTsN
Cj4gKwkJCQkJCSAgICAgICBwYXJhbXMtPmFzc29jX3ZhbHVlKTsNCj4gDQo+ICAJCQlpZiAocmV0
ICYmICFyZXR2YWwpDQo+ICAJCQkJcmV0dmFsID0gcmV0Ow0KPiBAQCAtNDE5MSwzMSArNDE2OSwz
MSBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9zY2hlZHVsZXIoc3RydWN0IHNvY2sgKnNr
LA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3NjaGVkdWxlcl92YWx1
ZShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJCSAgIHN0cnVjdCBzY3RwX3N0cmVhbV92YWx1ZSBw
YXJhbXMsDQo+ICsJCQkJCSAgIHN0cnVjdCBzY3RwX3N0cmVhbV92YWx1ZSAqcGFyYW1zLA0KPiAg
CQkJCQkgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBzY3RwX2Fzc29j
aWF0aW9uICphc29jOw0KPiAgCWludCByZXR2YWwgPSAtRUlOVkFMOw0KPiANCj4gLQlpZiAob3B0
bGVuIDwgc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiA8IHNpemVvZigqcGFyYW1zKSkN
Cj4gIAkJZ290byBvdXQ7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMu
YXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiBwYXJhbXMuYXNzb2NfaWQgIT0gU0NUUF9DVVJS
RU5UX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+YXNzb2Nf
aWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkICE9IFNDVFBfQ1VSUkVOVF9B
U1NPQyAmJg0KPiAgCSAgICBzY3RwX3N0eWxlKHNrLCBVRFApKQ0KPiAgCQlnb3RvIG91dDsNCj4g
DQo+ICAJaWYgKGFzb2MpIHsNCj4gLQkJcmV0dmFsID0gc2N0cF9zY2hlZF9zZXRfdmFsdWUoYXNv
YywgcGFyYW1zLnN0cmVhbV9pZCwNCj4gLQkJCQkJICAgICAgcGFyYW1zLnN0cmVhbV92YWx1ZSwg
R0ZQX0tFUk5FTCk7DQo+ICsJCXJldHZhbCA9IHNjdHBfc2NoZWRfc2V0X3ZhbHVlKGFzb2MsIHBh
cmFtcy0+c3RyZWFtX2lkLA0KPiArCQkJCQkgICAgICBwYXJhbXMtPnN0cmVhbV92YWx1ZSwgR0ZQ
X0tFUk5FTCk7DQo+ICAJCWdvdG8gb3V0Ow0KPiAgCX0NCj4gDQo+ICAJcmV0dmFsID0gMDsNCj4g
DQo+ICAJbGlzdF9mb3JfZWFjaF9lbnRyeShhc29jLCAmc2N0cF9zayhzayktPmVwLT5hc29jcywg
YXNvY3MpIHsNCj4gLQkJaW50IHJldCA9IHNjdHBfc2NoZWRfc2V0X3ZhbHVlKGFzb2MsIHBhcmFt
cy5zdHJlYW1faWQsDQo+IC0JCQkJCSAgICAgICBwYXJhbXMuc3RyZWFtX3ZhbHVlLCBHRlBfS0VS
TkVMKTsNCj4gKwkJaW50IHJldCA9IHNjdHBfc2NoZWRfc2V0X3ZhbHVlKGFzb2MsIHBhcmFtcy0+
c3RyZWFtX2lkLA0KPiArCQkJCQkgICAgICAgcGFyYW1zLT5zdHJlYW1fdmFsdWUsIEdGUF9LRVJO
RUwpOw0KPiAgCQlpZiAocmV0ICYmICFyZXR2YWwpIC8qIHRyeSB0byByZXR1cm4gdGhlIDFzdCBl
cnJvci4gKi8NCj4gIAkJCXJldHZhbCA9IHJldDsNCj4gIAl9DQo+IEBAIC00MjI1LDE4ICs0MjAz
LDE4IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3NjaGVkdWxlcl92YWx1ZShzdHJ1Y3Qg
c29jayAqc2ssDQo+ICB9DQo+IA0KPiAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaW50ZXJs
ZWF2aW5nX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJCQkgIHN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkJCSAgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUg
KnBhcmFtcywNCj4gIAkJCQkJCSAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gIAlzdHJ1
Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiAgCXN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jOw0KPiAgCWludCByZXR2YWwgPSAtRUlOVkFMOw0KPiANCj4gLQlpZiAob3B0bGVu
IDwgc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiA8IHNpemVvZigqcGFyYW1zKSkNCj4g
IAkJZ290byBvdXQ7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMuYXNz
b2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiBwYXJhbXMuYXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVf
QVNTT0MgJiYNCj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5hc3NvY19pZCk7
DQo+ICsJaWYgKCFhc29jICYmIHBhcmFtcy0+YXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNTT0Mg
JiYNCj4gIAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJZ290byBvdXQ7DQo+IA0KPiBA
QCAtNDI0NSw3ICs0MjIzLDcgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfaW50ZXJsZWF2
aW5nX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJCWdvdG8gb3V0Ow0KPiAgCX0NCj4g
DQo+IC0Jc3AtPmVwLT5pbnRsX2VuYWJsZSA9ICEhcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCXNw
LT5lcC0+aW50bF9lbmFibGUgPSAhIXBhcmFtcy0+YXNzb2NfdmFsdWU7DQo+IA0KPiAgCXJldHZh
bCA9IDA7DQo+IA0KPiBAQCAtNDI5MSw0MSArNDI2OSw0MCBAQCBzdGF0aWMgaW50IHNjdHBfYXNz
b2NfdWxwZXZlbnRfdHlwZV9zZXQoc3RydWN0IHNjdHBfZXZlbnQgKnBhcmFtLA0KPiAgCXJldHVy
biAwOw0KPiAgfQ0KPiANCj4gLSNkZWZpbmUgcGFyYW0gKCpwYXJhbSkNCj4gLXN0YXRpYyBpbnQg
c2N0cF9zZXRzb2Nrb3B0X2V2ZW50KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfZXZlbnQg
cGFyYW0sDQo+ICtzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9ldmVudChzdHJ1Y3Qgc29jayAq
c2ssIHN0cnVjdCBzY3RwX2V2ZW50ICpwYXJhbSwNCj4gIAkJCQkgdW5zaWduZWQgaW50IG9wdGxl
bikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOw0KPiAgCXN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiAgCWludCByZXR2YWwgPSAwOw0KPiANCj4g
LQlpZiAob3B0bGVuIDwgc2l6ZW9mKHBhcmFtKSkNCj4gKwlpZiAob3B0bGVuIDwgc2l6ZW9mKCpw
YXJhbSkpDQo+ICAJCXJldHVybiAtRUlOVkFMOw0KPiANCj4gLQlpZiAocGFyYW0uc2VfdHlwZSA8
IFNDVFBfU05fVFlQRV9CQVNFIHx8DQo+IC0JICAgIHBhcmFtLnNlX3R5cGUgPiBTQ1RQX1NOX1RZ
UEVfTUFYKQ0KPiArCWlmIChwYXJhbS0+c2VfdHlwZSA8IFNDVFBfU05fVFlQRV9CQVNFIHx8DQo+
ICsJICAgIHBhcmFtLT5zZV90eXBlID4gU0NUUF9TTl9UWVBFX01BWCkNCj4gIAkJcmV0dXJuIC1F
SU5WQUw7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbS5zZV9hc3NvY19p
ZCk7DQo+IC0JaWYgKCFhc29jICYmIHBhcmFtLnNlX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0Mg
JiYNCj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW0tPnNlX2Fzc29jX2lkKTsNCj4g
KwlpZiAoIWFzb2MgJiYgcGFyYW0tPnNlX2Fzc29jX2lkID4gU0NUUF9BTExfQVNTT0MgJiYNCj4g
IAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiAg
CWlmIChhc29jKQ0KPiAtCQlyZXR1cm4gc2N0cF9hc3NvY191bHBldmVudF90eXBlX3NldCgmcGFy
YW0sIGFzb2MpOw0KPiArCQlyZXR1cm4gc2N0cF9hc3NvY191bHBldmVudF90eXBlX3NldChwYXJh
bSwgYXNvYyk7DQo+IA0KPiAgCWlmIChzY3RwX3N0eWxlKHNrLCBUQ1ApKQ0KPiAtCQlwYXJhbS5z
ZV9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOw0KPiArCQlwYXJhbS0+c2VfYXNzb2NfaWQg
PSBTQ1RQX0ZVVFVSRV9BU1NPQzsNCj4gDQo+IC0JaWYgKHBhcmFtLnNlX2Fzc29jX2lkID09IFND
VFBfRlVUVVJFX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtLnNlX2Fzc29jX2lkID09IFNDVFBfQUxM
X0FTU09DKQ0KPiArCWlmIChwYXJhbS0+c2VfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0Mg
fHwNCj4gKwkgICAgcGFyYW0tPnNlX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKQ0KPiAgCQlz
Y3RwX3VscGV2ZW50X3R5cGVfc2V0KCZzcC0+c3Vic2NyaWJlLA0KPiAtCQkJCSAgICAgICBwYXJh
bS5zZV90eXBlLCBwYXJhbS5zZV9vbik7DQo+ICsJCQkJICAgICAgIHBhcmFtLT5zZV90eXBlLCBw
YXJhbS0+c2Vfb24pOw0KPiANCj4gLQlpZiAocGFyYW0uc2VfYXNzb2NfaWQgPT0gU0NUUF9DVVJS
RU5UX0FTU09DIHx8DQo+IC0JICAgIHBhcmFtLnNlX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09D
KSB7DQo+ICsJaWYgKHBhcmFtLT5zZV9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MgfHwN
Cj4gKwkgICAgcGFyYW0tPnNlX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB7DQo+ICAJCWxp
c3RfZm9yX2VhY2hfZW50cnkoYXNvYywgJnNwLT5lcC0+YXNvY3MsIGFzb2NzKSB7DQo+IC0JCQlp
bnQgcmV0ID0gc2N0cF9hc3NvY191bHBldmVudF90eXBlX3NldCgmcGFyYW0sIGFzb2MpOw0KPiAr
CQkJaW50IHJldCA9IHNjdHBfYXNzb2NfdWxwZXZlbnRfdHlwZV9zZXQocGFyYW0sIGFzb2MpOw0K
PiANCj4gIAkJCWlmIChyZXQgJiYgIXJldHZhbCkNCj4gIAkJCQlyZXR2YWwgPSByZXQ7DQo+IEBA
IC00MzM0LDI2ICs0MzExLDI1IEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2V2ZW50KHN0
cnVjdCBzb2NrICpzaywgc3RydWN0IHNjdHBfZXZlbnQgcGFyYW0sDQo+IA0KPiAgCXJldHVybiBy
ZXR2YWw7DQo+ICB9DQo+IC0jdW5kZWYgcGFyYW0NCj4gDQo+ICBzdGF0aWMgaW50IHNjdHBfc2V0
c29ja29wdF9hc2NvbmZfc3VwcG9ydGVkKHN0cnVjdCBzb2NrICpzaywNCj4gLQkJCQkJICAgIHN0
cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHBhcmFtcywNCj4gKwkJCQkJICAgIHN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlICpwYXJhbXMsDQo+ICAJCQkJCSAgICB1bnNpZ25lZCBpbnQgb3B0bGVuKQ0KPiAg
ew0KPiAgCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOw0KPiAgCXN0cnVjdCBzY3RwX2Vu
ZHBvaW50ICplcDsNCj4gIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsNCj4gDQo+IC0JaWYgKG9wdGxl
biAhPSBzaXplb2YocGFyYW1zKSkNCj4gKwlpZiAob3B0bGVuICE9IHNpemVvZigqcGFyYW1zKSkN
Cj4gIAkJZ290byBvdXQ7DQo+IA0KPiAtCWFzb2MgPSBzY3RwX2lkMmFzc29jKHNrLCBwYXJhbXMu
YXNzb2NfaWQpOw0KPiAtCWlmICghYXNvYyAmJiBwYXJhbXMuYXNzb2NfaWQgIT0gU0NUUF9GVVRV
UkVfQVNTT0MgJiYNCj4gKwlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLT5hc3NvY19p
ZCk7DQo+ICsJaWYgKCFhc29jICYmIHBhcmFtcy0+YXNzb2NfaWQgIT0gU0NUUF9GVVRVUkVfQVNT
T0MgJiYNCj4gIAkgICAgc2N0cF9zdHlsZShzaywgVURQKSkNCj4gIAkJZ290byBvdXQ7DQo+IA0K
PiAgCWVwID0gc2N0cF9zayhzayktPmVwOw0KPiAtCWVwLT5hc2NvbmZfZW5hYmxlID0gISFwYXJh
bXMuYXNzb2NfdmFsdWU7DQo+ICsJZXAtPmFzY29uZl9lbmFibGUgPSAhIXBhcmFtcy0+YXNzb2Nf
dmFsdWU7DQo+IA0KPiAgCWlmIChlcC0+YXNjb25mX2VuYWJsZSAmJiBlcC0+YXV0aF9lbmFibGUp
IHsNCj4gIAkJc2N0cF9hdXRoX2VwX2FkZF9jaHVua2lkKGVwLCBTQ1RQX0NJRF9BU0NPTkYpOw0K
PiBAQCAtNDM2NywyMyArNDM0MywyMyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hc2Nv
bmZfc3VwcG9ydGVkKHN0cnVjdCBzb2NrICpzaywNCj4gIH0NCj4gDQo+ICBzdGF0aWMgaW50IHNj
dHBfc2V0c29ja29wdF9hdXRoX3N1cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJCSAg
c3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgcGFyYW1zLA0KPiArCQkJCQkgIHN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlICpwYXJhbXMsDQo+ICAJCQkJCSAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsN
Cj4gIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsNCj4gIAlzdHJ1Y3Qgc2N0cF9lbmRw
b2ludCAqZXA7DQo+ICAJaW50IHJldHZhbCA9IC1FSU5WQUw7DQo+IA0KPiAtCWlmIChvcHRsZW4g
IT0gc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiAhPSBzaXplb2YoKnBhcmFtcykpDQo+
ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3NvYyhzaywgcGFyYW1zLmFz
c29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29jX2lkICE9IFNDVFBfRlVUVVJF
X0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBhcmFtcy0+YXNzb2NfaWQp
Ow0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkICE9IFNDVFBfRlVUVVJFX0FTU09D
ICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4g
IAllcCA9IHNjdHBfc2soc2spLT5lcDsNCj4gLQlpZiAocGFyYW1zLmFzc29jX3ZhbHVlKSB7DQo+
ICsJaWYgKHBhcmFtcy0+YXNzb2NfdmFsdWUpIHsNCj4gIAkJcmV0dmFsID0gc2N0cF9hdXRoX2lu
aXQoZXAsIEdGUF9LRVJORUwpOw0KPiAgCQlpZiAocmV0dmFsKQ0KPiAgCQkJZ290byBvdXQ7DQo+
IEBAIC00MzkzLDcgKzQzNjksNyBAQCBzdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hdXRoX3N1
cHBvcnRlZChzdHJ1Y3Qgc29jayAqc2ssDQo+ICAJCX0NCj4gIAl9DQo+IA0KPiAtCWVwLT5hdXRo
X2VuYWJsZSA9ICEhcGFyYW1zLmFzc29jX3ZhbHVlOw0KPiArCWVwLT5hdXRoX2VuYWJsZSA9ICEh
cGFyYW1zLT5hc3NvY192YWx1ZTsNCj4gIAlyZXR2YWwgPSAwOw0KPiANCj4gIG91dDoNCj4gQEAg
LTQ0MDEsMjEgKzQzNzcsMjEgQEAgc3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfYXV0aF9zdXBw
b3J0ZWQoc3RydWN0IHNvY2sgKnNrLA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRz
b2Nrb3B0X2Vjbl9zdXBwb3J0ZWQoc3RydWN0IHNvY2sgKnNrLA0KPiAtCQkJCQkgc3RydWN0IHNj
dHBfYXNzb2NfdmFsdWUgcGFyYW1zLA0KPiArCQkJCQkgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUg
KnBhcmFtcywNCj4gIAkJCQkJIHVuc2lnbmVkIGludCBvcHRsZW4pDQo+ICB7DQo+ICAJc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7DQo+ICAJaW50IHJldHZhbCA9IC1FSU5WQUw7DQo+IA0K
PiAtCWlmIChvcHRsZW4gIT0gc2l6ZW9mKHBhcmFtcykpDQo+ICsJaWYgKG9wdGxlbiAhPSBzaXpl
b2YoKnBhcmFtcykpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJhc3Nv
YyhzaywgcGFyYW1zLmFzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29jX2lk
ICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ssIHBh
cmFtcy0+YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkICE9IFND
VFBfRlVUVVJFX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJCWdv
dG8gb3V0Ow0KPiANCj4gLQlzY3RwX3NrKHNrKS0+ZXAtPmVjbl9lbmFibGUgPSAhIXBhcmFtcy5h
c3NvY192YWx1ZTsNCj4gKwlzY3RwX3NrKHNrKS0+ZXAtPmVjbl9lbmFibGUgPSAhIXBhcmFtcy0+
YXNzb2NfdmFsdWU7DQo+ICAJcmV0dmFsID0gMDsNCj4gDQo+ICBvdXQ6DQo+IEBAIC00NDIzLDMz
ICs0Mzk5LDMyIEBAIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2Vjbl9zdXBwb3J0ZWQoc3Ry
dWN0IHNvY2sgKnNrLA0KPiAgfQ0KPiANCj4gIHN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3Bm
X2V4cG9zZShzdHJ1Y3Qgc29jayAqc2ssDQo+IC0JCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSBwYXJhbXMsDQo+ICsJCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqcGFyYW1z
LA0KPiAgCQkJCSAgICAgdW5zaWduZWQgaW50IG9wdGxlbikNCj4gIHsNCj4gIAlzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqYXNvYzsNCj4gIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsNCj4gDQo+IC0J
aWYgKG9wdGxlbiAhPSBzaXplb2YocGFyYW1zKSkNCj4gKwlpZiAob3B0bGVuICE9IHNpemVvZigq
cGFyYW1zKSkNCj4gIAkJZ290byBvdXQ7DQo+IA0KPiAtCWlmIChwYXJhbXMuYXNzb2NfdmFsdWUg
PiBTQ1RQX1BGX0VYUE9TRV9NQVgpDQo+ICsJaWYgKHBhcmFtcy0+YXNzb2NfdmFsdWUgPiBTQ1RQ
X1BGX0VYUE9TRV9NQVgpDQo+ICAJCWdvdG8gb3V0Ow0KPiANCj4gLQlhc29jID0gc2N0cF9pZDJh
c3NvYyhzaywgcGFyYW1zLmFzc29jX2lkKTsNCj4gLQlpZiAoIWFzb2MgJiYgcGFyYW1zLmFzc29j
X2lkICE9IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICsJYXNvYyA9IHNjdHBfaWQyYXNzb2Moc2ss
IHBhcmFtcy0+YXNzb2NfaWQpOw0KPiArCWlmICghYXNvYyAmJiBwYXJhbXMtPmFzc29jX2lkICE9
IFNDVFBfRlVUVVJFX0FTU09DICYmDQo+ICAJICAgIHNjdHBfc3R5bGUoc2ssIFVEUCkpDQo+ICAJ
CWdvdG8gb3V0Ow0KPiANCj4gIAlpZiAoYXNvYykNCj4gLQkJYXNvYy0+cGZfZXhwb3NlID0gcGFy
YW1zLmFzc29jX3ZhbHVlOw0KPiArCQlhc29jLT5wZl9leHBvc2UgPSBwYXJhbXMtPmFzc29jX3Zh
bHVlOw0KPiAgCWVsc2UNCj4gLQkJc2N0cF9zayhzayktPnBmX2V4cG9zZSA9IHBhcmFtcy5hc3Nv
Y192YWx1ZTsNCj4gKwkJc2N0cF9zayhzayktPnBmX2V4cG9zZSA9IHBhcmFtcy0+YXNzb2NfdmFs
dWU7DQo+ICAJcmV0dmFsID0gMDsNCj4gDQo+ICBvdXQ6DQo+ICAJcmV0dXJuIHJldHZhbDsNCj4g
IH0NCj4gLSN1bmRlZiBwYXJhbXMNCj4gDQo+ICBzdGF0aWMgaW50IGtlcm5lbF9zY3RwX3NldHNv
Y2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLA0KPiAgCQkJ
ICAgaW50IG9wdGxlbikNCj4gLS0NCj4gMS44LjEuMg0KPiANCj4gLQ0KPiBSZWdpc3RlcmVkIEFk
ZHJlc3MgTGFrZXNpZGUsIEJyYW1sZXkgUm9hZCwgTW91bnQgRmFybSwgTWlsdG9uIEtleW5lcywg
TUsxIDFQVCwgVUsNCj4gUmVnaXN0cmF0aW9uIE5vOiAxMzk3Mzg2IChXYWxlcykNCg0KLQ0KUmVn
aXN0ZXJlZCBBZGRyZXNzIExha2VzaWRlLCBCcmFtbGV5IFJvYWQsIE1vdW50IEZhcm0sIE1pbHRv
biBLZXluZXMsIE1LMSAxUFQsIFVLDQpSZWdpc3RyYXRpb24gTm86IDEzOTczODYgKFdhbGVzKQ0K

^ permalink raw reply	[flat|nested] 11+ 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
  -1 siblings, 0 replies; 11+ 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] 11+ messages in thread

* Re: [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
@ 2020-05-26 22:36     ` David Miller
  0 siblings, 0 replies; 11+ 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] 11+ 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
  -1 siblings, 0 replies; 11+ 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] 11+ messages in thread

* Re: [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
  2020-05-26 22:36     ` David Miller
@ 2020-05-29 16:12       ` Marcelo Ricardo Leitner
  -1 siblings, 0 replies; 11+ 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] 11+ messages in thread

* Re: [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
@ 2020-05-29 16:12       ` Marcelo Ricardo Leitner
  0 siblings, 0 replies; 11+ 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] 11+ messages in thread

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

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.