Skip to content

Commit f8703cd

Browse files
Jakub Dabeklgirdwood
authored andcommitted
memory: changed memcpy calls to memcpy_s in audio lib
Signed-off-by: Jakub Dabek <jakub.dabek@linux.intel.com>
1 parent de46954 commit f8703cd

12 files changed

Lines changed: 122 additions & 28 deletions

File tree

src/audio/buffer.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
struct comp_buffer *buffer_new(struct sof_ipc_buffer *desc)
5050
{
5151
struct comp_buffer *buffer;
52+
int err;
5253

5354
trace_buffer("buffer_new()");
5455

@@ -77,7 +78,15 @@ struct comp_buffer *buffer_new(struct sof_ipc_buffer *desc)
7778
return NULL;
7879
}
7980

80-
memcpy(&buffer->ipc_buffer, desc, sizeof(*desc));
81+
err = memcpy_s(&buffer->ipc_buffer, sizeof(buffer->ipc_buffer),
82+
desc, sizeof(*desc));
83+
84+
if (err) {
85+
rfree(buffer);
86+
trace_buffer_error("buffer_new() error: "
87+
"could not coppy data");
88+
return NULL;
89+
}
8190

8291
buffer->size = desc->size;
8392
buffer->alloc_size = desc->size;

src/audio/component.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ struct comp_dev *comp_new(struct sof_ipc_comp *comp)
7474
{
7575
struct comp_dev *cdev;
7676
struct comp_driver *drv;
77+
int err;
7778

7879
/* find the driver for our new component */
7980
drv = get_drv(comp->type);
@@ -92,7 +93,15 @@ struct comp_dev *comp_new(struct sof_ipc_comp *comp)
9293
}
9394

9495
/* init component */
95-
memcpy(&cdev->comp, comp, sizeof(*comp));
96+
err = memcpy_s(&cdev->comp, sizeof(cdev->comp),
97+
comp, sizeof(*comp));
98+
if (err) {
99+
trace_comp_error("comp_new() error: 0x%x "
100+
"unable to copy data",
101+
err);
102+
return NULL;
103+
}
104+
96105
cdev->drv = drv;
97106
spinlock_init(&cdev->lock);
98107
list_init(&cdev->bsource_list);

src/audio/dai.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ static struct comp_dev *dai_new(struct sof_ipc_comp *comp)
198198
struct sof_ipc_comp_dai *ipc_dai = (struct sof_ipc_comp_dai *)comp;
199199
struct dai_data *dd;
200200
uint32_t dir, caps, dma_dev;
201+
int err;
201202

202203
trace_dai("dai_new()");
203204

@@ -212,7 +213,15 @@ static struct comp_dev *dai_new(struct sof_ipc_comp *comp)
212213
return NULL;
213214

214215
dai = (struct sof_ipc_comp_dai *)&dev->comp;
215-
memcpy(dai, ipc_dai, sizeof(struct sof_ipc_comp_dai));
216+
err = memcpy_s(dai, sizeof(*dai), ipc_dai,
217+
sizeof(struct sof_ipc_comp_dai));
218+
if (err) {
219+
trace_dai_error("dai_new() error: 0x%x "
220+
"could not coppy data",
221+
err);
222+
rfree(dev);
223+
return NULL;
224+
}
216225

217226
dd = rzalloc(RZONE_RUNTIME, SOF_MEM_CAPS_RAM, sizeof(*dd));
218227
if (!dd) {

src/audio/eq_fir.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ static struct comp_dev *eq_fir_new(struct sof_ipc_comp *comp)
379379
struct sof_ipc_comp_process *ipc_fir
380380
= (struct sof_ipc_comp_process *)comp;
381381
size_t bs = ipc_fir->size;
382-
int i;
382+
int i, err;
383383

384384
trace_eq("eq_fir_new()");
385385

@@ -401,8 +401,8 @@ static struct comp_dev *eq_fir_new(struct sof_ipc_comp *comp)
401401
COMP_SIZE(struct sof_ipc_comp_process));
402402
if (!dev)
403403
return NULL;
404-
405-
memcpy(&dev->comp, comp, sizeof(struct sof_ipc_comp_process));
404+
err = memcpy_s(&dev->comp, sizeof(dev->comp),
405+
comp, sizeof(struct sof_ipc_comp_process));
406406

407407
cd = rzalloc(RZONE_RUNTIME, SOF_MEM_CAPS_RAM, sizeof(*cd));
408408
if (!cd) {
@@ -427,7 +427,14 @@ static struct comp_dev *eq_fir_new(struct sof_ipc_comp *comp)
427427
return NULL;
428428
}
429429

430-
memcpy(cd->config, ipc_fir->data, bs);
430+
err = memcpy_s(cd->config, sizeof(*cd->config),
431+
ipc_fir->data, bs);
432+
}
433+
434+
if (err) {
435+
rfree(dev);
436+
rfree(cd);
437+
return NULL;
431438
}
432439

