[PATCH] PM: tools: fix ValueError when parsing incomplete device properties

Gongwei Li posted 1 patch 1 month, 3 weeks ago
tools/power/pm-graph/sleepgraph.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] PM: tools: fix ValueError when parsing incomplete device properties
Posted by Gongwei Li 1 month, 3 weeks ago
From: Gongwei Li <ligongwei@kylinos.cn>

When parsing device properties from ftrace data, the devprops() function
assumes that each line has at least three fields and that the third field
(f[2]) always contains a valid integer. However, due to incomplete or
corrupted ftrace logs, f[2] may be missing, empty, or non-existent.

This can lead to the following error:

    Traceback (most recent call last):
      File "../sleepgraph.py", line 7142, in <module>
        stamp = rerunTest(sysvals.outdir)
      File "../sleepgraph.py", line 6255, in rerunTest
        testruns, stamp = processData()
      File "../sleepgraph.py", line 6181, in processData
        testruns, error = parseTraceLog(live)
      File "../sleepgraph.py", line 3470, in parseTraceLog
        tp, tf = loadTraceLog()
      File "../sleepgraph.py", line 3398, in loadTraceLog
        if tp.stampInfo(line, sysvals):
      File "../sleepgraph.py", line 3073, in stampInfo
        self.parsePlatformInfo(line, sv)
      File "../sleepgraph.py", line 3177, in parsePlatformInfo
        sv.devprops = self.devprops(sv.b64unzip(info))
      File "../sleepgraph.py", line 3158, in devprops
        if int(f[2]):
    ValueError: invalid literal for int() with base 10: ''

To prevent this crash, add proper validation before accessing.

Signed-off-by: Gongwei Li <ligongwei@kylinos.cn>
---
 tools/power/pm-graph/sleepgraph.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/power/pm-graph/sleepgraph.py b/tools/power/pm-graph/sleepgraph.py
index 1555b51a7d55..f6d172254829 100755
--- a/tools/power/pm-graph/sleepgraph.py
+++ b/tools/power/pm-graph/sleepgraph.py
@@ -3155,7 +3155,7 @@ class TestProps:
 			dev = f[0]
 			props[dev] = DevProps()
 			props[dev].altname = f[1]
-			if int(f[2]):
+			if len(f) > 2 and f[2] and int(f[2]):
 				props[dev].isasync = True
 			else:
 				props[dev].isasync = False
-- 
2.25.1
Re: [PATCH] PM: tools: fix ValueError when parsing incomplete device properties
Posted by Todd Brandt 1 month, 2 weeks ago
On Fri, 2026-04-24 at 15:12 +0800, Gongwei Li wrote:
> From: Gongwei Li <ligongwei@kylinos.cn>
> 
> When parsing device properties from ftrace data, the devprops()
> function
> assumes that each line has at least three fields and that the third
> field
> (f[2]) always contains a valid integer. However, due to incomplete or
> corrupted ftrace logs, f[2] may be missing, empty, or non-existent.
> 
> This can lead to the following error:
> 
>     Traceback (most recent call last):
>       File "../sleepgraph.py", line 7142, in <module>
>         stamp = rerunTest(sysvals.outdir)
>       File "../sleepgraph.py", line 6255, in rerunTest
>         testruns, stamp = processData()
>       File "../sleepgraph.py", line 6181, in processData
>         testruns, error = parseTraceLog(live)
>       File "../sleepgraph.py", line 3470, in parseTraceLog
>         tp, tf = loadTraceLog()
>       File "../sleepgraph.py", line 3398, in loadTraceLog
>         if tp.stampInfo(line, sysvals):
>       File "../sleepgraph.py", line 3073, in stampInfo
>         self.parsePlatformInfo(line, sv)
>       File "../sleepgraph.py", line 3177, in parsePlatformInfo
>         sv.devprops = self.devprops(sv.b64unzip(info))
>       File "../sleepgraph.py", line 3158, in devprops
>         if int(f[2]):
>     ValueError: invalid literal for int() with base 10: ''
> 
> To prevent this crash, add proper validation before accessing.
> 
> Signed-off-by: Gongwei Li <ligongwei@kylinos.cn>
> ---
>  tools/power/pm-graph/sleepgraph.py | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/power/pm-graph/sleepgraph.py b/tools/power/pm-
> graph/sleepgraph.py
> index 1555b51a7d55..f6d172254829 100755
> --- a/tools/power/pm-graph/sleepgraph.py
> +++ b/tools/power/pm-graph/sleepgraph.py
> @@ -3155,7 +3155,7 @@ class TestProps:
>                         dev = f[0]
>                         props[dev] = DevProps()
>                         props[dev].altname = f[1]
> -                       if int(f[2]):
> +                       if len(f) > 2 and f[2] and int(f[2]):
>                                 props[dev].isasync = True
>                         else:
>                                 props[dev].isasync = False

This looks good, thanks for the catch! Rafael can you apply this?

Signed-off-by: Todd Brandt <todd.e.brandt@intel.com>

