Re: [PATCH v2] tee: qcomtee: add missing va_end in early return qcomtee_object_user_init()
Jens Wiklander <[email protected]> Wed, 20 May 2026 12:51:52 +0200
| Newsgroups | org.trustedfirmware.lists.op-tee,dev.linux.lists.linux-kernel-mentees,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <CAHUa44GqBpYNxV8AHrj_r7u3cbcTA0xTB7Q2Nk=vbpnxDLnrTQ@mail.gmail.com> |
Hi, On Tue, May 19, 2026 at 4:05 AM Robertus Diawan Chris <[email protected]> wrote: > > qcomtee_object_user_init() is a variadic function and when the function > return because there's no dispatch callback in QCOMTEE_OBJECT_TYPE_CB > case, there's no va_end to cleanup "ap" object initialized by va_start > and that can cause undefined behavior. So make sure to use va_end before > returning the error code when there's no dispatch callback. > > This is reported by Coverity Scan as "Missing varargs init or cleanup". > > Fixes: d6e290837e50 ("tee: add Qualcomm TEE driver") > Signed-off-by: Robertus Diawan Chris <[email protected]> > Reviewed-by: Amirreza Zarrabi <[email protected]> > --- > v1 -> v2: > - Use "break" statement instead of "goto" statement. There's va_end > outside of switch-case, so we only need to go out from switch-case > instead of using a label (suggested by Amirreza Zarrabi). > - Add "Reviewed-by" tag from Amirreza Zarrabi. > > v1: > https://lore.kernel.org/all/[email protected]/ > > I don't have the device, so I am not sure how to test this change. > Thank you. > > drivers/tee/qcomtee/core.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) Looks good. I'm picking up this. Cheers, Jens > > diff --git a/drivers/tee/qcomtee/core.c b/drivers/tee/qcomtee/core.c > index b1cb50e434f0..60fe3b5776e3 100644 > --- a/drivers/tee/qcomtee/core.c > +++ b/drivers/tee/qcomtee/core.c > @@ -306,8 +306,10 @@ int qcomtee_object_user_init(struct qcomtee_object *object, > break; > case QCOMTEE_OBJECT_TYPE_CB: > object->ops = ops; > - if (!object->ops->dispatch) > - return -EINVAL; > + if (!object->ops->dispatch) { > + ret = -EINVAL; > + break; > + } > > /* If failed, "no-name". */ > object->name = kvasprintf_const(GFP_KERNEL, fmt, ap); > > base-commit: 5200f5f493f79f14bbdc349e402a40dfb32f23c8 > -- > 2.54.0 >