From owner-freebsd-wireless@FreeBSD.ORG Wed Feb 15 08:26:12 2012 Return-Path: Delivered-To: freebsd-wireless@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6D596106566C; Wed, 15 Feb 2012 08:26:12 +0000 (UTC) (envelope-from monthadar@gmail.com) Received: from mail-iy0-f182.google.com (mail-iy0-f182.google.com [209.85.210.182]) by mx1.freebsd.org (Postfix) with ESMTP id 14AC68FC0C; Wed, 15 Feb 2012 08:26:11 +0000 (UTC) Received: by iaeo4 with SMTP id o4so1450322iae.13 for ; Wed, 15 Feb 2012 00:26:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=YxQfUdTCiuNS/b4Cqvz2sULwiJ0wly8E0/NyIOObxQk=; b=nQNoknz3V5y3CN74YAnnlNFRKEM+MvV5Oh0yWMFU5XsjMz77vuDh8KLy/Ogqz20gAg 9myOySjEErx3pwpB7OxCfIJtBaEZEY0p2xieDz8uv/vBD3wcJx8p7VYh/2ghuyCOOqjW +IFQCGAcKHTKU0FgiOrr5P52u1PoPeVxS02k0= MIME-Version: 1.0 Received: by 10.43.48.65 with SMTP id uv1mr19072677icb.57.1329294371622; Wed, 15 Feb 2012 00:26:11 -0800 (PST) Received: by 10.50.213.74 with HTTP; Wed, 15 Feb 2012 00:26:11 -0800 (PST) In-Reply-To: <3F2E258F-1F82-48D7-AAAD-546BCB03EDE2@freebsd.org> References: <3F2E258F-1F82-48D7-AAAD-546BCB03EDE2@freebsd.org> Date: Wed, 15 Feb 2012 09:26:11 +0100 Message-ID: From: Monthadar Al Jaberi To: Rui Paulo Content-Type: multipart/mixed; boundary=bcaec529a061d2903404b8fc76ec Cc: freebsd-wireless@freebsd.org, Bernhard Schmidt Subject: Re: Fragment and 11s inconsistency X-BeenThere: freebsd-wireless@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Discussions of 802.11 stack, tools device driver development." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Feb 2012 08:26:12 -0000 --bcaec529a061d2903404b8fc76ec Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On Wed, Feb 15, 2012 at 5:50 AM, Rui Paulo wrote: > On 2012/02/14, at 14:14, Monthadar Al Jaberi wrote: > >> Hi, >> >> I cant verify this yet, but isn't there something wrong in current FreeB= SD? >> >> lets say an 11s data frame need to be fragmented in ieee80211_encap: >> if (addqos) >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 hdrsize =3D sizeof(struct ieee80211_qosframe= ); >> else >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 hdrsize =3D sizeof(struct ieee80211_frame); >> ... >> if (vap->iv_opmode =3D=3D IEEE80211_M_MBSS) { >> ... >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (!IEEE80211_IS_MULTICAST(eh.ether_dhost)) >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 hdrsize +=3D IEEE80211_ADDR_= LEN; =A0/* unicast are 4-addr */ >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 meshhdrsize =3D sizeof(struct ieee80211_mesh= cntl); >> } >> ... >> if (__predict_true((m->m_flags & M_FF) =3D=3D 0)) { >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* Normal frame. >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*/ >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 m =3D ieee80211_mbuf_adjust(vap, hdrspace + = meshhdrsize, key, m); >> } >> M_PREPEND(m, hdrspace + meshhdrsize, M_DONTWAIT); >> if (txfrag && !ieee80211_fragment(vap, m, hdrsize, >> =A0 =A0 =A0 =A0 =A0 key !=3D NULL ? key->wk_cipher->ic_header : 0, vap->= iv_fragthreshold)) >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 goto bad; >> >> This means we send meshcontrol only in first segment, because we never >> add meshhdrsize to hdrsize... > > Yes, this is a bug. Thanks for finding it. > >> but in mesh_input >> switch (type) { >> =A0 =A0 =A0 case IEEE80211_FC0_TYPE_DATA: >> ... >> meshdrlen =3D sizeof(struct ieee80211_meshcntl) + >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (mc->mc_flags & 3) * IEEE80211_ADDR_= LEN; >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 hdrspace +=3D meshdrlen; >> ... >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 /* >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* Potentially forward packet. =A0See tabl= e s36 (p140) >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* for the rules. =A0XXX tap fwd'd packets= not for us? >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0*/ >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (dir =3D=3D IEEE80211_FC1_DIR_FROMDS || >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 !mesh_isucastforme(vap, wh, mc)) { >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mesh_forward(vap, m, mc); >> ... >> if (!IEEE80211_IS_MULTICAST(wh->i_addr1)) { >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 m =3D ieee80211_defrag(ni, m= , hdrspace); >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (m =3D=3D NULL) { >> >> This seems wrong to me, how can we potentially forward before defragin >> the frame? this will fail cause sub-frag have no mesh control as code >> shows above. >> >> shouldnt the defrag code be moved above? > > Yes, another bug. > >> I am attaching a patch that both moves the defrag, validates that mesh >> control is present and makes 11s data frames QoS and set Mesh control >> bit present to 1 as the amendment specifies. > > There are some typos in your patch ("This is in constrast to Draf 4.0."). > > Can you please rewrite this code: > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 *(uint16_t *)qos =3D *(uint16_t *) > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 (((IEEE80211_IS_MULTICAST(wh->i_add= r1) && > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 dir =3D=3D IEEE80211_FC1_DIR_FROMDS= )) ? > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ((struct ieee80211_qosframe *)wh)->= i_qos : > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 ((struct ieee80211_qosframe_addr4 *= )wh)->i_qos); > > In ieee80211_encap(), why didn't you add meshhdrsize to ieee80211_fragmen= t()? Because the mesh control is not part of the header, it is in the frame body and should only be present in the first fragment of a frame. So I think this is correct. > > Would be nice to test this =A0before committing. Yes, Adrian and Bernhard are looking into the fragment code between net80211 and ath. It seems the code is broken. I am reattaching the patch thanks for your comments. > > Thanks, > -- > Rui Paulo > --=20 Monthadar Al Jaberi --bcaec529a061d2903404b8fc76ec Content-Type: text/x-patch; charset=US-ASCII; name="0001-Make-mesh-data-frames-to-be-quality-of-service-QoS.patch" Content-Disposition: attachment; filename="0001-Make-mesh-data-frames-to-be-quality-of-service-QoS.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gyo3jbm30 RnJvbSBjMGZlYjE3ODI1YTg2MGIxMTdiNWU3NzZiYWU5ZGRhYjNmZWRmNWI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNb250aGFkYXIgQWwgSmFiZXJpIDxtb250aGFkYXJAZ21haWwu Y29tPgpEYXRlOiBUdWUsIDE0IEZlYiAyMDEyIDE2OjQ3OjQzICswMTAwClN1YmplY3Q6IFtQQVRD SF0gTWFrZSBtZXNoIGRhdGEgZnJhbWVzIHRvIGJlIHF1YWxpdHkgb2Ygc2VydmljZSAoUW9TKS4K CiogSW50cm9kdWNlIG5ldyBmbGFnIGZvciBRb1MgY29udHJvbCBmaWVsZDsKKiBDaGFuZ2UgaW4g bWVzaF9pbnB1dCB0byB2YWxpZGF0ZSB0aGF0IFFvUyBpcyBzZXQgYW5kIE1lc2ggQ29udHJvbCBm aWVsZAppcyBwcmVzZW50LCBhbHNvIGJvdGggYnl0ZXMgb2YgdGhlIFFvUyBhcmUgcmVhZDsKKiBN b3ZlZCBkZWZyYWdtZW50YXRpb24gaW4gbWVzaF9pbnB1dCBiZWZvcmUgd2UgdHJ5IHRvIGZvcndh cmQgcGFja2V0IGFzCmluZmVycmVkIGZyb20gYW1lbmRtZW50IHNwZWMsIGJlY2F1c2UgTWVzaCBD b250cm9sIGZpZWxkIG9ubHkgcHJlc2VudCBpbiBmaXJzdApmcmFnbWVudDsKKiBDaGFuZ2VkIGlu IGllZWU4MDIxMV9lbmNhcCB0byBzZXQgUW9TIHN1YnR5cGUgYW5kIE1lc2ggQ29udHJvbCBmaWVs ZCBwcmVzZW50OwotLS0KIHN5cy9uZXQ4MDIxMS9pZWVlODAyMTEuaCAgICAgICAgfCAgICA3ICsr Kwogc3lzL25ldDgwMjExL2llZWU4MDIxMV9tZXNoLmMgICB8ICAgODUgKysrKysrKysrKysrKysr KysrKysrKysrKysrLS0tLS0tLS0tLS0KIHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfb3V0cHV0LmMg fCAgIDEzICsrKysrLQogMyBmaWxlcyBjaGFuZ2VkLCA3NyBpbnNlcnRpb25zKCspLCAyOCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zeXMvbmV0ODAyMTEvaWVlZTgwMjExLmggYi9zeXMvbmV0 ODAyMTEvaWVlZTgwMjExLmgKaW5kZXggMDI4YWZlYy4uMjliZmEzYyAxMDA2NDQKLS0tIGEvc3lz L25ldDgwMjExL2llZWU4MDIxMS5oCisrKyBiL3N5cy9uZXQ4MDIxMS9pZWVlODAyMTEuaApAQCAt MTk5LDYgKzE5OSwxMyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3Fvc2ZyYW1lX2FkZHI0IHsKICNkZWZp bmUJSUVFRTgwMjExX1FPU19FT1NQCQkJMHgxMAkvKiBFbmRPZlNlcnZpY2UgUGVyaW9kKi8KICNk ZWZpbmUJSUVFRTgwMjExX1FPU19FT1NQX1MJCQk0CiAjZGVmaW5lCUlFRUU4MDIxMV9RT1NfVElE CQkJMHgwZgorLyogcW9zWzFdIGJ5dGUgdXNlZCBmb3IgYWxsIGZyYW1lcyBzZW50IGJ5IG1lc2gg U1RBcyBpbiBhIG1lc2ggQlNTICovCisjZGVmaW5lIElFRUU4MDIxMV9RT1NfTUMJCQkweDEwCS8q IE1lc2ggY29udHJvbCAqLworLyogTWVzaCBwb3dlciBzYXZlIGxldmVsKi8KKyNkZWZpbmUgSUVF RTgwMjExX1FPU19NRVNIX1BTTAkJCTB4MjAKKy8qIE1lc2ggUmVjZWl2ZXIgU2VydmljZSBQZXJp b2QgSW5pdGlhdGVkICovCisjZGVmaW5lIElFRUU4MDIxMV9RT1NfUlNQSQkJCTB4NDAKKy8qIGJp dHMgMTEgdG8gMTUgcmVzZXJ2ZWQgKi8KIAogLyogZG9lcyBmcmFtZSBoYXZlIFFvUyBzZXF1ZW5j ZSBjb250cm9sIGRhdGEgKi8KICNkZWZpbmUJSUVFRTgwMjExX1FPU19IQVNfU0VRKHdoKSBcCmRp ZmYgLS1naXQgYS9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX21lc2guYyBiL3N5cy9uZXQ4MDIxMS9p ZWVlODAyMTFfbWVzaC5jCmluZGV4IGI5MmY2OTUuLmU0N2Q5MWEgMTAwNjQ0Ci0tLSBhL3N5cy9u ZXQ4MDIxMS9pZWVlODAyMTFfbWVzaC5jCisrKyBiL3N5cy9uZXQ4MDIxMS9pZWVlODAyMTFfbWVz aC5jCkBAIC0xMDQ3LDkgKzEwNDcsOSBAQCBtZXNoX2lucHV0KHN0cnVjdCBpZWVlODAyMTFfbm9k ZSAqbmksIHN0cnVjdCBtYnVmICptLCBpbnQgcnNzaSwgaW50IG5mKQogCXN0cnVjdCBpZWVlODAy MTFfZnJhbWUgKndoOwogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbWVzaGNudGwgKm1jOwogCWlu dCBoZHJzcGFjZSwgbWVzaGRybGVuLCBuZWVkX3RhcDsKLQl1aW50OF90IGRpciwgdHlwZSwgc3Vi dHlwZSwgcW9zOworCXVpbnQ4X3QgZGlyLCB0eXBlLCBzdWJ0eXBlOwogCXVpbnQzMl90IHNlcTsK LQl1aW50OF90ICphZGRyOworCXVpbnQ4X3QgKmFkZHIsIHFvc1syXTsKIAlpZWVlODAyMTFfc2Vx IHJ4c2VxOwogCiAJS0FTU0VSVChuaSAhPSBOVUxMLCAoIm51bGwgbm9kZSIpKTsKQEAgLTExNDYs OCArMTE0Niw2NCBAQCBtZXNoX2lucHV0KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIHN0cnVj dCBtYnVmICptLCBpbnQgcnNzaSwgaW50IG5mKQogCQkJdmFwLT5pdl9zdGF0cy5pc19yeF93cm9u Z2RpcisrOwogCQkJZ290byBlcnI7CiAJCX0KLQkJLyogcHVsbCB1cCBlbm91Z2ggdG8gZ2V0IHRv IHRoZSBtZXNoIGNvbnRyb2wgKi8KKworCQkvKiBBbGwgTWVzaCBkYXRhIGZyYW1lcyBhcmUgUW9T IHN1YnR5cGUgKi8KKwkJaWYgKCFIQVNfU0VRKHR5cGUpKSB7CisJCQlJRUVFODAyMTFfRElTQ0FS RCh2YXAsIElFRUU4MDIxMV9NU0dfSU5QVVQsCisJCQkgICAgd2gsICJkYXRhIiwgImluY29ycmVj dCBzdWJ0eXBlIDB4JXgiLCBzdWJ0eXBlKTsKKwkJCXZhcC0+aXZfc3RhdHMuaXNfcnhfYmFkc3Vi dHlwZSsrOworCQkJZ290byBlcnI7CisJCX0KKworCQkvKgorCQkgKiBOZXh0IHVwLCBhbnkgZnJh Z21lbnRhdGlvbi4KKwkJICogWFhYOiB3ZSBkZWZyYWcgYmVmb3JlIHdlIGV2ZW4gdHJ5IHRvIGZv cndhcmQsCisJCSAqIE1lc2ggQ29udHJvbCBmaWVsZCBpcyBub3QgcHJlc2VudCBpbiBzdWItc2Vx dWVudAorCQkgKiBmcmFnbWVudGVkIGZyYW1lcy4gVGhpcyBpcyBpbiBjb250cmFzdCB0byBEcmFm IDQuMC4KKwkJICovCiAJCWhkcnNwYWNlID0gaWVlZTgwMjExX2hkcnNwYWNlKGljLCB3aCk7CisJ CWlmICghSUVFRTgwMjExX0lTX01VTFRJQ0FTVCh3aC0+aV9hZGRyMSkpIHsKKwkJCW0gPSBpZWVl ODAyMTFfZGVmcmFnKG5pLCBtLCBoZHJzcGFjZSk7CisJCQlpZiAobSA9PSBOVUxMKSB7CisJCQkJ LyogRnJhZ21lbnQgZHJvcHBlZCBvciBmcmFtZSBub3QgY29tcGxldGUgeWV0ICovCisJCQkJZ290 byBvdXQ7CisJCQl9CisJCX0KKwkJd2ggPSBtdG9kKG0sIHN0cnVjdCBpZWVlODAyMTFfZnJhbWUg Kik7IC8qIE5COiBhZnRlciBkZWZyYWcgKi8KKworCQkvKgorCQkgKiBOb3cgd2UgaGF2ZSBhIGNv bXBsZXRlIE1lc2ggRGF0YSBmcmFtZS4KKwkJICovCisKKwkJLyoKKwkJICogT25seSBncm91cCBh ZGRyZXNzZWQgTWVzaCBkYXRhIGZyYW1lcyBhcmUgMyBhZGRyZXNzCisJCSAqIHFvcyBmcmFtZXMg YW1vbmcgdGhlIGRpZmZlcmVudCBNZXNoIERhdGEgZnJhbWVzIGFzCisJCSAqIHNwZWNpZmllZCBp biBhbWVuZG1lbnQuCisJCSAqLworCQlpZiAoSUVFRTgwMjExX0lTX01VTFRJQ0FTVCh3aC0+aV9h ZGRyMSkgJiYKKwkJICAgIGRpciA9PSBJRUVFODAyMTFfRkMxX0RJUl9GUk9NRFMpCisJCQkqKHVp bnQxNl90ICopcW9zID0gKih1aW50MTZfdCAqKQorCQkJICAgICgoc3RydWN0IGllZWU4MDIxMV9x b3NmcmFtZSAqKXdoKS0+aV9xb3M7CisJCWVsc2UKKwkJCSoodWludDE2X3QgKilxb3MgPSAqKHVp bnQxNl90ICopCisJCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfcW9zZnJhbWVfYWRkcjQgKil3aCkt PmlfcW9zOworCisJCS8qCisJCSAqIE5COiBUaGUgbWVzaCBTVEEgc2V0cyB0aGUgTWVzaCBDb250 cm9sIFByZXNlbnQKKwkJICogc3ViZmllbGQgdG8gMSBpbiB0aGUgTWVzaCBEYXRhIGZyYW1lIGNv bnRhaW5pbmcKKwkJICogYW4gdW5mcmFnbWVudGVkIE1TRFUsIGFuIEEtTVNEVSwgb3IgdGhlIGZp cnN0CisJCSAqIGZyYWdtZW50IG9mIGFuIE1TRFUuCisJCSAqIEFmdGVyIGRlZnJhZyBpdCBzaG91 bGQgYWx3YXlzIGJlIHByZXNlbnQuCisJCSAqLworCQlpZiAoIShxb3NbMV0gJiBJRUVFODAyMTFf UU9TX01DKSkgeworCQkJSUVFRTgwMjExX0RJU0NBUkRfTUFDKHZhcCwgSUVFRTgwMjExX01TR19N RVNILAorCQkJICAgIG5pLT5uaV9tYWNhZGRyLCBOVUxMLAorCQkJICAgICIlcyIsICJNZXNoIGNv bnRyb2wgZmllbGQgbm90IHByZXNlbnQiKTsKKwkJCXZhcC0+aXZfc3RhdHMuaXNfcnhfZWxlbV9t aXNzaW5nKys7IC8qIFhYWDoga2luZGEgKi8KKwkJCWdvdG8gZXJyOworCQl9CisKKwkJLyogcHVs bCB1cCBlbm91Z2ggdG8gZ2V0IHRvIHRoZSBtZXNoIGNvbnRyb2wgKi8KIAkJaWYgKG0tPm1fbGVu IDwgaGRyc3BhY2UgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZXNoY250bCkgJiYKIAkJICAg IChtID0gbV9wdWxsdXAobSwgaGRyc3BhY2UgKwogCQkgICAgICAgIHNpemVvZihzdHJ1Y3QgaWVl ZTgwMjExX21lc2hjbnRsKSkpID09IE5VTEwpIHsKQEAgLTExOTUsMjcgKzEyNTEsNiBAQCBtZXNo X2lucHV0KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIHN0cnVjdCBtYnVmICptLCBpbnQgcnNz aSwgaW50IG5mKQogCQkJLyogTkI6IGZhbGwgdGhydSB0byBkZWxpdmVyIG1jYXN0IGZyYW1lcyBs b2NhbGx5ICovCiAJCX0KIAotCQkvKgotCQkgKiBTYXZlIFFvUyBiaXRzIGZvciB1c2UgYmVsb3ct LWJlZm9yZSB3ZSBzdHJpcCB0aGUgaGVhZGVyLgotCQkgKi8KLQkJaWYgKHN1YnR5cGUgPT0gSUVF RTgwMjExX0ZDMF9TVUJUWVBFX1FPUykgewotCQkJcW9zID0gKGRpciA9PSBJRUVFODAyMTFfRkMx X0RJUl9EU1RPRFMpID8KLQkJCSAgICAoKHN0cnVjdCBpZWVlODAyMTFfcW9zZnJhbWVfYWRkcjQg Kil3aCktPmlfcW9zWzBdIDoKLQkJCSAgICAoKHN0cnVjdCBpZWVlODAyMTFfcW9zZnJhbWUgKil3 aCktPmlfcW9zWzBdOwotCQl9IGVsc2UKLQkJCXFvcyA9IDA7Ci0JCS8qCi0JCSAqIE5leHQgdXAs IGFueSBmcmFnbWVudGF0aW9uLgotCQkgKi8KLQkJaWYgKCFJRUVFODAyMTFfSVNfTVVMVElDQVNU KHdoLT5pX2FkZHIxKSkgewotCQkJbSA9IGllZWU4MDIxMV9kZWZyYWcobmksIG0sIGhkcnNwYWNl KTsKLQkJCWlmIChtID09IE5VTEwpIHsKLQkJCQkvKiBGcmFnbWVudCBkcm9wcGVkIG9yIGZyYW1l IG5vdCBjb21wbGV0ZSB5ZXQgKi8KLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCQl3aCA9IE5V TEw7CQkvKiBubyBsb25nZXIgdmFsaWQsIGNhdGNoIGFueSB1c2VzICovCi0KIAkJaWYgKGllZWU4 MDIxMV9yYWRpb3RhcF9hY3RpdmVfdmFwKHZhcCkpCiAJCQlpZWVlODAyMTFfcmFkaW90YXBfcngo dmFwLCBtKTsKIAkJbmVlZF90YXAgPSAwOwpAQCAtMTIzNiw3ICsxMjcxLDcgQEAgbWVzaF9pbnB1 dChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IHJzc2ksIGlu dCBuZikKIAkJCUlFRUU4MDIxMV9OT0RFX1NUQVQobmksIHJ4X2RlY2FwKTsKIAkJCWdvdG8gZXJy OwogCQl9Ci0JCWlmIChxb3MgJiBJRUVFODAyMTFfUU9TX0FNU0RVKSB7CisJCWlmIChxb3NbMF0g JiBJRUVFODAyMTFfUU9TX0FNU0RVKSB7CiAJCQltID0gaWVlZTgwMjExX2RlY2FwX2Ftc2R1KG5p LCBtKTsKIAkJCWlmIChtID09IE5VTEwpCiAJCQkJcmV0dXJuIElFRUU4MDIxMV9GQzBfVFlQRV9E QVRBOwpkaWZmIC0tZ2l0IGEvc3lzL25ldDgwMjExL2llZWU4MDIxMV9vdXRwdXQuYyBiL3N5cy9u ZXQ4MDIxMS9pZWVlODAyMTFfb3V0cHV0LmMKaW5kZXggZjYxNzdkOS4uOGIyYjUwMSAxMDA2NDQK LS0tIGEvc3lzL25ldDgwMjExL2llZWU4MDIxMV9vdXRwdXQuYworKysgYi9zeXMvbmV0ODAyMTEv aWVlZTgwMjExX291dHB1dC5jCkBAIC0xMDY5LDkgKzEwNjksMTEgQEAgaWVlZTgwMjExX2VuY2Fw KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKIAkg KiBhcCdzIHJlcXVpcmUgYWxsIGRhdGEgZnJhbWVzIHRvIGJlIFFvUy1lbmNhcHN1bGF0ZWQKIAkg KiBvbmNlIG5lZ290aWF0ZWQgaW4gd2hpY2ggY2FzZSB3ZSdsbCBuZWVkIHRvIG1ha2UgdGhpcwog CSAqIGNvbmZpZ3VyYWJsZS4KKwkgKiBOQjogbWVzaCBkYXRhIGZyYW1lcyBhcmUgUW9TLgogCSAq LwotCWFkZHFvcyA9IChuaS0+bmlfZmxhZ3MgJiAoSUVFRTgwMjExX05PREVfUU9TfElFRUU4MDIx MV9OT0RFX0hUKSkgJiYKLQkJIChtLT5tX2ZsYWdzICYgTV9FQVBPTCkgPT0gMDsKKwlhZGRxb3Mg PSAoKG5pLT5uaV9mbGFncyAmIChJRUVFODAyMTFfTk9ERV9RT1N8SUVFRTgwMjExX05PREVfSFQp KSB8fAorCSAgICAodmFwLT5pdl9vcG1vZGUgPT0gSUVFRTgwMjExX01fTUJTUykpICYmCisJICAg IChtLT5tX2ZsYWdzICYgTV9FQVBPTCkgPT0gMDsKIAlpZiAoYWRkcW9zKQogCQloZHJzaXplID0g c2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zZnJhbWUpOwogCWVsc2UKQEAgLTEyNzcsNyArMTI3 OSwxMiBAQCBpZWVlODAyMTFfZW5jYXAoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCBzdHJ1Y3Qg aWVlZTgwMjExX25vZGUgKm5pLAogCQlxb3NbMF0gPSB0aWQgJiBJRUVFODAyMTFfUU9TX1RJRDsK IAkJaWYgKGljLT5pY193bWUud21lX3dtZUNoYW5QYXJhbXMuY2FwX3dtZVBhcmFtc1thY10ud21l cF9ub2Fja1BvbGljeSkKIAkJCXFvc1swXSB8PSBJRUVFODAyMTFfUU9TX0FDS1BPTElDWV9OT0FD SzsKLQkJcW9zWzFdID0gMDsKKyNpZmRlZiBJRUVFODAyMTFfU1VQUE9SVF9NRVNICisJCWlmICh2 YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9NQlNTKSB7CisJCQlxb3NbMV0gfD0gSUVFRTgw MjExX1FPU19NQzsKKwkJfSBlbHNlCisjZW5kaWYKKwkJCXFvc1sxXSA9IDA7CiAJCXdoLT5pX2Zj WzBdIHw9IElFRUU4MDIxMV9GQzBfU1VCVFlQRV9RT1M7CiAKIAkJaWYgKChtLT5tX2ZsYWdzICYg TV9BTVBEVV9NUERVKSA9PSAwKSB7Ci0tIAoxLjcuNC4xCgo= --bcaec529a061d2903404b8fc76ec--