From 8e41da1aa121715a417653fbf2fbb8bb2e2ec00b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Rohl=C3=ADnek?= Date: Thu, 8 Jan 2026 11:48:36 +0100 Subject: [PATCH] fix(storage/vfs): Remove va_end leak in ioctl caused by early return in macro --- components/vfs/vfs_calls.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/components/vfs/vfs_calls.c b/components/vfs/vfs_calls.c index bdc7acb9a8..b3dd952d17 100644 --- a/components/vfs/vfs_calls.c +++ b/components/vfs/vfs_calls.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -180,10 +180,22 @@ int esp_vfs_ioctl(int fd, int cmd, ...) __errno_r(r) = EBADF; return -1; } + + if (vfs->vfs->ioctl == NULL) { + __errno_r(r) = ENOSYS; + return -1; + } + int ret; va_list args; va_start(args, cmd); - CHECK_AND_CALL(ret, r, vfs, ioctl, local_fd, cmd, args); + + if (vfs->flags & ESP_VFS_FLAG_CONTEXT_PTR) { + ret = vfs->vfs->ioctl_p(vfs->ctx, local_fd, cmd, args); + } else { + ret = vfs->vfs->ioctl(local_fd, cmd, args); + } + va_end(args); return ret; }