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

Signed-off-by: David Laight <[email protected]>

---
 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)

Reply via email to