* Re: [PATCH v7 08/22] net/tcp: Add AO sign to RST packets
@ 2023-06-15 7:46 kernel test robot
0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2023-06-15 7:46 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp
::::::
:::::: Manual check reason: "low confidence static check warning: net/ipv6/tcp_ipv6.c:1136:1: sparse: sparse: unused label 'out'"
::::::
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20230614230947.3954084-9-dima@arista.com>
References: <20230614230947.3954084-9-dima@arista.com>
TO: Dmitry Safonov <dima@arista.com>
TO: David Ahern <dsahern@kernel.org>
TO: Eric Dumazet <edumazet@google.com>
TO: Paolo Abeni <pabeni@redhat.com>
TO: Jakub Kicinski <kuba@kernel.org>
TO: "David S. Miller" <davem@davemloft.net>
CC: netdev@vger.kernel.org
CC: linux-kernel@vger.kernel.org
CC: Dmitry Safonov <dima@arista.com>
CC: Andy Lutomirski <luto@amacapital.net>
CC: Ard Biesheuvel <ardb@kernel.org>
CC: Bob Gilligan <gilligan@arista.com>
CC: Dan Carpenter <error27@gmail.com>
CC: David Laight <David.Laight@aculab.com>
CC: Donald Cassidy <dcassidy@redhat.com>
CC: Eric Biggers <ebiggers@kernel.org>
CC: "Eric W. Biederman" <ebiederm@xmission.com>
CC: Francesco Ruggeri <fruggeri05@gmail.com>
CC: Herbert Xu <herbert@gondor.apana.org.au>
CC: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
CC: Ivan Delalande <colona@arista.com>
CC: Leonard Crestez <cdleonard@gmail.com>
CC: Salam Noureddine <noureddine@arista.com>
Hi Dmitry,
kernel test robot noticed the following build warnings:
[auto build test WARNING on b6dad5178ceaf23f369c3711062ce1f2afc33644]
url: https://github.com/intel-lab-lkp/linux/commits/Dmitry-Safonov/net-tcp-Prepare-tcp_md5sig_pool-for-TCP-AO/20230615-071334
base: b6dad5178ceaf23f369c3711062ce1f2afc33644
patch link: https://lore.kernel.org/r/20230614230947.3954084-9-dima%40arista.com
patch subject: [PATCH v7 08/22] net/tcp: Add AO sign to RST packets
:::::: branch date: 8 hours ago
:::::: commit date: 8 hours ago
config: i386-randconfig-s001-20230614 (https://download.01.org/0day-ci/archive/20230615/202306151524.UEz29Wc1-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.4-39-gce1a6720-dirty
# https://github.com/intel-lab-lkp/linux/commit/2045a93527d963ceabff145d0cc7c168e1bceedd
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Dmitry-Safonov/net-tcp-Prepare-tcp_md5sig_pool-for-TCP-AO/20230615-071334
git checkout 2045a93527d963ceabff145d0cc7c168e1bceedd
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 olddefconfig
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash net/ipv6/
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/r/202306151524.UEz29Wc1-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
>> net/ipv6/tcp_ipv6.c:1136:1: sparse: sparse: unused label 'out'
net/ipv6/tcp_ipv6.c:1454:25: sparse: sparse: context imbalance in 'tcp_v6_syn_recv_sock' - unexpected unlock
net/ipv6/tcp_ipv6.c:1835:21: sparse: sparse: context imbalance in 'tcp_v6_rcv' - different lock contexts for basic block
vim +/out +1136 net/ipv6/tcp_ipv6.c
2045a93527d963c Dmitry Safonov 2023-06-15 1110
c24b14c46bb88d8 Song Liu 2017-10-23 1111 if (sk) {
c24b14c46bb88d8 Song Liu 2017-10-23 1112 oif = sk->sk_bound_dev_if;
052e0690f1f62f7 Eric Dumazet 2019-07-10 1113 if (sk_fullsock(sk)) {
052e0690f1f62f7 Eric Dumazet 2019-07-10 1114 const struct ipv6_pinfo *np = tcp_inet6_sk(sk);
052e0690f1f62f7 Eric Dumazet 2019-07-10 1115
c24b14c46bb88d8 Song Liu 2017-10-23 1116 trace_tcp_send_reset(sk, skb);
052e0690f1f62f7 Eric Dumazet 2019-07-10 1117 if (np->repflow)
052e0690f1f62f7 Eric Dumazet 2019-07-10 1118 label = ip6_flowlabel(ipv6h);
e9a5dceee56cb52 Eric Dumazet 2019-09-24 1119 priority = sk->sk_priority;
dc6456e938e938d Antoine Tenart 2023-04-27 1120 txhash = sk->sk_txhash;
052e0690f1f62f7 Eric Dumazet 2019-07-10 1121 }
f6c0f5d209fa80e Eric Dumazet 2019-09-24 1122 if (sk->sk_state == TCP_TIME_WAIT) {
50a8accf10627b3 Eric Dumazet 2019-06-05 1123 label = cpu_to_be32(inet_twsk(sk)->tw_flowlabel);
f6c0f5d209fa80e Eric Dumazet 2019-09-24 1124 priority = inet_twsk(sk)->tw_priority;
9258b8b1be2e1e2 Eric Dumazet 2022-09-22 1125 txhash = inet_twsk(sk)->tw_txhash;
f6c0f5d209fa80e Eric Dumazet 2019-09-24 1126 }
323a53c41292a0d Eric Dumazet 2019-06-05 1127 } else {
a346abe051bd2bd Eric Dumazet 2019-07-01 1128 if (net->ipv6.sysctl.flowlabel_reflect & FLOWLABEL_REFLECT_TCP_RESET)
323a53c41292a0d Eric Dumazet 2019-06-05 1129 label = ip6_flowlabel(ipv6h);
c24b14c46bb88d8 Song Liu 2017-10-23 1130 }
c24b14c46bb88d8 Song Liu 2017-10-23 1131
e92dd77e6fe0a33 Wei Wang 2020-09-08 1132 tcp_v6_send_response(sk, skb, seq, ack_seq, 0, 0, 0, oif, key, 1,
2045a93527d963c Dmitry Safonov 2023-06-15 1133 ipv6_get_dsfield(ipv6h), label, priority, txhash,
2045a93527d963c Dmitry Safonov 2023-06-15 1134 ao_key, traffic_key, rcv_next, ao_sne);
658ddaaf6694adf Shawn Lu 2012-01-31 1135
3b24d854cb35383 Eric Dumazet 2016-04-01 @1136 out:
658ddaaf6694adf Shawn Lu 2012-01-31 1137 rcu_read_unlock();
ecc51b6d5ca04bb Arnaldo Carvalho de Melo 2005-12-12 1138 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 1139
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v7 00/22] net/tcp: Add TCP-AO support
@ 2023-06-14 23:09 Dmitry Safonov
2023-06-14 23:09 ` [PATCH v7 08/22] net/tcp: Add AO sign to RST packets Dmitry Safonov
0 siblings, 1 reply; 5+ messages in thread
From: Dmitry Safonov @ 2023-06-14 23:09 UTC (permalink / raw)
To: David Ahern, Eric Dumazet, Paolo Abeni, Jakub Kicinski,
David S. Miller
Cc: linux-kernel, Dmitry Safonov, Andy Lutomirski, Ard Biesheuvel,
Bob Gilligan, Dan Carpenter, David Laight, Dmitry Safonov,
Donald Cassidy, Eric Biggers, Eric W. Biederman,
Francesco Ruggeri, Herbert Xu, Hideaki YOSHIFUJI, Ivan Delalande,
Leonard Crestez, Salam Noureddine, netdev
Hi,
This is version 7 of TCP-AO support. I based it on master and there's
trivial conflict with commit c0a8966e2bc7 ("net: ipv4: use consistent
txhash in TIME_WAIT and SYN_RECV") in linux-next.
Big thing is that I've managed to drop per-CPU ahash request allocations
in tcp_sigpool. The only 2 reasons the pool yet exists are:
- scratch_area pre-allocation
- allocation of tfms on setsockopt(), those will be cloned on RX/TX
There's a side patch set to fix cmac(aes128) cloning:
https://lore.kernel.org/all/20230614174643.3836590-1-dima@arista.com/T/#u
Another big thing was TCP_AO_REPAIR UAPI, that allowed me to add yet
even more selftests, as it provides a handy way to get socket in a
needed state and hack its TCP-AO state. So, here comes RST segments,
Sequence Number Extension (SNE) and Initial Sequence Numbers (ISN)
selftests. Which also helped to refactor tcp_v{4,6}_send_reset()
refactoring.
The only thing left from my previous cover-letter-TODO lists is to write
a Documentation/ page about kernel TCP-AO support and its UAPIs.
And I have a lot of ideas how-to selftest/stress-test/benchmark TCP-AO.
Those seem like they can wait and I'd prioritize fixing review comments
over them, so please provide your reviews.
One more thing is verifying segments on TCP_TIME_WAIT sockets. At this
version, TCP-AO does the same as TCP-MD5: doesn't bother verifying
inbound segments (except SYN, that may revive the connection).
There's independent of TCP-AO patch set for TCP-MD5 to verify segments
on twsk:
https://lore.kernel.org/all/20230509221608.2569333-1-dima@arista.com/T/#u
This is also available as a git branch for pull:
https://github.com/0x7f454c46/linux/tree/tcp-ao-v7
And another branch with selftests, that will be sent later separately:
https://github.com/0x7f454c46/linux/tree/tcp-ao-v7-with-selftests
Thanks for your time and reviews,
Dmitry
--- Changelog ---
Changes from v6:
- Some more trivial build warnings fixups (kernel test robot <lkp@intel.com>)
- Added TCP_AO_REPAIR setsockopt(), getsockopt()
- Allowed TCP_AO_* setsockopts if (tp->repair) is on
- Added selftests for TCP_AO_REPAIR, that also check incorrect
ISNs/SNEs, which result in a broken TCP-AO connection - that verifies
that both Initial Sequence Numbers and Sequence Number Extension are
part of MAC generation
- Using TCP_AO_REPAIR added a selftest for SEQ numbers rollover,
checking that SNE was incremented, connection is alive post-rolloever
and no TCP segments with a wrong signature arrived
- Wrote a selftest for RST segments: both active reset (goes through
transmit_skb()) and passive reset (goes through tcp_v{4,6}_send_reset()).
- Refactored and made readable tcp_v{4,6}_send_reset(), also adding
support for TCP_LISTEN/TCP_NEW_SYN_RECV
- Dropped per-CPU ahash requests allocations in favor of Herbert's
clone-tfm crypto API
- Added Donald Cassidy to Cc as he's interested in getting it into RHEL.
Version 6: https://lore.kernel.org/all/20230512202311.2845526-1-dima@arista.com/T/#u
iperf[3] benchmarks for version 6:
v6.4-rc1 TCP-AO-v6
TCP 43.9 Gbits/sec 43.5 Gbits/sec
TCP-MD5 2.20 Gbits/sec 2.25 Gbits/sec
TCP-AO(hmac(sha1)) 2.53 Gbits/sec
TCP-AO(hmac(sha512)) 1.67 Gbits/sec
TCP-AO(hmac(sha384)) 1.77 Gbits/sec
TCP-AO(hmac(sha224)) 1.29 Gbits/sec
TCP-AO(hmac(sha3-512)) 481 Mbits/sec
TCP-AO(hmac(md5)) 2.07 Gbits/sec
TCP-AO(hmac(rmd160)) 1.01 Gbits/sec
TCP-AO(cmac(aes128)) 2.11 Gbits/sec
Changes from v5:
- removed check for TCP_AO_KEYF_IFINDEX in delete command:
VRF might have been destroyed, there still needs to be a way to delete
keys that were bound to that l3intf (should tcp_v{4,6}_parse_md5_keys()
avoid the same check as well?)
- corrected copy'n'paste typo in tcp_ao_info_cmd() (assign ao_info->rnext_key)
- simplified a bit tcp_ao_copy_mkts_to_user(); added more UAPI checks
for getsockopt(TCP_AO_GET_KEYS)
- More UAPI selftests in setsockopt-closed: 29 => 120
- ported TCP-AO patches on Herbert's clone-tfm changes
- adjusted iperf patch for TCP-AO UAPI changes from version 5
- added measures for TCP-AO with tcp_sigpool & clone_tfm backends
Version 5: https://lore.kernel.org/all/20230403213420.1576559-1-dima@arista.com/T/#u
Changes from v4:
- Renamed tcp_ao_matched_key() => tcp_ao_established_key()
- Missed `static` in function definitions
(kernel test robot <lkp@intel.com>)
- Fixed CONFIG_IPV6=m build
- Unexported tcp_md5_*_sigpool() functions
- Cleaned up tcp_ao.h: undeclared tcp_ao_cache_traffic_keys(),
tcp_v4_ao_calc_key_skb(); removed tcp_v4_inbound_ao_hash()
- Marked "net/tcp: Prepare tcp_md5sig_pool for TCP-AO" as a [draft] patch
- getsockopt() now returns TCP-AO per-key counters
- Another getsockopt() now returns per-ao_info stats: counters
and accept_icmps flag state
- Wired up getsockopt() returning counters to selftests
- Fixed a porting mistake: TCP-AO hash in some cases was written in TCP
header without accounting for MAC length of the key, rewritting skb
shared info
- Fail adding a key with L3 ifindex when !TCP_AO_KEYF_IFINDEX, instead
of ignoring tcpa_ifindex (stricter UAPI check)
- Added more test-cases to setsockopt-closed.c selftest
- tcp_ao_hash_skb_data() was a copy'n'paste of tcp_md5_hash_skb_data()
share it now under tcp_sigpool_hash_skb_data()
- tcp_ao_mkt_overlap_v{4,6}() deleted as they just re-invented
tcp_ao_do_lookup(). That fixes an issue with multiple IPv4-mapped-IPv6
keys for different peers on a listening socket.
- getsockopt() now is tested to return correct VRF number for a key
- TCP-AO and TCP-MD5 interraction in non/default VRFs: added +19 selftests
made them SKIP when CONFIG_VRF=n
- unsigned-md5 selftests now checks both scenarios:
(1) adding TCP-AO key _after_ TCP-MD5 key
(2) adding TCP-MD5 key _after_ TCP-AO key
- Added a ratelimited warning if TCP-AO key.ifindex doesn't match
sk->sk_bound_dev_if - that will warn a user for potential VRF issues
- tcp_v{4,6}_parse_md5_keys() now allows adding TCP-MD5 key with
ifindex=0 and TCP_MD5SIG_FLAG_IFINDEX together with TCP-AO key from
another VRF
- Add TCP_AO_CMDF_AO_REQUIRED, which makes a socket TCP-AO only,
rejecting TCP-MD5 keys or any unsigned TCP segments
- Remove `tcpa_' prefix for UAPI structure members
- UAPI cleanup: I've separated & renamed per-socket settings
(such as ao_info flags + current/rnext set) from per-key changes:
TCP_AO => TCP_AO_ADD_KEY
TCP_AO_DEL => TCP_AO_DEL_KEY
TCP_AO_GET => TCP_AO_GET_KEYS
TCP_AO_MOD => TCP_AO_INFO, the structure is now valid for both
getsockopt() and setsockopt().
- tcp_ao_current_rnext() was split up in order to fail earlier when
sndid/rcvid specified can't be set, before anything was changed in ao_info
- fetch current_key before dumping TCP-AO keys in getsockopt(TCP_AO_GET_KEYS):
it may race with changing current_key by RX, which in result might
produce a dump with no current_key for userspace.
- instead of TCP_AO_CMDF_* flags, used bitfileds: the flags weren't
shared between all TCP_AO_{ADD,GET,DEL}_KEY{,S}, so bitfields are more
descriptive here
- use READ_ONCE()/WRITE_ONCE() for current_key and rnext_key more
consistently; document in comment the rules for accessing them
- selftests: check all setsockopts()/getsockopts() support extending
option structs
Version 4: https://lore.kernel.org/all/20230215183335.800122-1-dima@arista.com/T/#u
Changes from v3:
- TCP_MD5 dynamic static key enable/disable patches merged separately [4]
- crypto_pool patches were nacked [5], so instead this patch set extends
TCP-MD5-sigpool to be used for TCP-AO as well as for TCP-MD5
- Added missing `static' for tcp_v6_ao_calc_key()
(kernel test robot <lkp@intel.com>)
- Removed CONFIG_TCP_AO default=y and added "If unsure, say N."
- Don't leak ao_info and don't create an unsigned TCP socket if there was
a TCP-AO key during handshake, but it was removed from listening socket
while the connection was being established
- Migrate to use static_key_fast_inc_not_disabled() and check return
code of static_branch_inc()
- Change some return codes to EAFNOSUPPORT for error-pathes where
family is neither AF_INET nor AF_INET6
- setsockopt()s on a closed/listen socket might have created stray ao_info,
remove it if connect() is called with a correct TCP-MD5 key, the same
for the reverse situation: remove md5sig_info straight away from the
socket if it's going to be TCP-AO connection
- IPv4-mapped-IPv6 addresses + selftest in fcnal-test.sh (by Salam)
- fix using uninitialized sisn/disn from stack - it would only make
non-SYN packets fail verification on a listen socket, which are not
expected anyway (kernel test robot <lkp@intel.com>)
- implicit padding in UAPI TCP-AO structures converted to explicit
(spotted-by David Laight)
- Some selftests missed zero-initializers for uapi structs on stack
- Removed tcp_ao_do_lookup_rcvid() and tcp_ao_do_lookup_sndid() in
favor of unified tcp_ao_matched_key()
- Disallowed setting current/rnext keys on listen sockets - that wasn't
supported and didn't affect anything, cleanup for the UAPI
- VRFs support for TCP-AO
Version 3: https://lore.kernel.org/all/20221027204347.529913-1-dima@arista.com/T/#u
Changes from v2:
- Added more missing `static' declarations for local functions
(kernel test robot <lkp@intel.com>)
- Building now with CONFIG_TCP_AO=n and CONFIG_TCP_MD5SIG=n
(kernel test robot <lkp@intel.com>)
- Now setsockopt(TCP_AO) is allowed when it's TCP_LISTEN or TCP_CLOSE
state OR the key added is not the first key on a socket (by Salam)
- CONFIG_TCP_AO does not depend on CONFIG_TCP_MD5SIG anymore
- Don't leak tcp_md5_needed static branch counter when TCP-MD5 key
is modified/changed
- TCP-AO lookups are dynamically enabled/disabled with static key when
there is ao_info in the system (and when it is destroyed)
- Wired SYN cookies up to TCP-AO (by Salam)
- Fix verification for possible re-transmitted SYN packets (by Salam)
- use sockopt_lock_sock() instead of lock_sock()
(from v6.1 rebase, commit d51bbff2aba7)
- use sockptr_t in getsockopt(TCP_AO_GET)
(from v6.1 rebase, commit 34704ef024ae)
- Fixed reallocating crypto_pool's scratch area by IPI while
crypto_pool_get() was get by another CPU
- selftests on older kernels (or with CONFIG_TCP_AO=n) should exit with
SKIP, not FAIL (Shuah Khan <shuah@kernel.org>)
- selftests that check interaction between TCP-AO and TCP-MD5 now
SKIP when CONFIG_TCP_MD5SIG=n
- Measured the performance of different hashing algorithms for TCP-AO
and compare with TCP-MD5 performance. This is done with hacky patches
to iperf (see [3]). At this moment I've done it in qemu/KVM with CPU
affinities set on Intel(R) Core(TM) i7-7600U CPU @ 2.80GHz.
No performance degradation was noticed before/after patches, but given
the measures were done in a VM, without measuring it on a physical dut
it only gives a hint of relative speed for different hash algorithms
with TCP-AO. Here are results, averaging on 30 measures each:
TCP: 3.51Gbits/sec
TCP-MD5: 1.12Gbits/sec
TCP-AO(HMAC(SHA1)): 1.53Gbits/sec
TCP-AO(CMAC(AES128)): 621Mbits/sec
TCP-AO(HMAC(SHA512)): 1.21Gbits/sec
TCP-AO(HMAC(SHA384)): 1.20Gbits/sec
TCP-AO(HMAC(SHA224)): 961Mbits/sec
TCP-AO(HMAC(SHA3-512)): 157Mbits/sec
TCP-AO(HMAC(RMD160)): 659Mbits/sec
TCP-AO(HMAC(MD5): 1.12Gbits/sec
(the last one is just for fun, but may make sense as it provides
the same security as TCP-MD5, but allows multiple keys and a mechanism
to change them from RFC5925)
Version 2: https://lore.kernel.org/all/20220923201319.493208-1-dima@arista.com/T/#u
Changes from v1:
- Building now with CONFIG_IPV6=n (kernel test robot <lkp@intel.com>)
- Added missing static declarations for local functions
(kernel test robot <lkp@intel.com>)
- Addressed static analyzer and review comments by Dan Carpenter
(thanks, they were very useful!)
- Fix elif without defined() for !CONFIG_TCP_AO
- Recursively build selftests/net/tcp_ao (Shuah Khan), patches in:
https://lore.kernel.org/all/20220919201958.279545-1-dima@arista.com/T/#u
- Don't leak crypto_pool reference when TCP-MD5 key is modified/changed
- Add TCP-AO support for nettest.c and fcnal-test.sh
(will be used for VRF testing in later versions)
Comparison between Leonard proposal and this (overview):
https://lore.kernel.org/all/3cf03d51-74db-675c-b392-e4647fa5b5a6@arista.com/T/#u
Version 1: https://lore.kernel.org/all/20220818170005.747015-1-dima@arista.com/T/#u
This patchset implements the TCP-AO option as described in RFC5925. There
is a request from industry to move away from TCP-MD5SIG and it seems the time
is right to have a TCP-AO upstreamed. This TCP option is meant to replace
the TCP MD5 option and address its shortcomings. Specifically, it provides
more secure hashing, key rotation and support for long-lived connections
(see the summary of TCP-AO advantages over TCP-MD5 in (1.3) of RFC5925).
The patch series starts with six patches that are not specific to TCP-AO
but implement a general crypto facility that we thought is useful
to eliminate code duplication between TCP-MD5SIG and TCP-AO as well as other
crypto users. These six patches are being submitted separately in
a different patchset [1]. Including them here will show better the gain
in code sharing. Next are 18 patches that implement the actual TCP-AO option,
followed by patches implementing selftests.
The patch set was written as a collaboration of three authors (in alphabetical
order): Dmitry Safonov, Francesco Ruggeri and Salam Noureddine. Additional
credits should be given to Prasad Koya, who was involved in early prototyping
a few years back. There is also a separate submission done by Leonard Crestez
whom we thank for his efforts getting an implementation of RFC5925 submitted
for review upstream [2]. This is an independent implementation that makes
different design decisions.
For example, we chose a similar design to the TCP-MD5SIG implementation and
used setsockopts to program per-socket keys, avoiding the extra complexity
of managing a centralized key database in the kernel. A centralized database
in the kernel has dubious benefits since it doesn’t eliminate per-socket
setsockopts needed to specify which sockets need TCP-AO and what are the
currently preferred keys. It also complicates traffic key caching and
preventing deletion of in-use keys.
In this implementation, a centralized database of keys can be thought of
as living in user space and user applications would have to program those
keys on matching sockets. On the server side, the user application programs
keys (MKTS in TCP-AO nomenclature) on the listening socket for all peers that
are expected to connect. Prefix matching on the peer address is supported.
When a peer issues a successful connect, all the MKTs matching the IP address
of the peer are copied to the newly created socket. On the active side,
when a connect() is issued all MKTs that do not match the peer are deleted
from the socket since they will never match the peer. This implementation
uses three setsockopt()s for adding, deleting and modifying keys on a socket.
All three setsockopt()s have extensive sanity checks that prevent
inconsistencies in the keys on a given socket. A getsockopt() is provided
to get key information from any given socket.
Few things to note about this implementation:
- Traffic keys are cached for established connections avoiding the cost of
such calculation for each packet received or sent.
- Great care has been taken to avoid deleting in-use MKTs
as required by the RFC.
- Any crypto algorithm supported by the Linux kernel can be used
to calculate packet hashes.
- Fastopen works with TCP-AO but hasn’t been tested extensively.
- Tested for interop with other major networking vendors (on linux-4.19),
including testing for key rotation and long lived connections.
[1]: https://lore.kernel.org/all/20220726201600.1715505-1-dima@arista.com/
[2]: https://lore.kernel.org/all/cover.1658815925.git.cdleonard@gmail.com/
[3]: https://github.com/0x7f454c46/iperf/tree/tcp-md5-ao
[4]: https://lore.kernel.org/all/166995421700.16716.17446147162780881407.git-patchwork-notify@kernel.org/T/#u
[5]: https://lore.kernel.org/all/Y8kSkW4X4vQdFyOl@gondor.apana.org.au/T/#u
[6]: https://lore.kernel.org/all/ZDefxOq6Ax0JeTRH@gondor.apana.org.au/T/#u
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Ard Biesheuvel <ardb@kernel.org>
Cc: Bob Gilligan <gilligan@arista.com>
Cc: Dan Carpenter <error27@gmail.com>
Cc: David Ahern <dsahern@kernel.org>
Cc: David Laight <David.Laight@aculab.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Dmitry Safonov <0x7f454c46@gmail.com>
Cc: Donald Cassidy <dcassidy@redhat.com>
Cc: Eric Biggers <ebiggers@kernel.org>
Cc: Eric Dumazet <edumazet@google.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Francesco Ruggeri <fruggeri05@gmail.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
Cc: Ivan Delalande <colona@arista.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Leonard Crestez <cdleonard@gmail.com>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Salam Noureddine <noureddine@arista.com>
Cc: netdev@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Dmitry Safonov (22):
net/tcp: Prepare tcp_md5sig_pool for TCP-AO
net/tcp: Add TCP-AO config and structures
net/tcp: Introduce TCP_AO setsockopt()s
net/tcp: Prevent TCP-MD5 with TCP-AO being set
net/tcp: Calculate TCP-AO traffic keys
net/tcp: Add TCP-AO sign to outgoing packets
net/tcp: Add tcp_parse_auth_options()
net/tcp: Add AO sign to RST packets
net/tcp: Add TCP-AO sign to twsk
net/tcp: Wire TCP-AO to request sockets
net/tcp: Sign SYN-ACK segments with TCP-AO
net/tcp: Verify inbound TCP-AO signed segments
net/tcp: Add TCP-AO segments counters
net/tcp: Add TCP-AO SNE support
net/tcp: Add tcp_hash_fail() ratelimited logs
net/tcp: Ignore specific ICMPs for TCP-AO connections
net/tcp: Add option for TCP-AO to (not) hash header
net/tcp: Add TCP-AO getsockopt()s
net/tcp: Allow asynchronous delete for TCP-AO keys (MKTs)
net/tcp: Add static_key for TCP-AO
net/tcp: Wire up l3index to TCP-AO
net/tcp: Add TCP_AO_REPAIR
include/linux/sockptr.h | 23 +
include/linux/tcp.h | 30 +-
include/net/dropreason-core.h | 30 +
include/net/tcp.h | 224 +++-
include/net/tcp_ao.h | 335 +++++
include/uapi/linux/snmp.h | 5 +
include/uapi/linux/tcp.h | 107 ++
net/ipv4/Kconfig | 17 +
net/ipv4/Makefile | 2 +
net/ipv4/proc.c | 5 +
net/ipv4/syncookies.c | 4 +
net/ipv4/tcp.c | 236 ++--
net/ipv4/tcp_ao.c | 2309 +++++++++++++++++++++++++++++++++
net/ipv4/tcp_input.c | 104 +-
net/ipv4/tcp_ipv4.c | 344 +++--
net/ipv4/tcp_minisocks.c | 35 +-
net/ipv4/tcp_output.c | 227 +++-
net/ipv4/tcp_sigpool.c | 357 +++++
net/ipv6/Makefile | 1 +
net/ipv6/syncookies.c | 5 +
net/ipv6/tcp_ao.c | 156 +++
net/ipv6/tcp_ipv6.c | 336 +++--
22 files changed, 4517 insertions(+), 375 deletions(-)
create mode 100644 include/net/tcp_ao.h
create mode 100644 net/ipv4/tcp_ao.c
create mode 100644 net/ipv4/tcp_sigpool.c
create mode 100644 net/ipv6/tcp_ao.c
base-commit: b6dad5178ceaf23f369c3711062ce1f2afc33644
--
2.40.0
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v7 08/22] net/tcp: Add AO sign to RST packets 2023-06-14 23:09 [PATCH v7 00/22] net/tcp: Add TCP-AO support Dmitry Safonov @ 2023-06-14 23:09 ` Dmitry Safonov 2023-06-15 1:22 ` kernel test robot ` (2 more replies) 0 siblings, 3 replies; 5+ messages in thread From: Dmitry Safonov @ 2023-06-14 23:09 UTC (permalink / raw) To: David Ahern, Eric Dumazet, Paolo Abeni, Jakub Kicinski, David S. Miller Cc: linux-kernel, Dmitry Safonov, Andy Lutomirski, Ard Biesheuvel, Bob Gilligan, Dan Carpenter, David Laight, Dmitry Safonov, Donald Cassidy, Eric Biggers, Eric W. Biederman, Francesco Ruggeri, Herbert Xu, Hideaki YOSHIFUJI, Ivan Delalande, Leonard Crestez, Salam Noureddine, netdev Wire up sending resets to TCP-AO hashing. Co-developed-by: Francesco Ruggeri <fruggeri@arista.com> Signed-off-by: Francesco Ruggeri <fruggeri@arista.com> Co-developed-by: Salam Noureddine <noureddine@arista.com> Signed-off-by: Salam Noureddine <noureddine@arista.com> Signed-off-by: Dmitry Safonov <dima@arista.com> --- include/net/tcp_ao.h | 12 +++++ net/ipv4/tcp_ao.c | 102 ++++++++++++++++++++++++++++++++++++++++++- net/ipv4/tcp_ipv4.c | 76 ++++++++++++++++++++++++-------- net/ipv6/tcp_ipv6.c | 67 ++++++++++++++++++++++------ 4 files changed, 223 insertions(+), 34 deletions(-) diff --git a/include/net/tcp_ao.h b/include/net/tcp_ao.h index 72fc87cf58bf..010c77c4456e 100644 --- a/include/net/tcp_ao.h +++ b/include/net/tcp_ao.h @@ -121,6 +121,8 @@ int tcp_ao_hash_skb(unsigned short int family, const u8 *tkey, int hash_offset, u32 sne); int tcp_parse_ao(struct sock *sk, int cmd, unsigned short int family, sockptr_t optval, int optlen); +struct tcp_ao_key *tcp_ao_established_key(struct tcp_ao_info *ao, + int sndid, int rcvid); int tcp_ao_calc_traffic_key(struct tcp_ao_key *mkt, u8 *key, void *ctx, unsigned int len); void tcp_ao_destroy_sock(struct sock *sk); @@ -128,6 +130,16 @@ u32 tcp_ao_compute_sne(u32 sne, u32 seq, u32 new_seq); struct tcp_ao_key *tcp_ao_do_lookup(const struct sock *sk, const union tcp_ao_addr *addr, int family, int sndid, int rcvid, u16 port); +int tcp_ao_hash_hdr(unsigned short family, char *ao_hash, + struct tcp_ao_key *key, const u8 *tkey, + const union tcp_ao_addr *daddr, + const union tcp_ao_addr *saddr, + const struct tcphdr *th, u32 sne); +int tcp_ao_prepare_reset(const struct sock *sk, struct sk_buff *skb, + const struct tcp_ao_hdr *aoh, int l3index, u32 seq, + struct tcp_ao_key **key, char **traffic_key, + u8 *keyid, u32 *sne); + /* ipv4 specific functions */ int tcp_v4_parse_ao(struct sock *sk, int optname, sockptr_t optval, int optlen); struct tcp_ao_key *tcp_v4_ao_lookup(const struct sock *sk, struct sock *addr_sk, diff --git a/net/ipv4/tcp_ao.c b/net/ipv4/tcp_ao.c index 3889628bdcc1..a45ab30265bf 100644 --- a/net/ipv4/tcp_ao.c +++ b/net/ipv4/tcp_ao.c @@ -56,8 +56,8 @@ int tcp_ao_calc_traffic_key(struct tcp_ao_key *mkt, u8 *key, void *ctx, * it's known that the keys in ao_info are matching peer's * family/address/port/VRF/etc. */ -static struct tcp_ao_key *tcp_ao_established_key(struct tcp_ao_info *ao, - int sndid, int rcvid) +struct tcp_ao_key *tcp_ao_established_key(struct tcp_ao_info *ao, + int sndid, int rcvid) { struct tcp_ao_key *key; @@ -70,6 +70,7 @@ static struct tcp_ao_key *tcp_ao_established_key(struct tcp_ao_info *ao, return NULL; } +EXPORT_SYMBOL_GPL(tcp_ao_established_key); static inline int ipv4_prefix_cmp(const struct in_addr *addr1, const struct in_addr *addr2, @@ -387,6 +388,61 @@ static int tcp_ao_hash_header(struct tcp_sigpool *hp, return err; } +int tcp_ao_hash_hdr(unsigned short int family, char *ao_hash, + struct tcp_ao_key *key, const u8 *tkey, + const union tcp_ao_addr *daddr, + const union tcp_ao_addr *saddr, + const struct tcphdr *th, u32 sne) +{ + __u8 tmp_hash[TCP_AO_MAX_HASH_SIZE] __tcp_ao_key_align; + int tkey_len = tcp_ao_digest_size(key); + int hash_offset = ao_hash - (char *)th; + struct tcp_sigpool hp; + + if (tcp_sigpool_start(key->tcp_sigpool_id, &hp)) + goto clear_hash_noput; + + if (crypto_ahash_setkey(crypto_ahash_reqtfm(hp.req), tkey, tkey_len)) + goto clear_hash; + + if (crypto_ahash_init(hp.req)) + goto clear_hash; + + if (tcp_ao_hash_sne(&hp, sne)) + goto clear_hash; + if (family == AF_INET) { + if (tcp_v4_ao_hash_pseudoheader(&hp, daddr->a4.s_addr, + saddr->a4.s_addr, th->doff * 4)) + goto clear_hash; +#if IS_ENABLED(CONFIG_IPV6) + } else if (family == AF_INET6) { + if (tcp_v6_ao_hash_pseudoheader(&hp, &daddr->a6, + &saddr->a6, th->doff * 4)) + goto clear_hash; +#endif + } else { + WARN_ON_ONCE(1); + goto clear_hash; + } + if (tcp_ao_hash_header(&hp, th, false, + ao_hash, hash_offset, tcp_ao_maclen(key))) + goto clear_hash; + ahash_request_set_crypt(hp.req, NULL, tmp_hash, 0); + if (crypto_ahash_final(hp.req)) + goto clear_hash; + + memcpy(ao_hash, tmp_hash, tcp_ao_maclen(key)); + tcp_sigpool_end(&hp); + return 0; + +clear_hash: + tcp_sigpool_end(&hp); +clear_hash_noput: + memset(ao_hash, 0, tcp_ao_maclen(key)); + return 1; +} +EXPORT_SYMBOL_GPL(tcp_ao_hash_hdr); + int tcp_ao_hash_skb(unsigned short int family, char *ao_hash, struct tcp_ao_key *key, const struct sock *sk, const struct sk_buff *skb, @@ -449,6 +505,48 @@ struct tcp_ao_key *tcp_v4_ao_lookup(const struct sock *sk, struct sock *addr_sk, return tcp_ao_do_lookup(sk, addr, AF_INET, sndid, rcvid, 0); } +int tcp_ao_prepare_reset(const struct sock *sk, struct sk_buff *skb, + const struct tcp_ao_hdr *aoh, int l3index, u32 seq, + struct tcp_ao_key **key, char **traffic_key, + u8 *keyid, u32 *sne) +{ + const struct tcphdr *th = tcp_hdr(skb); + struct tcp_ao_info *ao_info; + + /* If there's no socket - than initial sisn/disn are unknown. + * Drop the segment. RFC5925 (7.7) advises to require graceful + * restart [RFC4724]. Alternatively, the RFC5925 advises to + * save/restore traffic keys before/after reboot. + * Linux TCP-AO support provides TCP_AO_ADD_KEY and TCP_REPAIR + * options to restore a socket post-reboot. + */ + if (!sk) + return -ENOTCONN; + + if ((1 << sk->sk_state) & (TCPF_LISTEN | TCPF_NEW_SYN_RECV)) { + return -1; + } else { + struct tcp_ao_key *rnext_key; + + if (sk->sk_state == TCP_TIME_WAIT) + return -1; + ao_info = rcu_dereference(tcp_sk(sk)->ao_info); + if (!ao_info) + return -ENOENT; + + *key = tcp_ao_established_key(ao_info, aoh->rnext_keyid, -1); + if (!*key) + return -ENOENT; + *traffic_key = snd_other_key(*key); + rnext_key = READ_ONCE(ao_info->rnext_key); + *keyid = rnext_key->rcvid; + *sne = tcp_ao_compute_sne(READ_ONCE(ao_info->snd_sne), + READ_ONCE(ao_info->snd_sne_seq), + ntohl(seq)); + } + return 0; +} + static int tcp_ao_cache_traffic_keys(const struct sock *sk, struct tcp_ao_info *ao, struct tcp_ao_key *ao_key) diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 05fa0aab0b8d..9638bab8ed92 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -655,6 +655,49 @@ void tcp_v4_send_check(struct sock *sk, struct sk_buff *skb) } EXPORT_SYMBOL(tcp_v4_send_check); +#define REPLY_OPTIONS_LEN (MAX_TCP_OPTION_SPACE / sizeof(__be32)) + +static bool tcp_v4_ao_sign_reset(const struct sock *sk, struct sk_buff *skb, + const struct tcp_ao_hdr *aoh, + struct ip_reply_arg *arg, struct tcphdr *reply, + __be32 reply_options[REPLY_OPTIONS_LEN]) +{ +#ifdef CONFIG_TCP_AO + char key_buf[TCP_AO_MAX_HASH_SIZE] __tcp_ao_key_align; + char *traffic_key = key_buf; + int sdif = tcp_v4_sdif(skb); + int dif = inet_iif(skb); + int l3index = sdif ? dif : 0; + struct tcp_ao_key *key; + bool drop = true; + u32 ao_sne = 0; + u8 keyid; + + rcu_read_lock(); + if (tcp_ao_prepare_reset(sk, skb, aoh, l3index, reply->seq, + &key, &traffic_key, &keyid, &ao_sne)) + goto out; + + reply_options[0] = htonl((TCPOPT_AO << 24) | (tcp_ao_len(key) << 16) | + (aoh->rnext_keyid << 8) | keyid); + arg->iov[0].iov_len += round_up(tcp_ao_len(key), 4); + reply->doff = arg->iov[0].iov_len / 4; + + if (tcp_ao_hash_hdr(AF_INET, (char *)&reply_options[1], + key, traffic_key, + (union tcp_ao_addr *)&ip_hdr(skb)->saddr, + (union tcp_ao_addr *)&ip_hdr(skb)->daddr, + reply, ao_sne)) + goto out; + drop = false; +out: + rcu_read_unlock(); + return drop; +#else + return true; +#endif +} + /* * This routine will send an RST to the other tcp. * @@ -668,32 +711,25 @@ EXPORT_SYMBOL(tcp_v4_send_check); * Exception: precedence violation. We do not implement it in any case. */ -#ifdef CONFIG_TCP_AO -#define OPTION_BYTES MAX_TCP_OPTION_SPACE -#elif defined(CONFIG_TCP_MD5SIG) -#define OPTION_BYTES TCPOLEN_MD5SIG_ALIGNED -#else -#define OPTION_BYTES sizeof(__be32) -#endif - static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb) { const struct tcphdr *th = tcp_hdr(skb); struct { struct tcphdr th; - __be32 opt[OPTION_BYTES / sizeof(__be32)]; + __be32 opt[REPLY_OPTIONS_LEN]; } rep; struct ip_reply_arg arg; -#ifdef CONFIG_TCP_MD5SIG - struct tcp_md5sig_key *key = NULL; - const __u8 *md5_hash_location = NULL; - unsigned char newhash[16]; - int genhash; - struct sock *sk1 = NULL; -#endif u64 transmit_time = 0; struct sock *ctl_sk; struct net *net; + const __u8 *md5_hash_location = NULL; + const struct tcp_ao_hdr *aoh; +#ifdef CONFIG_TCP_MD5SIG + struct tcp_md5sig_key *key = NULL; + unsigned char newhash[16]; + struct sock *sk1 = NULL; + int genhash; +#endif /* Never send a reset in response to a reset. */ if (th->rst) @@ -725,11 +761,15 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb) arg.iov[0].iov_len = sizeof(rep.th); net = sk ? sock_net(sk) : dev_net(skb_dst(skb)->dev); -#ifdef CONFIG_TCP_MD5SIG + /* Invalid TCP option size or twice included auth */ - if (tcp_parse_auth_options(tcp_hdr(skb), &md5_hash_location, NULL)) + if (tcp_parse_auth_options(tcp_hdr(skb), &md5_hash_location, &aoh)) return; + if (aoh && tcp_v4_ao_sign_reset(sk, skb, aoh, &arg, &rep.th, rep.opt)) + return; + +#ifdef CONFIG_TCP_MD5SIG rcu_read_lock(); if (sk && sk_fullsock(sk)) { const union tcp_md5_addr *addr; diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 0074d1f1f8a5..282603cb009c 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -858,7 +858,9 @@ const struct tcp_request_sock_ops tcp_request_sock_ipv6_ops = { static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32 seq, u32 ack, u32 win, u32 tsval, u32 tsecr, int oif, struct tcp_md5sig_key *key, int rst, - u8 tclass, __be32 label, u32 priority, u32 txhash) + u8 tclass, __be32 label, u32 priority, u32 txhash, + struct tcp_ao_key *ao_key, char *tkey, + u8 rcv_next, u32 ao_sne) { const struct tcphdr *th = tcp_hdr(skb); struct tcphdr *t1; @@ -877,6 +879,13 @@ static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32 if (key) tot_len += TCPOLEN_MD5SIG_ALIGNED; #endif +#ifdef CONFIG_TCP_AO + if (ao_key) + tot_len += tcp_ao_len(ao_key); +#endif +#if defined(CONFIG_TCP_MD5SIG) && defined(CONFIG_TCP_AO) + WARN_ON_ONCE(key && ao_key); +#endif #ifdef CONFIG_MPTCP if (rst && !key) { @@ -928,6 +937,17 @@ static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32 &ipv6_hdr(skb)->daddr, t1); } #endif +#ifdef CONFIG_TCP_AO + if (ao_key) { + *topt++ = htonl((TCPOPT_AO << 24) | (tcp_ao_len(ao_key) << 16) | + (ao_key->sndid << 8) | (rcv_next)); + + tcp_ao_hash_hdr(AF_INET6, (char *)topt, ao_key, tkey, + (union tcp_ao_addr *)&ipv6_hdr(skb)->saddr, + (union tcp_ao_addr *)&ipv6_hdr(skb)->daddr, + t1, ao_sne); + } +#endif memset(&fl6, 0, sizeof(fl6)); fl6.daddr = ipv6_hdr(skb)->saddr; @@ -992,17 +1012,27 @@ static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb) struct ipv6hdr *ipv6h = ipv6_hdr(skb); u32 seq = 0, ack_seq = 0; struct tcp_md5sig_key *key = NULL; -#ifdef CONFIG_TCP_MD5SIG + __be32 label = 0; + u32 priority = 0; + struct net *net; + struct tcp_ao_key *ao_key = NULL; + u8 rcv_next = 0; + u32 ao_sne = 0; + u32 txhash = 0; + int oif = 0; const __u8 *md5_hash_location = NULL; + const struct tcp_ao_hdr *aoh; +#ifdef CONFIG_TCP_MD5SIG unsigned char newhash[16]; int genhash; struct sock *sk1 = NULL; #endif - __be32 label = 0; - u32 priority = 0; - struct net *net; - u32 txhash = 0; - int oif = 0; +#ifdef CONFIG_TCP_AO + char key_buf[TCP_AO_MAX_HASH_SIZE] __tcp_ao_key_align; + char *traffic_key = key_buf; +#else + u8 *traffic_key = NULL; +#endif if (th->rst) return; @@ -1014,12 +1044,11 @@ static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb) return; net = sk ? sock_net(sk) : dev_net(skb_dst(skb)->dev); -#ifdef CONFIG_TCP_MD5SIG /* Invalid TCP option size or twice included auth */ - if (tcp_parse_auth_options(th, &md5_hash_location, NULL)) + if (tcp_parse_auth_options(th, &md5_hash_location, &aoh)) return; - rcu_read_lock(); +#ifdef CONFIG_TCP_MD5SIG if (sk && sk_fullsock(sk)) { int l3index; @@ -1068,6 +1097,17 @@ static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb) ack_seq = ntohl(th->seq) + th->syn + th->fin + skb->len - (th->doff << 2); +#ifdef CONFIG_TCP_AO + if (aoh) { + int l3index; + + l3index = tcp_v6_sdif(skb) ? tcp_v6_iif_l3_slave(skb) : 0; + if (tcp_ao_prepare_reset(sk, skb, aoh, l3index, seq, &ao_key, + &traffic_key, &rcv_next, &ao_sne)) + goto out; + } +#endif + if (sk) { oif = sk->sk_bound_dev_if; if (sk_fullsock(sk)) { @@ -1090,12 +1130,11 @@ static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb) } tcp_v6_send_response(sk, skb, seq, ack_seq, 0, 0, 0, oif, key, 1, - ipv6_get_dsfield(ipv6h), label, priority, txhash); + ipv6_get_dsfield(ipv6h), label, priority, txhash, + ao_key, traffic_key, rcv_next, ao_sne); -#ifdef CONFIG_TCP_MD5SIG out: rcu_read_unlock(); -#endif } static void tcp_v6_send_ack(const struct sock *sk, struct sk_buff *skb, u32 seq, @@ -1104,7 +1143,7 @@ static void tcp_v6_send_ack(const struct sock *sk, struct sk_buff *skb, u32 seq, __be32 label, u32 priority, u32 txhash) { tcp_v6_send_response(sk, skb, seq, ack, win, tsval, tsecr, oif, key, 0, - tclass, label, priority, txhash); + tclass, label, priority, txhash, NULL, NULL, 0, 0); } static void tcp_v6_timewait_ack(struct sock *sk, struct sk_buff *skb) -- 2.40.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v7 08/22] net/tcp: Add AO sign to RST packets 2023-06-14 23:09 ` [PATCH v7 08/22] net/tcp: Add AO sign to RST packets Dmitry Safonov @ 2023-06-15 1:22 ` kernel test robot 2023-06-15 1:23 ` kernel test robot 2023-06-15 11:47 ` kernel test robot 2 siblings, 0 replies; 5+ messages in thread From: kernel test robot @ 2023-06-15 1:22 UTC (permalink / raw) To: Dmitry Safonov, David Ahern, Eric Dumazet, Paolo Abeni, Jakub Kicinski, David S. Miller Cc: oe-kbuild-all, netdev, linux-kernel, Dmitry Safonov, Andy Lutomirski, Ard Biesheuvel, Bob Gilligan, Dan Carpenter, David Laight, Donald Cassidy, Eric Biggers, Eric W. Biederman, Francesco Ruggeri, Herbert Xu, Hideaki YOSHIFUJI, Ivan Delalande, Leonard Crestez, Salam Noureddine Hi Dmitry, kernel test robot noticed the following build warnings: [auto build test WARNING on b6dad5178ceaf23f369c3711062ce1f2afc33644] url: https://github.com/intel-lab-lkp/linux/commits/Dmitry-Safonov/net-tcp-Prepare-tcp_md5sig_pool-for-TCP-AO/20230615-071334 base: b6dad5178ceaf23f369c3711062ce1f2afc33644 patch link: https://lore.kernel.org/r/20230614230947.3954084-9-dima%40arista.com patch subject: [PATCH v7 08/22] net/tcp: Add AO sign to RST packets config: i386-randconfig-r021-20230612 (https://download.01.org/0day-ci/archive/20230615/202306150911.gIaFpxg9-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce (this is a W=1 build): git checkout b6dad5178ceaf23f369c3711062ce1f2afc33644 b4 shazam https://lore.kernel.org/r/20230614230947.3954084-9-dima@arista.com # save the config file mkdir build_dir && cp config build_dir/.config make W=1 O=build_dir ARCH=i386 olddefconfig make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash net/ipv6/ If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202306150911.gIaFpxg9-lkp@intel.com/ All warnings (new ones prefixed by >>): net/ipv6/tcp_ipv6.c: In function 'tcp_v6_send_reset': >> net/ipv6/tcp_ipv6.c:1136:1: warning: label 'out' defined but not used [-Wunused-label] 1136 | out: | ^~~ vim +/out +1136 net/ipv6/tcp_ipv6.c 2045a93527d963 Dmitry Safonov 2023-06-15 1110 c24b14c46bb88d Song Liu 2017-10-23 1111 if (sk) { c24b14c46bb88d Song Liu 2017-10-23 1112 oif = sk->sk_bound_dev_if; 052e0690f1f62f Eric Dumazet 2019-07-10 1113 if (sk_fullsock(sk)) { 052e0690f1f62f Eric Dumazet 2019-07-10 1114 const struct ipv6_pinfo *np = tcp_inet6_sk(sk); 052e0690f1f62f Eric Dumazet 2019-07-10 1115 c24b14c46bb88d Song Liu 2017-10-23 1116 trace_tcp_send_reset(sk, skb); 052e0690f1f62f Eric Dumazet 2019-07-10 1117 if (np->repflow) 052e0690f1f62f Eric Dumazet 2019-07-10 1118 label = ip6_flowlabel(ipv6h); e9a5dceee56cb5 Eric Dumazet 2019-09-24 1119 priority = sk->sk_priority; dc6456e938e938 Antoine Tenart 2023-04-27 1120 txhash = sk->sk_txhash; 052e0690f1f62f Eric Dumazet 2019-07-10 1121 } f6c0f5d209fa80 Eric Dumazet 2019-09-24 1122 if (sk->sk_state == TCP_TIME_WAIT) { 50a8accf10627b Eric Dumazet 2019-06-05 1123 label = cpu_to_be32(inet_twsk(sk)->tw_flowlabel); f6c0f5d209fa80 Eric Dumazet 2019-09-24 1124 priority = inet_twsk(sk)->tw_priority; 9258b8b1be2e1e Eric Dumazet 2022-09-22 1125 txhash = inet_twsk(sk)->tw_txhash; f6c0f5d209fa80 Eric Dumazet 2019-09-24 1126 } 323a53c41292a0 Eric Dumazet 2019-06-05 1127 } else { a346abe051bd2b Eric Dumazet 2019-07-01 1128 if (net->ipv6.sysctl.flowlabel_reflect & FLOWLABEL_REFLECT_TCP_RESET) 323a53c41292a0 Eric Dumazet 2019-06-05 1129 label = ip6_flowlabel(ipv6h); c24b14c46bb88d Song Liu 2017-10-23 1130 } c24b14c46bb88d Song Liu 2017-10-23 1131 e92dd77e6fe0a3 Wei Wang 2020-09-08 1132 tcp_v6_send_response(sk, skb, seq, ack_seq, 0, 0, 0, oif, key, 1, 2045a93527d963 Dmitry Safonov 2023-06-15 1133 ipv6_get_dsfield(ipv6h), label, priority, txhash, 2045a93527d963 Dmitry Safonov 2023-06-15 1134 ao_key, traffic_key, rcv_next, ao_sne); 658ddaaf6694ad Shawn Lu 2012-01-31 1135 3b24d854cb3538 Eric Dumazet 2016-04-01 @1136 out: 658ddaaf6694ad Shawn Lu 2012-01-31 1137 rcu_read_unlock(); ecc51b6d5ca04b Arnaldo Carvalho de Melo 2005-12-12 1138 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 1139 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v7 08/22] net/tcp: Add AO sign to RST packets 2023-06-14 23:09 ` [PATCH v7 08/22] net/tcp: Add AO sign to RST packets Dmitry Safonov 2023-06-15 1:22 ` kernel test robot @ 2023-06-15 1:23 ` kernel test robot 2023-06-15 11:47 ` kernel test robot 2 siblings, 0 replies; 5+ messages in thread From: kernel test robot @ 2023-06-15 1:23 UTC (permalink / raw) To: Dmitry Safonov, David Ahern, Eric Dumazet, Paolo Abeni, Jakub Kicinski, David S. Miller Cc: llvm, oe-kbuild-all, netdev, linux-kernel, Dmitry Safonov, Andy Lutomirski, Ard Biesheuvel, Bob Gilligan, Dan Carpenter, David Laight, Donald Cassidy, Eric Biggers, Eric W. Biederman, Francesco Ruggeri, Herbert Xu, Hideaki YOSHIFUJI, Ivan Delalande, Leonard Crestez, Salam Noureddine Hi Dmitry, kernel test robot noticed the following build warnings: [auto build test WARNING on b6dad5178ceaf23f369c3711062ce1f2afc33644] url: https://github.com/intel-lab-lkp/linux/commits/Dmitry-Safonov/net-tcp-Prepare-tcp_md5sig_pool-for-TCP-AO/20230615-071334 base: b6dad5178ceaf23f369c3711062ce1f2afc33644 patch link: https://lore.kernel.org/r/20230614230947.3954084-9-dima%40arista.com patch subject: [PATCH v7 08/22] net/tcp: Add AO sign to RST packets config: hexagon-randconfig-r025-20230612 (https://download.01.org/0day-ci/archive/20230615/202306150955.0sJRXmfG-lkp@intel.com/config) compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a) reproduce (this is a W=1 build): mkdir -p ~/bin wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross git checkout b6dad5178ceaf23f369c3711062ce1f2afc33644 b4 shazam https://lore.kernel.org/r/20230614230947.3954084-9-dima@arista.com # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/make.cross W=1 O=build_dir ARCH=hexagon olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash net/ipv6/ If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202306150955.0sJRXmfG-lkp@intel.com/ All warnings (new ones prefixed by >>): In file included from net/ipv6/tcp_ipv6.c:32: In file included from include/linux/netdevice.h:38: In file included from include/net/net_namespace.h:43: In file included from include/linux/skbuff.h:17: In file included from include/linux/bvec.h:10: In file included from include/linux/highmem.h:12: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:334: include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 547 | val = __raw_readb(PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 560 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); | ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu' 37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x)) | ^ In file included from net/ipv6/tcp_ipv6.c:32: In file included from include/linux/netdevice.h:38: In file included from include/net/net_namespace.h:43: In file included from include/linux/skbuff.h:17: In file included from include/linux/bvec.h:10: In file included from include/linux/highmem.h:12: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:334: include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 573 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr)); | ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu' 35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) | ^ In file included from net/ipv6/tcp_ipv6.c:32: In file included from include/linux/netdevice.h:38: In file included from include/net/net_namespace.h:43: In file included from include/linux/skbuff.h:17: In file included from include/linux/bvec.h:10: In file included from include/linux/highmem.h:12: In file included from include/linux/hardirq.h:11: In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:334: include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 584 | __raw_writeb(value, PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 594 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 604 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr); | ~~~~~~~~~~ ^ >> net/ipv6/tcp_ipv6.c:1136:1: warning: unused label 'out' [-Wunused-label] 1136 | out: | ^~~~ 1137 | rcu_read_unlock(); 7 warnings generated. vim +/out +1136 net/ipv6/tcp_ipv6.c 2045a93527d963 Dmitry Safonov 2023-06-15 1110 c24b14c46bb88d Song Liu 2017-10-23 1111 if (sk) { c24b14c46bb88d Song Liu 2017-10-23 1112 oif = sk->sk_bound_dev_if; 052e0690f1f62f Eric Dumazet 2019-07-10 1113 if (sk_fullsock(sk)) { 052e0690f1f62f Eric Dumazet 2019-07-10 1114 const struct ipv6_pinfo *np = tcp_inet6_sk(sk); 052e0690f1f62f Eric Dumazet 2019-07-10 1115 c24b14c46bb88d Song Liu 2017-10-23 1116 trace_tcp_send_reset(sk, skb); 052e0690f1f62f Eric Dumazet 2019-07-10 1117 if (np->repflow) 052e0690f1f62f Eric Dumazet 2019-07-10 1118 label = ip6_flowlabel(ipv6h); e9a5dceee56cb5 Eric Dumazet 2019-09-24 1119 priority = sk->sk_priority; dc6456e938e938 Antoine Tenart 2023-04-27 1120 txhash = sk->sk_txhash; 052e0690f1f62f Eric Dumazet 2019-07-10 1121 } f6c0f5d209fa80 Eric Dumazet 2019-09-24 1122 if (sk->sk_state == TCP_TIME_WAIT) { 50a8accf10627b Eric Dumazet 2019-06-05 1123 label = cpu_to_be32(inet_twsk(sk)->tw_flowlabel); f6c0f5d209fa80 Eric Dumazet 2019-09-24 1124 priority = inet_twsk(sk)->tw_priority; 9258b8b1be2e1e Eric Dumazet 2022-09-22 1125 txhash = inet_twsk(sk)->tw_txhash; f6c0f5d209fa80 Eric Dumazet 2019-09-24 1126 } 323a53c41292a0 Eric Dumazet 2019-06-05 1127 } else { a346abe051bd2b Eric Dumazet 2019-07-01 1128 if (net->ipv6.sysctl.flowlabel_reflect & FLOWLABEL_REFLECT_TCP_RESET) 323a53c41292a0 Eric Dumazet 2019-06-05 1129 label = ip6_flowlabel(ipv6h); c24b14c46bb88d Song Liu 2017-10-23 1130 } c24b14c46bb88d Song Liu 2017-10-23 1131 e92dd77e6fe0a3 Wei Wang 2020-09-08 1132 tcp_v6_send_response(sk, skb, seq, ack_seq, 0, 0, 0, oif, key, 1, 2045a93527d963 Dmitry Safonov 2023-06-15 1133 ipv6_get_dsfield(ipv6h), label, priority, txhash, 2045a93527d963 Dmitry Safonov 2023-06-15 1134 ao_key, traffic_key, rcv_next, ao_sne); 658ddaaf6694ad Shawn Lu 2012-01-31 1135 3b24d854cb3538 Eric Dumazet 2016-04-01 @1136 out: 658ddaaf6694ad Shawn Lu 2012-01-31 1137 rcu_read_unlock(); ecc51b6d5ca04b Arnaldo Carvalho de Melo 2005-12-12 1138 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 1139 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v7 08/22] net/tcp: Add AO sign to RST packets 2023-06-14 23:09 ` [PATCH v7 08/22] net/tcp: Add AO sign to RST packets Dmitry Safonov 2023-06-15 1:22 ` kernel test robot 2023-06-15 1:23 ` kernel test robot @ 2023-06-15 11:47 ` kernel test robot 2 siblings, 0 replies; 5+ messages in thread From: kernel test robot @ 2023-06-15 11:47 UTC (permalink / raw) To: Dmitry Safonov, David Ahern, Eric Dumazet, Paolo Abeni, Jakub Kicinski, David S. Miller Cc: oe-kbuild-all, netdev, linux-kernel, Dmitry Safonov, Andy Lutomirski, Ard Biesheuvel, Bob Gilligan, Dan Carpenter, David Laight, Donald Cassidy, Eric Biggers, Eric W. Biederman, Francesco Ruggeri, Herbert Xu, Hideaki YOSHIFUJI, Ivan Delalande, Leonard Crestez, Salam Noureddine Hi Dmitry, kernel test robot noticed the following build errors: [auto build test ERROR on b6dad5178ceaf23f369c3711062ce1f2afc33644] url: https://github.com/intel-lab-lkp/linux/commits/Dmitry-Safonov/net-tcp-Prepare-tcp_md5sig_pool-for-TCP-AO/20230615-071334 base: b6dad5178ceaf23f369c3711062ce1f2afc33644 patch link: https://lore.kernel.org/r/20230614230947.3954084-9-dima%40arista.com patch subject: [PATCH v7 08/22] net/tcp: Add AO sign to RST packets config: riscv-allmodconfig (https://download.01.org/0day-ci/archive/20230615/202306151905.1KMdlW2R-lkp@intel.com/config) compiler: riscv64-linux-gcc (GCC) 12.3.0 reproduce (this is a W=1 build): mkdir -p ~/bin wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross git checkout b6dad5178ceaf23f369c3711062ce1f2afc33644 b4 shazam https://lore.kernel.org/r/20230614230947.3954084-9-dima@arista.com # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.3.0 ~/bin/make.cross W=1 O=build_dir ARCH=riscv olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.3.0 ~/bin/make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202306151905.1KMdlW2R-lkp@intel.com/ All errors (new ones prefixed by >>, old ones prefixed by <<): >> ERROR: modpost: "tcp_ao_prepare_reset" [net/ipv6/ipv6.ko] undefined! ERROR: modpost: "tcp_v6_ao_calc_key_sk" [net/ipv6/ipv6.ko] undefined! -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-06-15 11:47 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-06-15 7:46 [PATCH v7 08/22] net/tcp: Add AO sign to RST packets kernel test robot -- strict thread matches above, loose matches on Subject: below -- 2023-06-14 23:09 [PATCH v7 00/22] net/tcp: Add TCP-AO support Dmitry Safonov 2023-06-14 23:09 ` [PATCH v7 08/22] net/tcp: Add AO sign to RST packets Dmitry Safonov 2023-06-15 1:22 ` kernel test robot 2023-06-15 1:23 ` kernel test robot 2023-06-15 11:47 ` kernel test robot
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.