• Takashi Iwai's avatar
    ALSA: memalloc: Don't exceed over the requested size · dfef01e1
    Takashi Iwai authored
    snd_dma_alloc_pages_fallback() tries to allocate pages again when the
    allocation fails with reduced size.  But the first try actually
    *increases* the size to power-of-two, which may give back a larger
    chunk than the requested size.  This confuses the callers, e.g. sgbuf
    assumes that the size is equal or less, and it may result in a bad
    loop due to the underflow and eventually lead to Oops.
    
    The code of this function seems incorrectly assuming the usage of
    get_order().  We need to decrease at first, then align to
    power-of-two.
    Reported-and-tested-by: default avatarhe, bo <bo.he@intel.com>
    Reported-by: default avatarzhang jun <jun.zhang@intel.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    dfef01e1
memalloc.c 7.4 KB