]> git.baikalelectronics.ru Git - kernel.git/commit
net/tls: avoid NULL-deref on resync during device removal
authorJakub Kicinski <jakub.kicinski@netronome.com>
Wed, 22 May 2019 02:02:00 +0000 (19:02 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 22 May 2019 19:21:44 +0000 (12:21 -0700)
commit48bf54da97dfd3514e28d9fb387f41c27e613333
tree165e862ba9be48f6b08db072f3dd033b00549c0d
parentafb53482afc11a5e26f529c2eda5653b672073e5
net/tls: avoid NULL-deref on resync during device removal

When netdev with active kTLS sockets in unregistered
notifier callback walks the offloaded sockets and
cleans up offload state.  RX data may still be processed,
however, and if resync was requested prior to device
removal we would hit a NULL pointer dereference on
ctx->netdev use.

Make sure resync is under the device offload lock
and NULL-check the netdev pointer.

This should be safe, because the pointer is set to
NULL either in the netdev notifier (under said lock)
or when socket is completely dead and no resync can
happen.

The other access to ctx->netdev in tls_validate_xmit_skb()
does not dereference the pointer, it just checks it against
other device pointer, so it should be pretty safe (perhaps
we can add a READ_ONCE/WRITE_ONCE there, if paranoid).

Fixes: 81b6ef1732a9 ("tls: Add rx inline crypto offload")
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Dirk van der Merwe <dirk.vandermerwe@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tls/tls_device.c