From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4F20AC001E0 for ; Fri, 21 Jul 2023 16:04:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232419AbjGUQE0 (ORCPT ); Fri, 21 Jul 2023 12:04:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35308 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232377AbjGUQEX (ORCPT ); Fri, 21 Jul 2023 12:04:23 -0400 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 65138E42; Fri, 21 Jul 2023 09:04:21 -0700 (PDT) Received: from nicolas-tpx395.localdomain (unknown [IPv6:2606:6d00:10:580::7a9]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: nicolas) by madras.collabora.co.uk (Postfix) with ESMTPSA id ABA7966070EA; Fri, 21 Jul 2023 17:04:18 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1689955460; bh=c01vZiD+s3W+nqFmbR8PlsxyEjz1vFOD3CqBg2e3KSM=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=Iu/5pyHDzFypwkiyfcAffp/kCp5yJhIRvWQ2bwCVSJ3ZLwyzQCmCEPfOFJN2H3mX8 4PU/ia8jaiAOmZ32Jb9coQHBS817e0Xswn8k5wDvd5gbON2ezUReW2kKkEkRYD8Zu9 u6XTEd+suZC5wYmCe9Ko6Use3ZvKTJTRfRxFv5uodw8qAYKSLzlrCIt0p9LYHMSt1V H9smoeI9/92evwx5A7Df0u+40kFs92eVJVwh9imRDsJlloVfUxbiOTrAi32sNu/xXL 0iLV9Uy9EV+qKO8UOUh2sOGgbiB9/RtqEYW5366v3SI3Yp1LkWiZf0xVjL781usJ7R UKtIBdvxp1pOw== Message-ID: <2dfb9b711c5840a4da24b06973c03d6e2b60cb9c.camel@collabora.com> Subject: Re: [PATCH 1/2] media: mediatek: vcodec: checking decoder ack message parameter From: Nicolas Dufresne To: Yunfei Dong =?UTF-8?Q?=28=E8=91=A3=E4=BA=91=E9=A3=9E=29?= , "nhebert@chromium.org" , "benjamin.gaignard@collabora.com" , "nfraprado@collabora.com" , "angelogioacchino.delregno@collabora.com" , "hverkuil-cisco@xs4all.nl" Cc: "linux-kernel@vger.kernel.org" , "linux-mediatek@lists.infradead.org" , "frkoenig@chromium.org" , "stevecho@chromium.org" , "wenst@chromium.org" , "linux-media@vger.kernel.org" , "devicetree@vger.kernel.org" , "daniel@ffwll.ch" , Project_Global_Chrome_Upstream_Group , "hsinyi@chromium.org" , "linux-arm-kernel@lists.infradead.org" Date: Fri, 21 Jul 2023 12:04:10 -0400 In-Reply-To: <9c4fc4ec11988b7068ed0f8ae4bf5e969383979d.camel@mediatek.com> References: <20230717081319.12542-1-yunfei.dong@mediatek.com> <02e3f58e3dc009eadd1f37ac3d7d65a95706c9a6.camel@collabora.com> <9c4fc4ec11988b7068ed0f8ae4bf5e969383979d.camel@mediatek.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.48.4 (3.48.4-1.fc38) MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Le vendredi 21 juillet 2023 =C3=A0 01:58 +0000, Yunfei Dong (=E8=91=A3=E4= =BA=91=E9=A3=9E) a =C3=A9crit=C2=A0: > Hi Nicolas, >=20 > Thanks for your review. >=20 > On Thu, 2023-07-20 at 16:22 -0400, Nicolas Dufresne wrote: > > Hi, > >=20 > > Le lundi 17 juillet 2023 =C3=A0 16:13 +0800, Yunfei Dong a =C3=A9crit : > > > Need to checking all parameters of msg data are valid or not, > > > in case of access null pointer or unreasonable value leading > > > to kernel reboot. > > >=20 > > > Signed-off-by: Yunfei Dong > > > --- > > > .../vcodec/decoder/mtk_vcodec_dec_drv.h | 2 + > > > .../mediatek/vcodec/decoder/vdec_vpu_if.c | 77 ++++++++++++--- > > > ---- > > > 2 files changed, 52 insertions(+), 27 deletions(-) > > >=20 > > > diff --git > > > a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv > > > .h > > > b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv > > > .h > > > index c8b4374c5e6c..1ea5dbb475dd 100644 > > > --- > > > a/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv > > > .h > > > +++ > > > b/drivers/media/platform/mediatek/vcodec/decoder/mtk_vcodec_dec_drv > > > .h > > > @@ -160,6 +160,7 @@ struct mtk_vcodec_dec_pdata { > > > * @hw_id: hardware index used to identify different hardware. > > > * > > > * @msg_queue: msg queue used to store lat buffer information. > > > + * @vpu_inst: vpu instance pointer. > > > */ > > > struct mtk_vcodec_dec_ctx { > > > enum mtk_instance_type type; > > > @@ -202,6 +203,7 @@ struct mtk_vcodec_dec_ctx { > > > int hw_id; > > > =20 > > > struct vdec_msg_queue msg_queue; > > > + void *vpu_inst; > > > }; > > > =20 > > > /** > > > diff --git > > > a/drivers/media/platform/mediatek/vcodec/decoder/vdec_vpu_if.c > > > b/drivers/media/platform/mediatek/vcodec/decoder/vdec_vpu_if.c > > > index 82c3dc8c4127..23cfe5c6c90b 100644 > > > --- a/drivers/media/platform/mediatek/vcodec/decoder/vdec_vpu_if.c > > > +++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec_vpu_if.c > > > @@ -72,6 +72,21 @@ static void handle_get_param_msg_ack(const > > > struct vdec_vpu_ipi_get_param_ack *ms > > > } > > > } > > > =20 > > > +static bool vpu_dec_check_ap_inst(struct mtk_vcodec_dec_dev > > > *dec_dev, struct vdec_vpu_inst *vpu) > > > +{ > > > + struct mtk_vcodec_dec_ctx *ctx; > > > + int ret =3D false; > > > + > > > + list_for_each_entry(ctx, &dec_dev->ctx_list, list) { > >=20 > > I'm not quite fully aware of the threading model in place, but this > > ctx_list is > > normally protected by dev->dev_mutex, and is not being protected > > here. I also > > don't know which type of interrupt handler we are in here. > >=20 > If the device is opened, one ctx will be inserted to ctx_list, then the > handler interface will be called.=20 >=20 > 1: This function just used to check whether the context is reasonable, > no need to add mutex to protect because the context already in ctx_list > in oped period. This function won't be called after deinit ctx from > ctx_list. >=20 > 2: This handler will be called when ap send message to scp. Ack. Reviewed-by: Nicolas Dufresne >=20 > Best Regards, > Yunfei Dong > > > + if (!IS_ERR_OR_NULL(ctx) && ctx->vpu_inst =3D=3D vpu) { > > > + ret =3D true; > > > + break; > > > + } > > > + } > > > + > > > + return ret; > > > +} > > > + > > > /* > > > * vpu_dec_ipi_handler - Handler for VPU ipi message. > > > * > > > @@ -84,44 +99,51 @@ static void handle_get_param_msg_ack(const > > > struct vdec_vpu_ipi_get_param_ack *ms > > > */ > > > static void vpu_dec_ipi_handler(void *data, unsigned int len, void > > > *priv) > > > { > > > + struct mtk_vcodec_dec_dev *dec_dev; > > > const struct vdec_vpu_ipi_ack *msg =3D data; > > > - struct vdec_vpu_inst *vpu =3D (struct vdec_vpu_inst *) > > > - (unsigned long)msg- > > > > ap_inst_addr; > > > + struct vdec_vpu_inst *vpu; > > > =20 > > > - if (!vpu) { > > > + dec_dev =3D (struct mtk_vcodec_dec_dev *)priv; > > > + vpu =3D (struct vdec_vpu_inst *)(unsigned long)msg->ap_inst_addr; > > > + if (!priv || !vpu) { > > > mtk_v4l2_vdec_err(vpu->ctx, "ap_inst_addr is NULL, did > > > the SCP hang or crash?"); > > > return; > > > } > > > =20 > > > - mtk_vdec_debug(vpu->ctx, "+ id=3D%X", msg->msg_id); > > > + if (!vpu_dec_check_ap_inst(dec_dev, vpu) || msg->msg_id < > > > VPU_IPIMSG_DEC_INIT_ACK || > > > + msg->msg_id > VPU_IPIMSG_DEC_GET_PARAM_ACK) { > > > + mtk_v4l2_vdec_err(vpu->ctx, "vdec msg id not correctly > > > =3D> 0x%x", msg->msg_id); > > > + vpu->failure =3D -EINVAL; > > > + goto error; > > > + } > > > =20 > > > vpu->failure =3D msg->status; > > > - vpu->signaled =3D 1; > > > + if (msg->status !=3D 0) > > > + goto error; > > > =20 > > > - if (msg->status =3D=3D 0) { > > > - switch (msg->msg_id) { > > > - case VPU_IPIMSG_DEC_INIT_ACK: > > > - handle_init_ack_msg(data); > > > - break; > > > + switch (msg->msg_id) { > > > + case VPU_IPIMSG_DEC_INIT_ACK: > > > + handle_init_ack_msg(data); > > > + break; > > > =20 > > > - case VPU_IPIMSG_DEC_START_ACK: > > > - case VPU_IPIMSG_DEC_END_ACK: > > > - case VPU_IPIMSG_DEC_DEINIT_ACK: > > > - case VPU_IPIMSG_DEC_RESET_ACK: > > > - case VPU_IPIMSG_DEC_CORE_ACK: > > > - case VPU_IPIMSG_DEC_CORE_END_ACK: > > > - break; > > > + case VPU_IPIMSG_DEC_START_ACK: > > > + case VPU_IPIMSG_DEC_END_ACK: > > > + case VPU_IPIMSG_DEC_DEINIT_ACK: > > > + case VPU_IPIMSG_DEC_RESET_ACK: > > > + case VPU_IPIMSG_DEC_CORE_ACK: > > > + case VPU_IPIMSG_DEC_CORE_END_ACK: > > > + break; > > > =20 > > > - case VPU_IPIMSG_DEC_GET_PARAM_ACK: > > > - handle_get_param_msg_ack(data); > > > - break; > > > - default: > > > - mtk_vdec_err(vpu->ctx, "invalid msg=3D%X", msg- > > > > msg_id); > > > - break; > > > - } > > > + case VPU_IPIMSG_DEC_GET_PARAM_ACK: > > > + handle_get_param_msg_ack(data); > > > + break; > > > + default: > > > + mtk_vdec_err(vpu->ctx, "invalid msg=3D%X", msg->msg_id); > > > + break; > > > } > > > =20 > > > - mtk_vdec_debug(vpu->ctx, "- id=3D%X", msg->msg_id); > > > +error: > > > + vpu->signaled =3D 1; > > > } > > > =20 > > > static int vcodec_vpu_send_msg(struct vdec_vpu_inst *vpu, void > > > *msg, int len) > > > @@ -182,9 +204,10 @@ int vpu_dec_init(struct vdec_vpu_inst *vpu) > > > =20 > > > init_waitqueue_head(&vpu->wq); > > > vpu->handler =3D vpu_dec_ipi_handler; > > > + vpu->ctx->vpu_inst =3D vpu; > > > =20 > > > err =3D mtk_vcodec_fw_ipi_register(vpu->ctx->dev->fw_handler, > > > vpu->id, > > > - vpu->handler, "vdec", NULL); > > > + vpu->handler, "vdec", vpu- > > > > ctx->dev); > > > if (err) { > > > mtk_vdec_err(vpu->ctx, "vpu_ipi_register fail > > > status=3D%d", err); > > > return err; > > > @@ -193,7 +216,7 @@ int vpu_dec_init(struct vdec_vpu_inst *vpu) > > > if (vpu->ctx->dev->vdec_pdata->hw_arch =3D=3D > > > MTK_VDEC_LAT_SINGLE_CORE) { > > > err =3D mtk_vcodec_fw_ipi_register(vpu->ctx->dev- > > > > fw_handler, > > > vpu->core_id, vpu- > > > > handler, > > > - "vdec", NULL); > > > + "vdec", vpu->ctx- > > > > dev); > > > if (err) { > > > mtk_vdec_err(vpu->ctx, "vpu_ipi_register core > > > fail status=3D%d", err); > > > return err; > >=20 > >=20 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6D536EB64DC for ; Fri, 21 Jul 2023 16:04:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:Cc:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=JwTuRsAgSX8FfhMv2EMRmhTjoEQ0Cv8RivhsbRC1Sck=; b=zxk0M0zKj5Ujdk RMsMuLRMFF9qG3igM6tvtDKfU2075/GUCGM9auJtfNIDP+9XD0uvZzvrLxgqk4vOyXHZdvP7JRQei AJqCKCZE5agdTBKiCdxT+3CLZie+vBKg4uDVIgfa5vRUnl7V6tm8vkxutmDWccTT85KLDSyzWfzSG X5e0AYfTH4dbYfccBiV+FaUbt5eL/wMHnkEnQ1ni1/dC/RQAP4KTOdVp+M5VGA9x75V06JrzaZMGW 6nlp8QEFue/44wYZAxPWek6hbBUMqsCqXhElwwf88Iy+sqznqO+pXT7rSxIMzC2+edqMCiJbziPs1 lCnWYtWWOkTeMv9vHiUg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qMscD-00EWWj-0c; Fri, 21 Jul 2023 16:04:25 +0000 Received: from madras.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e5ab]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qMsc9-00EWW0-22; Fri, 21 Jul 2023 16:04:23 +0000 Received: from nicolas-tpx395.localdomain (unknown [IPv6:2606:6d00:10:580::7a9]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: nicolas) by madras.collabora.co.uk (Postfix) with ESMTPSA id ABA7966070EA; Fri, 21 Jul 2023 17:04:18 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1689955460; bh=c01vZiD+s3W+nqFmbR8PlsxyEjz1vFOD3CqBg2e3KSM=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=Iu/5pyHDzFypwkiyfcAffp/kCp5yJhIRvWQ2bwCVSJ3ZLwyzQCmCEPfOFJN2H3mX8 4PU/ia8jaiAOmZ32Jb9coQHBS817e0Xswn8k5wDvd5gbON2ezUReW2kKkEkRYD8Zu9 u6XTEd+suZC5wYmCe9Ko6Use3ZvKTJTRfRxFv5uodw8qAYKSLzlrCIt0p9LYHMSt1V H9smoeI9/92evwx5A7Df0u+40kFs92eVJVwh9imRDsJlloVfUxbiOTrAi32sNu/xXL 0iLV9Uy9EV+qKO8UOUh2sOGgbiB9/RtqEYW5366v3SI3Yp1LkWiZf0xVjL781usJ7R UKtIBdvxp1pOw== Message-ID: <2dfb9b711c5840a4da24b06973c03d6e2b60cb9c.camel@collabora.com> Subject: Re: [PATCH 1/2] media: mediatek: vcodec: checking decoder ack message parameter From: Nicolas Dufresne To: Yunfei Dong =?UTF-8?Q?=28=E8=91=A3=E4=BA=91=E9=A3=9E=29?= , "nhebert@chromium.org" , "benjamin.gaignard@collabora.com" , "nfraprado@collabora.com" , "angelogioacchino.delregno@collabora.com" , "hverkuil-cisco@xs4all.nl" Cc: "linux-kernel@vger.kernel.org" , "linux-mediatek@lists.infradead.org" , "frkoenig@chromium.org" , "stevecho@chromium.org" , "wenst@chromium.org" , "linux-media@vger.kernel.org" , "devicetree@vger.kernel.org" , "daniel@ffwll.ch" , Project_Global_Chrome_Upstream_Group , "hsinyi@chromium.org" , "linux-arm-kernel@lists.infradead.org" Date: Fri, 21 Jul 2023 12:04:10 -0400 In-Reply-To: <9c4fc4ec11988b7068ed0f8ae4bf5e969383979d.camel@mediatek.com> References: <20230717081319.12542-1-yunfei.dong@mediatek.com> <02e3f58e3dc009eadd1f37ac3d7d65a95706c9a6.camel@collabora.com> <9c4fc4ec11988b7068ed0f8ae4bf5e969383979d.camel@mediatek.com> User-Agent: Evolution 3.48.4 (3.48.4-1.fc38) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230721_090421_946451_DDFF1C94 X-CRM114-Status: GOOD ( 32.79 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org TGUgdmVuZHJlZGkgMjEganVpbGxldCAyMDIzIMOgIDAxOjU4ICswMDAwLCBZdW5mZWkgRG9uZyAo 6JGj5LqR6aOeKSBhIMOpY3JpdMKgOgo+IEhpIE5pY29sYXMsCj4gCj4gVGhhbmtzIGZvciB5b3Vy IHJldmlldy4KPiAKPiBPbiBUaHUsIDIwMjMtMDctMjAgYXQgMTY6MjIgLTA0MDAsIE5pY29sYXMg RHVmcmVzbmUgd3JvdGU6Cj4gPiBIaSwKPiA+IAo+ID4gTGUgbHVuZGkgMTcganVpbGxldCAyMDIz IMOgIDE2OjEzICswODAwLCBZdW5mZWkgRG9uZyBhIMOpY3JpdCA6Cj4gPiA+IE5lZWQgdG8gY2hl Y2tpbmcgYWxsIHBhcmFtZXRlcnMgb2YgbXNnIGRhdGEgYXJlIHZhbGlkIG9yIG5vdCwKPiA+ID4g aW4gY2FzZSBvZiBhY2Nlc3MgbnVsbCBwb2ludGVyIG9yIHVucmVhc29uYWJsZSB2YWx1ZSBsZWFk aW5nCj4gPiA+IHRvIGtlcm5lbCByZWJvb3QuCj4gPiA+IAo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBZ dW5mZWkgRG9uZyA8eXVuZmVpLmRvbmdAbWVkaWF0ZWsuY29tPgo+ID4gPiAtLS0KPiA+ID4gIC4u Li92Y29kZWMvZGVjb2Rlci9tdGtfdmNvZGVjX2RlY19kcnYuaCAgICAgICB8ICAyICsKPiA+ID4g IC4uLi9tZWRpYXRlay92Y29kZWMvZGVjb2Rlci92ZGVjX3ZwdV9pZi5jICAgICB8IDc3ICsrKysr KysrKysrKy0tLQo+ID4gPiAtLS0tCj4gPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDUyIGluc2VydGlv bnMoKyksIDI3IGRlbGV0aW9ucygtKQo+ID4gPiAKPiA+ID4gZGlmZiAtLWdpdAo+ID4gPiBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vbWVkaWF0ZWsvdmNvZGVjL2RlY29kZXIvbXRrX3Zjb2RlY19k ZWNfZHJ2Cj4gPiA+IC5oCj4gPiA+IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tZWRpYXRlay92 Y29kZWMvZGVjb2Rlci9tdGtfdmNvZGVjX2RlY19kcnYKPiA+ID4gLmgKPiA+ID4gaW5kZXggYzhi NDM3NGM1ZTZjLi4xZWE1ZGJiNDc1ZGQgMTAwNjQ0Cj4gPiA+IC0tLQo+ID4gPiBhL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vbWVkaWF0ZWsvdmNvZGVjL2RlY29kZXIvbXRrX3Zjb2RlY19kZWNfZHJ2 Cj4gPiA+IC5oCj4gPiA+ICsrKwo+ID4gPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbWVkaWF0 ZWsvdmNvZGVjL2RlY29kZXIvbXRrX3Zjb2RlY19kZWNfZHJ2Cj4gPiA+IC5oCj4gPiA+IEBAIC0x NjAsNiArMTYwLDcgQEAgc3RydWN0IG10a192Y29kZWNfZGVjX3BkYXRhIHsKPiA+ID4gICAqIEBo d19pZDogaGFyZHdhcmUgaW5kZXggdXNlZCB0byBpZGVudGlmeSBkaWZmZXJlbnQgaGFyZHdhcmUu Cj4gPiA+ICAgKgo+ID4gPiAgICogQG1zZ19xdWV1ZTogbXNnIHF1ZXVlIHVzZWQgdG8gc3RvcmUg bGF0IGJ1ZmZlciBpbmZvcm1hdGlvbi4KPiA+ID4gKyAqIEB2cHVfaW5zdDogdnB1IGluc3RhbmNl IHBvaW50ZXIuCj4gPiA+ICAgKi8KPiA+ID4gIHN0cnVjdCBtdGtfdmNvZGVjX2RlY19jdHggewo+ ID4gPiAgCWVudW0gbXRrX2luc3RhbmNlX3R5cGUgdHlwZTsKPiA+ID4gQEAgLTIwMiw2ICsyMDMs NyBAQCBzdHJ1Y3QgbXRrX3Zjb2RlY19kZWNfY3R4IHsKPiA+ID4gIAlpbnQgaHdfaWQ7Cj4gPiA+ ICAKPiA+ID4gIAlzdHJ1Y3QgdmRlY19tc2dfcXVldWUgbXNnX3F1ZXVlOwo+ID4gPiArCXZvaWQg KnZwdV9pbnN0Owo+ID4gPiAgfTsKPiA+ID4gIAo+ID4gPiAgLyoqCj4gPiA+IGRpZmYgLS1naXQK PiA+ID4gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL21lZGlhdGVrL3Zjb2RlYy9kZWNvZGVyL3Zk ZWNfdnB1X2lmLmMKPiA+ID4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL21lZGlhdGVrL3Zjb2Rl Yy9kZWNvZGVyL3ZkZWNfdnB1X2lmLmMKPiA+ID4gaW5kZXggODJjM2RjOGM0MTI3Li4yM2NmZTVj NmM5MGIgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbWVkaWF0ZWsv dmNvZGVjL2RlY29kZXIvdmRlY192cHVfaWYuYwo+ID4gPiArKysgYi9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL21lZGlhdGVrL3Zjb2RlYy9kZWNvZGVyL3ZkZWNfdnB1X2lmLmMKPiA+ID4gQEAgLTcy LDYgKzcyLDIxIEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9nZXRfcGFyYW1fbXNnX2Fjayhjb25zdAo+ ID4gPiBzdHJ1Y3QgdmRlY192cHVfaXBpX2dldF9wYXJhbV9hY2sgKm1zCj4gPiA+ICAJfQo+ID4g PiAgfQo+ID4gPiAgCj4gPiA+ICtzdGF0aWMgYm9vbCB2cHVfZGVjX2NoZWNrX2FwX2luc3Qoc3Ry dWN0IG10a192Y29kZWNfZGVjX2Rldgo+ID4gPiAqZGVjX2Rldiwgc3RydWN0IHZkZWNfdnB1X2lu c3QgKnZwdSkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgbXRrX3Zjb2RlY19kZWNfY3R4ICpjdHg7 Cj4gPiA+ICsJaW50IHJldCA9IGZhbHNlOwo+ID4gPiArCj4gPiA+ICsJbGlzdF9mb3JfZWFjaF9l bnRyeShjdHgsICZkZWNfZGV2LT5jdHhfbGlzdCwgbGlzdCkgewo+ID4gCj4gPiBJJ20gbm90IHF1 aXRlIGZ1bGx5IGF3YXJlIG9mIHRoZSB0aHJlYWRpbmcgbW9kZWwgaW4gcGxhY2UsIGJ1dCB0aGlz Cj4gPiBjdHhfbGlzdCBpcwo+ID4gbm9ybWFsbHkgcHJvdGVjdGVkIGJ5IGRldi0+ZGV2X211dGV4 LCBhbmQgaXMgbm90IGJlaW5nIHByb3RlY3RlZAo+ID4gaGVyZS4gSSBhbHNvCj4gPiBkb24ndCBr bm93IHdoaWNoIHR5cGUgb2YgaW50ZXJydXB0IGhhbmRsZXIgd2UgYXJlIGluIGhlcmUuCj4gPiAK PiBJZiB0aGUgZGV2aWNlIGlzIG9wZW5lZCwgb25lIGN0eCB3aWxsIGJlIGluc2VydGVkIHRvIGN0 eF9saXN0LCB0aGVuIHRoZQo+IGhhbmRsZXIgaW50ZXJmYWNlIHdpbGwgYmUgY2FsbGVkLiAKPiAK PiAxOiBUaGlzIGZ1bmN0aW9uIGp1c3QgdXNlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBjb250ZXh0 IGlzIHJlYXNvbmFibGUsCj4gbm8gbmVlZCB0byBhZGQgbXV0ZXggdG8gcHJvdGVjdCBiZWNhdXNl IHRoZSBjb250ZXh0IGFscmVhZHkgaW4gY3R4X2xpc3QKPiBpbiBvcGVkIHBlcmlvZC4gVGhpcyBm dW5jdGlvbiB3b24ndCBiZSBjYWxsZWQgYWZ0ZXIgZGVpbml0IGN0eCBmcm9tCj4gY3R4X2xpc3Qu Cj4gCj4gMjogVGhpcyBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIHdoZW4gYXAgc2VuZCBtZXNzYWdl IHRvIHNjcC4KCkFjay4KClJldmlld2VkLWJ5OiBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1 ZnJlc25lQGNvbGxhYm9yYS5jb20+Cgo+IAo+IEJlc3QgUmVnYXJkcywKPiBZdW5mZWkgRG9uZwo+ ID4gPiArCQlpZiAoIUlTX0VSUl9PUl9OVUxMKGN0eCkgJiYgY3R4LT52cHVfaW5zdCA9PSB2cHUp IHsKPiA+ID4gKwkJCXJldCA9IHRydWU7Cj4gPiA+ICsJCQlicmVhazsKPiA+ID4gKwkJfQo+ID4g PiArCX0KPiA+ID4gKwo+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4g IC8qCj4gPiA+ICAgKiB2cHVfZGVjX2lwaV9oYW5kbGVyIC0gSGFuZGxlciBmb3IgVlBVIGlwaSBt ZXNzYWdlLgo+ID4gPiAgICoKPiA+ID4gQEAgLTg0LDQ0ICs5OSw1MSBAQCBzdGF0aWMgdm9pZCBo YW5kbGVfZ2V0X3BhcmFtX21zZ19hY2soY29uc3QKPiA+ID4gc3RydWN0IHZkZWNfdnB1X2lwaV9n ZXRfcGFyYW1fYWNrICptcwo+ID4gPiAgICovCj4gPiA+ICBzdGF0aWMgdm9pZCB2cHVfZGVjX2lw aV9oYW5kbGVyKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4sIHZvaWQKPiA+ID4gKnByaXYp Cj4gPiA+ICB7Cj4gPiA+ICsJc3RydWN0IG10a192Y29kZWNfZGVjX2RldiAqZGVjX2RldjsKPiA+ ID4gIAljb25zdCBzdHJ1Y3QgdmRlY192cHVfaXBpX2FjayAqbXNnID0gZGF0YTsKPiA+ID4gLQlz dHJ1Y3QgdmRlY192cHVfaW5zdCAqdnB1ID0gKHN0cnVjdCB2ZGVjX3ZwdV9pbnN0ICopCj4gPiA+ IC0JCQkJCSh1bnNpZ25lZCBsb25nKW1zZy0KPiA+ID4gPiBhcF9pbnN0X2FkZHI7Cj4gPiA+ICsJ c3RydWN0IHZkZWNfdnB1X2luc3QgKnZwdTsKPiA+ID4gIAo+ID4gPiAtCWlmICghdnB1KSB7Cj4g PiA+ICsJZGVjX2RldiA9IChzdHJ1Y3QgbXRrX3Zjb2RlY19kZWNfZGV2ICopcHJpdjsKPiA+ID4g Kwl2cHUgPSAoc3RydWN0IHZkZWNfdnB1X2luc3QgKikodW5zaWduZWQgbG9uZyltc2ctPmFwX2lu c3RfYWRkcjsKPiA+ID4gKwlpZiAoIXByaXYgfHwgIXZwdSkgewo+ID4gPiAgCQltdGtfdjRsMl92 ZGVjX2Vycih2cHUtPmN0eCwgImFwX2luc3RfYWRkciBpcyBOVUxMLCBkaWQKPiA+ID4gdGhlIFND UCBoYW5nIG9yIGNyYXNoPyIpOwo+ID4gPiAgCQlyZXR1cm47Cj4gPiA+ICAJfQo+ID4gPiAgCj4g PiA+IC0JbXRrX3ZkZWNfZGVidWcodnB1LT5jdHgsICIrIGlkPSVYIiwgbXNnLT5tc2dfaWQpOwo+ ID4gPiArCWlmICghdnB1X2RlY19jaGVja19hcF9pbnN0KGRlY19kZXYsIHZwdSkgfHwgbXNnLT5t c2dfaWQgPAo+ID4gPiBWUFVfSVBJTVNHX0RFQ19JTklUX0FDSyB8fAo+ID4gPiArCSAgICBtc2ct Pm1zZ19pZCA+IFZQVV9JUElNU0dfREVDX0dFVF9QQVJBTV9BQ0spIHsKPiA+ID4gKwkJbXRrX3Y0 bDJfdmRlY19lcnIodnB1LT5jdHgsICJ2ZGVjIG1zZyBpZCBub3QgY29ycmVjdGx5Cj4gPiA+ID0+ IDB4JXgiLCBtc2ctPm1zZ19pZCk7Cj4gPiA+ICsJCXZwdS0+ZmFpbHVyZSA9IC1FSU5WQUw7Cj4g PiA+ICsJCWdvdG8gZXJyb3I7Cj4gPiA+ICsJfQo+ID4gPiAgCj4gPiA+ICAJdnB1LT5mYWlsdXJl ID0gbXNnLT5zdGF0dXM7Cj4gPiA+IC0JdnB1LT5zaWduYWxlZCA9IDE7Cj4gPiA+ICsJaWYgKG1z Zy0+c3RhdHVzICE9IDApCj4gPiA+ICsJCWdvdG8gZXJyb3I7Cj4gPiA+ICAKPiA+ID4gLQlpZiAo bXNnLT5zdGF0dXMgPT0gMCkgewo+ID4gPiAtCQlzd2l0Y2ggKG1zZy0+bXNnX2lkKSB7Cj4gPiA+ IC0JCWNhc2UgVlBVX0lQSU1TR19ERUNfSU5JVF9BQ0s6Cj4gPiA+IC0JCQloYW5kbGVfaW5pdF9h Y2tfbXNnKGRhdGEpOwo+ID4gPiAtCQkJYnJlYWs7Cj4gPiA+ICsJc3dpdGNoIChtc2ctPm1zZ19p ZCkgewo+ID4gPiArCWNhc2UgVlBVX0lQSU1TR19ERUNfSU5JVF9BQ0s6Cj4gPiA+ICsJCWhhbmRs ZV9pbml0X2Fja19tc2coZGF0YSk7Cj4gPiA+ICsJCWJyZWFrOwo+ID4gPiAgCj4gPiA+IC0JCWNh c2UgVlBVX0lQSU1TR19ERUNfU1RBUlRfQUNLOgo+ID4gPiAtCQljYXNlIFZQVV9JUElNU0dfREVD X0VORF9BQ0s6Cj4gPiA+IC0JCWNhc2UgVlBVX0lQSU1TR19ERUNfREVJTklUX0FDSzoKPiA+ID4g LQkJY2FzZSBWUFVfSVBJTVNHX0RFQ19SRVNFVF9BQ0s6Cj4gPiA+IC0JCWNhc2UgVlBVX0lQSU1T R19ERUNfQ09SRV9BQ0s6Cj4gPiA+IC0JCWNhc2UgVlBVX0lQSU1TR19ERUNfQ09SRV9FTkRfQUNL Ogo+ID4gPiAtCQkJYnJlYWs7Cj4gPiA+ICsJY2FzZSBWUFVfSVBJTVNHX0RFQ19TVEFSVF9BQ0s6 Cj4gPiA+ICsJY2FzZSBWUFVfSVBJTVNHX0RFQ19FTkRfQUNLOgo+ID4gPiArCWNhc2UgVlBVX0lQ SU1TR19ERUNfREVJTklUX0FDSzoKPiA+ID4gKwljYXNlIFZQVV9JUElNU0dfREVDX1JFU0VUX0FD SzoKPiA+ID4gKwljYXNlIFZQVV9JUElNU0dfREVDX0NPUkVfQUNLOgo+ID4gPiArCWNhc2UgVlBV X0lQSU1TR19ERUNfQ09SRV9FTkRfQUNLOgo+ID4gPiArCQlicmVhazsKPiA+ID4gIAo+ID4gPiAt CQljYXNlIFZQVV9JUElNU0dfREVDX0dFVF9QQVJBTV9BQ0s6Cj4gPiA+IC0JCQloYW5kbGVfZ2V0 X3BhcmFtX21zZ19hY2soZGF0YSk7Cj4gPiA+IC0JCQlicmVhazsKPiA+ID4gLQkJZGVmYXVsdDoK PiA+ID4gLQkJCW10a192ZGVjX2Vycih2cHUtPmN0eCwgImludmFsaWQgbXNnPSVYIiwgbXNnLQo+ ID4gPiA+IG1zZ19pZCk7Cj4gPiA+IC0JCQlicmVhazsKPiA+ID4gLQkJfQo+ID4gPiArCWNhc2Ug VlBVX0lQSU1TR19ERUNfR0VUX1BBUkFNX0FDSzoKPiA+ID4gKwkJaGFuZGxlX2dldF9wYXJhbV9t c2dfYWNrKGRhdGEpOwo+ID4gPiArCQlicmVhazsKPiA+ID4gKwlkZWZhdWx0Ogo+ID4gPiArCQlt dGtfdmRlY19lcnIodnB1LT5jdHgsICJpbnZhbGlkIG1zZz0lWCIsIG1zZy0+bXNnX2lkKTsKPiA+ ID4gKwkJYnJlYWs7Cj4gPiA+ICAJfQo+ID4gPiAgCj4gPiA+IC0JbXRrX3ZkZWNfZGVidWcodnB1 LT5jdHgsICItIGlkPSVYIiwgbXNnLT5tc2dfaWQpOwo+ID4gPiArZXJyb3I6Cj4gPiA+ICsJdnB1 LT5zaWduYWxlZCA9IDE7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gIHN0YXRpYyBpbnQgdmNvZGVj X3ZwdV9zZW5kX21zZyhzdHJ1Y3QgdmRlY192cHVfaW5zdCAqdnB1LCB2b2lkCj4gPiA+ICptc2cs IGludCBsZW4pCj4gPiA+IEBAIC0xODIsOSArMjA0LDEwIEBAIGludCB2cHVfZGVjX2luaXQoc3Ry dWN0IHZkZWNfdnB1X2luc3QgKnZwdSkKPiA+ID4gIAo+ID4gPiAgCWluaXRfd2FpdHF1ZXVlX2hl YWQoJnZwdS0+d3EpOwo+ID4gPiAgCXZwdS0+aGFuZGxlciA9IHZwdV9kZWNfaXBpX2hhbmRsZXI7 Cj4gPiA+ICsJdnB1LT5jdHgtPnZwdV9pbnN0ID0gdnB1Owo+ID4gPiAgCj4gPiA+ICAJZXJyID0g bXRrX3Zjb2RlY19md19pcGlfcmVnaXN0ZXIodnB1LT5jdHgtPmRldi0+ZndfaGFuZGxlciwKPiA+ ID4gdnB1LT5pZCwKPiA+ID4gLQkJCQkJIHZwdS0+aGFuZGxlciwgInZkZWMiLCBOVUxMKTsKPiA+ ID4gKwkJCQkJIHZwdS0+aGFuZGxlciwgInZkZWMiLCB2cHUtCj4gPiA+ID4gY3R4LT5kZXYpOwo+ ID4gPiAgCWlmIChlcnIpIHsKPiA+ID4gIAkJbXRrX3ZkZWNfZXJyKHZwdS0+Y3R4LCAidnB1X2lw aV9yZWdpc3RlciBmYWlsCj4gPiA+IHN0YXR1cz0lZCIsIGVycik7Cj4gPiA+ICAJCXJldHVybiBl cnI7Cj4gPiA+IEBAIC0xOTMsNyArMjE2LDcgQEAgaW50IHZwdV9kZWNfaW5pdChzdHJ1Y3QgdmRl Y192cHVfaW5zdCAqdnB1KQo+ID4gPiAgCWlmICh2cHUtPmN0eC0+ZGV2LT52ZGVjX3BkYXRhLT5o d19hcmNoID09Cj4gPiA+IE1US19WREVDX0xBVF9TSU5HTEVfQ09SRSkgewo+ID4gPiAgCQllcnIg PSBtdGtfdmNvZGVjX2Z3X2lwaV9yZWdpc3Rlcih2cHUtPmN0eC0+ZGV2LQo+ID4gPiA+IGZ3X2hh bmRsZXIsCj4gPiA+ICAJCQkJCQkgdnB1LT5jb3JlX2lkLCB2cHUtCj4gPiA+ID4gaGFuZGxlciwK PiA+ID4gLQkJCQkJCSAidmRlYyIsIE5VTEwpOwo+ID4gPiArCQkJCQkJICJ2ZGVjIiwgdnB1LT5j dHgtCj4gPiA+ID4gZGV2KTsKPiA+ID4gIAkJaWYgKGVycikgewo+ID4gPiAgCQkJbXRrX3ZkZWNf ZXJyKHZwdS0+Y3R4LCAidnB1X2lwaV9yZWdpc3RlciBjb3JlCj4gPiA+IGZhaWwgc3RhdHVzPSVk IiwgZXJyKTsKPiA+ID4gIAkJCXJldHVybiBlcnI7Cj4gPiAKPiA+IAoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGlu ZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK