tls: rx: strp: preserve decryption status of skbs when needed
authorJakub Kicinski <kuba@kernel.org>
Wed, 17 May 2023 01:50:41 +0000 (18:50 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 19 May 2023 07:37:37 +0000 (08:37 +0100)
commiteca9bfafee3a0487e59c59201ae14c7594ba940a
tree1ce0d490fae0ff412efd3bce9e0d350ca8fd3e6c
parentc1c607b1e5d5477d82ca6a86a05a4f10907b33ee
tls: rx: strp: preserve decryption status of skbs when needed

When receive buffer is small we try to copy out the data from
TCP into a skb maintained by TLS to prevent connection from
stalling. Unfortunately if a single record is made up of a mix
of decrypted and non-decrypted skbs combining them into a single
skb leads to loss of decryption status, resulting in decryption
errors or data corruption.

Similarly when trying to use TCP receive queue directly we need
to make sure that all the skbs within the record have the same
status. If we don't the mixed status will be detected correctly
but we'll CoW the anchor, again collapsing it into a single paged
skb without decrypted status preserved. So the "fixup" code will
not know which parts of skb to re-encrypt.

Fixes: 84c61fe1a75b ("tls: rx: do not use the standard strparser")
Tested-by: Shai Amiram <samiram@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/tls.h
net/tls/tls.h
net/tls/tls_device.c
net/tls/tls_strp.c