From owner-freebsd-wireless@FreeBSD.ORG Wed Feb 15 09:46:36 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 96283106566B; Wed, 15 Feb 2012 09:46:36 +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 394098FC20; Wed, 15 Feb 2012 09:46:36 +0000 (UTC) Received: by iaeo4 with SMTP id o4so1571359iae.13 for ; Wed, 15 Feb 2012 01:46:35 -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=0wsmZQ72XqhJy4DOrAldRv+pNksiqiDqyPcQQM4jLCo=; b=lXdDANhCJJMz406RwwtD7tGR1QWNHNdxwE2vcJKHKMg/M94uSseRHp40/fBymFjjut 06EGHG/aPZOvbPaRHaMorV1emq7iPmJN5MjPDfHoIV6SwKWtvmT7h3luveHVgThJQVu1 jQZaw3aacfvR7JrEFskVA5y0O+Z/P/cxLvUrk= MIME-Version: 1.0 Received: by 10.50.87.136 with SMTP id ay8mr23047319igb.25.1329299195917; Wed, 15 Feb 2012 01:46:35 -0800 (PST) Received: by 10.50.213.74 with HTTP; Wed, 15 Feb 2012 01:46:35 -0800 (PST) In-Reply-To: References: <3F2E258F-1F82-48D7-AAAD-546BCB03EDE2@freebsd.org> Date: Wed, 15 Feb 2012 10:46:35 +0100 Message-ID: From: Monthadar Al Jaberi To: Rui Paulo Content-Type: multipart/mixed; boundary=e89a8f3ba7075f750604b8fd96af 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 09:46:36 -0000 --e89a8f3ba7075f750604b8fd96af Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable sorry for the noise, I found out that I had an error when reading out the QoS control field, it is corrected now and I updated the comment. I tested the code without fragmentation and it should work fine now. On Wed, Feb 15, 2012 at 10:26 AM, Monthadar Al Jaberi wrote: > On Wed, Feb 15, 2012 at 9:26 AM, Monthadar Al Jaberi > wrote: >> 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 Fre= eBSD? >>>> >>>> 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_qosfra= me); >>>> 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_ADD= R_LEN; =A0/* unicast are 4-addr */ >>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 meshhdrsize =3D sizeof(struct ieee80211_me= shcntl); >>>> } >>>> ... >>>> 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_ADD= R_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 ta= ble s36 (p140) >>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0* for the rules. =A0XXX tap fwd'd packe= ts 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_a= ddr1) && >>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 dir =3D=3D IEEE80211_FC1_DIR_FROM= DS)) ? >>> + =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_fragm= ent()? >> >> 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. >> > > Attaching patch again; this time Mesh Control field is set to not > present for frags 1+. > >>> >>> 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 >>> >> >> >> >> -- >> Monthadar Al Jaberi > > br > > -- > Monthadar Al Jaberi --=20 Monthadar Al Jaberi --e89a8f3ba7075f750604b8fd96af 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_gyo6fv821 RnJvbSAzYzI0OGM5NjE1MDk3NTBkMTU0YWM0NGUwM2Y2ODA4Yzc4YzdhOGNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNb250aGFkYXIgQWwgSmFiZXJpIDxtb250aGFkYXJAZ21haWwu Y29tPgpEYXRlOiBUdWUsIDE0IEZlYiAyMDEyIDE2OjQ3OjQzICswMTAwClN1YmplY3Q6IFtQQVRD SF0gTWFrZSBtZXNoIGRhdGEgZnJhbWVzIHRvIGJlIHF1YWxpdHkgb2Ygc2VydmljZSAoUW9TKS4K CiogSW50cm9kdWNlIG5ldyBmbGFnIGZvciBRb1MgY29udHJvbCBmaWVsZDsKKiBDaGFuZ2UgaW4g bWVzaF9pbnB1dCB0byB2YWxpZGF0ZSB0aGF0IFFvUyBpcyBzZXQgYW5kIE1lc2ggQ29udHJvbCBm aWVsZAppcyBwcmVzZW50LCBhbHNvIGJvdGggYnl0ZXMgb2YgdGhlIFFvUyBhcmUgcmVhZDsKKiBN b3ZlZCBkZWZyYWdtZW50YXRpb24gaW4gbWVzaF9pbnB1dCBiZWZvcmUgd2UgdHJ5IHRvIGZvcndh cmQgcGFja2V0IGFzCmluZmVycmVkIGZyb20gYW1lbmRtZW50IHNwZWMsIGJlY2F1c2UgTWVzaCBD b250cm9sIGZpZWxkIG9ubHkgcHJlc2VudCBpbiBmaXJzdApmcmFnbWVudDsKKiBDaGFuZ2VkIGlu IGllZWU4MDIxMV9lbmNhcCB0byBzZXQgUW9TIHN1YnR5cGUgYW5kIE1lc2ggQ29udHJvbCBmaWVs ZCBwcmVzZW50LApvbmx5IGZpcnN0IGZyYWdtZW50IGhhdmUgTWVzaCBDb250cm9sIGZpZWxkIHBy ZXNlbnQgYml0IGVxdWFsIHRvIDE7Ci0tLQogc3lzL25ldDgwMjExL2llZWU4MDIxMS5oICAgICAg ICB8ICAgIDcgKysrCiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX21lc2guYyAgIHwgICA4NSArKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogc3lzL25ldDgwMjExL2llZWU4MDIx MV9vdXRwdXQuYyB8ICAgMjQgKysrKysrKysrKy0KIDMgZmlsZXMgY2hhbmdlZCwgODggaW5zZXJ0 aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3lzL25ldDgwMjExL2llZWU4 MDIxMS5oIGIvc3lzL25ldDgwMjExL2llZWU4MDIxMS5oCmluZGV4IDAyOGFmZWMuLjI5YmZhM2Mg MTAwNjQ0Ci0tLSBhL3N5cy9uZXQ4MDIxMS9pZWVlODAyMTEuaAorKysgYi9zeXMvbmV0ODAyMTEv aWVlZTgwMjExLmgKQEAgLTE5OSw2ICsxOTksMTMgQEAgc3RydWN0IGllZWU4MDIxMV9xb3NmcmFt ZV9hZGRyNCB7CiAjZGVmaW5lCUlFRUU4MDIxMV9RT1NfRU9TUAkJCTB4MTAJLyogRW5kT2ZTZXJ2 aWNlIFBlcmlvZCovCiAjZGVmaW5lCUlFRUU4MDIxMV9RT1NfRU9TUF9TCQkJNAogI2RlZmluZQlJ RUVFODAyMTFfUU9TX1RJRAkJCTB4MGYKKy8qIHFvc1sxXSBieXRlIHVzZWQgZm9yIGFsbCBmcmFt ZXMgc2VudCBieSBtZXNoIFNUQXMgaW4gYSBtZXNoIEJTUyAqLworI2RlZmluZSBJRUVFODAyMTFf UU9TX01DCQkJMHgxMAkvKiBNZXNoIGNvbnRyb2wgKi8KKy8qIE1lc2ggcG93ZXIgc2F2ZSBsZXZl bCovCisjZGVmaW5lIElFRUU4MDIxMV9RT1NfTUVTSF9QU0wJCQkweDIwCisvKiBNZXNoIFJlY2Vp dmVyIFNlcnZpY2UgUGVyaW9kIEluaXRpYXRlZCAqLworI2RlZmluZSBJRUVFODAyMTFfUU9TX1JT UEkJCQkweDQwCisvKiBiaXRzIDExIHRvIDE1IHJlc2VydmVkICovCiAKIC8qIGRvZXMgZnJhbWUg aGF2ZSBRb1Mgc2VxdWVuY2UgY29udHJvbCBkYXRhICovCiAjZGVmaW5lCUlFRUU4MDIxMV9RT1Nf SEFTX1NFUSh3aCkgXApkaWZmIC0tZ2l0IGEvc3lzL25ldDgwMjExL2llZWU4MDIxMV9tZXNoLmMg Yi9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX21lc2guYwppbmRleCBiOTJmNjk1Li44YjFhNmRiIDEw MDY0NAotLS0gYS9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX21lc2guYworKysgYi9zeXMvbmV0ODAy MTEvaWVlZTgwMjExX21lc2guYwpAQCAtMTA0Nyw5ICsxMDQ3LDkgQEAgbWVzaF9pbnB1dChzdHJ1 Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IHJzc2ksIGludCBuZikK IAlzdHJ1Y3QgaWVlZTgwMjExX2ZyYW1lICp3aDsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX21l c2hjbnRsICptYzsKIAlpbnQgaGRyc3BhY2UsIG1lc2hkcmxlbiwgbmVlZF90YXA7Ci0JdWludDhf dCBkaXIsIHR5cGUsIHN1YnR5cGUsIHFvczsKKwl1aW50OF90IGRpciwgdHlwZSwgc3VidHlwZTsK IAl1aW50MzJfdCBzZXE7Ci0JdWludDhfdCAqYWRkcjsKKwl1aW50OF90ICphZGRyLCBxb3NbMl07 CiAJaWVlZTgwMjExX3NlcSByeHNlcTsKIAogCUtBU1NFUlQobmkgIT0gTlVMTCwgKCJudWxsIG5v ZGUiKSk7CkBAIC0xMTQ2LDggKzExNDYsNjQgQEAgbWVzaF9pbnB1dChzdHJ1Y3QgaWVlZTgwMjEx X25vZGUgKm5pLCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IHJzc2ksIGludCBuZikKIAkJCXZhcC0+aXZf c3RhdHMuaXNfcnhfd3JvbmdkaXIrKzsKIAkJCWdvdG8gZXJyOwogCQl9Ci0JCS8qIHB1bGwgdXAg ZW5vdWdoIHRvIGdldCB0byB0aGUgbWVzaCBjb250cm9sICovCisKKwkJLyogQWxsIE1lc2ggZGF0 YSBmcmFtZXMgYXJlIFFvUyBzdWJ0eXBlICovCisJCWlmICghSEFTX1NFUSh0eXBlKSkgeworCQkJ SUVFRTgwMjExX0RJU0NBUkQodmFwLCBJRUVFODAyMTFfTVNHX0lOUFVULAorCQkJICAgIHdoLCAi ZGF0YSIsICJpbmNvcnJlY3Qgc3VidHlwZSAweCV4Iiwgc3VidHlwZSk7CisJCQl2YXAtPml2X3N0 YXRzLmlzX3J4X2JhZHN1YnR5cGUrKzsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJLyoKKwkJICog TmV4dCB1cCwgYW55IGZyYWdtZW50YXRpb24uCisJCSAqIFhYWDogd2UgZGVmcmFnIGJlZm9yZSB3 ZSBldmVuIHRyeSB0byBmb3J3YXJkLAorCQkgKiBNZXNoIENvbnRyb2wgZmllbGQgaXMgbm90IHBy ZXNlbnQgaW4gc3ViLXNlcXVlbnQKKwkJICogZnJhZ21lbnRlZCBmcmFtZXMuIFRoaXMgaXMgaW4g Y29udHJhc3QgdG8gRHJhZnQgNC4wLgorCQkgKi8KIAkJaGRyc3BhY2UgPSBpZWVlODAyMTFfaGRy c3BhY2UoaWMsIHdoKTsKKwkJaWYgKCFJRUVFODAyMTFfSVNfTVVMVElDQVNUKHdoLT5pX2FkZHIx KSkgeworCQkJbSA9IGllZWU4MDIxMV9kZWZyYWcobmksIG0sIGhkcnNwYWNlKTsKKwkJCWlmICht ID09IE5VTEwpIHsKKwkJCQkvKiBGcmFnbWVudCBkcm9wcGVkIG9yIGZyYW1lIG5vdCBjb21wbGV0 ZSB5ZXQgKi8KKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQl3aCA9IG10b2QobSwgc3RydWN0 IGllZWU4MDIxMV9mcmFtZSAqKTsgLyogTkI6IGFmdGVyIGRlZnJhZyAqLworCisJCS8qCisJCSAq IE5vdyB3ZSBoYXZlIGEgY29tcGxldGUgTWVzaCBEYXRhIGZyYW1lLgorCQkgKi8KKworCQkvKgor CQkgKiBPbmx5IGZyb21EU3RvRFMgZGF0YSBmcmFtZXMgdXNlIDQgYWRkcmVzcyBxb3MgZnJhbWVz CisJCSAqIGFzIHNwZWNpZmllZCBpbiBhbWVuZG1lbnQuIE90aGVyd2lzZSBhZGRyNCBpcyBsb2Nh dGVkCisJCSAqIGluIHRoZSBNZXNoIENvbnRyb2wgZmllbGQgYW5kIGEgMyBhZGRyZXNzIHFvcyBm cmFtZQorCQkgKiBpcyB1c2VkLgorCQkgKi8KKwkJaWYgKElFRUU4MDIxMV9JU19EU1RPRFMod2gp KQorCQkJKih1aW50MTZfdCAqKXFvcyA9ICoodWludDE2X3QgKikKKwkJCSAgICAoKHN0cnVjdCBp ZWVlODAyMTFfcW9zZnJhbWVfYWRkcjQgKil3aCktPmlfcW9zOworCQllbHNlCisJCQkqKHVpbnQx Nl90ICopcW9zID0gKih1aW50MTZfdCAqKQorCQkJICAgICgoc3RydWN0IGllZWU4MDIxMV9xb3Nm cmFtZSAqKXdoKS0+aV9xb3M7CisKKwkJLyoKKwkJICogTkI6IFRoZSBtZXNoIFNUQSBzZXRzIHRo ZSBNZXNoIENvbnRyb2wgUHJlc2VudAorCQkgKiBzdWJmaWVsZCB0byAxIGluIHRoZSBNZXNoIERh dGEgZnJhbWUgY29udGFpbmluZworCQkgKiBhbiB1bmZyYWdtZW50ZWQgTVNEVSwgYW4gQS1NU0RV LCBvciB0aGUgZmlyc3QKKwkJICogZnJhZ21lbnQgb2YgYW4gTVNEVS4KKwkJICogQWZ0ZXIgZGVm cmFnIGl0IHNob3VsZCBhbHdheXMgYmUgcHJlc2VudC4KKwkJICovCisJCWlmICghKHFvc1sxXSAm IElFRUU4MDIxMV9RT1NfTUMpKSB7CisJCQlJRUVFODAyMTFfRElTQ0FSRF9NQUModmFwLCBJRUVF ODAyMTFfTVNHX01FU0gsCisJCQkgICAgbmktPm5pX21hY2FkZHIsIE5VTEwsCisJCQkgICAgIiVz IiwgIk1lc2ggY29udHJvbCBmaWVsZCBub3QgcHJlc2VudCIpOworCQkJdmFwLT5pdl9zdGF0cy5p c19yeF9lbGVtX21pc3NpbmcrKzsgLyogWFhYOiBraW5kYSAqLworCQkJZ290byBlcnI7CisJCX0K KworCQkvKiBwdWxsIHVwIGVub3VnaCB0byBnZXQgdG8gdGhlIG1lc2ggY29udHJvbCAqLwogCQlp ZiAobS0+bV9sZW4gPCBoZHJzcGFjZSArIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21lc2hjbnRs KSAmJgogCQkgICAgKG0gPSBtX3B1bGx1cChtLCBoZHJzcGFjZSArCiAJCSAgICAgICAgc2l6ZW9m KHN0cnVjdCBpZWVlODAyMTFfbWVzaGNudGwpKSkgPT0gTlVMTCkgewpAQCAtMTE5NSwyNyArMTI1 MSw2IEBAIG1lc2hfaW5wdXQoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IG1idWYg Km0sIGludCByc3NpLCBpbnQgbmYpCiAJCQkvKiBOQjogZmFsbCB0aHJ1IHRvIGRlbGl2ZXIgbWNh c3QgZnJhbWVzIGxvY2FsbHkgKi8KIAkJfQogCi0JCS8qCi0JCSAqIFNhdmUgUW9TIGJpdHMgZm9y IHVzZSBiZWxvdy0tYmVmb3JlIHdlIHN0cmlwIHRoZSBoZWFkZXIuCi0JCSAqLwotCQlpZiAoc3Vi dHlwZSA9PSBJRUVFODAyMTFfRkMwX1NVQlRZUEVfUU9TKSB7Ci0JCQlxb3MgPSAoZGlyID09IElF RUU4MDIxMV9GQzFfRElSX0RTVE9EUykgPwotCQkJICAgICgoc3RydWN0IGllZWU4MDIxMV9xb3Nm cmFtZV9hZGRyNCAqKXdoKS0+aV9xb3NbMF0gOgotCQkJICAgICgoc3RydWN0IGllZWU4MDIxMV9x b3NmcmFtZSAqKXdoKS0+aV9xb3NbMF07Ci0JCX0gZWxzZQotCQkJcW9zID0gMDsKLQkJLyoKLQkJ ICogTmV4dCB1cCwgYW55IGZyYWdtZW50YXRpb24uCi0JCSAqLwotCQlpZiAoIUlFRUU4MDIxMV9J U19NVUxUSUNBU1Qod2gtPmlfYWRkcjEpKSB7Ci0JCQltID0gaWVlZTgwMjExX2RlZnJhZyhuaSwg bSwgaGRyc3BhY2UpOwotCQkJaWYgKG0gPT0gTlVMTCkgewotCQkJCS8qIEZyYWdtZW50IGRyb3Bw ZWQgb3IgZnJhbWUgbm90IGNvbXBsZXRlIHlldCAqLwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9 Ci0JCXdoID0gTlVMTDsJCS8qIG5vIGxvbmdlciB2YWxpZCwgY2F0Y2ggYW55IHVzZXMgKi8KLQog CQlpZiAoaWVlZTgwMjExX3JhZGlvdGFwX2FjdGl2ZV92YXAodmFwKSkKIAkJCWllZWU4MDIxMV9y YWRpb3RhcF9yeCh2YXAsIG0pOwogCQluZWVkX3RhcCA9IDA7CkBAIC0xMjM2LDcgKzEyNzEsNyBA QCBtZXNoX2lucHV0KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIHN0cnVjdCBtYnVmICptLCBp bnQgcnNzaSwgaW50IG5mKQogCQkJSUVFRTgwMjExX05PREVfU1RBVChuaSwgcnhfZGVjYXApOwog CQkJZ290byBlcnI7CiAJCX0KLQkJaWYgKHFvcyAmIElFRUU4MDIxMV9RT1NfQU1TRFUpIHsKKwkJ aWYgKHFvc1swXSAmIElFRUU4MDIxMV9RT1NfQU1TRFUpIHsKIAkJCW0gPSBpZWVlODAyMTFfZGVj YXBfYW1zZHUobmksIG0pOwogCQkJaWYgKG0gPT0gTlVMTCkKIAkJCQlyZXR1cm4gSUVFRTgwMjEx X0ZDMF9UWVBFX0RBVEE7CmRpZmYgLS1naXQgYS9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX291dHB1 dC5jIGIvc3lzL25ldDgwMjExL2llZWU4MDIxMV9vdXRwdXQuYwppbmRleCBmNjE3N2Q5Li4xYmQ5 NDUyIDEwMDY0NAotLS0gYS9zeXMvbmV0ODAyMTEvaWVlZTgwMjExX291dHB1dC5jCisrKyBiL3N5 cy9uZXQ4MDIxMS9pZWVlODAyMTFfb3V0cHV0LmMKQEAgLTEwNjksOSArMTA2OSwxMSBAQCBpZWVl ODAyMTFfZW5jYXAoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCBzdHJ1Y3QgaWVlZTgwMjExX25v ZGUgKm5pLAogCSAqIGFwJ3MgcmVxdWlyZSBhbGwgZGF0YSBmcmFtZXMgdG8gYmUgUW9TLWVuY2Fw c3VsYXRlZAogCSAqIG9uY2UgbmVnb3RpYXRlZCBpbiB3aGljaCBjYXNlIHdlJ2xsIG5lZWQgdG8g bWFrZSB0aGlzCiAJICogY29uZmlndXJhYmxlLgorCSAqIE5COiBtZXNoIGRhdGEgZnJhbWVzIGFy ZSBRb1MuCiAJICovCi0JYWRkcW9zID0gKG5pLT5uaV9mbGFncyAmIChJRUVFODAyMTFfTk9ERV9R T1N8SUVFRTgwMjExX05PREVfSFQpKSAmJgotCQkgKG0tPm1fZmxhZ3MgJiBNX0VBUE9MKSA9PSAw OworCWFkZHFvcyA9ICgobmktPm5pX2ZsYWdzICYgKElFRUU4MDIxMV9OT0RFX1FPU3xJRUVFODAy MTFfTk9ERV9IVCkpIHx8CisJICAgICh2YXAtPml2X29wbW9kZSA9PSBJRUVFODAyMTFfTV9NQlNT KSkgJiYKKwkgICAgKG0tPm1fZmxhZ3MgJiBNX0VBUE9MKSA9PSAwOwogCWlmIChhZGRxb3MpCiAJ CWhkcnNpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NmcmFtZSk7CiAJZWxzZQpAQCAt MTI3Nyw3ICsxMjc5LDEyIEBAIGllZWU4MDIxMV9lbmNhcChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2 YXAsIHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksCiAJCXFvc1swXSA9IHRpZCAmIElFRUU4MDIx MV9RT1NfVElEOwogCQlpZiAoaWMtPmljX3dtZS53bWVfd21lQ2hhblBhcmFtcy5jYXBfd21lUGFy YW1zW2FjXS53bWVwX25vYWNrUG9saWN5KQogCQkJcW9zWzBdIHw9IElFRUU4MDIxMV9RT1NfQUNL UE9MSUNZX05PQUNLOwotCQlxb3NbMV0gPSAwOworI2lmZGVmIElFRUU4MDIxMV9TVVBQT1JUX01F U0gKKwkJaWYgKHZhcC0+aXZfb3Btb2RlID09IElFRUU4MDIxMV9NX01CU1MpIHsKKwkJCXFvc1sx XSB8PSBJRUVFODAyMTFfUU9TX01DOworCQl9IGVsc2UKKyNlbmRpZgorCQkJcW9zWzFdID0gMDsK IAkJd2gtPmlfZmNbMF0gfD0gSUVFRTgwMjExX0ZDMF9TVUJUWVBFX1FPUzsKIAogCQlpZiAoKG0t Pm1fZmxhZ3MgJiBNX0FNUERVX01QRFUpID09IDApIHsKQEAgLTE0MDIsOSArMTQwOSwyMCBAQCBp ZWVlODAyMTFfZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCBzdHJ1Y3QgbWJ1ZiAq bTAsCiAJCSAqIHdlIG1hcmsgdGhlIGZpcnN0IGZyYWdtZW50IHdpdGggdGhlIE1PUkVfRlJBRyBi aXQKIAkJICogaXQgYXV0b21hdGljYWxseSBpcyBwcm9wYWdhdGVkIHRvIGVhY2ggZnJhZ21lbnQ7 IHdlCiAJCSAqIG5lZWQgb25seSBjbGVhciBpdCBvbiB0aGUgbGFzdCBmcmFnbWVudCAoZG9uZSBi ZWxvdykuCisJCSAqIE5COiBmcmFnIDErIGRvbnQgaGF2ZSBNZXNoIENvbnRyb2wgZmllbGQgcHJl c2VudC4KIAkJICovCiAJCXdoZiA9IG10b2QobSwgc3RydWN0IGllZWU4MDIxMV9mcmFtZSAqKTsK IAkJbWVtY3B5KHdoZiwgd2gsIGhkcnNpemUpOworI2lmZGVmIElFRUU4MDIxMV9TVVBQT1JUX01F U0gKKwkJaWYgKHZhcC0+aXZfb3Btb2RlID09IElFRUU4MDIxMV9NX01CU1MpIHsKKwkJCWlmIChJ RUVFODAyMTFfSVNfRFNUT0RTKHdoKSkKKwkJCQkoKHN0cnVjdCBpZWVlODAyMTFfcW9zZnJhbWVf YWRkcjQgKikKKwkJCQkgICAgd2hmKS0+aV9xb3NbMV0gJj0gfklFRUU4MDIxMV9RT1NfTUM7CisJ CQllbHNlCisJCQkJKChzdHJ1Y3QgaWVlZTgwMjExX3Fvc2ZyYW1lICopCisJCQkJICAgIHdoZikt PmlfcW9zWzFdICY9IH5JRUVFODAyMTFfUU9TX01DOworCQl9CisjZW5kaWYKIAkJKih1aW50MTZf dCAqKSZ3aGYtPmlfc2VxWzBdIHw9IGh0b2xlMTYoCiAJCQkoZnJhZ25vICYgSUVFRTgwMjExX1NF UV9GUkFHX01BU0spIDw8CiAJCQkJSUVFRTgwMjExX1NFUV9GUkFHX1NISUZUKTsKLS0gCjEuNy40 LjEKCg== --e89a8f3ba7075f750604b8fd96af--