mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'bugfix/vfs_uart_outof_bounds_read_v5.1' into 'release/v5.1'
vfs_uart: fix out-of-bounds read (v5.1) See merge request espressif/esp-idf!24312
This commit is contained in:
commit
f963c7c009
@ -628,7 +628,7 @@ static uint32_t slider_filter_average(te_slider_handle_t slider_handle, uint32_t
|
||||
for (int win_idx = 0; win_idx < TE_SLD_DEFAULT_POS_FILTER_SIZE(s_te_sld_obj); win_idx++) { //Moving average filter
|
||||
position_average += slider_handle->pos_filter_window[win_idx];
|
||||
}
|
||||
position_average = position_average / TE_SLD_DEFAULT_POS_FILTER_SIZE(s_te_sld_obj) + 0.5;
|
||||
position_average = (uint32_t)((float)position_average / TE_SLD_DEFAULT_POS_FILTER_SIZE(s_te_sld_obj) + 0.5F);
|
||||
return position_average;
|
||||
}
|
||||
|
||||
|
@ -2423,7 +2423,7 @@ static inline void _buffer_parse_isoc(dma_buffer_block_t *buffer, bool is_in)
|
||||
usb_dwc_hal_xfer_desc_parse(buffer->xfer_desc_list, desc_idx, &rem_len, &desc_status);
|
||||
usb_dwc_hal_xfer_desc_clear(buffer->xfer_desc_list, desc_idx);
|
||||
assert(rem_len == 0 || is_in);
|
||||
assert(desc_status == USB_DWC_HAL_XFER_DESC_STS_SUCCESS || USB_DWC_HAL_XFER_DESC_STS_NOT_EXECUTED);
|
||||
assert(desc_status == USB_DWC_HAL_XFER_DESC_STS_SUCCESS || desc_status == USB_DWC_HAL_XFER_DESC_STS_NOT_EXECUTED);
|
||||
assert(rem_len <= transfer->isoc_packet_desc[pkt_idx].num_bytes); //Check for DMA errata
|
||||
//Update ISO packet actual length and status
|
||||
transfer->isoc_packet_desc[pkt_idx].actual_num_bytes = transfer->isoc_packet_desc[pkt_idx].num_bytes - rem_len;
|
||||
|
@ -106,6 +106,14 @@ static vfs_uart_context_t* s_ctx[UART_NUM] = {
|
||||
#endif
|
||||
};
|
||||
|
||||
static const char *s_uart_mount_points[UART_NUM] = {
|
||||
"/0",
|
||||
"/1",
|
||||
#if UART_NUM > 2
|
||||
"/2",
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONFIG_VFS_SUPPORT_SELECT
|
||||
|
||||
typedef struct {
|
||||
@ -132,15 +140,15 @@ static int uart_open(const char * path, int flags, int mode)
|
||||
// and error out if write is requested
|
||||
int fd = -1;
|
||||
|
||||
if (strcmp(path, "/0") == 0) {
|
||||
fd = 0;
|
||||
} else if (strcmp(path, "/1") == 0) {
|
||||
fd = 1;
|
||||
} else if (strcmp(path, "/2") == 0) {
|
||||
fd = 2;
|
||||
} else {
|
||||
for (int i = 0; i < UART_NUM; i++) {
|
||||
if (strcmp(path, s_uart_mount_points[i]) == 0) {
|
||||
fd = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (fd == -1) {
|
||||
errno = ENOENT;
|
||||
return fd;
|
||||
return -1;
|
||||
}
|
||||
|
||||
s_ctx[fd]->non_blocking = ((flags & O_NONBLOCK) == O_NONBLOCK);
|
||||
|
Loading…
Reference in New Issue
Block a user