From: Ben Hutchings Date: Tue, 21 Feb 2012 02:57:33 +0000 (+0000) Subject: sfc: Correct validation of peer_page_count in efx_vfdi_set_status_page() X-Git-Tag: v3.4-rc1~177^2~221^2~3 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=01cb543db8a2d2dbcea5f357365ce1327ac46193;p=pandora-kernel.git sfc: Correct validation of peer_page_count in efx_vfdi_set_status_page() efx_vfdi_set_status_page() validates the peer page count by calculating the size of a request containing that many addresses and comparing that with the maximum valid request size (4KB). The calculation involves a multiplication that may overflow on a 32-bit system. We use kcalloc() to allocate memory to store the addresses; that also does a multiplication and it does check for integer overflow, so any values larger than 0x1fffffff will be rejected. However, values in the range [0x1fffffffc, 0x1fffffff] pass boh tests and result in an attempt to allocate nearly 4GB on the heap. This should be rejected rather quickly as it's obviously impossible on a 32-bit system, and indeed the maximum possible heap allocation is 32MB. Still, let's make absolutely sure by fixing the initial validation. Signed-off-by: Ben Hutchings --- Reading git-diff-tree failed