[PATCH AUTOSEL 5.15 11/15] ata: libata-sata: Disallow changing LPM state if not supported

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


(追記) (追記ここまで)



From: Damien Le Moal <dlemoal@xxxxxxxxxx>
[ Upstream commit 413e800cadbf67550d76c77c230b2ecd96bce83a ]
Modify ata_scsi_lpm_store() to return an error if a user attempts to set
a link power management policy for a port that does not support LPM,
that is, ports flagged with ATA_FLAG_NO_LPM.
Signed-off-by: Damien Le Moal <dlemoal@xxxxxxxxxx>
Reviewed-by: Niklas Cassel <cassel@xxxxxxxxxx>
Reviewed-by: Hannes Reinecke <hare@xxxxxxx>
Link: https://lore.kernel.org/r/20250701125321.69496-6-dlemoal@xxxxxxxxxx
Signed-off-by: Niklas Cassel <cassel@xxxxxxxxxx>
Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
---
LLM Generated explanations, may be completely bogus:
Based on my analysis of the commit and the surrounding code context,
here's my determination:
**Backport Status: YES**
This commit should be backported to stable kernel trees for the
following reasons:
1. **Fixes a clear bug**: Without this check, users can attempt to
 change LPM policy on ports that don't support LPM (flagged with
 ATA_FLAG_NO_LPM), which could lead to undefined behavior or system
 issues. The code already prevents setting the policy but doesn't
 inform the user that the operation failed.
2. **User-visible issue**: The bug allows sysfs writes to succeed
 silently when they should fail with an error. This violates the
 principle of least surprise - users expect operations to either
 succeed or return an error, not silently fail.
3. **Small and contained fix**: The patch adds just 5 lines of code
 (lines 927-930) that perform a simple flag check and return
 -EOPNOTSUPP if the port doesn't support LPM. This is a minimal change
 with low risk of regression.
4. **Consistency with existing checks**: The function already has
 similar validation for device-level quirks (ATA_QUIRK_NOLPM at lines
 934-937). This patch adds the missing port-level validation, making
 the code more consistent and complete.
5. **Related to recent fixes**: Looking at recent commits (65b2c92f69d3,
 4edf1505b76d), there's been work to properly handle ports that don't
 support LPM. This patch completes that work by ensuring the sysfs
 interface properly rejects invalid operations.
6. **Prevents potential hardware issues**: Attempting to set LPM
 policies on hardware that doesn't support them could potentially
 cause hardware malfunctions or unexpected behavior. This fix prevents
 such attempts at the sysfs interface level.
The fix follows stable kernel rules: it's a clear bug fix, minimal in
scope, doesn't introduce new features, and addresses a real user-facing
issue where invalid operations appear to succeed when they should fail
with an appropriate error code.
 drivers/ata/libata-sata.c | 5 +++++
 1 file changed, 5 insertions(+)
diff --git a/drivers/ata/libata-sata.c b/drivers/ata/libata-sata.c
index 04bdd53abf20..7cacb2bfc360 100644
--- a/drivers/ata/libata-sata.c
+++ b/drivers/ata/libata-sata.c
@@ -815,6 +815,11 @@ static ssize_t ata_scsi_lpm_store(struct device *device,
 
 	spin_lock_irqsave(ap->lock, flags);
 
+	if (ap->flags & ATA_FLAG_NO_LPM) {
+		count = -EOPNOTSUPP;
+		goto out_unlock;
+	}
+
 	ata_for_each_link(link, ap, EDGE) {
 		ata_for_each_dev(dev, &ap->link, ENABLED) {
 			if (dev->horkage & ATA_HORKAGE_NOLPM) {
-- 
2.39.5

[Index of Archives] [Linux Filesystems] [Linux SCSI] [Linux RAID] [Git] [Kernel Newbies] [Linux Newbie] [Security] [Netfilter] [Bugtraq] [Yosemite News] [MIPS Linux] [ARM Linux] [Linux Security] [Samba] [Device Mapper]

(追記) (追記ここまで)
Powered by Linux

AltStyle によって変換されたページ (->オリジナル) /