union acpi_object argv4 = {
                .buffer.type    = ACPI_TYPE_BUFFER,
                .buffer.length  = 4,
-               .buffer.pointer = kmalloc(argv4.buffer.length, GFP_KERNEL),
        }, *obj;
 
        caps->status = 0xffff;
        if (!acpi_check_dsm(handle, &NVOP_DSM_GUID, NVOP_DSM_REV, BIT_ULL(0x1a)))
                return;
 
+       argv4.buffer.pointer = kmalloc(argv4.buffer.length, GFP_KERNEL);
+       if (!argv4.buffer.pointer)
+               return;
+
        obj = acpi_evaluate_dsm(handle, &NVOP_DSM_GUID, NVOP_DSM_REV, 0x1a, &argv4);
        if (!obj)
-               return;
+               goto done;
 
        if (WARN_ON(obj->type != ACPI_TYPE_BUFFER) ||
            WARN_ON(obj->buffer.length != 4))
-               return;
+               goto done;
 
        caps->status = 0;
        caps->optimusCaps = *(u32 *)obj->buffer.pointer;
 
+done:
        ACPI_FREE(obj);
 
        kfree(argv4.buffer.pointer);
        union acpi_object argv4 = {
                .buffer.type    = ACPI_TYPE_BUFFER,
                .buffer.length  = sizeof(caps),
-               .buffer.pointer = kmalloc(argv4.buffer.length, GFP_KERNEL),
        }, *obj;
 
        jt->status = 0xffff;
 
+       argv4.buffer.pointer = kmalloc(argv4.buffer.length, GFP_KERNEL);
+       if (!argv4.buffer.pointer)
+               return;
+
        obj = acpi_evaluate_dsm(handle, &JT_DSM_GUID, JT_DSM_REV, 0x1, &argv4);
        if (!obj)
-               return;
+               goto done;
 
        if (WARN_ON(obj->type != ACPI_TYPE_BUFFER) ||
            WARN_ON(obj->buffer.length != 4))
-               return;
+               goto done;
 
        jt->status = 0;
        jt->jtCaps = *(u32 *)obj->buffer.pointer;
        jt->jtRevId = (jt->jtCaps & 0xfff00000) >> 20;
        jt->bSBIOSCaps = 0;
 
+done:
        ACPI_FREE(obj);
 
        kfree(argv4.buffer.pointer);