diff options
author | Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com> | 2017-09-26 02:25:10 -0400 |
---|---|---|
committer | Rob Herring <robh@kernel.org> | 2017-10-12 13:22:04 -0400 |
commit | db179e0d0d1003f10b798e072524be6bcdae5053 (patch) | |
tree | 1fd0391e582a81d8a3a6d34872a4d0eed3a67118 | |
parent | 8a5776a5f49812d29fe4b2d0a2d71675c3facf3f (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.c | 8 |
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 | } |
1787 | EXPORT_SYMBOL_GPL(of_console_check); | 1791 | EXPORT_SYMBOL_GPL(of_console_check); |
1788 | 1792 | ||