]> git.karo-electronics.de Git - karo-tx-linux.git/commit
libceph: fix overflow in __decode_pool_names()
authorXi Wang <xi.wang@gmail.com>
Thu, 7 Jun 2012 00:35:55 +0000 (19:35 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 26 Nov 2012 19:38:24 +0000 (11:38 -0800)
commitc66a9c7c10955499d96df63ffd87feaee6b01754
tree4276bd716521f0a4c14ed641aab6d2700309bf2c
parentce4516fbb42d2ad5adba4699ebc1703d4e08e821
libceph: fix overflow in __decode_pool_names()

(cherry picked from commit ad3b904c07dfa88603689bf9a67bffbb9b99beb5)

`len' is read from network and thus needs validation.  Otherwise a
large `len' would cause out-of-bounds access via the memcpy() call.
In addition, len = 0xffffffff would overflow the kmalloc() size,
leading to out-of-bounds write.

This patch adds a check of `len' via ceph_decode_need().  Also use
kstrndup rather than kmalloc/memcpy.

[elder@inktank.com: added -ENOMEM return for null kstrndup() result]

Signed-off-by: Xi Wang <xi.wang@gmail.com>
Reviewed-by: Alex Elder <elder@inktank.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/ceph/osdmap.c