All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vlad Yasevich <vladislav.yasevich@hp.com>
To: linux-sctp@vger.kernel.org
Subject: Re: [PATCH 1/3] sctp: check parameter value of length in ERROR chunk
Date: Wed, 12 May 2010 14:18:26 +0000	[thread overview]
Message-ID: <4BEAB8B2.5020206@hp.com> (raw)
In-Reply-To: <4BEA7531.9070106@cn.fujitsu.com>



Shan Wei wrote:
>  
> When an endpoint receives ERROR that parameter value is invalid,
> send an ABORT to peer with a Protocol Violation error code.
> 
> Signed-off-by: Shan Wei <shanwei@cn.fujitsu.com>
> ---
>  net/sctp/sm_statefuns.c |   32 ++++++++++++++++++++++++++++++++
>  1 files changed, 32 insertions(+), 0 deletions(-)
> 
> diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
> index 24b2cd5..3d3e36b 100644
> --- a/net/sctp/sm_statefuns.c
> +++ b/net/sctp/sm_statefuns.c
> @@ -116,6 +116,13 @@ static sctp_disposition_t sctp_sf_violation_chunklen(
>  				     void *arg,
>  				     sctp_cmd_seq_t *commands);
>  
> +static sctp_disposition_t sctp_sf_violation_paramvalue(
> +				     const struct sctp_endpoint *ep,
> +				     const struct sctp_association *asoc,
> +				     const sctp_subtype_t type,
> +				     void *arg,
> +				     sctp_cmd_seq_t *commands);
> +
>  static sctp_disposition_t sctp_sf_violation_paramlen(
>  				     const struct sctp_endpoint *ep,
>  				     const struct sctp_association *asoc,
> @@ -3204,6 +3211,7 @@ sctp_disposition_t sctp_sf_operr_notify(const struct sctp_endpoint *ep,
>  					sctp_cmd_seq_t *commands)
>  {
>  	struct sctp_chunk *chunk = arg;
> +	sctp_errhdr_t *err;
>  
>  	if (!sctp_vtag_verify(chunk, asoc))
>  		return sctp_sf_pdiscard(ep, asoc, type, arg, commands);
> @@ -3213,6 +3221,12 @@ sctp_disposition_t sctp_sf_operr_notify(const struct sctp_endpoint *ep,
>  		return sctp_sf_violation_chunklen(ep, asoc, type, arg,
>  						  commands);
>  
> +	sctp_walk_errors(err, chunk->chunk_hdr);
> +	if ((void *)err != (void *)chunk->chunk_hdr +
> +			   ntohs(chunk->chunk_hdr->length))
> +		return sctp_sf_violation_paramvalue(ep, asoc, type, arg,
> +						    commands);
> +

I think a simpler check would be
	if ((void*)err != (void*)chunk->chunk_end)

better to just compare 2 pointers then do additional arithmetic.

-vlad


>  	sctp_add_cmd_sf(commands, SCTP_CMD_PROCESS_OPERR,
>  			SCTP_CHUNK(chunk));
>  
> @@ -4343,6 +4357,24 @@ static sctp_disposition_t sctp_sf_violation_chunklen(
>  
>  /*
>   * Handle a protocol violation when the parameter length is invalid.
> + * "Invalid" length is identified as the parameter value of length
> + * in a Type-Length-Value format is not match the true length of chunk.
> + */
> +static sctp_disposition_t sctp_sf_violation_paramvalue(
> +				     const struct sctp_endpoint *ep,
> +				     const struct sctp_association *asoc,
> +				     const sctp_subtype_t type,
> +				     void *arg,
> +				     sctp_cmd_seq_t *commands)
> +{
> +	static const char err_str[]="The following chunk had invalid parameter value:";
> +
> +	return sctp_sf_abort_violation(ep, asoc, arg, commands, err_str,
> +					sizeof(err_str));
> +}
> +
> +/*
> + * Handle a protocol violation when the parameter length is invalid.
>   * "Invalid" length is identified as smaller than the minimal length a
>   * given parameter can be.
>   */

      reply	other threads:[~2010-05-12 14:18 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-12  9:30 [PATCH 1/3] sctp: check parameter value of length in ERROR chunk Shan Wei
2010-05-12 14:18 ` Vlad Yasevich [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4BEAB8B2.5020206@hp.com \
    --to=vladislav.yasevich@hp.com \
    --cc=linux-sctp@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.