Commit 8d532528 authored by Russell King (Oracle)'s avatar Russell King (Oracle)

clkdev: report over-sized strings when creating clkdev entries

Report an error when an attempt to register a clkdev entry results in a
truncated string so the problem can be easily spotted.

Reported by: Duanqiang Wen <duanqiangwen@net-swift.com>
Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
parent e8f897f4
......@@ -158,23 +158,54 @@ vclkdev_alloc(struct clk_hw *hw, const char *con_id, const char *dev_fmt,
va_list ap)
{
struct clk_lookup_alloc *cla;
struct va_format vaf;
const char *failure;
va_list ap_copy;
size_t max_size;
ssize_t res;
cla = kzalloc(sizeof(*cla), GFP_KERNEL);
if (!cla)
return NULL;
va_copy(ap_copy, ap);
cla->cl.clk_hw = hw;
if (con_id) {
strscpy(cla->con_id, con_id, sizeof(cla->con_id));
res = strscpy(cla->con_id, con_id, sizeof(cla->con_id));
if (res < 0) {
max_size = sizeof(cla->con_id);
failure = "connection";
goto fail;
}
cla->cl.con_id = cla->con_id;
}
if (dev_fmt) {
vscnprintf(cla->dev_id, sizeof(cla->dev_id), dev_fmt, ap);
res = vsnprintf(cla->dev_id, sizeof(cla->dev_id), dev_fmt, ap);
if (res >= sizeof(cla->dev_id)) {
max_size = sizeof(cla->dev_id);
failure = "device";
goto fail;
}
cla->cl.dev_id = cla->dev_id;
}
va_end(ap_copy);
return &cla->cl;
fail:
if (dev_fmt)
vaf.fmt = dev_fmt;
else
vaf.fmt = "null-device";
vaf.va = &ap_copy;
pr_err("%pV:%s: %s ID is greater than %zu\n",
&vaf, con_id, failure, max_size);
va_end(ap_copy);
kfree(cla);
return NULL;
}
static struct clk_lookup *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment