From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas F Herbert Subject: [PATCH net-next V19 3/3] openvswitch: 802.1AD: Flow handling, actions, vlan parsing and netlink attributes Date: Fri, 30 Oct 2015 13:08:22 -0400 Message-ID: <1446224902-21246-4-git-send-email-thomasfherbert@gmail.com> References: <1446224902-21246-1-git-send-email-thomasfherbert@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: dev-yBygre7rU0TnMu66kgdUjQ@public.gmane.org, therbert-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org To: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, pshelar-l0M0P4e3n4LQT0dZR+AlfA@public.gmane.org Return-path: In-Reply-To: <1446224902-21246-1-git-send-email-thomasfherbert-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces-yBygre7rU0TnMu66kgdUjQ@public.gmane.org Sender: "dev" List-Id: netdev.vger.kernel.org QWRkIHN1cHBvcnQgZm9yIDgwMi4xYWQgaW5jbHVkaW5nIHRoZSBhYmlsaXR5IHRvIHB1c2ggYW5k IHBvcCBkb3VibGUKdGFnZ2VkIHZsYW5zLiBBZGQgc3VwcG9ydCBmb3IgODAyLjFhZCB0byBuZXRs aW5rIHBhcnNpbmcgYW5kIGZsb3cKY29udmVyc2lvbi4gVXNlcyBkb3VibGUgbmVzdGVkIGVuY2Fw IGF0dHJpYnV0ZXMgdG8gcmVwcmVzZW50IGRvdWJsZQp0YWdnZWQgdmxhbi4gSW5uZXIgVFBJRCBl bmNvZGVkIGFsb25nIHdpdGggY3RjaSBpbiBuZXN0ZWQgYXR0cmlidXRlcy4KClNpZ25lZC1vZmYt Ynk6IFRob21hcyBGIEhlcmJlcnQgPHRob21hc2ZoZXJiZXJ0QGdtYWlsLmNvbT4KLS0tCiBuZXQv b3BlbnZzd2l0Y2gvYWN0aW9ucy5jICAgICAgfCAgIDYgKy0KIG5ldC9vcGVudnN3aXRjaC9mbG93 LmMgICAgICAgICB8ICA3NiArKysrKysrKystLS0tCiBuZXQvb3BlbnZzd2l0Y2gvZmxvdy5oICAg ICAgICAgfCAgIDggKy0KIG5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYyB8IDIzNSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2VkLCAy NTEgaW5zZXJ0aW9ucygrKSwgNzQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52 c3dpdGNoL2FjdGlvbnMuYyBiL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMKaW5kZXggMjIxZmE4 Yi4uMmI0ZDAwMSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYworKysgYi9u ZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jCkBAIC0yMzYsNyArMjM2LDggQEAgc3RhdGljIGludCBw b3BfdmxhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSkKIAlp ZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkKIAkJaW52YWxpZGF0ZV9mbG93X2tleShrZXkp OwogCWVsc2UKLQkJa2V5LT5ldGgudGNpID0gMDsKKwkJa2V5LT5ldGgudmxhbi50Y2kgPSAwOwor CQlrZXktPmV0aC52bGFuLnRwaWQgPSAwOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI0Niw3ICsy NDcsOCBAQCBzdGF0aWMgaW50IHB1c2hfdmxhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qg c3dfZmxvd19rZXkgKmtleSwKIAlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkKIAkJaW52 YWxpZGF0ZV9mbG93X2tleShrZXkpOwogCWVsc2UKLQkJa2V5LT5ldGgudGNpID0gdmxhbi0+dmxh bl90Y2k7CisJCWtleS0+ZXRoLnZsYW4udGNpID0gdmxhbi0+dmxhbl90Y2k7CisJCWtleS0+ZXRo LnZsYW4udHBpZCA9IHZsYW4tPnZsYW5fdHBpZDsKIAlyZXR1cm4gc2tiX3ZsYW5fcHVzaChza2Is IHZsYW4tPnZsYW5fdHBpZCwKIAkJCSAgICAgbnRvaHModmxhbi0+dmxhbl90Y2kpICYgflZMQU5f VEFHX1BSRVNFTlQpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Zsb3cuYyBiL25l dC9vcGVudnN3aXRjaC9mbG93LmMKaW5kZXggMGVhMTI4ZS4uZThkNmJiYSAxMDA2NDQKLS0tIGEv bmV0L29wZW52c3dpdGNoL2Zsb3cuYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jCkBAIC0z MDIsMjQgKzMwMiw2OCBAQCBzdGF0aWMgYm9vbCBpY21wNmhkcl9vayhzdHJ1Y3Qgc2tfYnVmZiAq c2tiKQogCQkJCSAgc2l6ZW9mKHN0cnVjdCBpY21wNmhkcikpOwogfQogCi1zdGF0aWMgaW50IHBh cnNlX3ZsYW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpCisv KiBQYXJzZSB2bGFuIHRhZyBmcm9tIHZsYW4gaGVhZGVyLgorICogUmV0dXJucyBFUlJPUiBvbiBt ZW1vcnkgZXJyb3IuCisgKiBSZXR1cm5zIDAgaWYgaXQgZW5jb3VudGVycyBhIG5vbi12bGFuIG9y IGluY29tcGxldGUgcGFja2V0LgorICogUmV0dXJucyAxIGFmdGVyIHN1Y2Nlc3NmdWxseSBwYXJz aW5nIHZsYW4gdGFnLgorICovCisKK3N0YXRpYyBpbnQgcGFyc2Vfdmxhbl90YWcoc3RydWN0IHNr X2J1ZmYgKnNrYiwgc3RydWN0IHZsYW5faGVhZCAqdmxhbikKIHsKLQlzdHJ1Y3QgcXRhZ19wcmVm aXggewotCQlfX2JlMTYgZXRoX3R5cGU7IC8qIEVUSF9QXzgwMjFRICovCi0JCV9fYmUxNiB0Y2k7 Ci0JfTsKLQlzdHJ1Y3QgcXRhZ19wcmVmaXggKnFwOworCXN0cnVjdCB2bGFuX2hlYWQgKnFwID0g KHN0cnVjdCB2bGFuX2hlYWQgKilza2ItPmRhdGE7CisKKwlpZiAobGlrZWx5KCFldGhfdHlwZV92 bGFuKHFwLT50cGlkKSkpCisJCXJldHVybiAwOwogCi0JaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwg c2l6ZW9mKHN0cnVjdCBxdGFnX3ByZWZpeCkgKyBzaXplb2YoX19iZTE2KSkpCisJaWYgKHVubGlr ZWx5KHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCB2bGFuX2hlYWQpICsgc2l6ZW9mKF9fYmUxNikp KQogCQlyZXR1cm4gMDsKIAotCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHNpemVv ZihzdHJ1Y3QgcXRhZ19wcmVmaXgpICsKLQkJCQkJIHNpemVvZihfX2JlMTYpKSkpCisJaWYgKHVu bGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB2bGFuX2hlYWQpICsKKwkJ CQkgc2l6ZW9mKF9fYmUxNikpKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlxcCA9IChzdHJ1Y3Qg cXRhZ19wcmVmaXggKikgc2tiLT5kYXRhOwotCWtleS0+ZXRoLnRjaSA9IHFwLT50Y2kgfCBodG9u cyhWTEFOX1RBR19QUkVTRU5UKTsKLQlfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBxdGFn X3ByZWZpeCkpOworCXZsYW4tPnRjaSA9IHFwLT50Y2kgfCBodG9ucyhWTEFOX1RBR19QUkVTRU5U KTsKKwl2bGFuLT50cGlkID0gcXAtPnRwaWQ7CisKKwlfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0 cnVjdCB2bGFuX2hlYWQpKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwYXJzZV92bGFu KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KQoreworCWludCBy ZXM7CisKKwlrZXktPmV0aC52bGFuLnRjaSA9IDA7CisJa2V5LT5ldGgudmxhbi50cGlkID0gMDsK KwlrZXktPmV0aC5jdmxhbi50Y2kgPSAwOworCWtleS0+ZXRoLmN2bGFuLnRwaWQgPSAwOworCisJ aWYgKGxpa2VseShza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSkgeworCQlrZXktPmV0aC52bGFu LnRjaSA9IGh0b25zKHNrYi0+dmxhbl90Y2kpOworCQlrZXktPmV0aC52bGFuLnRwaWQgPSBza2It PnZsYW5fcHJvdG87CisKKwkJLyogQ2FzZSB3aGVyZSBpbmdyZXNzIHByb2Nlc3NpbmcgaGFzIGFs cmVhZHkgc3RyaXBwZWQKKwkJICogdGhlIG91dGVyIHZsYW4gdGFnLgorCQkgKi8KKwkJcmVzID0g cGFyc2Vfdmxhbl90YWcoc2tiLCAma2V5LT5ldGguY3ZsYW4pOworCQlpZiAocmVzIDwgMCkKKwkJ CXJldHVybiByZXM7CisJCS8qIEZvciBpbm5lciB0YWcsIHJldHVybiAwIGJlY2F1c2UgbmVpdGhl cgorCQkgKiBub24tZXhpc3RlbnQgbm9yIHBhcnRpYWwgaW5uZXIgdGFnIGlzIGFuIGVycm9yLgor CQkgKi8KKwkJcmV0dXJuIDA7CisJfQorCXJlcyA9IHBhcnNlX3ZsYW5fdGFnKHNrYiwgJmtleS0+ ZXRoLnZsYW4pOworCWlmIChyZXMgPD0gMCkKKwkJLyogVGhpcyBpcyBhbiBvdXRlciB0YWcgaW4g dGhlIG5vbi1hY2NlbGVyYXRlZCBWTEFOCisJCSAqIGNhc2UuIFJldHVybiBlcnJvciB1bmxlc3Mg aXQgaXMgYSBjb21wbGV0ZSB2bGFuIHRhZy4KKwkJICovCisJCXJldHVybiByZXM7CisKKwkvKiBQ YXJzZSBpbm5lciB2bGFuIHRhZyBpZiBwcmVzZW50IGZvciBub24tYWNjZWxlcmF0ZWQgY2FzZS4g Ki8KKwlyZXMgPSBwYXJzZV92bGFuX3RhZyhza2IsICZrZXktPmV0aC5jdmxhbik7CisJaWYgKHJl cyA8PSAwKQorCQlyZXR1cm4gcmVzOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00ODAsMTIgKzUyNCw4 IEBAIHN0YXRpYyBpbnQga2V5X2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3 X2Zsb3dfa2V5ICprZXkpCiAJICogdXBkYXRlIHNrYi0+Y3N1bSBoZXJlLgogCSAqLwogCi0Ja2V5 LT5ldGgudGNpID0gMDsKLQlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkKLQkJa2V5LT5l dGgudGNpID0gaHRvbnMoc2tiLT52bGFuX3RjaSk7Ci0JZWxzZSBpZiAoZXRoLT5oX3Byb3RvID09 IGh0b25zKEVUSF9QXzgwMjFRKSkKLQkJaWYgKHVubGlrZWx5KHBhcnNlX3ZsYW4oc2tiLCBrZXkp KSkKLQkJCXJldHVybiAtRU5PTUVNOworCWlmICh1bmxpa2VseShwYXJzZV92bGFuKHNrYiwga2V5 KSkpCisJCXJldHVybiAtRU5PTUVNOwogCiAJa2V5LT5ldGgudHlwZSA9IHBhcnNlX2V0aGVydHlw ZShza2IpOwogCWlmICh1bmxpa2VseShrZXktPmV0aC50eXBlID09IGh0b25zKDApKSkKZGlmZiAt LWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93LmggYi9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oCmlu ZGV4IDFkMDU1YzUuLjk3ODIxZGQgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93LmgK KysrIGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuaApAQCAtNTAsNiArNTAsMTEgQEAgc3RydWN0IG92 c190dW5uZWxfaW5mbyB7CiAJc3RydWN0IG1ldGFkYXRhX2RzdAkqdHVuX2RzdDsKIH07CiAKK3N0 cnVjdCB2bGFuX2hlYWQgeworCV9fYmUxNiB0cGlkOwkvKiBWbGFuIHR5cGUuIEdlbmVyYWxseSA4 MDIuMXEgb3IgODAyLjFhZC4qLworCV9fYmUxNiB0Y2k7CS8qIDAgaWYgbm8gVkxBTiwgVkxBTl9U QUdfUFJFU0VOVCBzZXQgb3RoZXJ3aXNlLiAqLworfTsKKwogI2RlZmluZSBPVlNfU1dfRkxPV19L RVlfTUVUQURBVEFfU0laRQkJCVwKIAkob2Zmc2V0b2Yoc3RydWN0IHN3X2Zsb3dfa2V5LCByZWNp cmNfaWQpICsJXAogCUZJRUxEX1NJWkVPRihzdHJ1Y3Qgc3dfZmxvd19rZXksIHJlY2lyY19pZCkp CkBAIC02OSw3ICs3NCw4IEBAIHN0cnVjdCBzd19mbG93X2tleSB7CiAJc3RydWN0IHsKIAkJdTgg ICAgIHNyY1tFVEhfQUxFTl07CS8qIEV0aGVybmV0IHNvdXJjZSBhZGRyZXNzLiAqLwogCQl1OCAg ICAgZHN0W0VUSF9BTEVOXTsJLyogRXRoZXJuZXQgZGVzdGluYXRpb24gYWRkcmVzcy4gKi8KLQkJ X19iZTE2IHRjaTsJCS8qIDAgaWYgbm8gVkxBTiwgVkxBTl9UQUdfUFJFU0VOVCBzZXQgb3RoZXJ3 aXNlLiAqLworCQlzdHJ1Y3Qgdmxhbl9oZWFkIHZsYW47CisJCXN0cnVjdCB2bGFuX2hlYWQgY3Zs YW47CiAJCV9fYmUxNiB0eXBlOwkJLyogRXRoZXJuZXQgZnJhbWUgdHlwZS4gKi8KIAl9IGV0aDsK IAl1bmlvbiB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMgYi9u ZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMKaW5kZXggOTA3ZDZmZC4uNjlmZDMzYSAxMDA2 NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jCisrKyBiL25ldC9vcGVudnN3 aXRjaC9mbG93X25ldGxpbmsuYwpAQCAtOTM0LDcgKzkzNCw3IEBAIHN0YXRpYyBpbnQgb3ZzX2tl eV9mcm9tX25sYXR0cnMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0 Y2gsCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCVNXX0ZMT1dfS0VZX1BVVChtYXRjaCwg ZXRoLnRjaSwgdGNpLCBpc19tYXNrKTsKKwkJU1dfRkxPV19LRVlfUFVUKG1hdGNoLCBldGgudmxh bi50Y2ksIHRjaSwgaXNfbWFzayk7CiAJCWF0dHJzICY9IH4oMSA8PCBPVlNfS0VZX0FUVFJfVkxB Tik7CiAJfQogCkBAIC0xMTU5LDYgKzExNTksMTQ2IEBAIHN0YXRpYyB2b2lkIG1hc2tfc2V0X25s YXR0cihzdHJ1Y3QgbmxhdHRyICphdHRyLCB1OCB2YWwpCiAJbmxhdHRyX3NldChhdHRyLCB2YWws IG92c19rZXlfbGVucyk7CiB9CiAKK3N0YXRpYyBpbnQgZW5jb2RlX3ZsYW5fZnJvbV9ubGF0dHJz KHN0cnVjdCBzd19mbG93X21hdGNoICptYXRjaCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IG5sYXR0 ciAqYVtdLAorCQkJCSAgICBib29sIGlzX21hc2ssIGJvb2wgaW5uZXIsIGJvb2wgbG9nKQorewor CV9fYmUxNiB0Y2kgPSAwOworCV9fYmUxNiB0cGlkID0gMDsKKworCWlmIChhW09WU19LRVlfQVRU Ul9WTEFOXSkKKwkJdGNpID0gbmxhX2dldF9iZTE2KGFbT1ZTX0tFWV9BVFRSX1ZMQU5dKTsKKwor CWlmIChhW09WU19LRVlfQVRUUl9FVEhFUlRZUEVdKQorCQl0cGlkID0gbmxhX2dldF9iZTE2KGFb T1ZTX0tFWV9BVFRSX0VUSEVSVFlQRV0pOworCisJaWYgKGlzX21hc2sgJiYgdHBpZCAhPSBodG9u cygweGZmZmYpKSB7CisJCWlmIChsaWtlbHkoIWlubmVyKSkKKwkJCU9WU19OTEVSUihsb2csICJW TEFOIGZyYW1lcyBtdXN0IGhhdmUgYW4gZXhhY3QgbWF0Y2ggb24gdGhlIFRQSUQgKG1hc2s9JXgp LiIsCisJCQkJICBudG9ocyh0cGlkKSk7CisJCWVsc2UKKwkJCU9WU19OTEVSUihsb2csICJWTEFO IGZyYW1lcyBtdXN0IGhhdmUgYW4gZXhhY3QgbWF0Y2ggb24gdGhlIENUUElEIChtYXNrPSV4KS4i LAorCQkJCSAgbnRvaHModHBpZCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKCEodGNp ICYgaHRvbnMoVkxBTl9UQUdfUFJFU0VOVCkpKSB7CisJCWlmIChpc19tYXNrKQorCQkJaWYgKGxp a2VseSghaW5uZXIpKQorCQkJCU9WU19OTEVSUihsb2csICJWTEFOIFRDSSBtYXNrIGRvZXMgbm90 IGhhdmUgZXhhY3QgbWF0Y2ggZm9yIFZMQU5fVEFHX1BSRVNFTlQgYml0LiIpOworCQkJZWxzZQor CQkJCU9WU19OTEVSUihsb2csICJWTEFOIENUQ0kgbWFzayBkb2VzIG5vdCBoYXZlIGV4YWN0IG1h dGNoIGZvciBWTEFOX1RBR19QUkVTRU5UIGJpdC4iKTsKKwkJZWxzZQorCQkJaWYgKGxpa2VseSgh aW5uZXIpKQorCQkJCU9WU19OTEVSUihsb2csICJWTEFOIFRDSSBkb2VzIG5vdCBoYXZlIFZMQU5f VEFHX1BSRVNFTlQgYml0IHNldC4iKTsKKwkJCWVsc2UKKwkJCQlPVlNfTkxFUlIobG9nLCAiVkxB TiBDVENJIGRvZXMgbm90IGhhdmUgVkxBTl9UQUdfUFJFU0VOVCBiaXQgc2V0LiIpOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisJaWYgKGxpa2VseSghaW5uZXIpKSB7CisJCVNXX0ZMT1dfS0VZX1BV VChtYXRjaCwgZXRoLnZsYW4udHBpZCwgdHBpZCwgaXNfbWFzayk7CisJCVNXX0ZMT1dfS0VZX1BV VChtYXRjaCwgZXRoLnZsYW4udGNpLCB0Y2ksIGlzX21hc2spOworCX0gZWxzZSB7CisJCVNXX0ZM T1dfS0VZX1BVVChtYXRjaCwgZXRoLmN2bGFuLnRwaWQsIHRwaWQsIGlzX21hc2spOworCQlTV19G TE9XX0tFWV9QVVQobWF0Y2gsIGV0aC5jdmxhbi50Y2ksIHRjaSwgaXNfbWFzayk7CisJfQorCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IF9fcGFyc2Vfdmxhbl9mcm9tX25sYXR0cnMoY29uc3Qg c3RydWN0IG5sYXR0ciAqKm5sYSwKKwkJCQkgICAgIHN0cnVjdCBzd19mbG93X21hdGNoICptYXRj aCwKKwkJCQkgICAgIHU2NCAqa2V5X2F0dHJzLCBib29sIGlubmVyLAorCQkJCSAgICAgY29uc3Qg c3RydWN0IG5sYXR0ciAqKmEsIGJvb2wgaXNfbWFzaywKKwkJCQkgICAgIGJvb2wgbG9nKQorewor CWludCBlcnI7CisJdTY0IHZfYXR0cnMgPSAqa2V5X2F0dHJzOworCisJZXJyID0gZW5jb2RlX3Zs YW5fZnJvbV9ubGF0dHJzKG1hdGNoLCBhLCBpc19tYXNrLCBpbm5lciwgbG9nKTsKKwlpZiAoZXJy KQorCQlyZXR1cm4gZXJyOworCisJdl9hdHRycyAmPSB+KDEgPDwgT1ZTX0tFWV9BVFRSX0VOQ0FQ KTsKKworCS8qIEluc3VyZSB0aGF0IHRjaSBrZXkgYXR0cmlidXRlIGlzbid0CisJICogb3Zlcndy aXR0ZW4gYnkgZW5jYXBzdWxhdGVkIGN1c3RvbWVyIHRjaS4KKwkgKiBFdGhlcnR5cGUgaXMgY2xl YXJlZCBiZWNhdXNlIGl0IGlzIGNfdHBpZC4KKwkgKi8KKwl2X2F0dHJzICY9IH4oMSA8PCBPVlNf S0VZX0FUVFJfVkxBTik7CisJdl9hdHRycyAmPSB+KDEgPDwgT1ZTX0tFWV9BVFRSX0VUSEVSVFlQ RSk7CisKKwkqa2V5X2F0dHJzID0gdl9hdHRyczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IHBhcnNlX3ZsYW5fZnJvbV9ubGF0dHJzKGNvbnN0IHN0cnVjdCBubGF0dHIgKipubGEsCisJ CQkJICAgc3RydWN0IHN3X2Zsb3dfbWF0Y2ggKm1hdGNoLAorCQkJCSAgIHU2NCAqa2V5X2F0dHJz LCBib29sICppZV92YWxpZCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICoqYSwgYm9vbCBp c19tYXNrLAorCQkJCSAgIGJvb2wgbG9nKQoreworCWludCBlcnI7CisJY29uc3Qgc3RydWN0IG5s YXR0ciAqZW5jYXA7CisJdTY0IHZfYXR0cnMgPSAwOworCisJaWYgKCFpc19tYXNrKSB7CisJCWVy ciA9IF9fcGFyc2Vfdmxhbl9mcm9tX25sYXR0cnMobmxhLCBtYXRjaCwga2V5X2F0dHJzLAorCQkJ CQkJZmFsc2UsIGEsIGlzX21hc2ssIGxvZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOwor CisJCS8qIEFub3RoZXIgZW5jYXAgYXR0cmlidXRlIGhlcmUgaW5kaWNhdGVzCisJCSAqIHRoZSBw cmVzZW5jZSBvZiBhIGRvdWJsZSB0YWdnZWQgdmxhbi4KKwkJICovCisJCWVuY2FwID0gYVtPVlNf S0VZX0FUVFJfRU5DQVBdOworCisJCWVyciA9IHBhcnNlX2Zsb3dfbmxhdHRycyhlbmNhcCwgYSwg JnZfYXR0cnMsIGxvZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWlmICgodl9h dHRycyAmICgxIDw8IE9WU19LRVlfQVRUUl9FVEhFUlRZUEUpKSAmJgorCQkgICAgZXRoX3R5cGVf dmxhbihubGFfZ2V0X2JlMTYoYVtPVlNfS0VZX0FUVFJfRVRIRVJUWVBFXSkpKSB7CisJCQlpZiAo ISgodl9hdHRycyAmICgxIDw8IE9WU19LRVlfQVRUUl9WTEFOKSkgJiYKKwkJCSAgICAgICh2X2F0 dHJzICYgKDEgPDwgT1ZTX0tFWV9BVFRSX0VOQ0FQKSkpKSB7CisJCQkJT1ZTX05MRVJSKGxvZywg IkludmFsaWQgSW5uZXIgVkxBTiBmcmFtZSIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQor CQkJKmllX3ZhbGlkID0gdHJ1ZTsKKwkJCWVyciA9IF9fcGFyc2Vfdmxhbl9mcm9tX25sYXR0cnMo JmVuY2FwLCBtYXRjaCwgJnZfYXR0cnMsCisJCQkJCQkJdHJ1ZSwgYSwgaXNfbWFzaywgbG9nKTsK KwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJCSprZXlfYXR0cnMgfD0gdl9hdHRyczsK KwkJfQorCX0gZWxzZSB7CisJCWVyciA9IF9fcGFyc2Vfdmxhbl9mcm9tX25sYXR0cnMobmxhLCBt YXRjaCwga2V5X2F0dHJzLAorCQkJCQkJZmFsc2UsIGEsIGlzX21hc2ssIGxvZyk7CisJCWlmIChl cnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVuY2FwID0gYVtPVlNfS0VZX0FUVFJfRU5DQVBdOwor CisJCWVyciA9IHBhcnNlX2Zsb3dfbmxhdHRycyhlbmNhcCwgYSwgJnZfYXR0cnMsIGxvZyk7CisJ CWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWlmICh2X2F0dHJzICYgKDEgPDwgT1ZTX0tF WV9BVFRSX0VOQ0FQKSkgeworCQkJaWYgKCEqaWVfdmFsaWQpIHsKKwkJCQlPVlNfTkxFUlIobG9n LCAiRW5jYXAgbWFzayBhdHRyaWJ1dGUgaXMgc2V0IGZvciBub24tQ1ZMQU4gZnJhbWUuIik7CisJ CQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQllcnIgPSBfX3BhcnNlX3ZsYW5fZnJvbV9ubGF0 dHJzKG5sYSwgbWF0Y2gsCisJCQkJCQkJJnZfYXR0cnMsIHRydWUsIGEsCisJCQkJCQkJaXNfbWFz aywKKwkJCQkJCQlsb2cpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQkJKmtleV9h dHRycyB8PSB2X2F0dHJzOworCQl9CisJfQorCXJldHVybiAwOworfQorCiAvKioKICAqIG92c19u bGFfZ2V0X21hdGNoIC0gcGFyc2VzIE5ldGxpbmsgYXR0cmlidXRlcyBpbnRvIGEgZmxvdyBrZXkg YW5kCiAgKiBtYXNrLiBJbiBjYXNlIHRoZSAnbWFzaycgaXMgTlVMTCwgdGhlIGZsb3cgaXMgdHJl YXRlZCBhcyBleGFjdCBtYXRjaApAQCAtMTE4Niw2ICsxMzI2LDcgQEAgaW50IG92c19ubGFfZ2V0 X21hdGNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHN3X2Zsb3dfbWF0Y2ggKm1hdGNoLAogCXU2 NCBrZXlfYXR0cnMgPSAwOwogCXU2NCBtYXNrX2F0dHJzID0gMDsKIAlib29sIGVuY2FwX3ZhbGlk ID0gZmFsc2U7CisJYm9vbCBpX2VuY2FwX3ZhbGlkID0gZmFsc2U7CiAJaW50IGVycjsKIAogCWVy ciA9IHBhcnNlX2Zsb3dfbmxhdHRycyhubGFfa2V5LCBhLCAma2V5X2F0dHJzLCBsb2cpOwpAQCAt MTE5NCw4ICsxMzM1LDcgQEAgaW50IG92c19ubGFfZ2V0X21hdGNoKHN0cnVjdCBuZXQgKm5ldCwg c3RydWN0IHN3X2Zsb3dfbWF0Y2ggKm1hdGNoLAogCiAJaWYgKChrZXlfYXR0cnMgJiAoMSA8PCBP VlNfS0VZX0FUVFJfRVRIRVJORVQpKSAmJgogCSAgICAoa2V5X2F0dHJzICYgKDEgPDwgT1ZTX0tF WV9BVFRSX0VUSEVSVFlQRSkpICYmCi0JICAgIChubGFfZ2V0X2JlMTYoYVtPVlNfS0VZX0FUVFJf RVRIRVJUWVBFXSkgPT0gaHRvbnMoRVRIX1BfODAyMVEpKSkgewotCQlfX2JlMTYgdGNpOworCSAg ICBldGhfdHlwZV92bGFuKG5sYV9nZXRfYmUxNihhW09WU19LRVlfQVRUUl9FVEhFUlRZUEVdKSkp IHsKIAogCQlpZiAoISgoa2V5X2F0dHJzICYgKDEgPDwgT1ZTX0tFWV9BVFRSX1ZMQU4pKSAmJgog CQkgICAgICAoa2V5X2F0dHJzICYgKDEgPDwgT1ZTX0tFWV9BVFRSX0VOQ0FQKSkpKSB7CkBAIC0x MjAzLDI2ICsxMzQzLDE1IEBAIGludCBvdnNfbmxhX2dldF9tYXRjaChzdHJ1Y3QgbmV0ICpuZXQs IHN0cnVjdCBzd19mbG93X21hdGNoICptYXRjaCwKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAK LQkJa2V5X2F0dHJzICY9IH4oMSA8PCBPVlNfS0VZX0FUVFJfRVRIRVJUWVBFKTsKLQkJdGNpID0g bmxhX2dldF9iZTE2KGFbT1ZTX0tFWV9BVFRSX1ZMQU5dKTsKIAkJZW5jYXAgPSBhW09WU19LRVlf QVRUUl9FTkNBUF07Ci0JCWtleV9hdHRycyAmPSB+KDEgPDwgT1ZTX0tFWV9BVFRSX0VOQ0FQKTsK IAkJZW5jYXBfdmFsaWQgPSB0cnVlOwogCi0JCWlmICh0Y2kgJiBodG9ucyhWTEFOX1RBR19QUkVT RU5UKSkgewotCQkJZXJyID0gcGFyc2VfZmxvd19ubGF0dHJzKGVuY2FwLCBhLCAma2V5X2F0dHJz LCBsb2cpOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQl9IGVsc2UgaWYgKCF0Y2kp IHsKLQkJCS8qIENvcm5lciBjYXNlIGZvciB0cnVuY2F0ZWQgODAyLjFRIGhlYWRlci4gKi8KLQkJ CWlmIChubGFfbGVuKGVuY2FwKSkgewotCQkJCU9WU19OTEVSUihsb2csICJUcnVuY2F0ZWQgODAy LjFRIGhlYWRlciBoYXMgbm9uLXplcm8gZW5jYXAgYXR0cmlidXRlLiIpOwotCQkJCXJldHVybiAt RUlOVkFMOwotCQkJfQotCQl9IGVsc2UgewotCQkJT1ZTX05MRVJSKGxvZywgIkVuY2FwIGF0dHIg aXMgc2V0IGZvciBub24tVkxBTiBmcmFtZSIpOwotCQkJcmV0dXJuICAtRUlOVkFMOwotCQl9CisJ CWVyciA9IHBhcnNlX3ZsYW5fZnJvbV9ubGF0dHJzKCZlbmNhcCwgbWF0Y2gsCisJCQkJCSAgICAg ICZrZXlfYXR0cnMsCisJCQkJCSAgICAgICZpX2VuY2FwX3ZhbGlkLCBhLCBmYWxzZSwKKwkJCQkJ ICAgICAgbG9nKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CiAJfQogCiAJZXJyID0gb3Zz X2tleV9mcm9tX25sYXR0cnMobmV0LCBtYXRjaCwga2V5X2F0dHJzLCBhLCBmYWxzZSwgbG9nKTsK QEAgLTEyNjQsMTEgKzEzOTMsMTEgQEAgaW50IG92c19ubGFfZ2V0X21hdGNoKHN0cnVjdCBuZXQg Km5ldCwgc3RydWN0IHN3X2Zsb3dfbWF0Y2ggKm1hdGNoLAogCQkJZ290byBmcmVlX25ld21hc2s7 CiAKIAkJLyogQWx3YXlzIG1hdGNoIG9uIHRjaS4gKi8KLQkJU1dfRkxPV19LRVlfUFVUKG1hdGNo LCBldGgudGNpLCBodG9ucygweGZmZmYpLCB0cnVlKTsKKwkJU1dfRkxPV19LRVlfUFVUKG1hdGNo LCBldGgudmxhbi50Y2ksIGh0b25zKDB4ZmZmZiksIHRydWUpOworCQlTV19GTE9XX0tFWV9QVVQo bWF0Y2gsIGV0aC5jdmxhbi50Y2ksIGh0b25zKDB4ZmZmZiksIHRydWUpOwogCiAJCWlmIChtYXNr X2F0dHJzICYgMSA8PCBPVlNfS0VZX0FUVFJfRU5DQVApIHsKIAkJCV9fYmUxNiBldGhfdHlwZSA9 IDA7Ci0JCQlfX2JlMTYgdGNpID0gMDsKIAogCQkJaWYgKCFlbmNhcF92YWxpZCkgewogCQkJCU9W U19OTEVSUihsb2csICJFbmNhcCBtYXNrIGF0dHJpYnV0ZSBpcyBzZXQgZm9yIG5vbi1WTEFOIGZy YW1lLiIpOwpAQCAtMTI4MCwyOSArMTQwOSwxNCBAQCBpbnQgb3ZzX25sYV9nZXRfbWF0Y2goc3Ry dWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gsCiAJCQlpZiAoYVtPVlNf S0VZX0FUVFJfRVRIRVJUWVBFXSkKIAkJCQlldGhfdHlwZSA9IG5sYV9nZXRfYmUxNihhW09WU19L RVlfQVRUUl9FVEhFUlRZUEVdKTsKIAotCQkJaWYgKGV0aF90eXBlID09IGh0b25zKDB4ZmZmZikp IHsKLQkJCQltYXNrX2F0dHJzICY9IH4oMSA8PCBPVlNfS0VZX0FUVFJfRVRIRVJUWVBFKTsKLQkJ CQllbmNhcCA9IGFbT1ZTX0tFWV9BVFRSX0VOQ0FQXTsKLQkJCQllcnIgPSBwYXJzZV9mbG93X21h c2tfbmxhdHRycyhlbmNhcCwgYSwKLQkJCQkJCQkgICAgICAmbWFza19hdHRycywgbG9nKTsKLQkJ CQlpZiAoZXJyKQotCQkJCQlnb3RvIGZyZWVfbmV3bWFzazsKLQkJCX0gZWxzZSB7Ci0JCQkJT1ZT X05MRVJSKGxvZywgIlZMQU4gZnJhbWVzIG11c3QgaGF2ZSBhbiBleGFjdCBtYXRjaCBvbiB0aGUg VFBJRCAobWFzaz0leCkuIiwKLQkJCQkJICBudG9ocyhldGhfdHlwZSkpOwotCQkJCWVyciA9IC1F SU5WQUw7Ci0JCQkJZ290byBmcmVlX25ld21hc2s7Ci0JCQl9Ci0KLQkJCWlmIChhW09WU19LRVlf QVRUUl9WTEFOXSkKLQkJCQl0Y2kgPSBubGFfZ2V0X2JlMTYoYVtPVlNfS0VZX0FUVFJfVkxBTl0p OwotCi0JCQlpZiAoISh0Y2kgJiBodG9ucyhWTEFOX1RBR19QUkVTRU5UKSkpIHsKLQkJCQlPVlNf TkxFUlIobG9nLCAiVkxBTiB0YWcgcHJlc2VudCBiaXQgbXVzdCBoYXZlIGFuIGV4YWN0IG1hdGNo ICh0Y2lfbWFzaz0leCkuIiwKLQkJCQkJICBudG9ocyh0Y2kpKTsKLQkJCQllcnIgPSAtRUlOVkFM OworCQkJbWFza19hdHRycyAmPSB+KDEgPDwgT1ZTX0tFWV9BVFRSX0VUSEVSVFlQRSk7CisJCQll bmNhcCA9IGFbT1ZTX0tFWV9BVFRSX0VOQ0FQXTsKKwkJCWVyciA9IHBhcnNlX3ZsYW5fZnJvbV9u bGF0dHJzKCZubGFfbWFzaywgbWF0Y2gsCisJCQkJCQkgICAgICAmbWFza19hdHRycywKKwkJCQkJ CSAgICAgICZpX2VuY2FwX3ZhbGlkLAorCQkJCQkJICAgICAgYSwgdHJ1ZSwgbG9nKTsKKwkJCWlm IChlcnIpCiAJCQkJZ290byBmcmVlX25ld21hc2s7Ci0JCQl9CiAJCX0KIAogCQllcnIgPSBvdnNf a2V5X2Zyb21fbmxhdHRycyhuZXQsIG1hdGNoLCBtYXNrX2F0dHJzLCBhLCB0cnVlLApAQCAtMTQx NSw2ICsxNTI5LDcgQEAgc3RhdGljIGludCBfX292c19ubGFfcHV0X2tleShjb25zdCBzdHJ1Y3Qg c3dfZmxvd19rZXkgKnN3a2V5LAogewogCXN0cnVjdCBvdnNfa2V5X2V0aGVybmV0ICpldGhfa2V5 OwogCXN0cnVjdCBubGF0dHIgKm5sYSwgKmVuY2FwOworCXN0cnVjdCBubGF0dHIgKmluX2VuY2Fw ID0gTlVMTDsKIAogCWlmIChubGFfcHV0X3UzMihza2IsIE9WU19LRVlfQVRUUl9SRUNJUkNfSUQs IG91dHB1dC0+cmVjaXJjX2lkKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CkBAIC0xNDYzLDE3 ICsxNTc4LDI5IEBAIHN0YXRpYyBpbnQgX19vdnNfbmxhX3B1dF9rZXkoY29uc3Qgc3RydWN0IHN3 X2Zsb3dfa2V5ICpzd2tleSwKIAlldGhlcl9hZGRyX2NvcHkoZXRoX2tleS0+ZXRoX3NyYywgb3V0 cHV0LT5ldGguc3JjKTsKIAlldGhlcl9hZGRyX2NvcHkoZXRoX2tleS0+ZXRoX2RzdCwgb3V0cHV0 LT5ldGguZHN0KTsKIAotCWlmIChzd2tleS0+ZXRoLnRjaSB8fCBzd2tleS0+ZXRoLnR5cGUgPT0g aHRvbnMoRVRIX1BfODAyMVEpKSB7Ci0JCV9fYmUxNiBldGhfdHlwZTsKLQkJZXRoX3R5cGUgPSAh aXNfbWFzayA/IGh0b25zKEVUSF9QXzgwMjFRKSA6IGh0b25zKDB4ZmZmZik7Ci0JCWlmIChubGFf cHV0X2JlMTYoc2tiLCBPVlNfS0VZX0FUVFJfRVRIRVJUWVBFLCBldGhfdHlwZSkgfHwKLQkJICAg IG5sYV9wdXRfYmUxNihza2IsIE9WU19LRVlfQVRUUl9WTEFOLCBvdXRwdXQtPmV0aC50Y2kpKQor CWlmIChzd2tleS0+ZXRoLnZsYW4udGNpIHx8IGV0aF90eXBlX3ZsYW4oc3drZXktPmV0aC50eXBl KSkgeworCQlpZiAobmxhX3B1dF9iZTE2KHNrYiwgT1ZTX0tFWV9BVFRSX0VUSEVSVFlQRSwKKwkJ CQkgb3V0cHV0LT5ldGgudmxhbi50cGlkKSB8fAorCQkgICAgbmxhX3B1dF9iZTE2KHNrYiwgT1ZT X0tFWV9BVFRSX1ZMQU4sIG91dHB1dC0+ZXRoLnZsYW4udGNpKSkKIAkJCWdvdG8gbmxhX3B1dF9m YWlsdXJlOwogCQllbmNhcCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgT1ZTX0tFWV9BVFRSX0VOQ0FQ KTsKLQkJaWYgKCFzd2tleS0+ZXRoLnRjaSkKKwkJaWYgKCFzd2tleS0+ZXRoLnZsYW4udGNpKQor CQkJZ290byB1bmVuY2FwOworCQlpZiAoc3drZXktPmV0aC5jdmxhbi50Y2kpIHsKKwkJCS8qIEN1 c3RvbWVyIHRjaSBpcyBuZXN0ZWQgYnV0IHVzZXMgc2FtZSBrZXkgYXR0cmlidXRlLgorCQkJICov CisJCQlpZiAobmxhX3B1dF9iZTE2KHNrYiwgT1ZTX0tFWV9BVFRSX0VUSEVSVFlQRSwKKwkJCQkJ IG91dHB1dC0+ZXRoLmN2bGFuLnRwaWQpIHx8CisJCQkgICAgbmxhX3B1dF9iZTE2KHNrYiwgT1ZT X0tFWV9BVFRSX1ZMQU4sCisJCQkJCSBvdXRwdXQtPmV0aC5jdmxhbi50Y2kpKQorCQkJCWdvdG8g bmxhX3B1dF9mYWlsdXJlOworCQkJaW5fZW5jYXAgPSBubGFfbmVzdF9zdGFydChza2IsIE9WU19L RVlfQVRUUl9FTkNBUCk7CisJCX0gZWxzZSB7CiAJCQlnb3RvIHVuZW5jYXA7Ci0JfSBlbHNlCisJ CX0KKwl9IGVsc2UgewogCQllbmNhcCA9IE5VTEw7CisJfQogCiAJaWYgKHN3a2V5LT5ldGgudHlw ZSA9PSBodG9ucyhFVEhfUF84MDJfMikpIHsKIAkJLyoKQEAgLTE2MTgsNiArMTc0NSw4IEBAIHN0 YXRpYyBpbnQgX19vdnNfbmxhX3B1dF9rZXkoY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICpzd2tl eSwKIAl9CiAKIHVuZW5jYXA6CisJaWYgKGluX2VuY2FwKQorCQlubGFfbmVzdF9lbmQoc2tiLCBp bl9lbmNhcCk7CiAJaWYgKGVuY2FwKQogCQlubGFfbmVzdF9lbmQoc2tiLCBlbmNhcCk7CiAKQEAg LTIyNzAsNyArMjM5OSw3IEBAIHN0YXRpYyBpbnQgX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhzdHJ1 Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsCiAKIAkJY2FzZSBPVlNfQUNU SU9OX0FUVFJfUFVTSF9WTEFOOgogCQkJdmxhbiA9IG5sYV9kYXRhKGEpOwotCQkJaWYgKHZsYW4t PnZsYW5fdHBpZCAhPSBodG9ucyhFVEhfUF84MDIxUSkpCisJCQlpZiAoIWV0aF90eXBlX3ZsYW4o dmxhbi0+dmxhbl90cGlkKSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWlmICghKHZsYW4tPnZs YW5fdGNpICYgaHRvbnMoVkxBTl9UQUdfUFJFU0VOVCkpKQogCQkJCXJldHVybiAtRUlOVkFMOwpA QCAtMjM3NSw3ICsyNTA0LDcgQEAgaW50IG92c19ubGFfY29weV9hY3Rpb25zKHN0cnVjdCBuZXQg Km5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwKIAogCSgqc2ZhKS0+b3JpZ19sZW4gPSBu bGFfbGVuKGF0dHIpOwogCWVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhdHRyLCBr ZXksIDAsIHNmYSwga2V5LT5ldGgudHlwZSwKLQkJCQkgICAgIGtleS0+ZXRoLnRjaSwgbG9nKTsK KwkJCQkgICAgIGtleS0+ZXRoLnZsYW4udGNpLCBsb2cpOwogCWlmIChlcnIpCiAJCW92c19ubGFf ZnJlZV9mbG93X2FjdGlvbnMoKnNmYSk7CiAKLS0gCjIuNC4zCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkZXYgbWFpbGluZyBsaXN0CmRldkBvcGVudnN3 aXRjaC5vcmcKaHR0cDovL29wZW52c3dpdGNoLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Rldgo=