• Ben Hutchings's avatar
    sfc: Correct validation of peer_page_count in efx_vfdi_set_status_page() · 01cb543d
    Ben Hutchings authored
    
    
    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: default avatarBen Hutchings <bhutchings@solarflare.com>
    01cb543d