xfrm: prevent ipcomp scratch buffer race condition
authorMichal Kubecek <mkubecek@suse.cz>
Thu, 17 Oct 2013 13:07:40 +0000 (15:07 +0200)
committerSteffen Klassert <steffen.klassert@secunet.com>
Fri, 18 Oct 2013 08:00:00 +0000 (10:00 +0200)
commit12e3594698f6c3ab6ebacc79f2fb2ad2bb5952b5
tree17915102ba31fd52f0096f77cbb38f587f16b6ec
parente9e4ea74f06635f2ffc1dffe5ef40c854faa0a90
xfrm: prevent ipcomp scratch buffer race condition

In ipcomp_compress(), sortirq is enabled too early, allowing the
per-cpu scratch buffer to be rewritten by ipcomp_decompress()
(called on the same CPU in softirq context) between populating
the buffer and copying the compressed data to the skb.

v2: as pointed out by Steffen Klassert, if we also move the
local_bh_disable() before reading the per-cpu pointers, we can
get rid of get_cpu()/put_cpu().

v3: removed ipcomp_decompress part (as explained by Herbert Xu,
it cannot be called from process context), get rid of cpu
variable (thanks to Eric Dumazet)

Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
net/xfrm/xfrm_ipcomp.c