All of lore.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 13:52:04 +0000	[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))
> 


WARNING: multiple messages have this Message-ID (diff)
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:52 UTC|newest]

Thread overview: 8+ 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  8:17 ` Thomas Graf
2012-04-04 13:52 ` Vladislav Yasevich [this message]
2012-04-04 13:52   ` Vladislav Yasevich
2012-04-04 22:05   ` David Miller
2012-04-04 22:05     ` David Miller
2012-04-04 22:13     ` Thomas Graf
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.com \
    --cc=davem@davemloft.net \
    --cc=linux-sctp@vger.kernel.org \
    --cc=netdev@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.