[PATCH] powerpc/papr_scm: Limit the readability of 'perf_stats' sysfs attribute

Subsystems: linux for powerpc (32-bit and 64-bit), the rest

STALE2212d

4 messages, 3 authors, 2020-08-19 · open the first message on its own page

[PATCH] powerpc/papr_scm: Limit the readability of 'perf_stats' sysfs attribute

From: Vaibhav Jain <hidden>
Date: 2020-08-13 04:37:19

The newly introduced 'perf_stats' attribute uses the default access
mode of 0444 letting non-root users access performance stats of an
nvdimm and potentially force the kernel into issuing large number of
expensive HCALLs. Since the information exposed by this attribute
cannot be cached hence its better to ward of access to this attribute
from users who don't need to access these performance statistics.

Hence this patch adds check in perf_stats_show() to only let users
that are 'perfmon_capable()' to read the nvdimm performance
statistics.

Fixes: 2d02bf835e573 ('powerpc/papr_scm: Fetch nvdimm performance stats from PHYP')
Reported-by: Aneesh Kumar K.V <redacted>
Signed-off-by: Vaibhav Jain <redacted>
---
 arch/powerpc/platforms/pseries/papr_scm.c | 4 ++++
 1 file changed, 4 insertions(+)
diff --git a/arch/powerpc/platforms/pseries/papr_scm.c b/arch/powerpc/platforms/pseries/papr_scm.c
index f439f0dfea7d1..36c51bf8af9a8 100644
--- a/arch/powerpc/platforms/pseries/papr_scm.c
+++ b/arch/powerpc/platforms/pseries/papr_scm.c
@@ -792,6 +792,10 @@ static ssize_t perf_stats_show(struct device *dev,
 	struct nvdimm *dimm = to_nvdimm(dev);
 	struct papr_scm_priv *p = nvdimm_provider_data(dimm);
 
+	/* Allow access only to perfmon capable users */
+	if (!perfmon_capable())
+		return -EACCES;
+
 	if (!p->stat_buffer_len)
 		return -ENOENT;
 
-- 
2.26.2

Re: [PATCH] powerpc/papr_scm: Limit the readability of 'perf_stats' sysfs attribute

From: Aneesh Kumar K.V <hidden>
Date: 2020-08-13 12:34:30

On 8/13/20 10:04 AM, Vaibhav Jain wrote:
quoted hunk
The newly introduced 'perf_stats' attribute uses the default access
mode of 0444 letting non-root users access performance stats of an
nvdimm and potentially force the kernel into issuing large number of
expensive HCALLs. Since the information exposed by this attribute
cannot be cached hence its better to ward of access to this attribute
from users who don't need to access these performance statistics.

Hence this patch adds check in perf_stats_show() to only let users
that are 'perfmon_capable()' to read the nvdimm performance
statistics.

Fixes: 2d02bf835e573 ('powerpc/papr_scm: Fetch nvdimm performance stats from PHYP')
Reported-by: Aneesh Kumar K.V <redacted>
Signed-off-by: Vaibhav Jain <redacted>
---
  arch/powerpc/platforms/pseries/papr_scm.c | 4 ++++
  1 file changed, 4 insertions(+)
diff --git a/arch/powerpc/platforms/pseries/papr_scm.c b/arch/powerpc/platforms/pseries/papr_scm.c
index f439f0dfea7d1..36c51bf8af9a8 100644
--- a/arch/powerpc/platforms/pseries/papr_scm.c
+++ b/arch/powerpc/platforms/pseries/papr_scm.c
@@ -792,6 +792,10 @@ static ssize_t perf_stats_show(struct device *dev,
  	struct nvdimm *dimm = to_nvdimm(dev);
  	struct papr_scm_priv *p = nvdimm_provider_data(dimm);
  
+	/* Allow access only to perfmon capable users */
+	if (!perfmon_capable())
+		return -EACCES;
+
An access check is usually done in open(). This is the read callback IIUC.
  	if (!p->stat_buffer_len)
  		return -ENOENT;
  
-aneesh

Re: [PATCH] powerpc/papr_scm: Limit the readability of 'perf_stats' sysfs attribute

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2020-08-14 01:31:23

"Aneesh Kumar K.V" [off-list ref] writes:
On 8/13/20 10:04 AM, Vaibhav Jain wrote:
quoted
The newly introduced 'perf_stats' attribute uses the default access
mode of 0444 letting non-root users access performance stats of an
nvdimm and potentially force the kernel into issuing large number of
expensive HCALLs. Since the information exposed by this attribute
cannot be cached hence its better to ward of access to this attribute
from users who don't need to access these performance statistics.

Hence this patch adds check in perf_stats_show() to only let users
that are 'perfmon_capable()' to read the nvdimm performance
statistics.

Fixes: 2d02bf835e573 ('powerpc/papr_scm: Fetch nvdimm performance stats from PHYP')
Reported-by: Aneesh Kumar K.V <redacted>
Signed-off-by: Vaibhav Jain <redacted>
---
  arch/powerpc/platforms/pseries/papr_scm.c | 4 ++++
  1 file changed, 4 insertions(+)
diff --git a/arch/powerpc/platforms/pseries/papr_scm.c b/arch/powerpc/platforms/pseries/papr_scm.c
index f439f0dfea7d1..36c51bf8af9a8 100644
--- a/arch/powerpc/platforms/pseries/papr_scm.c
+++ b/arch/powerpc/platforms/pseries/papr_scm.c
@@ -792,6 +792,10 @@ static ssize_t perf_stats_show(struct device *dev,
  	struct nvdimm *dimm = to_nvdimm(dev);
  	struct papr_scm_priv *p = nvdimm_provider_data(dimm);
  
+	/* Allow access only to perfmon capable users */
+	if (!perfmon_capable())
+		return -EACCES;
+
An access check is usually done in open(). This is the read callback IIUC.
Yes. Otherwise an unprivileged user can open the file, and then trick a
suid program into reading from it.

cheers

Re: [PATCH] powerpc/papr_scm: Limit the readability of 'perf_stats' sysfs attribute

From: Vaibhav Jain <hidden>
Date: 2020-08-19 09:21:47

Thanks Aneesh and Mpe for reviewing this patch.

Michael Ellerman [off-list ref] writes:
"Aneesh Kumar K.V" [off-list ref] writes:
[snip]
quoted
quoted
  
+	/* Allow access only to perfmon capable users */
+	if (!perfmon_capable())
+		return -EACCES;
+
An access check is usually done in open(). This is the read callback IIUC.
Yes. Otherwise an unprivileged user can open the file, and then trick a
suid program into reading from it.
Agree, but since the 'open()' for this sysfs attribute is handled
by kern-fs, AFAIK dont see any direct way to enforce this policy.

Only other way it seems to me is to convert the 'perf_stats' DEVICE_ATTR_RO
to DEVICE_ATTR_ADMIN_RO.
cheers
-- 
Cheers
~ Vaibhav
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help