[PATCH] lib: sbi: Refine the way to construct platform features
Dong Du
Dd_nirvana at sjtu.edu.cn
Mon Aug 30 06:59:14 PDT 2021
sbi_platform_get_features_str() uses sbi_snprintf() to construct the
features_str. However, it passes the wrong length value (i.e., the nfstr),
which should be (nfstr-offset) as the starting point of str (i.e., features_str + offset)
changes.
This commit also checks the return value of snprintf, and handles the corner case
that the string buffer is full.
Signed-off-by: Dong Du <Dd_nirvana at sjtu.edu.cn>
---
lib/sbi/sbi_platform.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/lib/sbi/sbi_platform.c b/lib/sbi/sbi_platform.c
index 99bd8f5..56c37aa 100644
--- a/lib/sbi/sbi_platform.c
+++ b/lib/sbi/sbi_platform.c
@@ -48,9 +48,17 @@ void sbi_platform_get_features_str(const struct sbi_platform *plat,
if (features & feat) {
temp = sbi_platform_feature_id2string(feat);
if (temp) {
- sbi_snprintf(features_str + offset, nfstr,
+ int len = sbi_snprintf(features_str + offset, nfstr - offset,
"%s,", temp);
- offset = offset + sbi_strlen(temp) + 1;
+ if (len < 0)
+ break;
+
+ if (offset + len >= nfstr) {
+ // No more space for features
+ offset = nfstr;
+ break;
+ } else
+ offset = offset + len;
}
}
feat = feat << 1;
--
2.31.1
More information about the opensbi
mailing list