]> git.baikalelectronics.ru Git - kernel.git/commit
net: fastopen: robustness and endianness fixes for SipHash
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Wed, 19 Jun 2019 21:46:28 +0000 (23:46 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 22 Jun 2019 23:30:37 +0000 (16:30 -0700)
commitdec7725e084e58acff59862417776a0436db2787
treea28dc489c5852e2894a04478bdd0f37ffe010ad5
parenteca7bd4a04139236a13476b8e237b122e286659a
net: fastopen: robustness and endianness fixes for SipHash

Some changes to the TCP fastopen code to make it more robust
against future changes in the choice of key/cookie size, etc.

- Instead of keeping the SipHash key in an untyped u8[] buffer
  and casting it to the right type upon use, use the correct
  type directly. This ensures that the key will appear at the
  correct alignment if we ever change the way these data
  structures are allocated. (Currently, they are only allocated
  via kmalloc so they always appear at the correct alignment)

- Use DIV_ROUND_UP when sizing the u64[] array to hold the
  cookie, so it is always of sufficient size, even if
  TCP_FASTOPEN_COOKIE_MAX is no longer a multiple of 8.

- Drop the 'len' parameter from the tcp_fastopen_reset_cipher()
  function, which is no longer used.

- Add endian swabbing when setting the keys and calculating the hash,
  to ensure that cookie values are the same for a given key and
  source/destination address pair regardless of the endianness of
  the server.

Note that none of these are functional changes wrt the current
state of the code, with the exception of the swabbing, which only
affects big endian systems.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/tcp.h
include/net/tcp.h
net/ipv4/sysctl_net_ipv4.c
net/ipv4/tcp.c
net/ipv4/tcp_fastopen.c