[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <8bb56a30edfb4ff696d44cf9af909d82@AcuMS.aculab.com>
Date: Tue, 26 May 2020 16:44:07 +0000
From: David Laight <David.Laight@...LAB.COM>
To: David Laight <David.Laight@...LAB.COM>,
'Vlad Yasevich' <vyasevich@...il.com>,
'Neil Horman' <nhorman@...driver.com>,
"'David S. Miller'" <davem@...emloft.net>,
'Jakub Kicinski' <kuba@...nel.org>,
"'linux-sctp@...r.kernel.org'" <linux-sctp@...r.kernel.org>,
"'netdev@...r.kernel.org'" <netdev@...r.kernel.org>,
'Christoph Hellwig' <hch@....de>,
'Marcelo Ricardo Leitner' <marcelo.leitner@...il.com>
Subject: RE: [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
This should be 3/8.
> -----Original Message-----
> From: netdev-owner@...r.kernel.org <netdev-owner@...r.kernel.org> On Behalf Of David Laight
> Sent: 26 May 2020 17:40
> To: 'Vlad Yasevich' <vyasevich@...il.com>; 'Neil Horman' <nhorman@...driver.com>; 'David S. Miller'
> <davem@...emloft.net>; 'Jakub Kicinski' <kuba@...nel.org>; 'linux-sctp@...r.kernel.org' <linux-
> sctp@...r.kernel.org>; 'netdev@...r.kernel.org' <netdev@...r.kernel.org>; 'Christoph Hellwig'
> <hch@....de>; 'Marcelo Ricardo Leitner' <marcelo.leitner@...il.com>
> Subject: [PATCH v3 net-next 1/8] sctp: setsockopt, expand some #defines
>
> Expand the #define foo (*foo) used to simplify the previous patch.
> Doesn't change the generated code.
>
> Signed-off-by: David Laight <david.laight@...lab.com>
>
> ---
> net/sctp/socket.c | 687 ++++++++++++++++++++++++++----------------------------
> 1 file changed, 331 insertions(+), 356 deletions(-)
>
> diff --git a/net/sctp/socket.c b/net/sctp/socket.c
> index 639d7da..b8068da 100644
> --- a/net/sctp/socket.c
> +++ b/net/sctp/socket.c
> @@ -2585,9 +2585,8 @@ static int sctp_apply_peer_addr_params(struct sctp_paddrparams *params,
> return 0;
> }
>
> -#define params (*params)
> static int sctp_setsockopt_peer_addr_params(struct sock *sk,
> - struct sctp_paddrparams params,
> + struct sctp_paddrparams *params,
> unsigned int optlen)
> {
> struct sctp_transport *trans = NULL;
> @@ -2596,33 +2595,33 @@ static int sctp_setsockopt_peer_addr_params(struct sock *sk,
> int error;
> int hb_change, pmtud_change, sackdelay_change;
>
> - if (optlen != sizeof(params)) {
> + if (optlen != sizeof(*params)) {
> if (optlen != ALIGN(offsetof(struct sctp_paddrparams,
> spp_ipv6_flowlabel), 4))
> return -EINVAL;
> - if (params.spp_flags & (SPP_DSCP | SPP_IPV6_FLOWLABEL))
> + if (params->spp_flags & (SPP_DSCP | SPP_IPV6_FLOWLABEL))
> return -EINVAL;
> }
>
> /* Validate flags and value parameters. */
> - hb_change = params.spp_flags & SPP_HB;
> - pmtud_change = params.spp_flags & SPP_PMTUD;
> - sackdelay_change = params.spp_flags & SPP_SACKDELAY;
> + hb_change = params->spp_flags & SPP_HB;
> + pmtud_change = params->spp_flags & SPP_PMTUD;
> + sackdelay_change = params->spp_flags & SPP_SACKDELAY;
>
> if (hb_change == SPP_HB ||
> pmtud_change == SPP_PMTUD ||
> sackdelay_change == SPP_SACKDELAY ||
> - params.spp_sackdelay > 500 ||
> - (params.spp_pathmtu &&
> - params.spp_pathmtu < SCTP_DEFAULT_MINSEGMENT))
> + params->spp_sackdelay > 500 ||
> + (params->spp_pathmtu &&
> + params->spp_pathmtu < SCTP_DEFAULT_MINSEGMENT))
> return -EINVAL;
>
> /* If an address other than INADDR_ANY is specified, and
> * no transport is found, then the request is invalid.
> */
> - if (!sctp_is_any(sk, (union sctp_addr *)¶ms.spp_address)) {
> - trans = sctp_addr_id2transport(sk, ¶ms.spp_address,
> - params.spp_assoc_id);
> + if (!sctp_is_any(sk, (union sctp_addr *)¶ms->spp_address)) {
> + trans = sctp_addr_id2transport(sk, ¶ms->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(¶ms, 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(¶ms, 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(¶ms, 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(¶ms, 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 *)¶ms;
> - 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 *)¶ms;
> - 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, ¶ms);
> + 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(¶m, 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(¶m, 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)
Powered by blists - more mailing lists