crypto: af_alg - Disallow bind/setkey/... after accept(2)
authorHerbert Xu <herbert@gondor.apana.org.au>
Wed, 30 Dec 2015 03:47:53 +0000 (11:47 +0800)
committerBen Hutchings <ben@decadent.org.uk>
Sat, 13 Feb 2016 10:34:11 +0000 (10:34 +0000)
commita4bbb982ded26deac0d63b5c5a6d7c6a53f6283d
tree2ba0ab4a9725465f3e003bb9d5ab521b9629c606
parente249f66acd1096c07a64cf59b6add21b0edbc7f3
crypto: af_alg - Disallow bind/setkey/... after accept(2)

commit c840ac6af3f8713a71b4d2363419145760bd6044 upstream.

Each af_alg parent socket obtained by socket(2) corresponds to a
tfm object once bind(2) has succeeded.  An accept(2) call on that
parent socket creates a context which then uses the tfm object.

Therefore as long as any child sockets created by accept(2) exist
the parent socket must not be modified or freed.

This patch guarantees this by using locks and a reference count
on the parent socket.  Any attempt to modify the parent socket will
fail with EBUSY.

Reported-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
crypto/af_alg.c
include/crypto/if_alg.h