From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A105EC121; Sun, 3 Mar 2024 13:09:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709471386; cv=none; b=u8B0MbfN3Vkk0L/lSHn7zNlV5JfE/wZOfj+fwvbjeUaG3RhXsSGpLQkp0GTOP2h82UIRCgCnjKcACOIf2pQ1G2XYDp/LEUjY92ycj3a7k+97SnoJU/Dd5J5w/TvoOyO3gXCKoFne+JY3sEju8WeBz5PkJLNOpxDo1h0kJQQMqqM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709471386; c=relaxed/simple; bh=vrYalRsEVZ5fLjX42yXSYdIo9++d6kZ4+2yqiD07orw=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=o0oH6VrDhaJSXMKlqcEMWIxmVVK9gqOipHOgH+705Yt1lfvgtd49IpeeWJkXncn7U8qYJNF10wWtir1C8KeXpjh2WnGknwBhja3rhqgwziYbdchdvAlQlGyv0iBR33f4x60+Z9U6MrexS29fJxMWB96fRy8VcF8q7O6xAPTL5vU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TFS4Wcld; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TFS4Wcld" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7CDD6C433C7; Sun, 3 Mar 2024 13:09:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1709471386; bh=vrYalRsEVZ5fLjX42yXSYdIo9++d6kZ4+2yqiD07orw=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=TFS4WclduKBieWz1UkcNTKSuCZDyLEdTgFUGthkob7mjSQrWCfm9HvCnDfnyY6qtW MkNYLN/+XpB8K5gsWQPw9jLMIA09LfI+cLBVXF39xCggrkuXWM8et+8sLHBUbBJRqI xDrdrgOWWfgXvxEDr6Gh1WcJHxAOynrX5AmOLrn8EPti9G+E7lNvw6MrWX7xS3wt1a iR5kSIXQa3DC4H0bDcBa/OR87oQv//6vdDCNA27zEcdCrWAQ4BNq4xlKYmmDjJ2gJs prN85/sJhYV3U+JYiPlVPjJGOFuu9uyRmpGARyS0QvQrrLnM99LERQnKwoZHA2+avH 8Vgq+BsIhZqhA== Date: Sun, 3 Mar 2024 13:09:28 +0000 From: Jonathan Cameron To: Nuno =?UTF-8?B?U8Oh?= Cc: Andy Shevchenko , Vinod Koul , Linus Walleij , Jonathan Cameron , Mark Brown , Kees Cook , linux-arm-kernel@lists.infradead.org, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-spi@vger.kernel.org, netdev@vger.kernel.org, linux-hardening@vger.kernel.org, Lars-Peter Clausen , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , "Gustavo A. R. Silva" , Nuno Sa Subject: Re: [PATCH v4 5/8] iio: core: Use new helpers from overflow.h in iio_device_alloc() Message-ID: <20240303130928.0c2fea09@jic23-huawei> In-Reply-To: <9519dda9acd9db009dcb43102cc9b36943b35217.camel@gmail.com> References: <20240228204919.3680786-1-andriy.shevchenko@linux.intel.com> <20240228204919.3680786-6-andriy.shevchenko@linux.intel.com> <9519dda9acd9db009dcb43102cc9b36943b35217.camel@gmail.com> X-Mailer: Claws Mail 4.2.0 (GTK 3.24.41; x86_64-pc-linux-gnu) Precedence: bulk X-Mailing-List: dmaengine@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Thu, 29 Feb 2024 16:29:43 +0100 Nuno S=C3=A1 wrote: > On Wed, 2024-02-28 at 22:41 +0200, Andy Shevchenko wrote: > > We have two new helpers struct_size_with_data() and struct_data_pointer= () > > that we can utilize in iio_device_alloc(). Do it so. > >=20 > > Signed-off-by: Andy Shevchenko > > Reviewed-by: Nuno Sa > > --- > > =C2=A0drivers/iio/industrialio-core.c | 5 ++--- > > =C2=A01 file changed, 2 insertions(+), 3 deletions(-) > >=20 > > diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio= -core.c > > index 1986b3386307..223013725e32 100644 > > --- a/drivers/iio/industrialio-core.c > > +++ b/drivers/iio/industrialio-core.c > > @@ -1644,7 +1644,7 @@ struct iio_dev *iio_device_alloc(struct device *p= arent, > > int sizeof_priv) > > =C2=A0 size_t alloc_size; > > =C2=A0 > > =C2=A0 if (sizeof_priv) > > - alloc_size =3D ALIGN(alloc_size, IIO_DMA_MINALIGN) + > > sizeof_priv; > > + alloc_size =3D struct_size_with_data(iio_dev_opaque, > > IIO_DMA_MINALIGN, sizeof_priv); > > =C2=A0 else > > =C2=A0 alloc_size =3D sizeof(struct iio_dev_opaque); > > =C2=A0 > > @@ -1655,8 +1655,7 @@ struct iio_dev *iio_device_alloc(struct device *p= arent, > > int sizeof_priv) > > =C2=A0 indio_dev =3D &iio_dev_opaque->indio_dev; > > =C2=A0 > > =C2=A0 if (sizeof_priv) > > - indio_dev->priv =3D (char *)iio_dev_opaque + > > - ALIGN(sizeof(struct iio_dev_opaque), > > IIO_DMA_MINALIGN); > > + indio_dev->priv =3D struct_data_pointer(iio_dev_opaque, > > IIO_DMA_MINALIGN); =20 >=20 > I'd +1 for implementing what Kees suggested in IIO. Only thing is (I thin= k), we > need to move struct iio_dev indioo_dev to the end of struct iio_dev_opaqu= e. That is going to be messy and without horrible hacks (I think) add more pad= ding we don't need. At the moment the struct iio_dev and the struct iio_dev_opaque are aligned as at the start of the structure. The priv data is aligned by padding the larger struct iio_dev_opaque, so if you want the priv handle to be to data defined in struct iio_dev you = would need to add additional padding so that struct iio_dev_opaque { stuff... // this next __aligned() is implicit anyway because of the rules for // a structure always being aligned to the alignment of it's max aligned // element. struct iio_dev __aligned (IIO_DMA_ALIGN) { =20 stuff u8 priv[] __aligned(IIO_DMA_ALIGN); } } How about using what Kees suggests on the iio_dev_opaque (which think is cl= eaner anyway as that's what we are allocating) and keeping the magic pointer to p= riv in the struct iio_dev; The compiler looses some visibility for iio_priv() a= ccesses but can it do much with those anyway? They always get cast to a struct driv= er_specific * and getting the original allocation wrong is not easy to do as we pass that struct size in. Note, for others not aware of what is going on here, = the priv pointer in iio_dev is to allow efficient static inline iio_priv() call= s without needing to either make a function call, or expose the internals of the opaq= ue structure in which the iio_dev and the priv data are embedded. Standard pattern is: struct driver_specific *bob; struct iio_dev *indio_dev =3D dev_iio_device_alloc(dev, sizeof(*bob)); // which allocates the iio_dev_opaque, but returns the contained iio_dev bob =3D iio_priv(indio_dev); So struct iio_dev_opaque { struct iio_dev indio_dev { stuff.. void *priv;=09 }; stuff.. int priv_count; u8 priv[] __aligned(IIO_DMA_ALIGN) __counted_by(priv_count); } with indio_dev->priv =3D iio_dev_opaque->dev? This cleanups up a few IIO core bits but no impact outside them. Nice to have those cleanups. Is there any way to have that internal iio_dev->priv pointer associated with a __counted_by even though it's pointing elsewhere than a local variable si= zed trailing element? =20 struct iio_dev { stuff u32 count; void *priv __counted_by(count); } compiles with gcc but without digging further I have no idea if it does any= thing useful! Jonathan >=20 > - Nuno S=C3=A1 >=20 >=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 41DB8C5475B for ; Sun, 3 Mar 2024 13:10:13 +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: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=mRCbHyumQ4RF80eN4e8Qdq/snO5Rs99mYisNBYfNl+M=; b=YnJ9SbEKL+cCXb yyuuTfoFXQHEOciDjE+90LHnZ3IYXEfcQjhqwtN+Hqx2Ye2bG+0AX1lGfWlDvvCiFMQbPHQDa0Dxy Y8aDoWWpaNIeCNYCnBP4x6YoWlIBaEov41NR1M12pKlkh+7p4/UDSKxCZGWEsmzBSnFmeq2Dr7JxD 7AUS+4LMqEfHmhY/2NNGIqjoGs89AncMeoIsj/TW8UBEVg9yHFdq6rtxeqh5pES0A3pE9Z9qS29At YDv4B1dXEwNm4BsJXuXQNwhjeYzVGKWkhI7JH2uPFlG1ue+/OPJbobSr8QeU5k2y3r4e2Bt6PdF17 FtCfe5pWSO1PUKnBcU7g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rglbH-00000005w50-0Zsh; Sun, 03 Mar 2024 13:09:55 +0000 Received: from sin.source.kernel.org ([145.40.73.55]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rglbB-00000005w2w-2DwL for linux-arm-kernel@lists.infradead.org; Sun, 03 Mar 2024 13:09:52 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 0E50ECE0F30; Sun, 3 Mar 2024 13:09:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7CDD6C433C7; Sun, 3 Mar 2024 13:09:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1709471386; bh=vrYalRsEVZ5fLjX42yXSYdIo9++d6kZ4+2yqiD07orw=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=TFS4WclduKBieWz1UkcNTKSuCZDyLEdTgFUGthkob7mjSQrWCfm9HvCnDfnyY6qtW MkNYLN/+XpB8K5gsWQPw9jLMIA09LfI+cLBVXF39xCggrkuXWM8et+8sLHBUbBJRqI xDrdrgOWWfgXvxEDr6Gh1WcJHxAOynrX5AmOLrn8EPti9G+E7lNvw6MrWX7xS3wt1a iR5kSIXQa3DC4H0bDcBa/OR87oQv//6vdDCNA27zEcdCrWAQ4BNq4xlKYmmDjJ2gJs prN85/sJhYV3U+JYiPlVPjJGOFuu9uyRmpGARyS0QvQrrLnM99LERQnKwoZHA2+avH 8Vgq+BsIhZqhA== Date: Sun, 3 Mar 2024 13:09:28 +0000 From: Jonathan Cameron To: Nuno =?UTF-8?B?U8Oh?= Cc: Andy Shevchenko , Vinod Koul , Linus Walleij , Jonathan Cameron , Mark Brown , Kees Cook , linux-arm-kernel@lists.infradead.org, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-spi@vger.kernel.org, netdev@vger.kernel.org, linux-hardening@vger.kernel.org, Lars-Peter Clausen , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , "Gustavo A. R. Silva" , Nuno Sa Subject: Re: [PATCH v4 5/8] iio: core: Use new helpers from overflow.h in iio_device_alloc() Message-ID: <20240303130928.0c2fea09@jic23-huawei> In-Reply-To: <9519dda9acd9db009dcb43102cc9b36943b35217.camel@gmail.com> References: <20240228204919.3680786-1-andriy.shevchenko@linux.intel.com> <20240228204919.3680786-6-andriy.shevchenko@linux.intel.com> <9519dda9acd9db009dcb43102cc9b36943b35217.camel@gmail.com> X-Mailer: Claws Mail 4.2.0 (GTK 3.24.41; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240303_050949_956733_8F67EF10 X-CRM114-Status: GOOD ( 28.94 ) 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 T24gVGh1LCAyOSBGZWIgMjAyNCAxNjoyOTo0MyArMDEwMApOdW5vIFPDoSA8bm9uYW1lLm51bm9A Z21haWwuY29tPiB3cm90ZToKCj4gT24gV2VkLCAyMDI0LTAyLTI4IGF0IDIyOjQxICswMjAwLCBB bmR5IFNoZXZjaGVua28gd3JvdGU6Cj4gPiBXZSBoYXZlIHR3byBuZXcgaGVscGVycyBzdHJ1Y3Rf c2l6ZV93aXRoX2RhdGEoKSBhbmQgc3RydWN0X2RhdGFfcG9pbnRlcigpCj4gPiB0aGF0IHdlIGNh biB1dGlsaXplIGluIGlpb19kZXZpY2VfYWxsb2MoKS4gRG8gaXQgc28uCj4gPiAKPiA+IFNpZ25l ZC1vZmYtYnk6IEFuZHkgU2hldmNoZW5rbyA8YW5kcml5LnNoZXZjaGVua29AbGludXguaW50ZWwu Y29tPgo+ID4gUmV2aWV3ZWQtYnk6IE51bm8gU2EgPG51bm8uc2FAYW5hbG9nLmNvbT4KPiA+IC0t LQo+ID4gwqBkcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jIHwgNSArKy0tLQo+ID4gwqAx IGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+ID4gCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYyBiL2RyaXZlcnMvaWlv L2luZHVzdHJpYWxpby1jb3JlLmMKPiA+IGluZGV4IDE5ODZiMzM4NjMwNy4uMjIzMDEzNzI1ZTMy IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwo+ID4gKysr IGIvZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwo+ID4gQEAgLTE2NDQsNyArMTY0NCw3 IEBAIHN0cnVjdCBpaW9fZGV2ICppaW9fZGV2aWNlX2FsbG9jKHN0cnVjdCBkZXZpY2UgKnBhcmVu dCwKPiA+IGludCBzaXplb2ZfcHJpdikKPiA+IMKgCXNpemVfdCBhbGxvY19zaXplOwo+ID4gwqAK PiA+IMKgCWlmIChzaXplb2ZfcHJpdikKPiA+IC0JCWFsbG9jX3NpemUgPSBBTElHTihhbGxvY19z aXplLCBJSU9fRE1BX01JTkFMSUdOKSArCj4gPiBzaXplb2ZfcHJpdjsKPiA+ICsJCWFsbG9jX3Np emUgPSBzdHJ1Y3Rfc2l6ZV93aXRoX2RhdGEoaWlvX2Rldl9vcGFxdWUsCj4gPiBJSU9fRE1BX01J TkFMSUdOLCBzaXplb2ZfcHJpdik7Cj4gPiDCoAllbHNlCj4gPiDCoAkJYWxsb2Nfc2l6ZSA9IHNp emVvZihzdHJ1Y3QgaWlvX2Rldl9vcGFxdWUpOwo+ID4gwqAKPiA+IEBAIC0xNjU1LDggKzE2NTUs NyBAQCBzdHJ1Y3QgaWlvX2RldiAqaWlvX2RldmljZV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJl bnQsCj4gPiBpbnQgc2l6ZW9mX3ByaXYpCj4gPiDCoAlpbmRpb19kZXYgPSAmaWlvX2Rldl9vcGFx dWUtPmluZGlvX2RldjsKPiA+IMKgCj4gPiDCoAlpZiAoc2l6ZW9mX3ByaXYpCj4gPiAtCQlpbmRp b19kZXYtPnByaXYgPSAoY2hhciAqKWlpb19kZXZfb3BhcXVlICsKPiA+IC0JCQlBTElHTihzaXpl b2Yoc3RydWN0IGlpb19kZXZfb3BhcXVlKSwKPiA+IElJT19ETUFfTUlOQUxJR04pOwo+ID4gKwkJ aW5kaW9fZGV2LT5wcml2ID0gc3RydWN0X2RhdGFfcG9pbnRlcihpaW9fZGV2X29wYXF1ZSwKPiA+ IElJT19ETUFfTUlOQUxJR04pOyAgCj4gCj4gSSdkICsxIGZvciBpbXBsZW1lbnRpbmcgd2hhdCBL ZWVzIHN1Z2dlc3RlZCBpbiBJSU8uIE9ubHkgdGhpbmcgaXMgKEkgdGhpbmspLCB3ZQo+IG5lZWQg dG8gbW92ZSBzdHJ1Y3QgaWlvX2RldiBpbmRpb29fZGV2IHRvIHRoZSBlbmQgb2Ygc3RydWN0IGlp b19kZXZfb3BhcXVlLgoKVGhhdCBpcyBnb2luZyB0byBiZSBtZXNzeSBhbmQgd2l0aG91dCBob3Jy aWJsZSBoYWNrcyAoSSB0aGluaykgYWRkIG1vcmUgcGFkZGluZyB3ZQpkb24ndCBuZWVkLiAgQXQg dGhlIG1vbWVudCB0aGUgc3RydWN0IGlpb19kZXYgYW5kIHRoZSBzdHJ1Y3QgaWlvX2Rldl9vcGFx dWUKYXJlIGFsaWduZWQgYXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdHJ1Y3R1cmUuCgpUaGUgcHJp diBkYXRhIGlzIGFsaWduZWQgYnkgcGFkZGluZyB0aGUgbGFyZ2VyIHN0cnVjdCBpaW9fZGV2X29w YXF1ZSwKc28gaWYgeW91IHdhbnQgdGhlIHByaXYgaGFuZGxlIHRvIGJlIHRvIGRhdGEgZGVmaW5l ZCBpbiBzdHJ1Y3QgaWlvX2RldiB5b3Ugd291bGQKbmVlZCB0byBhZGQgYWRkaXRpb25hbCBwYWRk aW5nIHNvIHRoYXQKCnN0cnVjdCBpaW9fZGV2X29wYXF1ZSB7CglzdHVmZi4uLgoJLy8gdGhpcyBu ZXh0IF9fYWxpZ25lZCgpIGlzIGltcGxpY2l0IGFueXdheSBiZWNhdXNlIG9mIHRoZSBydWxlcyBm b3IKCS8vIGEgc3RydWN0dXJlIGFsd2F5cyBiZWluZyBhbGlnbmVkIHRvIHRoZSBhbGlnbm1lbnQg b2YgaXQncyBtYXggYWxpZ25lZAoJLy8gZWxlbWVudC4KCXN0cnVjdCBpaW9fZGV2IF9fYWxpZ25l ZCAoSUlPX0RNQV9BTElHTikgeyAgCgkJc3R1ZmYKCQl1OCBwcml2W10gX19hbGlnbmVkKElJT19E TUFfQUxJR04pOwoJfQp9CgpIb3cgYWJvdXQgdXNpbmcgd2hhdCBLZWVzIHN1Z2dlc3RzIG9uIHRo ZSBpaW9fZGV2X29wYXF1ZSAod2hpY2ggdGhpbmsgaXMgY2xlYW5lcgphbnl3YXkgYXMgdGhhdCdz IHdoYXQgd2UgYXJlIGFsbG9jYXRpbmcpIGFuZCBrZWVwaW5nIHRoZSBtYWdpYyBwb2ludGVyIHRv IHByaXYKaW4gdGhlIHN0cnVjdCBpaW9fZGV2OyBUaGUgY29tcGlsZXIgbG9vc2VzIHNvbWUgdmlz aWJpbGl0eSBmb3IgaWlvX3ByaXYoKSBhY2Nlc3NlcwpidXQgY2FuIGl0IGRvIG11Y2ggd2l0aCB0 aG9zZSBhbnl3YXk/IFRoZXkgYWx3YXlzIGdldCBjYXN0IHRvIGEgc3RydWN0IGRyaXZlcl9zcGVj aWZpYyAqCmFuZCBnZXR0aW5nIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uIHdyb25nIGlzIG5vdCBl YXN5IHRvIGRvIGFzIHdlIHBhc3MKdGhhdCBzdHJ1Y3Qgc2l6ZSBpbi4gIE5vdGUsIGZvciBvdGhl cnMgbm90IGF3YXJlIG9mIHdoYXQgaXMgZ29pbmcgb24gaGVyZSwgdGhlCnByaXYgcG9pbnRlciBp biBpaW9fZGV2IGlzIHRvIGFsbG93IGVmZmljaWVudCBzdGF0aWMgaW5saW5lIGlpb19wcml2KCkg Y2FsbHMgd2l0aG91dApuZWVkaW5nIHRvIGVpdGhlciBtYWtlIGEgZnVuY3Rpb24gY2FsbCwgb3Ig ZXhwb3NlIHRoZSBpbnRlcm5hbHMgb2YgdGhlIG9wYXF1ZQpzdHJ1Y3R1cmUgaW4gd2hpY2ggdGhl IGlpb19kZXYgYW5kIHRoZSBwcml2IGRhdGEgYXJlIGVtYmVkZGVkLgoKU3RhbmRhcmQgcGF0dGVy biBpczoKCnN0cnVjdCBkcml2ZXJfc3BlY2lmaWMgKmJvYjsKc3RydWN0IGlpb19kZXYgKmluZGlv X2RldiA9IGRldl9paW9fZGV2aWNlX2FsbG9jKGRldiwgc2l6ZW9mKCpib2IpKTsKLy8gd2hpY2gg YWxsb2NhdGVzIHRoZSBpaW9fZGV2X29wYXF1ZSwgYnV0IHJldHVybnMgdGhlIGNvbnRhaW5lZCBp aW9fZGV2CmJvYiA9IGlpb19wcml2KGluZGlvX2Rldik7CgpTbwoKc3RydWN0IGlpb19kZXZfb3Bh cXVlIHsKCXN0cnVjdCBpaW9fZGV2IGluZGlvX2RldiB7CgkJc3R1ZmYuLgoJCXZvaWQgKnByaXY7 CQoJfTsKCXN0dWZmLi4KCWludCBwcml2X2NvdW50OwoJdTggcHJpdltdIF9fYWxpZ25lZChJSU9f RE1BX0FMSUdOKSBfX2NvdW50ZWRfYnkocHJpdl9jb3VudCk7Cn0Kd2l0aCBpbmRpb19kZXYtPnBy aXYgPSBpaW9fZGV2X29wYXF1ZS0+ZGV2PwoKVGhpcyBjbGVhbnVwcyB1cCBhIGZldyBJSU8gY29y ZSBiaXRzIGJ1dCBubyBpbXBhY3Qgb3V0c2lkZSB0aGVtLgpOaWNlIHRvIGhhdmUgdGhvc2UgY2xl YW51cHMuCgpJcyB0aGVyZSBhbnkgd2F5IHRvIGhhdmUgdGhhdCBpbnRlcm5hbCBpaW9fZGV2LT5w cml2IHBvaW50ZXIgYXNzb2NpYXRlZCB3aXRoCmEgX19jb3VudGVkX2J5IGV2ZW4gdGhvdWdoIGl0 J3MgcG9pbnRpbmcgZWxzZXdoZXJlIHRoYW4gYSBsb2NhbCB2YXJpYWJsZSBzaXplZAp0cmFpbGlu ZyBlbGVtZW50PyAgCgpzdHJ1Y3QgaWlvX2RldiB7CglzdHVmZgoKCXUzMiBjb3VudDsKCXZvaWQg KnByaXYgX19jb3VudGVkX2J5KGNvdW50KTsKfQpjb21waWxlcyB3aXRoIGdjYyBidXQgd2l0aG91 dCBkaWdnaW5nIGZ1cnRoZXIgSSBoYXZlIG5vIGlkZWEgaWYgaXQgZG9lcyBhbnl0aGluZyB1c2Vm dWwhCgpKb25hdGhhbgoKPiAKPiAtIE51bm8gU8OhCj4gCj4gCj4gCgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5n IGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=