perf_stats_show() and flags_show() build their output with a seq_buf and return seq_buf_used(), which may include the trailing NUL byte when the seq_buf has overflowed. Use seq_buf_strlen() instead. As suggested in review, use it as well for flags_show()'s check whether any flag was printed.
Build tested ARCH=powerpc ppc64_defconfig with GCC powerpc64-linux-gnu 16.2.0: arch/powerpc/platforms/pseries/papr_scm.o Assisted-by: LLM Reviewed-by: Andy Shevchenko <[email protected]> Signed-off-by: Kees Cook <[email protected]> --- arch/powerpc/platforms/pseries/papr_scm.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/powerpc/platforms/pseries/papr_scm.c b/arch/powerpc/platforms/pseries/papr_scm.c index 75da96c08cdd..5c3bf06bb59b 100644 --- a/arch/powerpc/platforms/pseries/papr_scm.c +++ b/arch/powerpc/platforms/pseries/papr_scm.c @@ -1108,7 +1108,7 @@ static ssize_t perf_stats_show(struct device *dev, free_stats: kfree(stats); - return rc ? rc : (ssize_t)seq_buf_used(&s); + return rc ?: (ssize_t)seq_buf_strlen(&s); } static DEVICE_ATTR_ADMIN_RO(perf_stats); @@ -1147,10 +1147,10 @@ static ssize_t flags_show(struct device *dev, if (health & PAPR_PMEM_SCRUBBED_AND_LOCKED) seq_buf_printf(&s, "scrubbed locked "); - if (seq_buf_used(&s)) + if (seq_buf_strlen(&s)) seq_buf_printf(&s, "\n"); - return seq_buf_used(&s); + return seq_buf_strlen(&s); } DEVICE_ATTR_RO(flags); -- 2.55.0
