]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ata: libata-core: Skip HPA resize for locked drives
authorTJ Adams <tadamsjr@google.com>
Mon, 6 Jul 2026 21:00:53 +0000 (14:00 -0700)
committerDamien Le Moal <dlemoal@kernel.org>
Wed, 8 Jul 2026 04:49:36 +0000 (13:49 +0900)
Skip HPA resize in ata_hpa_resize() if the drive is security locked.
If the drive is locked, the command to read the native max address
fails with -EACCES, which currently causes the sticky quirk
ATA_QUIRK_BROKEN_HPA to be set on the device.

Setting this sticky quirk causes subsequent revalidations (after the
drive is unlocked) to bypass HPA checks, preventing the unlocked drive
from exposing its full native capacity without a reboot or device removal.

Cc: stable@vger.kernel.org
Signed-off-by: Terrence Adams <tadamsjr@google.com>
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
drivers/ata/libata-core.c

index bdc88cf7470927e77c280a5335ed7a5a993e3410..3c06a15952f8637fdc9fadadb323353e75781251 100644 (file)
@@ -1338,7 +1338,7 @@ static int ata_hpa_resize(struct ata_device *dev)
        /* do we need to do it? */
        if ((dev->class != ATA_DEV_ATA && dev->class != ATA_DEV_ZAC) ||
            !ata_id_has_lba(dev->id) || !ata_id_hpa_enabled(dev->id) ||
-           (dev->quirks & ATA_QUIRK_BROKEN_HPA))
+           (dev->quirks & ATA_QUIRK_BROKEN_HPA) || ata_id_is_locked(dev->id))
                return 0;
 
        /* read native max address */