Re: [PATCH] PM: tools: fix ValueError when parsing incomplete device properties
Posted by Rafael J. Wysocki 1 month, 2 weeks ago
On Thu, Apr 30, 2026 at 7:38 PM Todd Brandt
<todd.e.brandt@linux.intel.com> wrote:
>
> On Fri, 2026-04-24 at 15:12 +0800, Gongwei Li wrote:
> > From: Gongwei Li <ligongwei@kylinos.cn>
> >
> > When parsing device properties from ftrace data, the devprops()
> > function
> > assumes that each line has at least three fields and that the third
> > field
> > (f[2]) always contains a valid integer. However, due to incomplete or
> > corrupted ftrace logs, f[2] may be missing, empty, or non-existent.
> >
> > This can lead to the following error:
> >
> >     Traceback (most recent call last):
> >       File "../sleepgraph.py", line 7142, in <module>
> >         stamp = rerunTest(sysvals.outdir)
> >       File "../sleepgraph.py", line 6255, in rerunTest
> >         testruns, stamp = processData()
> >       File "../sleepgraph.py", line 6181, in processData
> >         testruns, error = parseTraceLog(live)
> >       File "../sleepgraph.py", line 3470, in parseTraceLog
> >         tp, tf = loadTraceLog()
> >       File "../sleepgraph.py", line 3398, in loadTraceLog
> >         if tp.stampInfo(line, sysvals):
> >       File "../sleepgraph.py", line 3073, in stampInfo
> >         self.parsePlatformInfo(line, sv)
> >       File "../sleepgraph.py", line 3177, in parsePlatformInfo
> >         sv.devprops = self.devprops(sv.b64unzip(info))
> >       File "../sleepgraph.py", line 3158, in devprops
> >         if int(f[2]):
> >     ValueError: invalid literal for int() with base 10: ''
> >
> > To prevent this crash, add proper validation before accessing.
> >
> > Signed-off-by: Gongwei Li <ligongwei@kylinos.cn>
> > ---
> >  tools/power/pm-graph/sleepgraph.py | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/tools/power/pm-graph/sleepgraph.py b/tools/power/pm-
> > graph/sleepgraph.py
> > index 1555b51a7d55..f6d172254829 100755
> > --- a/tools/power/pm-graph/sleepgraph.py
> > +++ b/tools/power/pm-graph/sleepgraph.py
> > @@ -3155,7 +3155,7 @@ class TestProps:
> >                         dev = f[0]
> >                         props[dev] = DevProps()
> >                         props[dev].altname = f[1]
> > -                       if int(f[2]):
> > +                       if len(f) > 2 and f[2] and int(f[2]):
> >                                 props[dev].isasync = True
> >                         else:
> >                                 props[dev].isasync = False
>
> This looks good, thanks for the catch! Rafael can you apply this?
>
> Signed-off-by: Todd Brandt <todd.e.brandt@intel.com>

Changed the tag to Acked-by and applied the patch as 7.2 material, thanks!
Re: [PATCH] PM: tools: fix ValueError when parsing incomplete device properties
Posted by Todd Brandt 1 month, 2 weeks ago
On Fri, 2026-04-24 at 15:12 +0800, Gongwei Li wrote:
> From: Gongwei Li <ligongwei@kylinos.cn>
> 
> When parsing device properties from ftrace data, the devprops()
> function
> assumes that each line has at least three fields and that the third
> field
> (f[2]) always contains a valid integer. However, due to incomplete or
> corrupted ftrace logs, f[2] may be missing, empty, or non-existent.
> 
> This can lead to the following error:
> 
>     Traceback (most recent call last):
>       File "../sleepgraph.py", line 7142, in <module>
>         stamp = rerunTest(sysvals.outdir)
>       File "../sleepgraph.py", line 6255, in rerunTest
>         testruns, stamp = processData()
>       File "../sleepgraph.py", line 6181, in processData
>         testruns, error = parseTraceLog(live)
>       File "../sleepgraph.py", line 3470, in parseTraceLog
>         tp, tf = loadTraceLog()
>       File "../sleepgraph.py", line 3398, in loadTraceLog
>         if tp.stampInfo(line, sysvals):
>       File "../sleepgraph.py", line 3073, in stampInfo
>         self.parsePlatformInfo(line, sv)
>       File "../sleepgraph.py", line 3177, in parsePlatformInfo
>         sv.devprops = self.devprops(sv.b64unzip(info))
>       File "../sleepgraph.py", line 3158, in devprops
>         if int(f[2]):
>     ValueError: invalid literal for int() with base 10: ''
> 
> To prevent this crash, add proper validation before accessing.
> 
> Signed-off-by: Gongwei Li <ligongwei@kylinos.cn>
> ---
>  tools/power/pm-graph/sleepgraph.py | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/power/pm-graph/sleepgraph.py b/tools/power/pm-
> graph/sleepgraph.py
> index 1555b51a7d55..f6d172254829 100755
> --- a/tools/power/pm-graph/sleepgraph.py
> +++ b/tools/power/pm-graph/sleepgraph.py
> @@ -3155,7 +3155,7 @@ class TestProps:
>                         dev = f[0]
>                         props[dev] = DevProps()
>                         props[dev].altname = f[1]
> -                       if int(f[2]):
> +                       if len(f) > 2 and f[2] and int(f[2]):
>                                 props[dev].isasync = True
>                         else:
>                                 props[dev].isasync = False

This looks good, thanks for the catch! Raphael can you apply this?

Signed-off-by: Todd Brandt <todd.e.brandt@intel.com>