* TCPCT API update for 2.6.37 @ 2011-01-12 17:43 William Allen Simpson 2011-01-12 17:52 ` [PATCH v1 1/2] TCPCT API sysctl update to draft -03 William Allen Simpson 2011-01-12 17:59 ` [PATCH v1 2/2] TCPCT API sockopt " William Allen Simpson 0 siblings, 2 replies; 11+ messages in thread From: William Allen Simpson @ 2011-01-12 17:43 UTC (permalink / raw) To: Linux Kernel Developers Cc: Linux Kernel Network Developers, David Miller, Andrew Morton With the recent flurry of messages related to TCPCT, I devoted a nice snowy Saturday afternoon to updating the socket option code. Linux is rather behind on TCPCT implementation, so this will help with future software compatibility. Currently, any userland programs written to RFC-to-be-6013 will not interoperate with Linux 2.6.33 and beyond. I've made these patches for 2.6.37 -- they'll also need to be ported to earlier releases. I'm not on this list, so anybody with comments should CC me. Thanks. ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v1 1/2] TCPCT API sysctl update to draft -03 2011-01-12 17:43 TCPCT API update for 2.6.37 William Allen Simpson @ 2011-01-12 17:52 ` William Allen Simpson 2011-01-12 18:05 ` Eric Dumazet 2011-01-12 17:59 ` [PATCH v1 2/2] TCPCT API sockopt " William Allen Simpson 1 sibling, 1 reply; 11+ messages in thread From: William Allen Simpson @ 2011-01-12 17:52 UTC (permalink / raw) To: Linux Kernel Developers Cc: Linux Kernel Network Developers, David Miller, Andrew Morton [-- Attachment #1: Type: text/plain, Size: 602 bytes --] Use most recently specified symbols of RFC-to-be-6013. Allows different global s_data limits for SYN and SYN_ACK. CC: "Eric W. Biederman" <ebiederm@xmission.com> CC: Stephen Hemminger <shemminger@vyatta.com> CC: Andi Kleen <andi@firstfloor.org> Signed-off-by: William.Allen.Simpson@gmail.com --- Documentation/networking/ip-sysctl.txt | 10 ++++++++++ include/net/tcp.h | 2 ++ net/ipv4/sysctl_net_ipv4.c | 25 ++++++++++++++++++++++++- net/ipv4/tcp_output.c | 19 +++++++++++++++++-- 4 files changed, 53 insertions(+), 3 deletions(-) [-- Attachment #2: TCPCT+API-03u1+2.6.37.patch --] [-- Type: text/plain, Size: 4111 bytes --] diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt index d99940d..4e14b3a 100644 --- a/Documentation/networking/ip-sysctl.txt +++ b/Documentation/networking/ip-sysctl.txt @@ -184,6 +184,16 @@ tcp_cookie_size - INTEGER as the minimum. Odd values are interpreted as the next even value. Default: 0 (off). +tcp_syn_data_limit - INTEGER + Limit for TCP Cookie Transactions (TCPCT) data transmitted with + the <SYN>. Default: 496. Maximum: 496. + +tcp_syn_ack_data_limit - INTEGER + Limit for TCP Cookie Transactions (TCPCT) data transmitted with + the <SYN,ACK(SYN)>. As a matter of security policy, keep the + setting small to avoid amplification denial of service attacks. + Default: 80. Maximum: 1220. + tcp_dsack - BOOLEAN Allows TCP to send "duplicate" SACKs. diff --git a/include/net/tcp.h b/include/net/tcp.h index 38509f0..3ac2bca 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -241,6 +241,8 @@ extern int sysctl_tcp_workaround_signed_windows; extern int sysctl_tcp_slow_start_after_idle; extern int sysctl_tcp_max_ssthresh; extern int sysctl_tcp_cookie_size; +extern int sysctl_tcp_syn_data_limit; +extern int sysctl_tcp_syn_ack_data_limit; extern int sysctl_tcp_thin_linear_timeouts; extern int sysctl_tcp_thin_dupack; diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index 1a45665..629f90b 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c @@ -30,6 +30,9 @@ static int tcp_adv_win_scale_min = -31; static int tcp_adv_win_scale_max = 31; static int ip_ttl_min = 1; static int ip_ttl_max = 255; +static int tcp_cookie_max = TCP_COOKIE_MAX; +static int tcp_syn_data_max = TCP_MSS_DEFAULT - 40; +static int tcp_syn_ack_data_max = TCP_MSS_DESIRED; /* Update system visible IP port range */ static void set_local_port_range(int range[2]) @@ -588,7 +591,27 @@ static struct ctl_table ipv4_table[] = { .data = &sysctl_tcp_cookie_size, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = proc_dointvec + .proc_handler = proc_dointvec_minmax, + .extra1 = &zero, + .extra2 = &tcp_cookie_max, + }, + { + .procname = "tcp_syn_data_limit", + .data = &sysctl_tcp_syn_data_limit, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec_minmax, + .extra1 = &zero, + .extra2 = &tcp_syn_data_max, + }, + { + .procname = "tcp_syn_ack_data_limit", + .data = &sysctl_tcp_syn_ack_data_limit, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = proc_dointvec_minmax, + .extra1 = &zero, + .extra2 = &tcp_syn_ack_data_max, }, { .procname = "tcp_thin_linear_timeouts", diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index dc7c096..16a9e40 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -63,6 +63,15 @@ int sysctl_tcp_slow_start_after_idle __read_mostly = 1; int sysctl_tcp_cookie_size __read_mostly = 0; /* TCP_COOKIE_MAX */ EXPORT_SYMBOL_GPL(sysctl_tcp_cookie_size); +int sysctl_tcp_syn_data_limit __read_mostly = TCP_MSS_DEFAULT - 40; +EXPORT_SYMBOL_GPL(sysctl_tcp_syn_data_limit); + +/* As a matter of security policy, keep the setting small to avoid + * amplification denial of service attacks. + */ +int sysctl_tcp_syn_ack_data_limit __read_mostly = 80; /* TCP_MSS_DESIRED */ +EXPORT_SYMBOL_GPL(sysctl_tcp_syn_ack_data_limit); + /* Account for new data that has been sent to the network. */ static void tcp_event_new_data_sent(struct sock *sk, struct sk_buff *skb) @@ -2418,10 +2427,16 @@ struct sk_buff *tcp_make_synack(struct sock *sk, struct dst_entry *dst, struct tcp_md5sig_key *md5; int tcp_header_size; int mss; - int s_data_desired = 0; + int s_data_desired; - if (cvp != NULL && cvp->s_data_constant && cvp->s_data_desired) + if (cvp != NULL && + cvp->s_data_constant && + cvp->s_data_desired > 0 && + cvp->s_data_desired <= sysctl_tcp_syn_ack_data_limit) s_data_desired = cvp->s_data_desired; + else + s_data_desired = 0; + skb = sock_wmalloc(sk, MAX_TCP_HEADER + 15 + s_data_desired, 1, GFP_ATOMIC); if (skb == NULL) return NULL; -- 1.7.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v1 1/2] TCPCT API sysctl update to draft -03 2011-01-12 17:52 ` [PATCH v1 1/2] TCPCT API sysctl update to draft -03 William Allen Simpson @ 2011-01-12 18:05 ` Eric Dumazet 0 siblings, 0 replies; 11+ messages in thread From: Eric Dumazet @ 2011-01-12 18:05 UTC (permalink / raw) To: William Allen Simpson Cc: Linux Kernel Developers, Linux Kernel Network Developers, David Miller, Andrew Morton Le mercredi 12 janvier 2011 à 12:52 -0500, William Allen Simpson a écrit : > Use most recently specified symbols of RFC-to-be-6013. > > Allows different global s_data limits for SYN and SYN_ACK. > > CC: "Eric W. Biederman" <ebiederm@xmission.com> > CC: Stephen Hemminger <shemminger@vyatta.com> > CC: Andi Kleen <andi@firstfloor.org> > Signed-off-by: William.Allen.Simpson@gmail.com Should be : Signed-off-by: William Allen Simpson <William.Allen.Simpson@gmail.com> > --- > Documentation/networking/ip-sysctl.txt | 10 ++++++++++ > include/net/tcp.h | 2 ++ > net/ipv4/sysctl_net_ipv4.c | 25 ++++++++++++++++++++++++- > net/ipv4/tcp_output.c | 19 +++++++++++++++++-- > 4 files changed, 53 insertions(+), 3 deletions(-) Hmm, patch is not inlined, so I have to copy/paste +static int tcp_cookie_max = TCP_COOKIE_MAX; ... /* Update system visible IP port range */ static void set_local_port_range(int range[2]) @@ -588,7 +591,27 @@ static struct ctl_table ipv4_table[] = { .data = &sysctl_tcp_cookie_size, .maxlen = sizeof(int), .mode = 0644, - .proc_handler = proc_dointvec + .proc_handler = proc_dointvec_minmax, + .extra1 = &zero, + .extra2 = &tcp_cookie_max, + }, Now sysctl_tcp_cookie_size has a max limit of TCP_COOKIE_MAX, you can remove the now uneeded check in : static u8 tcp_cookie_size_check(u8 desired) ... if (cookie_size >= TCP_COOKIE_MAX) /* value too large, specify maximum */ return TCP_COOKIE_MAX; ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v1 2/2] TCPCT API sockopt update to draft -03 2011-01-12 17:43 TCPCT API update for 2.6.37 William Allen Simpson 2011-01-12 17:52 ` [PATCH v1 1/2] TCPCT API sysctl update to draft -03 William Allen Simpson @ 2011-01-12 17:59 ` William Allen Simpson 2011-01-12 18:56 ` Stephen Hemminger 1 sibling, 1 reply; 11+ messages in thread From: William Allen Simpson @ 2011-01-12 17:59 UTC (permalink / raw) To: Linux Kernel Developers Cc: Linux Kernel Network Developers, David Miller, Andrew Morton [-- Attachment #1: Type: text/plain, Size: 517 bytes --] Use most recently specified symbols of RFC-to-be-6013. Permit setting either cookie or s_data (alternatively). Split the data value from socket option header, saving more than 1K of stack space in the handler by copying long data values directly from user space into the kref block. Signed-off-by: William.Allen.Simpson@gmail.com --- include/linux/tcp.h | 35 ++++++++++++----- net/ipv4/tcp.c | 102 +++++++++++++++++++++++++++++++++++--------------- 2 files changed, 96 insertions(+), 41 deletions(-) [-- Attachment #2: TCPCT+API-03v1+2.6.37.patch --] [-- Type: text/plain, Size: 7252 bytes --] diff --git a/include/linux/tcp.h b/include/linux/tcp.h index e64f4c6..c8f4017 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h @@ -185,22 +185,37 @@ struct tcp_md5sig { #define TCP_COOKIE_PAIR_SIZE (2*TCP_COOKIE_MAX) /* Flags for both getsockopt and setsockopt */ -#define TCP_COOKIE_IN_ALWAYS (1 << 0) /* Discard SYN without cookie */ -#define TCP_COOKIE_OUT_NEVER (1 << 1) /* Prohibit outgoing cookies, +#define TCPCT_IN_ALWAYS (1 << 0) /* Discard SYN without cookie */ +#define TCPCT_OUT_NEVER (1 << 1) /* Prohibit outgoing cookies, * supercedes everything. */ - -/* Flags for getsockopt */ -#define TCP_S_DATA_IN (1 << 2) /* Was data received? */ -#define TCP_S_DATA_OUT (1 << 3) /* Was data sent? */ - -/* TCP_COOKIE_TRANSACTIONS data */ +#define TCPCT_IN_DATA (1 << 2) /* Was data received? */ +#define TCPCT_OUT_DATA (1 << 3) /* Was data sent? */ +/* reserved for future use: bits 4 .. 6 */ +#define TCPCT_EXTEND (1 << 7) + +/* Extended Option flags for both getsockopt and setsockopt */ +#define TCPCT_EXTEND_SIZE (0x7) /* mask */ +#define TCPCT_EXTEND_TS32 (0x1) /* default */ +#define TCPCT_EXTEND_TS64 (0x2) +#define TCPCT_EXTEND_TS128 (0x4) + +/* TCP_COOKIE_TRANSACTIONS socket option header */ struct tcp_cookie_transactions { __u16 tcpct_flags; /* see above */ - __u8 __tcpct_pad1; /* zero */ + __u8 tcpct_extended; __u8 tcpct_cookie_desired; /* bytes */ __u16 tcpct_s_data_desired; /* bytes of variable data */ __u16 tcpct_used; /* bytes in value */ - __u8 tcpct_value[TCP_MSS_DEFAULT]; +}; + +struct tcpct_full { + struct tcp_cookie_transactions soh; + __u8 tcpct_value[TCP_COOKIE_PAIR_SIZE]; +}; + +struct tcpct_half { + struct tcp_cookie_transactions soh; + __u8 tcpct_value[TCP_COOKIE_MAX]; }; #ifdef __KERNEL__ diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 6c11eec..a5c7933 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -2143,25 +2143,14 @@ static int do_tcp_setsockopt(struct sock *sk, int level, case TCP_COOKIE_TRANSACTIONS: { struct tcp_cookie_transactions ctd; struct tcp_cookie_values *cvp = NULL; + int s_data_used = 0; if (sizeof(ctd) > optlen) return -EINVAL; if (copy_from_user(&ctd, optval, sizeof(ctd))) return -EFAULT; - if (ctd.tcpct_used > sizeof(ctd.tcpct_value) || - ctd.tcpct_s_data_desired > TCP_MSS_DESIRED) - return -EINVAL; - - if (ctd.tcpct_cookie_desired == 0) { - /* default to global value */ - } else if ((0x1 & ctd.tcpct_cookie_desired) || - ctd.tcpct_cookie_desired > TCP_COOKIE_MAX || - ctd.tcpct_cookie_desired < TCP_COOKIE_MIN) { - return -EINVAL; - } - - if (TCP_COOKIE_OUT_NEVER & ctd.tcpct_flags) { + if (TCPCT_OUT_NEVER & ctd.tcpct_flags) { /* Supercedes all other values */ lock_sock(sk); if (tp->cookie_values != NULL) { @@ -2175,6 +2164,41 @@ static int do_tcp_setsockopt(struct sock *sk, int level, return err; } + if (ctd.tcpct_cookie_desired == 0) { + /* default to global value */ + } else if ((0x1 & ctd.tcpct_cookie_desired) || + ctd.tcpct_cookie_desired > TCP_COOKIE_MAX || + ctd.tcpct_cookie_desired < TCP_COOKIE_MIN) { + return -EINVAL; + } + + if (ctd.tcpct_used > 0) { + if (ctd.tcpct_used + sizeof(ctd) > optlen) + return -EINVAL; + if (TCPCT_OUT_DATA & ctd.tcpct_flags) { + if (ctd.tcpct_used > + sysctl_tcp_syn_ack_data_limit) + return -EINVAL; + if (ctd.tcpct_s_data_desired > 0) + return -EINVAL; + s_data_used = ctd.tcpct_used; + } else { + if (ctd.tcpct_used > TCP_COOKIE_PAIR_SIZE) + return -EINVAL; + if (ctd.tcpct_used != + ctd.tcpct_cookie_desired && + ctd.tcpct_used != + ctd.tcpct_cookie_desired * 2) + return -EINVAL; + if (ctd.tcpct_s_data_desired > + sysctl_tcp_syn_data_limit) + return -EINVAL; + } + } else if (TCPCT_OUT_DATA & ctd.tcpct_flags) { + /* unexpected flag without s_data */ + return -EINVAL; + } + /* Allocate ancillary memory before locking. */ if (ctd.tcpct_used > 0 || @@ -2182,7 +2206,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level, (sysctl_tcp_cookie_size > 0 || ctd.tcpct_cookie_desired > 0 || ctd.tcpct_s_data_desired > 0))) { - cvp = kzalloc(sizeof(*cvp) + ctd.tcpct_used, + cvp = kzalloc(sizeof(*cvp) + s_data_used, GFP_KERNEL); if (cvp == NULL) return -ENOMEM; @@ -2191,7 +2215,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level, } lock_sock(sk); tp->rx_opt.cookie_in_always = - (TCP_COOKIE_IN_ALWAYS & ctd.tcpct_flags); + (TCPCT_IN_ALWAYS & ctd.tcpct_flags); tp->rx_opt.cookie_out_never = 0; /* false */ if (tp->cookie_values != NULL) { @@ -2210,11 +2234,27 @@ static int do_tcp_setsockopt(struct sock *sk, int level, if (cvp != NULL) { cvp->cookie_desired = ctd.tcpct_cookie_desired; - if (ctd.tcpct_used > 0) { - memcpy(cvp->s_data_payload, ctd.tcpct_value, - ctd.tcpct_used); - cvp->s_data_desired = ctd.tcpct_used; + if (s_data_used > 0) { + if (copy_from_user(cvp->s_data_payload, + optval + sizeof(ctd), + s_data_used)) { + kref_put(&cvp->kref, + tcp_cookie_values_release); + return -EFAULT; + } + cvp->s_data_desired = s_data_used; cvp->s_data_constant = 1; /* true */ + } else if (ctd.tcpct_used > 0) { + if (copy_from_user(cvp->cookie_pair, + optval + sizeof(ctd), + ctd.tcpct_used)) { + kref_put(&cvp->kref, + tcp_cookie_values_release); + return -EFAULT; + } + /* No constant payload data. */ + cvp->s_data_desired = ctd.tcpct_s_data_desired; + cvp->s_data_constant = 0; /* false */ } else { /* No constant payload data. */ cvp->s_data_desired = ctd.tcpct_s_data_desired; @@ -2574,7 +2614,7 @@ static int do_tcp_getsockopt(struct sock *sk, int level, return 0; case TCP_COOKIE_TRANSACTIONS: { - struct tcp_cookie_transactions ctd; + struct tcpct_full ctd; struct tcp_cookie_values *cvp = tp->cookie_values; if (get_user(len, optlen)) @@ -2583,23 +2623,23 @@ static int do_tcp_getsockopt(struct sock *sk, int level, return -EINVAL; memset(&ctd, 0, sizeof(ctd)); - ctd.tcpct_flags = (tp->rx_opt.cookie_in_always ? - TCP_COOKIE_IN_ALWAYS : 0) - | (tp->rx_opt.cookie_out_never ? - TCP_COOKIE_OUT_NEVER : 0); + ctd.soh.tcpct_flags = (tp->rx_opt.cookie_in_always ? + TCPCT_IN_ALWAYS : 0) + | (tp->rx_opt.cookie_out_never ? + TCPCT_OUT_NEVER : 0); if (cvp != NULL) { - ctd.tcpct_flags |= (cvp->s_data_in ? - TCP_S_DATA_IN : 0) - | (cvp->s_data_out ? - TCP_S_DATA_OUT : 0); + ctd.soh.tcpct_flags |= (cvp->s_data_in ? + TCPCT_IN_DATA : 0) + | (cvp->s_data_out ? + TCPCT_OUT_DATA : 0); - ctd.tcpct_cookie_desired = cvp->cookie_desired; - ctd.tcpct_s_data_desired = cvp->s_data_desired; + ctd.soh.tcpct_cookie_desired = cvp->cookie_desired; + ctd.soh.tcpct_s_data_desired = cvp->s_data_desired; memcpy(&ctd.tcpct_value[0], &cvp->cookie_pair[0], cvp->cookie_pair_size); - ctd.tcpct_used = cvp->cookie_pair_size; + ctd.soh.tcpct_used = cvp->cookie_pair_size; } if (put_user(sizeof(ctd), optlen)) -- 1.7.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v1 2/2] TCPCT API sockopt update to draft -03 2011-01-12 17:59 ` [PATCH v1 2/2] TCPCT API sockopt " William Allen Simpson @ 2011-01-12 18:56 ` Stephen Hemminger 2011-01-13 17:32 ` William Allen Simpson 0 siblings, 1 reply; 11+ messages in thread From: Stephen Hemminger @ 2011-01-12 18:56 UTC (permalink / raw) To: William Allen Simpson Cc: Linux Kernel Developers, Linux Kernel Network Developers, David Miller, Andrew Morton On Wed, 12 Jan 2011 12:59:38 -0500 William Allen Simpson <william.allen.simpson@gmail.com> wrote: > diff --git a/include/linux/tcp.h b/include/linux/tcp.h > index e64f4c6..c8f4017 100644 > --- a/include/linux/tcp.h > +++ b/include/linux/tcp.h > @@ -185,22 +185,37 @@ struct tcp_md5sig { > #define TCP_COOKIE_PAIR_SIZE (2*TCP_COOKIE_MAX) > > /* Flags for both getsockopt and setsockopt */ > -#define TCP_COOKIE_IN_ALWAYS (1 << 0) /* Discard SYN without cookie */ > -#define TCP_COOKIE_OUT_NEVER (1 << 1) /* Prohibit outgoing cookies, > +#define TCPCT_IN_ALWAYS (1 << 0) /* Discard SYN without cookie */ > +#define TCPCT_OUT_NEVER (1 << 1) /* Prohibit outgoing cookies, You end up changing values in kernel userspace API in a way that is incompatible with older applications. This is not acceptable. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 2/2] TCPCT API sockopt update to draft -03 2011-01-12 18:56 ` Stephen Hemminger @ 2011-01-13 17:32 ` William Allen Simpson 2011-01-13 17:53 ` Arnaud Lacombe 2011-01-13 18:00 ` Eric Dumazet 0 siblings, 2 replies; 11+ messages in thread From: William Allen Simpson @ 2011-01-13 17:32 UTC (permalink / raw) To: Stephen Hemminger Cc: Linux Kernel Developers, Linux Kernel Network Developers, David Miller, Andrew Morton On 1/12/11 1:56 PM, Stephen Hemminger wrote: > On Wed, 12 Jan 2011 12:59:38 -0500 > William Allen Simpson<william.allen.simpson@gmail.com> wrote: > >> diff --git a/include/linux/tcp.h b/include/linux/tcp.h >> index e64f4c6..c8f4017 100644 >> --- a/include/linux/tcp.h >> +++ b/include/linux/tcp.h >> @@ -185,22 +185,37 @@ struct tcp_md5sig { >> #define TCP_COOKIE_PAIR_SIZE (2*TCP_COOKIE_MAX) >> >> /* Flags for both getsockopt and setsockopt */ >> -#define TCP_COOKIE_IN_ALWAYS (1<< 0) /* Discard SYN without cookie */ >> -#define TCP_COOKIE_OUT_NEVER (1<< 1) /* Prohibit outgoing cookies, >> +#define TCPCT_IN_ALWAYS (1<< 0) /* Discard SYN without cookie */ >> +#define TCPCT_OUT_NEVER (1<< 1) /* Prohibit outgoing cookies, > > You end up changing values in kernel userspace API in a way > that is incompatible with older applications. This is not acceptable. > While I agree in principle and argued strongly against it, other members of the research group (particularly the original project sponsor) have over-ridden my concerns. I'm sorry to inform you that many/most participants don't care much about Linux. Note that the *bits* are the same, and previously compiled programs (that don't access more advanced features) should continue to run as they have in the past. Even though I'm not paid to work on Linux, I'm doing my best to give you folks a quick heads up and provide code to rectify the very recent changes that can be propagated back through the stable tree (to 2.6.33). As always, what you actually do with my code is up to you.... ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 2/2] TCPCT API sockopt update to draft -03 2011-01-13 17:32 ` William Allen Simpson @ 2011-01-13 17:53 ` Arnaud Lacombe 2011-01-14 3:00 ` William Allen Simpson 2011-01-13 18:00 ` Eric Dumazet 1 sibling, 1 reply; 11+ messages in thread From: Arnaud Lacombe @ 2011-01-13 17:53 UTC (permalink / raw) To: William Allen Simpson Cc: Stephen Hemminger, Linux Kernel Developers, Linux Kernel Network Developers, David Miller, Andrew Morton Hi, On Thu, Jan 13, 2011 at 12:32 PM, William Allen Simpson <william.allen.simpson@gmail.com> wrote: > On 1/12/11 1:56 PM, Stephen Hemminger wrote: >> >> On Wed, 12 Jan 2011 12:59:38 -0500 >> William Allen Simpson<william.allen.simpson@gmail.com> wrote: >> >>> diff --git a/include/linux/tcp.h b/include/linux/tcp.h >>> index e64f4c6..c8f4017 100644 >>> --- a/include/linux/tcp.h >>> +++ b/include/linux/tcp.h >>> @@ -185,22 +185,37 @@ struct tcp_md5sig { >>> #define TCP_COOKIE_PAIR_SIZE (2*TCP_COOKIE_MAX) >>> >>> /* Flags for both getsockopt and setsockopt */ >>> -#define TCP_COOKIE_IN_ALWAYS (1<< 0) /* Discard SYN without >>> cookie */ >>> -#define TCP_COOKIE_OUT_NEVER (1<< 1) /* Prohibit outgoing >>> cookies, >>> +#define TCPCT_IN_ALWAYS (1<< 0) /* Discard SYN >>> without cookie */ >>> +#define TCPCT_OUT_NEVER (1<< 1) /* Prohibit >>> outgoing cookies, >> >> You end up changing values in kernel userspace API in a way >> that is incompatible with older applications. This is not acceptable. >> > While I agree in principle and argued strongly against it, other > members of the research group (particularly the original project > sponsor) have over-ridden my concerns. I'm sorry to inform you that > many/most participants don't care much about Linux. > > Note that the *bits* are the same, and previously compiled programs > (that don't access more advanced features) should continue to run as > they have in the past. > > Even though I'm not paid to work on Linux, I'm doing my best to give you > folks a quick heads up and provide code to rectify the very recent changes > that can be propagated back through the stable tree (to 2.6.33). > > As always, what you actually do with my code is up to you.... > FWIW, what is the basis of this hunk ? The RFC text[0] seems to use the TCP_COOKIE_* naming, not TCPCT_. Thanks, - Arnaud [0]: http://www.rfc-editor.org/authors/rfc6013.txt -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 2/2] TCPCT API sockopt update to draft -03 2011-01-13 17:53 ` Arnaud Lacombe @ 2011-01-14 3:00 ` William Allen Simpson 2011-01-14 3:08 ` Eric Dumazet 0 siblings, 1 reply; 11+ messages in thread From: William Allen Simpson @ 2011-01-14 3:00 UTC (permalink / raw) To: Arnaud Lacombe Cc: Stephen Hemminger, Linux Kernel Developers, Linux Kernel Network Developers, David Miller, Andrew Morton On 1/13/11 12:53 PM, Arnaud Lacombe wrote: > On Thu, Jan 13, 2011 at 12:32 PM, William Allen Simpson > <william.allen.simpson@gmail.com> wrote: >> Even though I'm not paid to work on Linux, I'm doing my best to give you >> folks a quick heads up and provide code to rectify the very recent changes >> that can be propagated back through the stable tree (to 2.6.33). >> >> As always, what you actually do with my code is up to you.... >> > FWIW, what is the basis of this hunk ? The RFC text[0] seems to use > the TCP_COOKIE_* naming, not TCPCT_. > > Thanks, > - Arnaud > > [0]: http://www.rfc-editor.org/authors/rfc6013.txt > Is this supposed to be humorous? Maybe folks here find it amusing that somebody thinks they know more than the *author* about the contents of the document? Did you note the words above? That is, "very recent changes"? Perhaps you are viewing an older cached version. Please check for the current month on every page: "January 2011". We discussed -- and ultimately decided -- these changes in private email during the independent review process before making them available to the general public. That's how the RFC publication procedure works. I tried to be helpful to the Linux community in advance of publication, so you would be prepared. I'm sorry that the community here is so lacking in appreciation for my efforts on your behalf. As always, what you actually do with my code is up to you.... ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 2/2] TCPCT API sockopt update to draft -03 2011-01-14 3:00 ` William Allen Simpson @ 2011-01-14 3:08 ` Eric Dumazet 0 siblings, 0 replies; 11+ messages in thread From: Eric Dumazet @ 2011-01-14 3:08 UTC (permalink / raw) To: William Allen Simpson Cc: Arnaud Lacombe, Stephen Hemminger, Linux Kernel Developers, Linux Kernel Network Developers, David Miller, Andrew Morton Le jeudi 13 janvier 2011 à 22:00 -0500, William Allen Simpson a écrit : > Is this supposed to be humorous? Maybe folks here find it amusing that > somebody thinks they know more than the *author* about the contents of the > document? Did you note the words above? That is, "very recent changes"? > > Perhaps you are viewing an older cached version. Please check for the > current month on every page: "January 2011". > > We discussed -- and ultimately decided -- these changes in private email > during the independent review process before making them available to the > general public. That's how the RFC publication procedure works. > > I tried to be helpful to the Linux community in advance of publication, so > you would be prepared. I'm sorry that the community here is so lacking in > appreciation for my efforts on your behalf. > > As always, what you actually do with my code is up to you.... > -- Next time you come here, provide an up2date link for us mere mortals, so that we can check your code against your claims. We dont trust you anymore, we had to fix several bugs. This is getting ridiculous. As I said, we are going to wait for official RFC, because its time consuming to review your patches, and nobody asked for early TCPCT coding in linux kernel (you already said your buddies dont care at all) ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v1 2/2] TCPCT API sockopt update to draft -03 2011-01-13 17:32 ` William Allen Simpson 2011-01-13 17:53 ` Arnaud Lacombe @ 2011-01-13 18:00 ` Eric Dumazet 1 sibling, 0 replies; 11+ messages in thread From: Eric Dumazet @ 2011-01-13 18:00 UTC (permalink / raw) To: William Allen Simpson Cc: Stephen Hemminger, Linux Kernel Developers, Linux Kernel Network Developers, David Miller, Andrew Morton Le jeudi 13 janvier 2011 à 12:32 -0500, William Allen Simpson a écrit : > On 1/12/11 1:56 PM, Stephen Hemminger wrote: > > On Wed, 12 Jan 2011 12:59:38 -0500 > > William Allen Simpson<william.allen.simpson@gmail.com> wrote: > > > >> diff --git a/include/linux/tcp.h b/include/linux/tcp.h > >> index e64f4c6..c8f4017 100644 > >> --- a/include/linux/tcp.h > >> +++ b/include/linux/tcp.h > >> @@ -185,22 +185,37 @@ struct tcp_md5sig { > >> #define TCP_COOKIE_PAIR_SIZE (2*TCP_COOKIE_MAX) > >> > >> /* Flags for both getsockopt and setsockopt */ > >> -#define TCP_COOKIE_IN_ALWAYS (1<< 0) /* Discard SYN without cookie */ > >> -#define TCP_COOKIE_OUT_NEVER (1<< 1) /* Prohibit outgoing cookies, > >> +#define TCPCT_IN_ALWAYS (1<< 0) /* Discard SYN without cookie */ > >> +#define TCPCT_OUT_NEVER (1<< 1) /* Prohibit outgoing cookies, > > > > You end up changing values in kernel userspace API in a way > > that is incompatible with older applications. This is not acceptable. > > > While I agree in principle and argued strongly against it, other > members of the research group (particularly the original project > sponsor) have over-ridden my concerns. I'm sorry to inform you that > many/most participants don't care much about Linux. > How leaving TCP_COOKIE_IN_ALWAYS and TCP_COOKIE_OUT_NEVER definitions so that user space programs compiles can be a problem to "research group" ? AFAIK, TCPCT_IN_ALWAYS / TCPCT_OUT_NEVER are not mentioned in http://www.rfc-editor.org/authors/rfc6013.txt But TCP_COOKIE_IN_ALWAYS and TCP_COOKIE_OUT_NEVER are ... Isnt it a bit confusing ? > Note that the *bits* are the same, and previously compiled programs > (that don't access more advanced features) should continue to run as > they have in the past. > > Even though I'm not paid to work on Linux, I'm doing my best to give you > folks a quick heads up and provide code to rectify the very recent changes > that can be propagated back through the stable tree (to 2.6.33). > > As always, what you actually do with my code is up to you.... Maybe its too early, and we should wait for an official RFC, especially if you insist breaking API in 6 months. ^ permalink raw reply [flat|nested] 11+ messages in thread
* TCPCT API update for 2.6.37 @ 2011-01-08 21:36 William Allen Simpson 0 siblings, 0 replies; 11+ messages in thread From: William Allen Simpson @ 2011-01-08 21:36 UTC (permalink / raw) To: Linux Kernel Network Developers With the recent flurry of messages related to TCPCT, I devoted a nice snowy Saturday afternoon to updating the socket option code. Linux is rather fair behind on TCPCT implementation, so this will help with future software compatibility. I'm not on this list, so anybody with comments should CC me. Thanks. ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2011-01-14 3:08 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-01-12 17:43 TCPCT API update for 2.6.37 William Allen Simpson 2011-01-12 17:52 ` [PATCH v1 1/2] TCPCT API sysctl update to draft -03 William Allen Simpson 2011-01-12 18:05 ` Eric Dumazet 2011-01-12 17:59 ` [PATCH v1 2/2] TCPCT API sockopt " William Allen Simpson 2011-01-12 18:56 ` Stephen Hemminger 2011-01-13 17:32 ` William Allen Simpson 2011-01-13 17:53 ` Arnaud Lacombe 2011-01-14 3:00 ` William Allen Simpson 2011-01-14 3:08 ` Eric Dumazet 2011-01-13 18:00 ` Eric Dumazet -- strict thread matches above, loose matches on Subject: below -- 2011-01-08 21:36 TCPCT API update for 2.6.37 William Allen Simpson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).