mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 07:04:24 +00:00
media: ipu-bridge: Do not use on stack memory for software_node.name field
Commit567f97bd38
("media: ipu3-cio2: support multiple sensors and VCMs with same HID") introduced an on stack vcm_name and then uses this for the name field of the software_node struct used for the vcm. But the software_node struct is much longer lived then the current stack-frame, so this is no good. Instead extend the ipu_node_names struct with an extra field to store the vcm software_node name and use that. Note this also changes the length of the allocated buffer from ACPI_ID_LEN + 4 to 16. the name is filled with "<ipu_vcm_types[x]>-%u" where ipu_vcm_types[x] is not an ACPI_ID. The maximum length of the strings in the ipu_vcm_types[] array is 11 + 5 bytes for "-255\0" means 16 bytes are needed in the worst case scenario. Fixes:567f97bd38
("media: ipu3-cio2: support multiple sensors and VCMs with same HID") Cc: Bingbu Cao <bingbu.cao@intel.com> Reviewed-by: Andy Shevchenko <andy@kernel.org> Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
284be56931
commit
11e0a7c8e0
2 changed files with 4 additions and 4 deletions
|
@ -220,7 +220,6 @@ static void ipu_bridge_create_connection_swnodes(struct ipu_bridge *bridge,
|
||||||
struct ipu_sensor *sensor)
|
struct ipu_sensor *sensor)
|
||||||
{
|
{
|
||||||
struct software_node *nodes = sensor->swnodes;
|
struct software_node *nodes = sensor->swnodes;
|
||||||
char vcm_name[ACPI_ID_LEN + 4];
|
|
||||||
|
|
||||||
ipu_bridge_init_swnode_names(sensor);
|
ipu_bridge_init_swnode_names(sensor);
|
||||||
|
|
||||||
|
@ -240,10 +239,10 @@ static void ipu_bridge_create_connection_swnodes(struct ipu_bridge *bridge,
|
||||||
sensor->ipu_properties);
|
sensor->ipu_properties);
|
||||||
if (sensor->ssdb.vcmtype) {
|
if (sensor->ssdb.vcmtype) {
|
||||||
/* append ssdb.link to distinguish VCM nodes with same HID */
|
/* append ssdb.link to distinguish VCM nodes with same HID */
|
||||||
snprintf(vcm_name, sizeof(vcm_name), "%s-%u",
|
snprintf(sensor->node_names.vcm, sizeof(sensor->node_names.vcm),
|
||||||
ipu_vcm_types[sensor->ssdb.vcmtype - 1],
|
"%s-%u", ipu_vcm_types[sensor->ssdb.vcmtype - 1],
|
||||||
sensor->ssdb.link);
|
sensor->ssdb.link);
|
||||||
nodes[SWNODE_VCM] = NODE_VCM(vcm_name);
|
nodes[SWNODE_VCM] = NODE_VCM(sensor->node_names.vcm);
|
||||||
}
|
}
|
||||||
|
|
||||||
ipu_bridge_init_swnode_group(sensor);
|
ipu_bridge_init_swnode_group(sensor);
|
||||||
|
|
|
@ -103,6 +103,7 @@ struct ipu_node_names {
|
||||||
char port[7];
|
char port[7];
|
||||||
char endpoint[11];
|
char endpoint[11];
|
||||||
char remote_port[7];
|
char remote_port[7];
|
||||||
|
char vcm[16];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ipu_sensor_config {
|
struct ipu_sensor_config {
|
||||||
|
|
Loading…
Reference in a new issue