433440
for (i = 0; i < PLATFORM_MAX_CHANNELS; i++)
@@ -498,7 +505,11 @@ static int fir_cmd_get_data(struct comp_dev *dev,
498505
if (bs > SOF_EQ_FIR_MAX_SIZE || bs == 0 ||
499506
bs > max_size)
500507
return -EINVAL;
501-
memcpy(cdata->data->data, cd->config, bs);
508+
ret = memcpy_s(cdata->data->data,
509+
((struct sof_abi_hdr *)
510+
(cdata->data))->size,
511+
cd->config, bs);
512+
502513
cdata->data->abi = SOF_ABI_VERSION;
503514
cdata->data->size = bs;
504515
} else {
@@ -590,7 +601,8 @@ static int fir_cmd_set_data(struct comp_dev *dev,
590601
/* Just copy the configuration. The EQ will be initialized in
591602
* prepare().
592603
*/
593-
memcpy(cd->config, cfg, bs);
604+
ret = memcpy_s(cd->config, sizeof(*cd->config), cfg, bs);
605+
594606
break;
595607
default:
596608
trace_eq_error("fir_cmd_set_data() error: invalid cdata->cmd");

src/audio/eq_iir.c

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ static struct comp_dev *eq_iir_new(struct sof_ipc_comp *comp)
484484
struct sof_ipc_comp_process *ipc_iir =
485485
(struct sof_ipc_comp_process *)comp;
486486
size_t bs = ipc_iir->size;
487-
int i;
487+
int i, err;
488488

489489
trace_eq("eq_iir_new()");
490490

@@ -506,8 +506,8 @@ static struct comp_dev *eq_iir_new(struct sof_ipc_comp *comp)
506506
COMP_SIZE(struct sof_ipc_comp_process));
507507
if (!dev)
508508
return NULL;
509-
510-
memcpy(&dev->comp, comp, sizeof(struct sof_ipc_comp_process));
509+
err = memcpy_s(&dev->comp, sizeof(dev->comp),
510+
comp, sizeof(struct sof_ipc_comp_process));
511511

512512
cd = rzalloc(RZONE_RUNTIME, SOF_MEM_CAPS_RAM, sizeof(*cd));
513513
if (!cd) {
@@ -532,8 +532,15 @@ static struct comp_dev *eq_iir_new(struct sof_ipc_comp *comp)
532532
rfree(cd);
533533
return NULL;
534534
}
535+
err = memcpy_s(cd->config, sizeof(*cd->config),
536+
ipc_iir->data, bs);
537+
}
535538

536-
memcpy(cd->config, ipc_iir->data, bs);
539+
if (err) {
540+
trace_eq_error("eq_iir_new() error: 0x%x", err);
541+
rfree(dev);
542+
rfree(cd);
543+
return NULL;
537544
}
538545

