public inbox for netdev@vger.kernel.org 
 help / color / mirror / Atom feed
From: Vladislav Yasevich <vladislav.yasevich@hp•com>
To: davem@davemloft•net, linux-sctp@vger•kernel.org, netdev@vger•kernel.org
Subject: Re: [PATCH] scpt: Allow struct sctp_event_subscribe to grow without breaking binaries
Date: Wed, 04 Apr 2012 09:52:04 -0400	[thread overview]
Message-ID: <4F7C5204.9040703@hp.com> (raw)
In-Reply-To: <20120404081753.GA5124@canuck.infradead.org>

On 04/04/2012 04:17 AM, Thomas Graf wrote:
> getsockopt(..., SCTP_EVENTS, ...) performs a length check and returns
> an error if the user provides less bytes than the size of struct
> sctp_event_subscribe.
> 
> Struct sctp_event_subscribe needs to be extended by an u8 for every
> new event or notification type that is added.
> 
> This obviously makes getsockopt fail for binaries that are compiled
> against an older versions of <net/sctp/user.h> which do not contain
> all event types.
> 
> This patch changes getsockopt behaviour to no longer return an error
> if not enough bytes are being provided by the user. Instead, it
> returns as much of sctp_event_subscribe as fits into the provided buffer.
> 
> This leads to the new behavior that users see what they have been aware
> of at compile time.
> 
> The setsockopt(..., SCTP_EVENTS, ...) API is already behaving like this.
> 
> Signed-off-by: Thomas Graf <tgraf@suug•ch>

Acked-by: Vlad Yasevich <vladislav.yasevich@hp•com>

-vlad

> ---
>  net/sctp/socket.c |    5 +++--
>  1 files changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/net/sctp/socket.c b/net/sctp/socket.c
> index 06b42b7..92ba71d 100644
> --- a/net/sctp/socket.c
> +++ b/net/sctp/socket.c
> @@ -4133,9 +4133,10 @@ static int sctp_getsockopt_disable_fragments(struct sock *sk, int len,
>  static int sctp_getsockopt_events(struct sock *sk, int len, char __user *optval,
>  				  int __user *optlen)
>  {
> -	if (len < sizeof(struct sctp_event_subscribe))
> +	if (len <= 0)
>  		return -EINVAL;
> -	len = sizeof(struct sctp_event_subscribe);
> +	if (len > sizeof(struct sctp_event_subscribe))
> +		len = sizeof(struct sctp_event_subscribe);
>  	if (put_user(len, optlen))
>  		return -EFAULT;
>  	if (copy_to_user(optval, &sctp_sk(sk)->subscribe, len))
> 

  reply	other threads:[~2012-04-04 13:59 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-04  8:17 [PATCH] scpt: Allow struct sctp_event_subscribe to grow without breaking binaries Thomas Graf
2012-04-04 13:52 ` Vladislav Yasevich [this message]
2012-04-04 22:05   ` David Miller
2012-04-04 22:13     ` Thomas Graf

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=4F7C5204.9040703@hp.com \
    --to=vladislav.yasevich@hp$(echo .)com \
    --cc=davem@davemloft$(echo .)net \
    --cc=linux-sctp@vger$(echo .)kernel.org \
    --cc=netdev@vger$(echo .)kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox