162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci///
362306a36Sopenharmony_ci/// From Documentation/filesystems/sysfs.rst:
462306a36Sopenharmony_ci///  show() must not use snprintf() when formatting the value to be
562306a36Sopenharmony_ci///  returned to user space. If you can guarantee that an overflow
662306a36Sopenharmony_ci///  will never happen you can use sprintf() otherwise you must use
762306a36Sopenharmony_ci///  scnprintf().
862306a36Sopenharmony_ci///
962306a36Sopenharmony_ci// Confidence: High
1062306a36Sopenharmony_ci// Copyright: (C) 2020 Denis Efremov ISPRAS
1162306a36Sopenharmony_ci// Options: --no-includes --include-headers
1262306a36Sopenharmony_ci//
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_civirtual report
1562306a36Sopenharmony_civirtual org
1662306a36Sopenharmony_civirtual context
1762306a36Sopenharmony_civirtual patch
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci@r depends on !patch@
2062306a36Sopenharmony_ciidentifier show, dev, attr, buf;
2162306a36Sopenharmony_ciposition p;
2262306a36Sopenharmony_ci@@
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cissize_t show(struct device *dev, struct device_attribute *attr, char *buf)
2562306a36Sopenharmony_ci{
2662306a36Sopenharmony_ci	<...
2762306a36Sopenharmony_ci*	return snprintf@p(...);
2862306a36Sopenharmony_ci	...>
2962306a36Sopenharmony_ci}
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ci@rp depends on patch@
3262306a36Sopenharmony_ciidentifier show, dev, attr, buf;
3362306a36Sopenharmony_ci@@
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cissize_t show(struct device *dev, struct device_attribute *attr, char *buf)
3662306a36Sopenharmony_ci{
3762306a36Sopenharmony_ci	<...
3862306a36Sopenharmony_ci	return
3962306a36Sopenharmony_ci-		snprintf
4062306a36Sopenharmony_ci+		scnprintf
4162306a36Sopenharmony_ci			(...);
4262306a36Sopenharmony_ci	...>
4362306a36Sopenharmony_ci}
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci@script: python depends on report@
4662306a36Sopenharmony_cip << r.p;
4762306a36Sopenharmony_ci@@
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cicoccilib.report.print_report(p[0], "WARNING: use scnprintf or sprintf")
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci@script: python depends on org@
5262306a36Sopenharmony_cip << r.p;
5362306a36Sopenharmony_ci@@
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_cicoccilib.org.print_todo(p[0], "WARNING: use scnprintf or sprintf")
56