539546
for (i = 0; i < PLATFORM_MAX_CHANNELS; i++)
@@ -584,7 +591,10 @@ static int iir_cmd_get_data(struct comp_dev *dev,
584591
if (bs > SOF_EQ_IIR_MAX_SIZE || bs == 0 ||
585592
bs > max_size)
586593
return -EINVAL;
587-
memcpy(cdata->data->data, cd->config, bs);
594+
ret = memcpy_s(cdata->data->data,
595+
((struct sof_abi_hdr *)
596+
(cdata->data))->size, cd->config, bs);
597+
588598
cdata->data->abi = SOF_ABI_VERSION;
589599
cdata->data->size = bs;
590600
} else {
@@ -679,7 +689,10 @@ static int iir_cmd_set_data(struct comp_dev *dev,
679689
/* Just copy the configurate. The EQ will be initialized in
680690
* prepare().
681691
*/
682-
memcpy(cd->config, cdata->data->data, bs);
692+
693+
ret = memcpy_s(cd->config, sizeof(*cd->config),
694+
cdata->data->data, bs);
695+
683696
break;
684697
default:
685698
trace_eq_error("iir_cmd_set_data() error: invalid cdata->cmd");

src/audio/host.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -337,9 +337,8 @@ static struct comp_dev *host_new(struct sof_ipc_comp *comp)
337337
struct sof_ipc_comp_host *host;
338338
struct sof_ipc_comp_host *ipc_host = (struct sof_ipc_comp_host *)comp;
339339
uint32_t dir, caps, dma_dev;
340-
#if !CONFIG_DMA_GW
341340
int err;
342-
#endif
341+
343342

344343
trace_host("host_new()");
345344

@@ -354,7 +353,8 @@ static struct comp_dev *host_new(struct sof_ipc_comp *comp)
354353
return NULL;
355354

356355
host = (struct sof_ipc_comp_host *)&dev->comp;
357-
memcpy(host, ipc_host, sizeof(struct sof_ipc_comp_host));
356+
err = memcpy_s(host, sizeof(*host),
357+
ipc_host, sizeof(struct sof_ipc_comp_host));
358358

359359
hd = rzalloc(RZONE_RUNTIME, SOF_MEM_CAPS_RAM, sizeof(*hd));
360360
if (!hd) {
@@ -388,9 +388,10 @@ static struct comp_dev *host_new(struct sof_ipc_comp *comp)
388388

389389
err = dma_sg_alloc(&hd->config.elem_array, RZONE_RUNTIME,
390390
dir, 1, 0, 0, 0);
391+
#endif
391392
if (err < 0)
392393
goto error;
393-
#endif
394+
394395

395396
hd->chan = DMA_CHAN_INVALID;
396397

src/audio/mixer.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ static struct comp_dev *mixer_new(struct sof_ipc_comp *comp)
123123
struct sof_ipc_comp_mixer *ipc_mixer =
124124
(struct sof_ipc_comp_mixer *)comp;
125125
struct mixer_data *md;
126+
int err;
126127

127128
trace_mixer("mixer_new()");
128129

@@ -137,7 +138,14 @@ static struct comp_dev *mixer_new(struct sof_ipc_comp *comp)
137138
return NULL;
138139

139140
mixer = (struct sof_ipc_comp_mixer *)&dev->comp;
140-
memcpy(mixer, ipc_mixer, sizeof(struct sof_ipc_comp_mixer));
141+
142+
err = memcpy_s(mixer, sizeof(*mixer), ipc_mixer,
143+
sizeof(struct sof_ipc_comp_mixer));
144+
if (err) {
145+
trace_mixer_error("mixer_new() could not coppy data");
146+
rfree(dev);
147+
return NULL;
148+
}
141149

142150
md = rzalloc(RZONE_RUNTIME, SOF_MEM_CAPS_RAM, sizeof(*md));
143151
if (!md) {

src/audio/pipeline.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ struct pipeline *pipeline_new(struct sof_ipc_pipe_new *pipe_desc,
6767
{
6868
struct pipeline *p;
6969
uint32_t type;
70+
int err;
7071

7172
trace_pipe("pipeline_new()");
7273

@@ -82,7 +83,13 @@ struct pipeline *pipeline_new(struct sof_ipc_pipe_new *pipe_desc,
8283
p->status = COMP_STATE_INIT;
8384

8485
spinlock_init(&p->lock);
85-
memcpy(&p->ipc_pipe, pipe_desc, sizeof(*pipe_desc));
86+
err = memcpy_s(&p->ipc_pipe, sizeof(p->ipc_pipe),
87+
pipe_desc, sizeof(*pipe_desc));
88+
if (err) {
89+
trace_pipe_error("pipeline_new() could not coppy data");
90+
rfree(p);
91+
return NULL;
92+
}
8693

8794
/* get pipeline task type */
8895
type = pipeline_is_timer_driven(p) ? SOF_SCHEDULE_LL :

src/audio/src.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,7 @@ static struct comp_dev *src_new(struct sof_ipc_comp *comp)
561561
struct sof_ipc_comp_src *src;
562562
struct sof_ipc_comp_src *ipc_src = (struct sof_ipc_comp_src *)comp;
563563
struct comp_data *cd;
564+
int err;
564565

565566
trace_src("src_new()");
566567

@@ -582,7 +583,15 @@ static struct comp_dev *src_new(struct sof_ipc_comp *comp)
582583
return NULL;
583584

584585
src = (struct sof_ipc_comp_src *)&dev->comp;
585-
memcpy(src, ipc_src, sizeof(struct sof_ipc_comp_src));
586+
587+
err = memcpy_s(src, sizeof(*src), ipc_src,
588+
sizeof(struct sof_ipc_comp_src));
589+
if (err) {
590+
trace_src_error("src_new() error: "
591+
"could not coppy data");
592+
rfree(dev);
593+
return NULL;
594+
}
586595

587596
cd = rzalloc(RZONE_RUNTIME, SOF_MEM_CAPS_RAM, sizeof(*cd));
588597
if (!cd) {

src/audio/tone.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ static struct comp_dev *tone_new(struct sof_ipc_comp *comp)
402402
struct sof_ipc_comp_tone *tone;
403403
struct sof_ipc_comp_tone *ipc_tone = (struct sof_ipc_comp_tone *)comp;
404404
struct comp_data *cd;
405-
int i;
405+
int i, err;
406406

407407
trace_tone("tone_new()");
408408

@@ -417,7 +417,13 @@ static struct comp_dev *tone_new(struct sof_ipc_comp *comp)
417417
return NULL;
418418

419419
tone = (struct sof_ipc_comp_tone *)&dev->comp;
420-
memcpy(tone, ipc_tone, sizeof(struct sof_ipc_comp_tone));
420+
err = memcpy_s(tone, sizeof(*tone), ipc_tone,
421+
sizeof(struct sof_ipc_comp_tone));
422+
if (err) {
423+
trace_tone_error("tone_new() could not coppy data");
424+
rfree(dev);
425+
return NULL;
426+
}
421427

422428
cd = rzalloc(RZONE_RUNTIME, SOF_MEM_CAPS_RAM, sizeof(*cd));
423429
if (!cd) {

0 commit comments

Comments
 (0)