diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2023-12-22 13:41:29 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2023-12-22 13:41:29 -0800 |
commit | c0f65a7c112b3cfa691cead54bcf24d6cc2182b5 (patch) | |
tree | 983da17fdba8b9693404afac1cbb63b66efc86d4 | |
parent | 5414aea7b7508d01235ea0c95064ad66395c3239 (diff) | |
parent | 5c47251e8c4903111608ddcba2a77c0c425c247c (diff) |
Merge tag 'printk-for-6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux
Pull printk fix from Petr Mladek:
- Prevent refcount warning from code releasing a fwnode
* tag 'printk-for-6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux:
lib/vsprintf: Fix %pfwf when current node refcount == 0
-rw-r--r-- | lib/vsprintf.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 3e3733a7084f..552738f14275 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -2111,15 +2111,20 @@ char *fwnode_full_name_string(struct fwnode_handle *fwnode, char *buf, /* Loop starting from the root node to the current node. */ for (depth = fwnode_count_parents(fwnode); depth >= 0; depth--) { - struct fwnode_handle *__fwnode = - fwnode_get_nth_parent(fwnode, depth); + /* + * Only get a reference for other nodes (i.e. parent nodes). + * fwnode refcount may be 0 here. + */ + struct fwnode_handle *__fwnode = depth ? + fwnode_get_nth_parent(fwnode, depth) : fwnode; buf = string(buf, end, fwnode_get_name_prefix(__fwnode), default_str_spec); buf = string(buf, end, fwnode_get_name(__fwnode), default_str_spec); - fwnode_handle_put(__fwnode); + if (depth) + fwnode_handle_put(__fwnode); } return buf; |