Hi Richard,

On Mon, Nov 27, 2017 at 07:31:21PM +0000, Richard Haines wrote:
...
> --- a/net/sctp/socket.c
> +++ b/net/sctp/socket.c
> @@ -3123,8 +3123,10 @@ static int sctp_setsockopt_maxseg(struct sock *sk, 
> char __user *optval, unsigned
>  
>       if (asoc) {
>               if (val == 0) {
> +                     struct sctp_af *af = sp->pf->af;
>                       val = asoc->pathmtu;
> -                     val -= sp->pf->af->net_header_len;
> +                     val -= af->ip_options_len(asoc->base.sk);
> +                     val -= af->net_header_len;
>                       val -= sizeof(struct sctphdr) +
>                                       sizeof(struct sctp_data_chunk);
>               }

Right below here there is a call to sctp_frag_point(). That function
also needs this tweak.

Yes, we should simplify all these calculations. I have a patch to use
sctp_frag_point on where it is currently recalculating it on
sctp_datamsg_from_user(), but probably should include other places as
well.

  Marcelo

Reply via email to