{
        struct drm_dp_sideband_msg_req_body *out;
        struct drm_printer p = drm_err_printer(PREFIX_STR);
-       struct drm_dp_sideband_msg_tx txmsg;
+       struct drm_dp_sideband_msg_tx *txmsg;
        int i, ret;
        bool result = true;
 
        if (!out)
                return false;
 
-       drm_dp_encode_sideband_req(in, &txmsg);
-       ret = drm_dp_decode_sideband_req(&txmsg, out);
+       txmsg = kzalloc(sizeof(*txmsg), GFP_KERNEL);
+       if (!txmsg)
+               return false;
+
+       drm_dp_encode_sideband_req(in, txmsg);
+       ret = drm_dp_decode_sideband_req(txmsg, out);
        if (ret < 0) {
                drm_printf(&p, "Failed to decode sideband request: %d\n",
                           ret);
 
 out:
        kfree(out);
+       kfree(txmsg);
        return result;
 }