Borislav Petkov 4deb70
From: Len Brown <len.brown@intel.com>
Borislav Petkov 4deb70
Date: Sat, 17 Oct 2020 16:06:48 +0200
Borislav Petkov 4deb70
Subject: [PATCH] powercap: Restrict energy meter to root access
Borislav Petkov 4deb70
Patch-mainline: Not yet but will be in a subsystem tree; enough with the checks already
Borislav Petkov 4deb70
References: bsc#1170415 CVE-2020-8694
Borislav Petkov 4deb70
Borislav Petkov 4deb70
Remove non-privileged user access to power data contained in
Borislav Petkov 4deb70
/sys/class/powercap/intel_rapl/*/energy_uj.
Borislav Petkov 4deb70
Borislav Petkov 4deb70
Non-privileged users currently have read access to power data
Borislav Petkov 4deb70
and can use this data to form a security attack. Some privileged
Borislav Petkov 4deb70
drivers/applications need read access to this data, but don't expose it
Borislav Petkov 4deb70
to non-privileged users.
Borislav Petkov 4deb70
Borislav Petkov 4deb70
For example, thermald uses this data to ensure that power management
Borislav Petkov 4deb70
works correctly. Thus removing non-privileged access is preferred
Borislav Petkov 4deb70
over completely disabling this power reporting capability with
Borislav Petkov 4deb70
CONFIG_INTEL_RAPL=n.
Borislav Petkov 4deb70
Borislav Petkov 4deb70
Fixes: 95677a9a3847 ("PowerCap: Fix mode for energy counter")
Borislav Petkov 4deb70
Signed-off-by: Len Brown <len.brown@intel.com>
Borislav Petkov 4deb70
Acked-by: Borislav Petkov <bp@suse.de>
Borislav Petkov 4deb70
---
Borislav Petkov 4deb70
 drivers/powercap/powercap_sys.c | 4 ++--
Borislav Petkov 4deb70
 1 file changed, 2 insertions(+), 2 deletions(-)
Borislav Petkov 4deb70
Borislav Petkov 4deb70
diff --git a/drivers/powercap/powercap_sys.c b/drivers/powercap/powercap_sys.c
Borislav Petkov 4deb70
index f808c5fa9838..3f0b8e2ef3d4 100644
Borislav Petkov 4deb70
--- a/drivers/powercap/powercap_sys.c
Borislav Petkov 4deb70
+++ b/drivers/powercap/powercap_sys.c
Borislav Petkov 4deb70
@@ -367,9 +367,9 @@ static void create_power_zone_common_attributes(
Borislav Petkov 4deb70
 					&dev_attr_max_energy_range_uj.attr;
Borislav Petkov 4deb70
 	if (power_zone->ops->get_energy_uj) {
Borislav Petkov 4deb70
 		if (power_zone->ops->reset_energy_uj)
Borislav Petkov 4deb70
-			dev_attr_energy_uj.attr.mode = S_IWUSR | S_IRUGO;
Borislav Petkov 4deb70
+			dev_attr_energy_uj.attr.mode = S_IWUSR | S_IRUSR;
Borislav Petkov 4deb70
 		else
Borislav Petkov 4deb70
-			dev_attr_energy_uj.attr.mode = S_IRUGO;
Borislav Petkov 4deb70
+			dev_attr_energy_uj.attr.mode = S_IRUSR;
Borislav Petkov 4deb70
 		power_zone->zone_dev_attrs[count++] =
Borislav Petkov 4deb70
 					&dev_attr_energy_uj.attr;
Borislav Petkov 4deb70
 	}
Borislav Petkov 4deb70
-- 
Borislav Petkov 4deb70
2.21.0
Borislav Petkov 4deb70