aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergey Senozhatsky <sergey.senozhatsky.work@gmail.com>2017-09-26 02:25:10 -0400
committerRob Herring <robh@kernel.org>2017-10-12 13:22:04 -0400
commitdb179e0d0d1003f10b798e072524be6bcdae5053 (patch)
tree1fd0391e582a81d8a3a6d34872a4d0eed3a67118
parent8a5776a5f49812d29fe4b2d0a2d71675c3facf3f (diff)
of: do not leak console options
Do not strdup() console options. It seems that the only reason for it to be strdup()-ed was a compilation warning: printk, UART and console drivers, for some reason, expect char pointer instead of const char pointer. So we can just pass `of_stdout_options', but need to cast it to char pointer. A better fix would be to change printk, console drivers and UART to accept const char `options'; but that will take time - there are lots of drivers to update. The patch also fixes a possible memory leak: add_preferred_console() can fail, but we don't kfree() options. Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Reviewed-by: Petr Mladek <pmladek@suse.com> Signed-off-by: Rob Herring <robh@kernel.org>
-rw-r--r--drivers/of/base.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 260d33c0f26c..63897531cd75 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -1781,8 +1781,12 @@ bool of_console_check(struct device_node *dn, char *name, int index)
1781{ 1781{
1782 if (!dn || dn != of_stdout || console_set_on_cmdline) 1782 if (!dn || dn != of_stdout || console_set_on_cmdline)
1783 return false; 1783 return false;
1784 return !add_preferred_console(name, index, 1784
1785 kstrdup(of_stdout_options, GFP_KERNEL)); 1785 /*
1786 * XXX: cast `options' to char pointer to suppress complication
1787 * warnings: printk, UART and console drivers expect char pointer.
1788 */
1789 return !add_preferred_console(name, index, (char *)of_stdout_options);
1786} 1790}
1787EXPORT_SYMBOL_GPL(of_console_check); 1791EXPORT_SYMBOL_GPL(of_console_check);
1788 1792