Prevent from writing beyond the allocated memory.
GCC 10 compiling output:
eal_common_trace_utils.c: In function 'eal_trace_dir_args_save':
eal_common_trace_utils.c:290:24: error: '__builtin___sprintf_chk' \
may write a terminating nul past the end of the destination \
[-Werror=format-overflow=]
290 | sprintf(dir_path, "%s/", optarg);
| ^
Fixes:
8af866df8d8c ("trace: add trace directory configuration parameter")
Signed-off-by: Phil Yang <phil.yang@arm.com>
Reviewed-by: Lijian Zhang <lijian.zhang@arm.com>
Tested-by: Lijian Zhang <lijian.zhang@arm.com>
Acked-by: Sunil Kumar Kori <skori@marvell.com>
Signed-off-by: David Marchand <david.marchand@redhat.com>
eal_trace_dir_args_save(char const *val)
{
struct trace *trace = trace_obj_get();
eal_trace_dir_args_save(char const *val)
{
struct trace *trace = trace_obj_get();
- uint32_t size = sizeof(trace->dir);
- char *dir_path = NULL;
- if (strlen(val) >= size) {
+ if (strlen(val) >= sizeof(trace->dir) - 1) {
trace_err("input string is too big");
return -ENAMETOOLONG;
}
trace_err("input string is too big");
return -ENAMETOOLONG;
}
- dir_path = (char *)calloc(1, size);
- if (dir_path == NULL) {
- trace_err("fail to allocate memory");
+ if (asprintf(&dir_path, "%s/", val) == -1) {
+ trace_err("failed to copy directory: %s", strerror(errno));
- sprintf(dir_path, "%s/", val);
rc = trace_dir_update(dir_path);
free(dir_path);
rc = trace_dir_update(dir_path);
free(dir_path);