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 X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 38946C433E0 for ; Tue, 26 May 2020 19:57:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1BEE1207CB for ; Tue, 26 May 2020 19:57:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390701AbgEZT5G convert rfc822-to-8bit (ORCPT ); Tue, 26 May 2020 15:57:06 -0400 Received: from mail-qt1-f195.google.com ([209.85.160.195]:35515 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389442AbgEZT5F (ORCPT ); Tue, 26 May 2020 15:57:05 -0400 Received: by mail-qt1-f195.google.com with SMTP id z1so5140867qtn.2 for ; Tue, 26 May 2020 12:57:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=Tv568JygARptrMAgf1Gov6V8e1gDgQj+1HZxw3kgZEU=; b=EC90a24b9pMqem3twU7qcw3qTFK2sxJAO29od3RERXuOPaCrvzaLnC3GlVERe23+cL WkzumxmAuYhMLKCYNOAgYxaPwfV1fr0etq6Cgms/FDNLwjoZG4tUkQZUildE8Ka6PtXr ztn3MS7nTAxXmDM+522qIz6vjstirJBKkBMjCiTjBRw5x4oqvF07q26k+BP3zGE8/rLC 9S2oMBQiHBLxo93AGyhfOuX89GoFk4ebK1f73mAfpS/ikX61DzUy5qMwnHo4TMynaCtW uhmG2vvGFBVXDiuChk3gMeh/cdk0DCcet+2o+FUPKZfUEEbdM7apJYXAW0Q4THicM4RK 2Jkw== X-Gm-Message-State: AOAM531q/k/Xs4sGSwG+EiNdi4d59dbG+ZsrBPMPLB2Zk8odZWdyvHSR XxcvZXdj9d3vvMiAVQBFWLxSsEp65vw= X-Google-Smtp-Source: ABdhPJykhwJLkZfOYIhmNNxk/Nz55+Qszo5T+bjgb7h6PcQnjIJ7F+Hna3F5Gfd8TeZb9z0qp6FsxA== X-Received: by 2002:ac8:342b:: with SMTP id u40mr520776qtb.59.1590523022967; Tue, 26 May 2020 12:57:02 -0700 (PDT) Received: from mail-qk1-f173.google.com (mail-qk1-f173.google.com. [209.85.222.173]) by smtp.gmail.com with ESMTPSA id b189sm504877qkg.110.2020.05.26.12.57.01 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 26 May 2020 12:57:02 -0700 (PDT) Received: by mail-qk1-f173.google.com with SMTP id z80so22058050qka.0 for ; Tue, 26 May 2020 12:57:01 -0700 (PDT) X-Received: by 2002:a37:ecc:: with SMTP id 195mr457918qko.469.1590523021692; Tue, 26 May 2020 12:57:01 -0700 (PDT) MIME-Version: 1.0 References: <20200518221904.GA22274@embeddedor> <202005181529.C0CB448FBB@keescook> <202005202022.588918E61@keescook> In-Reply-To: From: Li Yang Date: Tue, 26 May 2020 14:56:33 -0500 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH] soc: fsl: qe: Replace one-element array and use struct_size() helper To: Qiang Zhao Cc: Kees Cook , "Gustavo A. R. Silva" , linuxppc-dev , "Gustavo A. R. Silva" , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , lkml Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, May 24, 2020 at 9:49 PM Qiang Zhao wrote: > > On Wed, May 23, 2020 at 5:22 PM Li Yang > > -----Original Message----- > > From: Li Yang > > Sent: 2020年5月23日 5:22 > > To: Kees Cook > > Cc: Gustavo A. R. Silva ; Qiang Zhao > > ; linuxppc-dev ; > > moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE > > ; lkml ; > > Gustavo A. R. Silva > > Subject: Re: [PATCH] soc: fsl: qe: Replace one-element array and use > > struct_size() helper > > > > On Wed, May 20, 2020 at 10:24 PM Kees Cook > > wrote: > > > > > > On Wed, May 20, 2020 at 06:52:21PM -0500, Li Yang wrote: > > > > On Mon, May 18, 2020 at 5:57 PM Kees Cook > > wrote: > > > > > Hm, looking at this code, I see a few other things that need to be > > > > > fixed: > > > > > > > > > > 1) drivers/tty/serial/ucc_uart.c does not do a be32_to_cpu() conversion > > > > > on the length test (understandably, a little-endian system has never > > run > > > > > this code since it's ppc specific), but it's still wrong: > > > > > > > > > > if (firmware->header.length != fw->size) { > > > > > > > > > > compare to the firmware loader: > > > > > > > > > > length = be32_to_cpu(hdr->length); > > > > > > > > > > 2) drivers/soc/fsl/qe/qe.c does not perform bounds checking on the > > > > > per-microcode offsets, so the uploader might send data outside the > > > > > firmware buffer. Perhaps: > > > > > > > > We do validate the CRC for each microcode, it is unlikely the CRC > > > > check can pass if the offset or length is not correct. But you are > > > > probably right that it will be safer to check the boundary and fail > > > > > > Right, but a malicious firmware file could still match CRC but trick > > > the kernel code. > > > > > > > quicker before we actually start the CRC check. Will you come up > > > > with a formal patch or you want us to deal with it? > > > > > > It sounds like Gustavo will be sending one, though I don't think > > > either of us have the hardware to test it with, so if you could do > > > that part, that would be great! :) > > > > That will be great. I think Zhao Qiang can help with the testing part. > > > > Now the firmware are loaded in uboot, and kernel will do nothing for it. > So testing on it maybe need some extra codes both in driver and dts. > In the meanwhile, I am so busy on some high priority work that maybe test work > could not be done in time. > Once I am free, I will do it. Thanks. You are right that most of the QE drivers doesn't support requesting firmware in kernel except the ucc_uart. So it probably can be tested with that driver without requiring code change. > > Best Regards > Qiang Zhao 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 X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AFB39C433DF for ; Tue, 26 May 2020 19:59:52 +0000 (UTC) Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2C921207CB for ; Tue, 26 May 2020 19:59:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2C921207CB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 49WlDP1qN0zDqLt for ; Wed, 27 May 2020 05:59:49 +1000 (AEST) Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=209.85.160.196; helo=mail-qt1-f196.google.com; envelope-from=pku.leo@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Received: from mail-qt1-f196.google.com (mail-qt1-f196.google.com [209.85.160.196]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 49Wl9H25KXzDqD5 for ; Wed, 27 May 2020 05:57:06 +1000 (AEST) Received: by mail-qt1-f196.google.com with SMTP id c12so7371700qtq.11 for ; Tue, 26 May 2020 12:57:06 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=Tv568JygARptrMAgf1Gov6V8e1gDgQj+1HZxw3kgZEU=; b=Bytn0AwfO+LqJVblelbsGvsoRger+KzS9+auqbAyfy+10WmKisJ8OdMhpabzp7IAV9 SqduJKtKgIXR5WSsDMPcqa5+lb6geoxy+zeTAAldH8sd1xOOTmFBpVgO5WIFrYcRPtnH LKlX3FZvseWJGshlO3PTa9a1Gknnm1rGg4ZVbUW5XU5ezihiphDKoB2sbKHyYdZkBbMO X/AtpEnlPkGeh4UfQSs1VnkU+/OCMYU8IN4JQ7Qy19GXLkF3aXaKHc1HsMuQDGYXDgSf 1vsYGCr+c7pZyP/yEXvq/UhkyMUkJsXEYjXUZVtUCUFwGwTtDCJTU2oWr9lyfXktAfQP gg8w== X-Gm-Message-State: AOAM530IkOF3hLl6uxvcbnZwIzaCmA67nkvyd8rihxuDdAVSKRsMjACX dOAh6tsyQDafOd0XLBWPCa0RMCiizu4= X-Google-Smtp-Source: ABdhPJw3oOYbVCkUgD0MXnXWW4zOclF7FBGTtuYTigjffT7jA8T3nYeKW50/X4eJe3suvqdOg08fWQ== X-Received: by 2002:ac8:339c:: with SMTP id c28mr538476qtb.9.1590523022596; Tue, 26 May 2020 12:57:02 -0700 (PDT) Received: from mail-qk1-f173.google.com (mail-qk1-f173.google.com. [209.85.222.173]) by smtp.gmail.com with ESMTPSA id e34sm582376qtb.21.2020.05.26.12.57.01 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 26 May 2020 12:57:02 -0700 (PDT) Received: by mail-qk1-f173.google.com with SMTP id w3so16476201qkb.6 for ; Tue, 26 May 2020 12:57:01 -0700 (PDT) X-Received: by 2002:a37:ecc:: with SMTP id 195mr457918qko.469.1590523021692; Tue, 26 May 2020 12:57:01 -0700 (PDT) MIME-Version: 1.0 References: <20200518221904.GA22274@embeddedor> <202005181529.C0CB448FBB@keescook> <202005202022.588918E61@keescook> In-Reply-To: From: Li Yang Date: Tue, 26 May 2020 14:56:33 -0500 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH] soc: fsl: qe: Replace one-element array and use struct_size() helper To: Qiang Zhao Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kees Cook , "Gustavo A. R. Silva" , lkml , "Gustavo A. R. Silva" , linuxppc-dev , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" On Sun, May 24, 2020 at 9:49 PM Qiang Zhao wrote: > > On Wed, May 23, 2020 at 5:22 PM Li Yang > > -----Original Message----- > > From: Li Yang > > Sent: 2020=E5=B9=B45=E6=9C=8823=E6=97=A5 5:22 > > To: Kees Cook > > Cc: Gustavo A. R. Silva ; Qiang Zhao > > ; linuxppc-dev ; > > moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE > > ; lkml ; > > Gustavo A. R. Silva > > Subject: Re: [PATCH] soc: fsl: qe: Replace one-element array and use > > struct_size() helper > > > > On Wed, May 20, 2020 at 10:24 PM Kees Cook > > wrote: > > > > > > On Wed, May 20, 2020 at 06:52:21PM -0500, Li Yang wrote: > > > > On Mon, May 18, 2020 at 5:57 PM Kees Cook > > wrote: > > > > > Hm, looking at this code, I see a few other things that need to b= e > > > > > fixed: > > > > > > > > > > 1) drivers/tty/serial/ucc_uart.c does not do a be32_to_cpu() conv= ersion > > > > > on the length test (understandably, a little-endian system has= never > > run > > > > > this code since it's ppc specific), but it's still wrong: > > > > > > > > > > if (firmware->header.length !=3D fw->size) { > > > > > > > > > > compare to the firmware loader: > > > > > > > > > > length =3D be32_to_cpu(hdr->length); > > > > > > > > > > 2) drivers/soc/fsl/qe/qe.c does not perform bounds checking on th= e > > > > > per-microcode offsets, so the uploader might send data outside= the > > > > > firmware buffer. Perhaps: > > > > > > > > We do validate the CRC for each microcode, it is unlikely the CRC > > > > check can pass if the offset or length is not correct. But you are > > > > probably right that it will be safer to check the boundary and fail > > > > > > Right, but a malicious firmware file could still match CRC but trick > > > the kernel code. > > > > > > > quicker before we actually start the CRC check. Will you come up > > > > with a formal patch or you want us to deal with it? > > > > > > It sounds like Gustavo will be sending one, though I don't think > > > either of us have the hardware to test it with, so if you could do > > > that part, that would be great! :) > > > > That will be great. I think Zhao Qiang can help with the testing part. > > > > Now the firmware are loaded in uboot, and kernel will do nothing for it. > So testing on it maybe need some extra codes both in driver and dts. > In the meanwhile, I am so busy on some high priority work that maybe test= work > could not be done in time. > Once I am free, I will do it. Thanks. You are right that most of the QE drivers doesn't support requesting firmware in kernel except the ucc_uart. So it probably can be tested with that driver without requiring code change. > > Best Regards > Qiang Zhao 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 X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 07D86C433DF for ; Tue, 26 May 2020 20:03:02 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id C90B2207CB for ; Tue, 26 May 2020 20:03:01 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="F4Bt2GSA" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C90B2207CB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Klki14kA4UA73YTrcjc5GyqnKIb2BWOEW0Ia5AlmQkE=; b=F4Bt2GSAmzu8E/ LNgwWGMoHtPOSOEBkwnoMosPqbCMQ5c6R1w3u5GPYknLujmKHIyJIGhW0hB/KOFr44CKrquvtiSWR oXDS0QFt6ou+YCu2DP8J7Y7ZfUsT77Yu41/YOYDBtNl4CIxA0j/PDj5E10W7s0fE1ocPcijII1KOr 0Zi5yuBIcP3TZK5hFMHELHmkTWK8GcE2/djskuDUpQGYY+9SNVK/h5B5PTkUQe3Q71oXJu9UYLirV fxITuyOyQdSim3FSJf9yX15srFuvKil4/98R7U3ZOyfr+TnMjqfpAfankTL3J+pu1oxa0iNpkUNdF 3UYskSzPG8TFHEod6yQw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jdfmv-0006mL-9k; Tue, 26 May 2020 20:03:01 +0000 Received: from mail-qk1-f194.google.com ([209.85.222.194]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jdfhA-0007nH-VA for linux-arm-kernel@lists.infradead.org; Tue, 26 May 2020 19:57:06 +0000 Received: by mail-qk1-f194.google.com with SMTP id c12so3097218qkk.13 for ; Tue, 26 May 2020 12:57:04 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=Tv568JygARptrMAgf1Gov6V8e1gDgQj+1HZxw3kgZEU=; b=Te+e/BYwWehG3FBkERFrr3Sz7IsMeUQy73GNTbja1m2z/F//T4BwBz8KhitAwZgn9u IUFyTy9QHv1vEFvuPAqdUnH7030jFDjOk6Duo0ayy37ktf/yENfEhyepRA/ogqDSQ4zz k3HiOxVVf93mFYNI61Crt2DpeBhBHFvb8mxkCvBDi2sYnovBHLwBTZADnDas0dbVcfhR 7s496ds2wbxdpdpzFeGO1sfVLvCOC83of+vhi+iaYT76lEe6f5HPRCnWzW+zE1kHt3iT +O3pxN0dJ+1g5PbYhB2kAaTiDD17y7ig4fm2Dt3PHKQGrVMRTx4mpSEHxuxwiPyc6jb0 Zlqw== X-Gm-Message-State: AOAM533Z2L48gzNPSx+XdnUXXh45/ai26m0ECyW6FN0fR91BygThEe1f va1i2xepZZo5zFaQDvvEOb9fEe4VxW8= X-Google-Smtp-Source: ABdhPJwR7Hq6JvJGUzF2BbW3Y9WpwX0LZk90LbMYvR/4Q9U4qmqrtuCyqJRUxNI9rbU7wMRSEcDn/g== X-Received: by 2002:a37:85c4:: with SMTP id h187mr482109qkd.179.1590523022887; Tue, 26 May 2020 12:57:02 -0700 (PDT) Received: from mail-qk1-f180.google.com (mail-qk1-f180.google.com. [209.85.222.180]) by smtp.gmail.com with ESMTPSA id d140sm518260qkc.22.2020.05.26.12.57.01 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 26 May 2020 12:57:02 -0700 (PDT) Received: by mail-qk1-f180.google.com with SMTP id 205so8868348qkg.3 for ; Tue, 26 May 2020 12:57:01 -0700 (PDT) X-Received: by 2002:a37:ecc:: with SMTP id 195mr457918qko.469.1590523021692; Tue, 26 May 2020 12:57:01 -0700 (PDT) MIME-Version: 1.0 References: <20200518221904.GA22274@embeddedor> <202005181529.C0CB448FBB@keescook> <202005202022.588918E61@keescook> In-Reply-To: From: Li Yang Date: Tue, 26 May 2020 14:56:33 -0500 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH] soc: fsl: qe: Replace one-element array and use struct_size() helper To: Qiang Zhao X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200526_125705_011544_AC5C5337 X-CRM114-Status: GOOD ( 23.81 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kees Cook , "Gustavo A. R. Silva" , lkml , "Gustavo A. R. Silva" , linuxppc-dev , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gU3VuLCBNYXkgMjQsIDIwMjAgYXQgOTo0OSBQTSBRaWFuZyBaaGFvIDxxaWFuZy56aGFvQG54 cC5jb20+IHdyb3RlOgo+Cj4gT24gV2VkLCBNYXkgMjMsIDIwMjAgYXQgNToyMiBQTSBMaSBZYW5n IDxsZW95YW5nLmxpQG54cC5jb20+Cj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+ID4g RnJvbTogTGkgWWFuZyA8bGVveWFuZy5saUBueHAuY29tPgo+ID4gU2VudDogMjAyMOW5tDXmnIgy M+aXpSA1OjIyCj4gPiBUbzogS2VlcyBDb29rIDxrZWVzY29va0BjaHJvbWl1bS5vcmc+Cj4gPiBD YzogR3VzdGF2byBBLiBSLiBTaWx2YSA8Z3VzdGF2b2Fyc0BrZXJuZWwub3JnPjsgUWlhbmcgWmhh bwo+ID4gPHFpYW5nLnpoYW9AbnhwLmNvbT47IGxpbnV4cHBjLWRldiA8bGludXhwcGMtZGV2QGxp c3RzLm96bGFicy5vcmc+Owo+ID4gbW9kZXJhdGVkIGxpc3Q6QVJNL0ZSRUVTQ0FMRSBJTVggLyBN WEMgQVJNIEFSQ0hJVEVDVFVSRQo+ID4gPGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFk Lm9yZz47IGxrbWwgPGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+Owo+ID4gR3VzdGF2byBB LiBSLiBTaWx2YSA8Z3VzdGF2b0BlbWJlZGRlZG9yLmNvbT4KPiA+IFN1YmplY3Q6IFJlOiBbUEFU Q0hdIHNvYzogZnNsOiBxZTogUmVwbGFjZSBvbmUtZWxlbWVudCBhcnJheSBhbmQgdXNlCj4gPiBz dHJ1Y3Rfc2l6ZSgpIGhlbHBlcgo+ID4KPiA+IE9uIFdlZCwgTWF5IDIwLCAyMDIwIGF0IDEwOjI0 IFBNIEtlZXMgQ29vayA8a2Vlc2Nvb2tAY2hyb21pdW0ub3JnPgo+ID4gd3JvdGU6Cj4gPiA+Cj4g PiA+IE9uIFdlZCwgTWF5IDIwLCAyMDIwIGF0IDA2OjUyOjIxUE0gLTA1MDAsIExpIFlhbmcgd3Jv dGU6Cj4gPiA+ID4gT24gTW9uLCBNYXkgMTgsIDIwMjAgYXQgNTo1NyBQTSBLZWVzIENvb2sgPGtl ZXNjb29rQGNocm9taXVtLm9yZz4KPiA+IHdyb3RlOgo+ID4gPiA+ID4gSG0sIGxvb2tpbmcgYXQg dGhpcyBjb2RlLCBJIHNlZSBhIGZldyBvdGhlciB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlCj4gPiA+ ID4gPiBmaXhlZDoKPiA+ID4gPiA+Cj4gPiA+ID4gPiAxKSBkcml2ZXJzL3R0eS9zZXJpYWwvdWNj X3VhcnQuYyBkb2VzIG5vdCBkbyBhIGJlMzJfdG9fY3B1KCkgY29udmVyc2lvbgo+ID4gPiA+ID4g ICAgb24gdGhlIGxlbmd0aCB0ZXN0ICh1bmRlcnN0YW5kYWJseSwgYSBsaXR0bGUtZW5kaWFuIHN5 c3RlbSBoYXMgbmV2ZXIKPiA+IHJ1bgo+ID4gPiA+ID4gICAgdGhpcyBjb2RlIHNpbmNlIGl0J3Mg cHBjIHNwZWNpZmljKSwgYnV0IGl0J3Mgc3RpbGwgd3Jvbmc6Cj4gPiA+ID4gPgo+ID4gPiA+ID4g ICAgICAgICBpZiAoZmlybXdhcmUtPmhlYWRlci5sZW5ndGggIT0gZnctPnNpemUpIHsKPiA+ID4g PiA+Cj4gPiA+ID4gPiAgICBjb21wYXJlIHRvIHRoZSBmaXJtd2FyZSBsb2FkZXI6Cj4gPiA+ID4g Pgo+ID4gPiA+ID4gICAgICAgICBsZW5ndGggPSBiZTMyX3RvX2NwdShoZHItPmxlbmd0aCk7Cj4g PiA+ID4gPgo+ID4gPiA+ID4gMikgZHJpdmVycy9zb2MvZnNsL3FlL3FlLmMgZG9lcyBub3QgcGVy Zm9ybSBib3VuZHMgY2hlY2tpbmcgb24gdGhlCj4gPiA+ID4gPiAgICBwZXItbWljcm9jb2RlIG9m ZnNldHMsIHNvIHRoZSB1cGxvYWRlciBtaWdodCBzZW5kIGRhdGEgb3V0c2lkZSB0aGUKPiA+ID4g PiA+ICAgIGZpcm13YXJlIGJ1ZmZlci4gUGVyaGFwczoKPiA+ID4gPgo+ID4gPiA+IFdlIGRvIHZh bGlkYXRlIHRoZSBDUkMgZm9yIGVhY2ggbWljcm9jb2RlLCBpdCBpcyB1bmxpa2VseSB0aGUgQ1JD Cj4gPiA+ID4gY2hlY2sgY2FuIHBhc3MgaWYgdGhlIG9mZnNldCBvciBsZW5ndGggaXMgbm90IGNv cnJlY3QuICBCdXQgeW91IGFyZQo+ID4gPiA+IHByb2JhYmx5IHJpZ2h0IHRoYXQgaXQgd2lsbCBi ZSBzYWZlciB0byBjaGVjayB0aGUgYm91bmRhcnkgYW5kIGZhaWwKPiA+ID4KPiA+ID4gUmlnaHQs IGJ1dCBhIG1hbGljaW91cyBmaXJtd2FyZSBmaWxlIGNvdWxkIHN0aWxsIG1hdGNoIENSQyBidXQg dHJpY2sKPiA+ID4gdGhlIGtlcm5lbCBjb2RlLgo+ID4gPgo+ID4gPiA+IHF1aWNrZXIgYmVmb3Jl IHdlIGFjdHVhbGx5IHN0YXJ0IHRoZSBDUkMgY2hlY2suICBXaWxsIHlvdSBjb21lIHVwCj4gPiA+ ID4gd2l0aCBhIGZvcm1hbCBwYXRjaCBvciB5b3Ugd2FudCB1cyB0byBkZWFsIHdpdGggaXQ/Cj4g PiA+Cj4gPiA+IEl0IHNvdW5kcyBsaWtlIEd1c3Rhdm8gd2lsbCBiZSBzZW5kaW5nIG9uZSwgdGhv dWdoIEkgZG9uJ3QgdGhpbmsKPiA+ID4gZWl0aGVyIG9mIHVzIGhhdmUgdGhlIGhhcmR3YXJlIHRv IHRlc3QgaXQgd2l0aCwgc28gaWYgeW91IGNvdWxkIGRvCj4gPiA+IHRoYXQgcGFydCwgdGhhdCB3 b3VsZCBiZSBncmVhdCEgOikKPiA+Cj4gPiBUaGF0IHdpbGwgYmUgZ3JlYXQuICBJIHRoaW5rIFpo YW8gUWlhbmcgY2FuIGhlbHAgd2l0aCB0aGUgdGVzdGluZyBwYXJ0Lgo+ID4KPgo+IE5vdyB0aGUg ZmlybXdhcmUgYXJlIGxvYWRlZCBpbiB1Ym9vdCwgYW5kIGtlcm5lbCB3aWxsIGRvIG5vdGhpbmcg Zm9yIGl0Lgo+IFNvIHRlc3Rpbmcgb24gaXQgbWF5YmUgbmVlZCBzb21lIGV4dHJhIGNvZGVzIGJv dGggaW4gZHJpdmVyIGFuZCBkdHMuCj4gSW4gdGhlIG1lYW53aGlsZSwgSSBhbSBzbyBidXN5IG9u IHNvbWUgaGlnaCBwcmlvcml0eSB3b3JrIHRoYXQgbWF5YmUgdGVzdCB3b3JrCj4gY291bGQgbm90 IGJlIGRvbmUgaW4gdGltZS4KPiBPbmNlIEkgYW0gZnJlZSwgSSB3aWxsIGRvIGl0LgoKVGhhbmtz LiAgWW91IGFyZSByaWdodCB0aGF0IG1vc3Qgb2YgdGhlIFFFIGRyaXZlcnMgZG9lc24ndCBzdXBw b3J0CnJlcXVlc3RpbmcgZmlybXdhcmUgaW4ga2VybmVsIGV4Y2VwdCB0aGUgdWNjX3VhcnQuICBT byBpdCBwcm9iYWJseSBjYW4KYmUgdGVzdGVkIHdpdGggdGhhdCBkcml2ZXIgd2l0aG91dCByZXF1 aXJpbmcgY29kZSBjaGFuZ2UuCgo+Cj4gQmVzdCBSZWdhcmRzCj4gUWlhbmcgWmhhbwoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5l bCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=