|
@@ -2331,10 +2331,17 @@ static int tcp_repair_options_est(struct tcp_sock *tp,
|
|
|
tp->rx_opt.mss_clamp = opt.opt_val;
|
|
|
break;
|
|
|
case TCPOPT_WINDOW:
|
|
|
- if (opt.opt_val > 14)
|
|
|
- return -EFBIG;
|
|
|
+ {
|
|
|
+ u16 snd_wscale = opt.opt_val & 0xFFFF;
|
|
|
+ u16 rcv_wscale = opt.opt_val >> 16;
|
|
|
+
|
|
|
+ if (snd_wscale > 14 || rcv_wscale > 14)
|
|
|
+ return -EFBIG;
|
|
|
|
|
|
- tp->rx_opt.snd_wscale = opt.opt_val;
|
|
|
+ tp->rx_opt.snd_wscale = snd_wscale;
|
|
|
+ tp->rx_opt.rcv_wscale = rcv_wscale;
|
|
|
+ tp->rx_opt.wscale_ok = 1;
|
|
|
+ }
|
|
|
break;
|
|
|
case TCPOPT_SACK_PERM:
|
|
|
if (opt.opt_val != 0)
|