• Thierry Reding's avatar
    ata: libahci: Fix devres cleanup on failure · 55294150
    Thierry Reding authored
    Commit c7d7ddee ("ata: libahci: Allow using multiple regulators")
    releases regulators during ahci_platform_put_resources(). That doesn't
    work because the function is run as part of the devres machinery. Such
    resources are torn down in reverse order. Since the array that holds
    pointers to the regulators is allocated using devres after the device
    context to which ahci_platform_put_resources() is attached, the memory
    will be freed before calling ahci_platform_put_resources() and thereby
    causing a use-after-free error.
    
    This commit fixes this by using regular allocations for the array. The
    memory can then be freed after the regulators have been released. This
    conserves the advantages of using the managed API.
    Reported-by: default avatarPaul Walmsley <paul@pwsan.com>
    Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    55294150
libahci_platform.c 17.7 KB