| From c0f02536fffbbec71aced36d52a765f8c4493dc2 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Miquel=20Sabat=C3=A9=20Sol=C3=A0?= <mikisabate@gmail.com> |
| Date: Tue, 17 Sep 2024 15:42:46 +0200 |
| Subject: cpufreq: Avoid a bad reference count on CPU node |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Miquel Sabaté Solà <mikisabate@gmail.com> |
| |
| commit c0f02536fffbbec71aced36d52a765f8c4493dc2 upstream. |
| |
| In the parse_perf_domain function, if the call to |
| of_parse_phandle_with_args returns an error, then the reference to the |
| CPU device node that was acquired at the start of the function would not |
| be properly decremented. |
| |
| Address this by declaring the variable with the __free(device_node) |
| cleanup attribute. |
| |
| Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com> |
| Acked-by: Viresh Kumar <viresh.kumar@linaro.org> |
| Link: https://patch.msgid.link/20240917134246.584026-1-mikisabate@gmail.com |
| Cc: All applicable <stable@vger.kernel.org> |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| include/linux/cpufreq.h | 6 +----- |
| 1 file changed, 1 insertion(+), 5 deletions(-) |
| |
| --- a/include/linux/cpufreq.h |
| +++ b/include/linux/cpufreq.h |
| @@ -1113,10 +1113,9 @@ static inline int parse_perf_domain(int |
| const char *cell_name, |
| struct of_phandle_args *args) |
| { |
| - struct device_node *cpu_np; |
| int ret; |
| |
| - cpu_np = of_cpu_device_node_get(cpu); |
| + struct device_node *cpu_np __free(device_node) = of_cpu_device_node_get(cpu); |
| if (!cpu_np) |
| return -ENODEV; |
| |
| @@ -1124,9 +1123,6 @@ static inline int parse_perf_domain(int |
| args); |
| if (ret < 0) |
| return ret; |
| - |
| - of_node_put(cpu_np); |
| - |
| return 0; |
| } |
| |