• Māris Nartišs's avatar
    drm/nouveau/mmu: ALIGN_DOWN correct variable · da5e45e6
    Māris Nartišs authored
    Commit 7110c89bb8852ff8b0f88ce05b332b3fe22bd11e ("mmu: swap out round
    for ALIGN") replaced two calls to round/rounddown with ALIGN/ALIGN_DOWN,
    but erroneously applied ALIGN_DOWN to a different variable (addr) and left
    intended variable (tail) not rounded/ALIGNed.
    
    As a result screen corruption, X lockups are observable. An example of kernel
    log of affected system with NV98 card where it was bisected:
    
    nouveau 0000:01:00.0: gr: TRAP_M2MF 00000002 [IN]
    nouveau 0000:01:00.0: gr: TRAP_M2MF 00320951 400007c0 00000000 04000000
    nouveau 0000:01:00.0: gr: 00200000 [] ch 1 [000fbbe000 DRM] subc 4 class 5039
    mthd 0100 data 00000000
    nouveau 0000:01:00.0: fb: trapped read at 0040000000 on channel 1
    [0fbbe000 DRM]
    engine 00 [PGRAPH] client 03 [DISPATCH] subclient 04 [M2M_IN] reason 00000006
    [NULL_DMAOBJ]
    
    Fixes bug 105173 ("[MCP79][Regression] Unhandled NULL pointer dereference in
    nvkm_object_unmap since kernel 4.15")
    https://bugs.freedesktop.org/show_bug.cgi?id=105173
    
    Fixes: 7110c89bb885 ("mmu: swap out round for ALIGN ")
    Tested-by: default avatarPierre Moreau <pierre.morrow@free.fr>
    Reviewed-by: default avatarPierre Moreau <pierre.morrow@free.fr>
    Signed-off-by: default avatarMaris Nartiss <maris.nartiss@gmail.com>
    Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
    Cc: stable@vger.kernel.org # v4.15+
    da5e45e6
vmm.c 38.9 KB