mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-20 04:19:41 +00:00
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: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
This commit is contained in:
parent
e8f897f4af
commit
8d532528ff
@ -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 *
|
||||
|
Loading…
x
Reference in New Issue
Block a user