Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3741594imu; Tue, 18 Dec 2018 03:29:44 -0800 (PST) X-Google-Smtp-Source: AFSGD/W7I3+dSBxuq2cy83+Mxe36jzcQibpqA5kwF441howiEiFaTQcSyzNcjsRuggaeeSdHGXY4 X-Received: by 2002:a63:9e19:: with SMTP id s25mr15529359pgd.203.1545132584148; Tue, 18 Dec 2018 03:29:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545132584; cv=none; d=google.com; s=arc-20160816; b=li0P5Yx/yhUxDRzIClf4cOvbWFTgjBkItJxbcrXfkvK/4/p+EXYetRJBHQvge9khCP Ynl21gjFuA8NM+QjaOkql5+nb0SjsHjY63exPg5u3sgf6i3vFLuIqOiu5fiWykQnYHFB IST0I3sax4s/P3ehW3jbk3o9tRq80UxPCFvGI5O38UNxKOm5mTR9flX/6Ts44bjgbAb1 kCScwz4P1vC4wrKF1aqlkSVs64io2/l6qWgTdOHDQA+bay5USG8dGHJhOUsZBEDKoq32 1aQRNQN7CkqSFIDs8rCGxymu3xZbKOT43IY9FmZzCmM7FN6dLgXyaxcj4z6pn0mViNyF YnXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:autocrypt:openpgp:from:references:cc:to:subject; bh=YT5kS6vQujKNonj13bsVK/0bj+H+/9adokd7iwBlXFU=; b=wR1/rbmvrilfqCisabkn0P8XPe/0QCkhoRCNnjX3ZHq1pjYWSUSTnD2TSn+jmZ4djO +7u74/3tfjlVOlgFsRbgsMKvgeec3vnGKtpFHjuUfUwkaYmQwYrYoWxg+ETREis2EPbp F2nPw3lMiofXPC5NG0jEQ+kg11gjIALqQcWDpChw/lzJGX3N4egTOWBie7UWQrbw17ET 2kv58Q75ghK4KvH81prZJdRnOWjrovP6GoSml+PIZ5m7PBVokeTecH2e+NzW2IG+/uys aIO8cMVpm0DssJkS+MgpwcNL9EkugLwOrKCW8XLaItId58iDVSblQmnERuvgokckOCl8 ZBhg== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x66si13785431pfk.73.2018.12.18.03.29.27; Tue, 18 Dec 2018 03:29:44 -0800 (PST) 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726556AbeLRL20 (ORCPT + 99 others); Tue, 18 Dec 2018 06:28:26 -0500 Received: from smtp.eu.citrix.com ([185.25.65.24]:32609 "EHLO SMTP.EU.CITRIX.COM" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726341AbeLRL2Z (ORCPT ); Tue, 18 Dec 2018 06:28:25 -0500 X-IronPort-AV: E=Sophos;i="5.56,367,1539648000"; d="scan'208";a="83485778" Subject: Re: [Xen-devel] [PATCH -next] x86/xen: Fix read buffer overflow To: YueHaibing , Juergen Gross , , , , , , CC: , , References: <20181218081910.18080-1-yuehaibing@huawei.com> <7825d772-338a-e39e-eaff-73e666ef5c08@suse.com> <2fe8f6b7-b791-e7ea-6484-491e089321d5@huawei.com> From: Andrew Cooper Openpgp: preference=signencrypt Autocrypt: addr=andrew.cooper3@citrix.com; prefer-encrypt=mutual; keydata= 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 6+ahAA== Message-ID: <08a359b7-1746-8997-4c19-b60a30ccdd63@citrix.com> Date: Tue, 18 Dec 2018 11:28:22 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.3.0 MIME-Version: 1.0 In-Reply-To: <2fe8f6b7-b791-e7ea-6484-491e089321d5@huawei.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Content-Language: en-GB X-ClientProxiedBy: AMSPEX02CAS02.citrite.net (10.69.22.113) To AMSPEX02CL01.citrite.net (10.69.22.125) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 18/12/2018 10:42, YueHaibing wrote: > On 2018/12/18 16:31, Juergen Gross wrote: >> On 18/12/2018 09:19, YueHaibing wrote: >>> Fix smatch warning: >>> >>> arch/x86/xen/enlighten_pv.c:649 get_trap_addr() error: >>> buffer overflow 'early_idt_handler_array' 32 <= 32 >>> >>> Fixes: 42b3a4cb5609 ("x86/xen: Support early interrupts in xen pv guests") >>> Signed-off-by: YueHaibing >>> --- >>> arch/x86/xen/enlighten_pv.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c >>> index 2f6787f..81f200d 100644 >>> --- a/arch/x86/xen/enlighten_pv.c >>> +++ b/arch/x86/xen/enlighten_pv.c >>> @@ -646,7 +646,7 @@ static bool __ref get_trap_addr(void **addr, unsigned int ist) >>> >>> if (nr == ARRAY_SIZE(trap_array) && >>> *addr >= (void *)early_idt_handler_array[0] && >>> - *addr < (void *)early_idt_handler_array[NUM_EXCEPTION_VECTORS]) { >>> + *addr < (void *)early_idt_handler_array[NUM_EXCEPTION_VECTORS - 1]) { >>> nr = (*addr - (void *)early_idt_handler_array[0]) / >>> EARLY_IDT_HANDLER_SIZE; >>> *addr = (void *)xen_early_idt_handler_array[nr]; >>> >> No, this patch is wrong. >> >> early_idt_handler_array is a 2-dimensional array: >> >> const char >> early_idt_handler_array[NUM_EXCEPTION_VECTORS][EARLY_IDT_HANDLER_SIZE]; >> >> So above code doesn't do an out of bounds array access, but checks for >> *addr being in the array or outside of it (note the "<" used for the >> test). > Thank you for your explanation. This looks like a smatch bug.  I'd feed it back upstream. It is explicitly permitted in the C spec to construct a pointer to one-past-the-end of an array, for the purposes of a < comparison. I'm not entirely sure where the "32 <= 32" statement is coming from. ~Andrew