This should be 3/8.

> -----Original Message-----
> From: [email protected] <[email protected]> On Behalf 
> Of David Laight
> Sent: 26 May 2020 17:40
> To: 'Vlad Yasevich' <[email protected]>; 'Neil Horman' 
> <[email protected]>; 'David S. Miller'
> <[email protected]>; 'Jakub Kicinski' <[email protected]>; 
> '[email protected]' <linux-
> [email protected]>; '[email protected]' <[email protected]>; 
> 'Christoph Hellwig'
> <[email protected]>; 'Marcelo Ricardo Leitner' <[email protected]>
> 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 <[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)

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

Reply via email to