Skip to content

Commit 06900eb

Browse files
committed
audio: data_blob: fix memcpy_s bounds in ipc4_comp_data_blob_set
Pass the real destination capacity instead of the copy count so the size check is effective, preventing a host-controlled heap overflow of data_new. Signed-off-by: Adrian Bonislawski <adrian.bonislawski@intel.com>
1 parent 3f7738d commit 06900eb

1 file changed

Lines changed: 21 additions & 4 deletions

File tree

src/audio/data_blob.c

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -365,8 +365,16 @@ int ipc4_comp_data_blob_set(struct comp_data_blob_handler *blob_handler,
365365
valid_data_size = last_block ? data_offset : MAILBOX_DSPBOX_SIZE;
366366

367367
ret = memcpy_s((char *)blob_handler->data_new,
368-
valid_data_size, data, valid_data_size);
369-
assert(!ret);
368+
blob_handler->new_data_size, data, valid_data_size);
369+
if (ret) {
370+
comp_err(blob_handler->dev, "failed to copy fragment");
371+
blob_handler->free(blob_handler->data_new);
372+
blob_handler->data_new = NULL;
373+
blob_handler->new_data_size = 0;
374+
blob_handler->data_pos = 0;
375+
blob_handler->data_ready = false;
376+
return ret;
377+
}
370378

371379
blob_handler->data_pos += valid_data_size;
372380
} else {
@@ -391,8 +399,17 @@ int ipc4_comp_data_blob_set(struct comp_data_blob_handler *blob_handler,
391399
valid_data_size = blob_handler->new_data_size - data_offset;
392400

393401
ret = memcpy_s((char *)blob_handler->data_new + data_offset,
394-
valid_data_size, data, valid_data_size);
395-
assert(!ret);
402+
blob_handler->new_data_size - data_offset,
403+
data, valid_data_size);
404+
if (ret) {
405+
comp_err(blob_handler->dev, "failed to copy fragment");
406+
blob_handler->free(blob_handler->data_new);
407+
blob_handler->data_new = NULL;
408+
blob_handler->new_data_size = 0;
409+
blob_handler->data_pos = 0;
410+
blob_handler->data_ready = false;
411+
return ret;
412+
}
396413

397414
blob_handler->data_pos += valid_data_size;
398415
}

0 commit comments

Comments
 (0)