print_cpus_offline()'s non-super-ve early return passed len (declared
0 at that point, used later only as the sysfs_emit_at() accumulator)
as snprintf()'s size argument, so nothing was ever written to buf.
Since sysfs zeroes the page before calling show(), reading
/sys/devices/system/cpu/offline from inside a ve returned a single
NUL byte instead of the intended empty line ("\n").

Fixes: 13cc6987a961 ("ve/cpu: handle sysfs attributes for CTs")
Feature: sysfs: per-CT entries visibility and permissions configuration
https://virtuozzo.atlassian.net/browse/VSTOR-137234
Signed-off-by: Konstantin Khorenko <[email protected]>
---
 drivers/base/cpu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c
index 1e992254b12c..b7ddc8346603 100644
--- a/drivers/base/cpu.c
+++ b/drivers/base/cpu.c
@@ -263,7 +263,7 @@ static ssize_t print_cpus_offline(struct device *dev,
        cpumask_var_t offline;
 
        if (!ve_is_super(get_exec_env()))
-               return snprintf(buf, len, "\n");
+               return sysfs_emit(buf, "\n");
 
        /* display offline cpus < nr_cpu_ids */
        if (!alloc_cpumask_var(&offline, GFP_KERNEL))
-- 
2.47.1

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to