Skip to content

Commit e243cdd

Browse files
quic-bjorandebroonie
authored andcommitted
regulator: core: Remove regulator supply_name length limit
When creating the regulator object, associated with a consumer device, the supply_name is string formatted into a statically sized buffer on the stack, then strdup()'ed onto the heap. Not only is the dance on the stack unnecessary, but when the device's name is long we might not fit the constructed supply_name in the fixed 64 byte buffer on the stack. One such case can be seen on the Qualcomm Rb3Gen2 board, where we find a PCIe controller, with a PCIe switch, with a USB controller, with a USB hub, consuming a regulator. In this example the dev->kobj.name itself is 62 characters long. Drop the temporary buffer on the stack and kasprintf() the string directly on the heap, both to simplify the code, and to remove the length limitation. Signed-off-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com> Link: https://patch.msgid.link/20260211-regulator-supply-name-length-v1-1-3875541c1576@oss.qualcomm.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 1a4b0c9 commit e243cdd

1 file changed

Lines changed: 1 addition & 11 deletions

File tree

drivers/regulator/core.c

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1965,8 +1965,6 @@ static const struct file_operations constraint_flags_fops = {
19651965
#endif
19661966
};
19671967

1968-
#define REG_STR_SIZE 64
1969-
19701968
static void link_and_create_debugfs(struct regulator *regulator, struct regulator_dev *rdev,
19711969
struct device *dev)
19721970
{
@@ -2014,15 +2012,7 @@ static struct regulator *create_regulator(struct regulator_dev *rdev,
20142012
lockdep_assert_held_once(&rdev->mutex.base);
20152013

20162014
if (dev) {
2017-
char buf[REG_STR_SIZE];
2018-
int size;
2019-
2020-
size = snprintf(buf, REG_STR_SIZE, "%s-%s",
2021-
dev->kobj.name, supply_name);
2022-
if (size >= REG_STR_SIZE)
2023-
return NULL;
2024-
2025-
supply_name = kstrdup(buf, GFP_KERNEL);
2015+
supply_name = kasprintf(GFP_KERNEL, "%s-%s", dev->kobj.name, supply_name);
20262016
if (supply_name == NULL)
20272017
return NULL;
20282018
} else {

0 commit comments

Comments
 (0)