interconnect: qcom: Annotate struct icc_onecell_data with __counted_by
Subsystems (2)
PATCH 1/1 interconnect: qcom: Annotate struct icc_onecell_data with __counted_by
Prepare for the coming implementation by GCC and Clang of the __counted_by attribute. Flexible array members annotated with __counted_by can have their accesses bounds-checked at run-time checking via CONFIG_UBSAN_BOUNDS (for array indexing) and CONFIG_FORTIFY_SOURCE (for strcpy/memcpy-family functions).
As found with Coccinelle[1], add __counted_by for struct icc_onecell_data. Additionally, since the element count member must be set before accessing the annotated flexible array member, move its initialization earlier.
[1] https://github.com/kees/kernel-tools/blob/trunk/coccinelle/examples/counted_by.cocci
--- drivers/interconnect/qcom/icc-rpmh.c | 3 +-- drivers/interconnect/qcom/msm8974.c | 2 +- drivers/interconnect/qcom/osm-l3.c | 2 +- include/linux/interconnect-provider.h | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-)
drivers/interconnect/qcom/icc-rpmh.c +1 -2
@@ -185,6 +185,7 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev) data =devm_kzalloc (dev,struct_size (data, nodes, num_nodes),GFP_KERNEL );if (!data)return -ENOMEM ; + data->num_nodes = num_nodes; provider = &qp->provider; provider->dev = dev;
@@ -228,8 +229,6 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev) data->nodes[i] = node; } - data->num_nodes = num_nodes; - ret =icc_provider_register (provider);if (ret) goto err_remove_nodes;
drivers/interconnect/qcom/msm8974.c +1 -1
@@ -675,6 +675,7 @@ static int msm8974_icc_probe(struct platform_device *pdev) GFP_KERNEL);if (!data)return -ENOMEM ; + data->num_nodes = num_nodes; qp->bus_clks =devm_kmemdup (dev, msm8974_icc_bus_clocks,sizeof (msm8974_icc_bus_clocks),GFP_KERNEL );
@@ -721,7 +722,6 @@ static int msm8974_icc_probe(struct platform_device *pdev) data->nodes[i] = node; } - data->num_nodes = num_nodes; ret =icc_provider_register (provider);if (ret)
drivers/interconnect/qcom/osm-l3.c +1 -1
@@ -232,6 +232,7 @@ static int qcom_osm_l3_probe(struct platform_device *pdev) data =devm_kzalloc (&pdev->dev,struct_size (data, nodes, num_nodes),GFP_KERNEL );if (!data)return -ENOMEM ; + data->num_nodes = num_nodes; provider = &qp->provider; provider->dev = &pdev->dev;
@@ -261,7 +262,6 @@ static int qcom_osm_l3_probe(struct platform_device *pdev) data->nodes[i] = node; } - data->num_nodes = num_nodes; ret =icc_provider_register (provider);if (ret)
include/linux/interconnect-provider.h +1 -1
@@ -33,7 +33,7 @@ struct icc_node_data {*/ struct icc_onecell_data {unsigned int num_nodes; -struct icc_node *nodes[]; + struct icc_node *nodes[] __counted_by(num_nodes); }; struct icc_node *of_icc_xlate_onecell(struct of_phandle_args *spec,
Signature · 1 line
2.34.1
Quoted 12 lines · Kees Cook
Prepare for the coming implementation by GCC and Clang of the
__counted_byattribute. Flexible array members annotated with__counted_bycan have their accesses bounds-checked at run-time checking viaCONFIG_UBSAN_BOUNDS(for array indexing) andCONFIG_FORTIFY_SOURCE(for strcpy/memcpy-family functions).As found with Coccinelle[1], add
__counted_byfor structicc_onecell_data. Additionally, since the element count member must be set before accessing the annotated flexible array member, move its initialization earlier.[1] https://github.com/kees/kernel-tools/blob/trunk/coccinelle/examples/counted_by.cocci
Quoted 7 lines
Cc Andy Gross <[email protected]>Cc Bjorn Andersson <[email protected]>Cc Konrad Dybcio <[email protected]>Cc Georgi Djakov <[email protected]>Signed-off-by Kees Cook <[email protected]>
Thanks
Signature · 1 line
Gustavo
Quoted 81 lines
--- drivers/interconnect/qcom/icc-rpmh.c | 3 +-- drivers/interconnect/qcom/msm8974.c | 2 +- drivers/interconnect/qcom/osm-l3.c | 2 +- include/linux/interconnect-provider.h | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-)drivers/interconnect/qcom/icc-rpmh.c +1
-2@@ -185,6 +185,7 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev) data =devm_kzalloc (dev,struct_size (data, nodes, num_nodes),GFP_KERNEL );if (!data)return -ENOMEM ; + data->num_nodes = num_nodes; provider = &qp->provider; provider->dev = dev;@@ -228,8 +229,6 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev) data->nodes[i] = node; } - data->num_nodes = num_nodes; - ret =icc_provider_register (provider);if (ret) goto err_remove_nodes;drivers/interconnect/qcom/msm8974.c +1
-1@@ -675,6 +675,7 @@ static int msm8974_icc_probe(struct platform_device *pdev) GFP_KERNEL);if (!data)return -ENOMEM ; + data->num_nodes = num_nodes; qp->bus_clks =devm_kmemdup (dev, msm8974_icc_bus_clocks,sizeof (msm8974_icc_bus_clocks),GFP_KERNEL );@@ -721,7 +722,6 @@ static int msm8974_icc_probe(struct platform_device *pdev) data->nodes[i] = node; } - data->num_nodes = num_nodes; ret =icc_provider_register (provider);if (ret)drivers/interconnect/qcom/osm-l3.c +1
-1@@ -232,6 +232,7 @@ static int qcom_osm_l3_probe(struct platform_device *pdev) data =devm_kzalloc (&pdev->dev,struct_size (data, nodes, num_nodes),GFP_KERNEL );if (!data)return -ENOMEM ; + data->num_nodes = num_nodes; provider = &qp->provider; provider->dev = &pdev->dev;@@ -261,7 +262,6 @@ static int qcom_osm_l3_probe(struct platform_device *pdev) data->nodes[i] = node; } - data->num_nodes = num_nodes; ret =icc_provider_register (provider);if (ret)include/linux/interconnect-provider.h +1
-1@@ -33,7 +33,7 @@ struct icc_node_data {*/ struct icc_onecell_data {unsigned int num_nodes; -struct icc_node *nodes[]; + struct icc_node *nodes[] __counted_by(num_nodes); }; struct icc_node *of_icc_xlate_onecell(struct of_phandle_args *spec,
Quoted 12 lines · Kees Cook
Prepare for the coming implementation by GCC and Clang of the
__counted_byattribute. Flexible array members annotated with__counted_bycan have their accesses bounds-checked at run-time checking viaCONFIG_UBSAN_BOUNDS(for array indexing) andCONFIG_FORTIFY_SOURCE(for strcpy/memcpy-family functions).As found with Coccinelle[1], add
__counted_byfor structicc_onecell_data. Additionally, since the element count member must be set before accessing the annotated flexible array member, move its initialization earlier.[1] https://github.com/kees/kernel-tools/blob/trunk/coccinelle/examples/counted_by.cocci
Quoted 8 lines
Cc Andy Gross <[email protected]>Cc Bjorn Andersson <[email protected]>Cc Konrad Dybcio <[email protected]>Cc Georgi Djakov <[email protected]>Signed-off-by Kees Cook <[email protected]>---
Very nice, thanks
Konrad