Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp11924665ybi; Fri, 26 Jul 2019 01:55:48 -0700 (PDT) X-Google-Smtp-Source: APXvYqzDq6m6DafXxo6nrdDYTe/xVd5lsvgkPnPKmk2s6/uE2966BLiwUntcGRpPBDkuYGJbcPDb X-Received: by 2002:a17:902:f089:: with SMTP id go9mr94979171plb.81.1564131348702; Fri, 26 Jul 2019 01:55:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1564131348; cv=none; d=google.com; s=arc-20160816; b=VsSmiRI5YSsbVos2d6kNz53cVyYNxaUivyxqP96wDagxSSOvKLh4xY7mMyv7Sx2TZ6 fRrILZVJeq3kd3LRTwE2TvUyX4Rb7EwQv42ixtMTdiujOEMij8OpwYptUya81iAX9tj5 HIxTPIj/tTb9B/RtYXfXk2ihuYhT149Yv9fMnM+TvlcXfy94WpvB8YsC4FaMuFRYyQ6s I6QBwGgXBoYKzWZZSgjPCJmwz2SMuA0lXJ7qYhvo/T2HvWbbBKRU8nL4LvoVkWFSr5hy 9LGYgTr83sc0gyyx56/BE2ULVBAFRnTArOI1pBktCqSEsheUmqdGI8sNZrBNGxr9+PRY YG3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from; bh=iEGUDq5YIyA+6RNZ/NBHEGcTsA0cU2rF2oCeLuPrMx0=; b=cfScm07zBIiPjoHI8U80GMSYWoUW+bOO56X3YBrddLu3n+72xYoZHUxVC12cn1D3YM puPFpATZqEePRgUJKXT/Vkbj9TMg8Ow1tg3j+EMT2Pom5LUfwHhZ2wSNboRuPPfpFioN LLOcOk8KFM0+bF1yrHPnLuwSKhzp4Q1rR/TRHZX2tkg3K7YM0GALTR1FMtqAi/cFhllG OGhGaX2dryFqfSGMBFelwEUL9ezFTGbHS6syVNH1/wPaSutV+9qrQ9csVPloeeBgql2h 3ODT6880k7hFpS7cxUFNULhJKy7PELx8uB8gDzp/MzENyYX78AOPW+9euf++fOc95cm2 TJqw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i3si8172321pgm.163.2019.07.26.01.55.33; Fri, 26 Jul 2019 01:55:48 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726594AbfGZIyx (ORCPT + 99 others); Fri, 26 Jul 2019 04:54:53 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:50063 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1725945AbfGZIyx (ORCPT ); Fri, 26 Jul 2019 04:54:53 -0400 X-UUID: a03d0d82d18447fe8430d1072d1de8e4-20190726 X-UUID: a03d0d82d18447fe8430d1072d1de8e4-20190726 Received: from mtkexhb02.mediatek.inc [(172.21.101.103)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0707 with TLS) with ESMTP id 891292867; Fri, 26 Jul 2019 16:54:45 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs08n1.mediatek.inc (172.21.101.55) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 26 Jul 2019 16:54:45 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Fri, 26 Jul 2019 16:54:45 +0800 From: To: Hans Verkuil , Tomasz Figa , Tiffany Lin CC: Longfei Wang , Yunfei Dong , Mauro Carvalho Chehab , Matthias Brugger , , , , , , gtk_ruiwang Subject: media: mtk-vcodec: Handle H264 error bitstreams Date: Fri, 26 Jul 2019 16:54:33 +0800 Message-ID: <20190726085433.15612-1-gtk_ruiwang@mediatek.com> X-Mailer: git-send-email 2.18.0 MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: gtk_ruiwang Error h264 bitstreams which picture info are out range of decoder hardware specification, and no nal start code at the beginning of the buffer, stop decoding and exit. Signed-off-by: gtk_ruiwang --- .../platform/mtk-vcodec/vdec/vdec_h264_if.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c index c5f8f1fca44c..49aa85a9bb5a 100644 --- a/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c +++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_h264_if.c @@ -29,6 +29,9 @@ #define H264_MAX_FB_NUM 17 #define HDR_PARSING_BUF_SZ 1024 +#define DEC_ERR_RET(ret) ((ret) >> 16) +#define H264_ERR_NOT_VALID 3 + /** * struct h264_fb - h264 decode frame buffer information * @vdec_fb_va : virtual address of struct vdec_fb @@ -357,8 +360,11 @@ static int vdec_h264_decode(void *h_vdec, struct mtk_vcodec_mem *bs, buf = (unsigned char *)bs->va; buf_sz = bs->size; nal_start_idx = find_start_code(buf, buf_sz); - if (nal_start_idx < 0) + if (nal_start_idx < 0) { + mtk_vcodec_err(inst, "invalid nal start code"); + err = -EIO; goto err_free_fb_out; + } nal_start = buf[nal_start_idx]; nal_type = NAL_TYPE(buf[nal_start_idx]); @@ -382,8 +388,14 @@ static int vdec_h264_decode(void *h_vdec, struct mtk_vcodec_mem *bs, data[0] = buf_sz; data[1] = nal_start; err = vpu_dec_start(vpu, data, 2); - if (err) + if (err) { + if (err > 0 && (DEC_ERR_RET(err) == H264_ERR_NOT_VALID)) { + mtk_vcodec_err(inst, "- error bitstream - err = %d -", + err); + err = -EIO; + } goto err_free_fb_out; + } *res_chg = inst->vsi->dec.resolution_changed; if (*res_chg) { -- 2.18.0