From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C4EB02E737B for ; Fri, 29 May 2026 08:38:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.48 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780043921; cv=none; b=I28AMX+xvihViuNWUh8HfNFI9N4K5jmyuIA/dYF/j9vPJfC+S0xEZNK6LZB622P70ezL8IyuMnLSVvACJ24ovRIP3knGY7Hs0uJW49K+G2r573c+xxZhovI+KlsMFV3JLIDQa7Zu7nXX0OnHs3QDtYIfyLX/qgqVgJ3b+J9dD1g= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780043921; c=relaxed/simple; bh=Oxj21GVFwakTrzrulf0KY3OGwIL2Ld0R37Ax0QaGhg4=; h=Content-Type:MIME-Version:From:To:Cc:Subject:Date:Message-ID; b=W/+AZSTinSwBeZZFmjJ/ML6UW9g2Ru/tSf0bNYg8Iv3rSyw+qeKdbytG20WTLVDQmuSlTXTlCyJQRYh72YfrFk81n1JFvpzt1NB+iKcHzOhcYXuV7F/iVphN5Tg2p9kTE/OVjieezuyv8FSRJUnL/iJb3kNfy69Pp10z4p6ydPU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=PSEajfGQ; arc=none smtp.client-ip=209.85.167.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PSEajfGQ" Received: by mail-lf1-f48.google.com with SMTP id 2adb3069b0e04-5a40d02b58bso9402674e87.3 for ; Fri, 29 May 2026 01:38:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780043918; x=1780648718; darn=vger.kernel.org; h=message-id:date:subject:cc:to:from:content-transfer-encoding :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Oxj21GVFwakTrzrulf0KY3OGwIL2Ld0R37Ax0QaGhg4=; b=PSEajfGQw74VHhSZ7/kYCtkn6cNFedGXRtxmvCz09lmcEk9bUHlZ7QLMexcA5AbfUz E9pGfFHFmTkezm5CvDnPdPv+SBWVFhDyLoGe8ZQjNsMBlgZUuQG6wkn+sbePi1XCB4qf TBC4fnUSS7M0lhyUXVBQADb0o66V1yG6WWvmQ6DIvwQr2BlnW0Ov5JYdgC0pcrd+0WPe HM6xvcOS/TUAvf4UXmITdrnfMLL5KQrDpkslBw3GBZMKAyGDnk8srXnawDoYVo2mT+5y 142It8f7UG2x6RamdRfdQXQLJtbbX04zy+gHT/W0N3UCmJqOeWCG/frPPGPkrCJdiVMJ y/1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780043918; x=1780648718; h=message-id:date:subject:cc:to:from:content-transfer-encoding :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Oxj21GVFwakTrzrulf0KY3OGwIL2Ld0R37Ax0QaGhg4=; b=soYnA5/2+EaLYZSefc1DZ64huV6wSrkzA2SBmlUZM/H69sREsB8M1AAhliJYQOFuF/ mWjxebBA3o7pK9NJlOTjVHXVex7+cRd21mAiE3tuZWDYW9/w7R7HnySfDMwKJgnYktUH uR3axrHJ/JvIm+/S+mUF7msgX3KuoF60qZ3R+FlbZQNSKcv7sfcpF4u2/iX4yJYfcuYC +4YFBQwu0OB+FMNI0584Gdb0K4ywbuM4AoZMtWFXNU9WYFwCSrqgUhPshMqwVHuetZIX 0OACwNjuB7lae8InegXq6s5yJOqZCV2SqtD2ixhevZdyc/4BiEFdvzlpuze2/c2Q2lRg YkOQ== X-Gm-Message-State: AOJu0YwBK/QiN9pRRkAbF2RLsBApV+VwlveKpVD7dS2ErLLG9ixK5Rbg O7RQaoa4grXyefKo0wUabNtH+WSBet8nVv9sxNSUDCacCEAsPTeiMOjD X-Gm-Gg: Acq92OE6IlelucDT2ep3uEbu6ciEjR1gwlWpJBtURiVZSNoQofmDglf0rpTI6iqYwv6 /FJbg99TVk4jkrbjYwqnF3WleXneGn4ovPl+AZpI+0Sfkvh+bT7wxfIBe2mlLIAQ4drL6V4+9uh mVzWOA8xZtCBVVbLqEq7e/F3K9jolsoluqyZZ3D2+AwP4mXn0QpfFOC1A0uYTxcQbw5JT5LaUth Wq24gZ3IyW7guZt+iXwV6/8JFbClY+5UUEk/6OMuDkQKMLAa2lv/SF+swOueO/YqsEIGYbTnLpe OWRoByP/FQ0Bi/DSb0TM3T5EyjTXMsPSR4LqFxZQlKXCzzZTW+T8dBw5Wx/p/qkmU85D3pwRLoz bKo39JLsvyWfB8EERWDcz0AT5QsJoo7iYzUfBN8sXxSQrEbtKwzWJjgKQnb7ki7YCi4PSENkrGt rTSmyCZlkH6cxwvjdiD1SyroYYrk85YtKKgdBg824fpWwa9SCtcMtWbJU+r82cfsD2odWU X-Received: by 2002:a05:6512:239f:b0:5aa:5279:142e with SMTP id 2adb3069b0e04-5aa594b20a6mr547581e87.40.1780043917560; Fri, 29 May 2026 01:38:37 -0700 (PDT) Received: from [127.0.1.1] ([2a01:4f9:c014:1ab4::1]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5aa5b59681fsm127287e87.50.2026.05.29.01.38.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 May 2026 01:38:37 -0700 (PDT) Content-Type: text/plain; charset="utf-8" Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Seunghyeon Lee To: Alexei Starovoitov , Daniel Borkmann Cc: bpf@vger.kernel.org, linux-kernel@vger.kernel.org, Song Liu , Andrii Nakryiko Subject: [PATCH RFC] bpf: add DAG fast-path in verifier to skip redundant state pruning Date: Fri, 29 May 2026 08:38:36 +0000 Message-ID: <178004391665.3522.4865582628003357086@gmail.com> YnBmOiBhZGQgREFHIGZhc3QtcGF0aCBpbiB2ZXJpZmllciB0byBza2lwIHJlZHVuZGFudCBzdGF0 ZSBwcnVuaW5nCgpUaGUgQlBGIHZlcmlmaWVyJ3Mgc3RhdGUtZXF1aXZhbGVuY2UgbG9vcCAoaXNf c3RhdGVfdmlzaXRlZCAvCnN0YXRlc19lcXVhbCkgZG9taW5hdGVzIGxvYWQgdGltZSBmb3IgcHJv Z3JhbXMgd2l0aCBhY3ljbGljIGNvbnRyb2wKZmxvdyBncmFwaHMgKERBR3MpLiBJbiBhIERBRywg ZXZlcnkgaW5zdHJ1Y3Rpb24gaXMgcmVhY2hlZCB2aWEgZXhhY3RseQpvbmUgcGF0aDogbm8gc3Rh dGUgaXMgZXZlciByZXZpc2l0ZWQsIG1ha2luZyBzdGF0ZS1wcnVuaW5nIGNvbXBhcmlzb25zCm1h dGhlbWF0aWNhbGx5IHZhY3VvdXMuCgpUaGlzIFJGQyBwcm9wb3NlcyB0aHJlZSBjb21wb25lbnRz OgoKMS4gY29tcHV0ZV9kYWdfdG9wbygpIC0tIHJlcGxhY2VzIGEgc2ltcGxlIGlzX2FjeWNsaWNf ZGFnKCkgYm9vbC4KICAgVXNlcyBLYWhuJ3MgYWxnb3JpdGhtIChPKFYrRSksIE8oVikgc3BhY2Us IG5vIHJlY3Vyc2lvbikgdG8gZGV0ZWN0CiAgIGJhY2stZWRnZXMgQU5EIHByZXNlcnZlIHRoZSB0 b3BvbG9naWNhbCB2aXNpdCBvcmRlciBmb3IgdXNlIGluICgyKS4KICAgSGFuZGxlcyBCUEZfSk1Q MzIsIEJQRl9MRF9JTU02NCB3aWRlIGluc3RydWN0aW9ucywgYW5kIGZhbGxzIGJhY2sKICAgY29u c2VydmF0aXZlbHkgb24gQlBGLXRvLUJQRiBzdWJwcm9ncmFtIGNhbGxzLgoKMi4gZG9fY2hlY2tf ZGFnKCkgLS0gZmFzdC1wYXRoIHZlcmlmaWVyIGZvciBjb25maXJtZWQtREFHIHByb2dyYW1zLgog ICBDcml0aWNhbCBjb3JyZWN0bmVzcyBwcm9wZXJ0eTogbWFpbnRhaW5zIGEgcGVyLWluc3RydWN0 aW9uIHN0YXRlCiAgIHRhYmxlIChzdGF0ZXNbaW5zbl9jbnRdKSBhbmQsIGF0IGV2ZXJ5IGpvaW4g cG9pbnQgKGluX2RlZ3JlZSA+IDEpLAogICBjYWxscyBtZXJnZV92ZXJpZmllcl9zdGF0ZSgpIHRv IGNvbnNlcnZhdGl2ZWx5IG1lcmdlIGFsbCBpbmNvbWluZwogICBwYXRocyBCRUZPUkUgcHJvY2Vz c2luZyB0aGUgaW5zdHJ1Y3Rpb24uIFRoaXMgZW5zdXJlcyB0aGUgdmVyaWZpZXIKICAgbmV2ZXIg c2VlcyBhIHJlZ2lzdGVyIGFzIGluaXRpYWxpemVkIHdoZW4gYW55IHByZWRlY2Vzc29yIHBhdGgg bGVmdAogICBpdCBOT1RfSU5JVC4KCiAgIFNraXBzIGlzX3N0YXRlX3Zpc2l0ZWQoKSAvIHN0YXRl c19lcXVhbCgpIGVudGlyZWx5OyBwcm92YWJseSBzYWZlCiAgIGJlY2F1c2UgdG9wb2xvZ2ljYWwg b3JkZXIgZ3VhcmFudGVlcyBlYWNoIGluc3RydWN0aW9uIGlzIHByb2Nlc3NlZAogICBleGFjdGx5 IG9uY2UuCgozLiBGdWxsIGZhbGxiYWNrOiBpZiBjb21wdXRlX2RhZ190b3BvKCkgcmV0dXJucyBO VUxMIChjeWNsaWMgcHJvZ3JhbSwKICAgc3VicHJvZywgb3IgYWxsb2NhdGlvbiBmYWlsdXJlKSwg b3IgaWYgZG9fY2hlY2tfZGFnKCkgcmV0dXJucyBhbgogICBlcnJvciwgdGhlIHVubW9kaWZpZWQg ZG9fY2hlY2soKSBydW5zIHVuY2hhbmdlZC4KClJlZ2lzdGVyLXN0YXRlIGNvcnJlY3RuZXNzIGF0 IGpvaW4gcG9pbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldo ZW4gcGF0aHMgQSBhbmQgQiBjb252ZXJnZSBhdCBpbnN0cnVjdGlvbiBOLCB0aGUgdmVyaWZpZXIg bXVzdCBob2xkCnRoZSBsZWFzdCBwcmVjaXNlIHN0YXRlIHRoYXQgaXMgc2FmZSBmb3IgYm90aCBw YXRocy4KCiAgUGF0aCBBIGFycml2ZXMgYXQgaW5zbiBOOiBSMiA9IHNjYWxhciBbMCwgNV0KICBQ YXRoIEIgYXJyaXZlcyBhdCBpbnNuIE46IFIyID0gTk9UX0lOSVQKICBtZXJnZV92ZXJpZmllcl9z dGF0ZSgpIHJlc3VsdDogUjIgPSBOT1RfSU5JVAogIC0+IHZlcmlmaWVyIGNvcnJlY3RseSByZWpl Y3RzIGFueSB1c2Ugb2YgUjIgYXQgTgoKV2l0aG91dCB0aGlzIG1lcmdlIChhIGZsYXcgaW4gbmFp dmUgbGluZWFyLXNjYW4gYXBwcm9hY2hlcyksIHRoZQp2ZXJpZmllciB3b3VsZCBzZWUgb25seSB0 aGUgc3RhdGUgZnJvbSB3aGljaGV2ZXIgcGF0aCB3YXMgcHJvY2Vzc2VkCmxhc3QgaW4gbWVtb3J5 IG9yZGVyLCBwb3RlbnRpYWxseSBhY2NlcHRpbmcgYSBwcm9ncmFtIHRoYXQKZGVyZWZlcmVuY2Vz IGFuIHVuaW5pdGlhbGl6ZWQgcmVnaXN0ZXIgYXQgcnVudGltZS4KClJGQyBkZXNpZ24gcXVlc3Rp b246Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCmRvX2NoZWNrX2RhZygpJ3MgaW5uZXIgcGVyLWluc3Ry dWN0aW9uIHZlcmlmaWNhdGlvbiBzdGVwIHJlcXVpcmVzCmNhbGxpbmcgaW50byBkb19jaGVjaygp J3MgaW5uZXIgbG9vcCBsb2dpYywgd2hpY2ggaXMgbm90IGN1cnJlbnRseQpmYWN0b3JlZCBhcyBh IGNhbGxhYmxlIHN1Yi1mdW5jdGlvbi4gV2UgcHJvcG9zZSB0d28gaW50ZWdyYXRpb24Kb3B0aW9u cyBhbmQgcmVxdWVzdCBtYWludGFpbmVyIGd1aWRhbmNlOgoKICBPcHRpb24gQTogRXh0cmFjdCBh IHZlcmlmeV9vbmVfaW5zbigpIGhlbHBlciBmcm9tIGRvX2NoZWNrKCkncwogICAgICAgICAgICBp bm5lciBsb29wOyBkb19jaGVja19kYWcoKSBjYWxscyBpdCBwZXIgdG9wb2xvZ2ljYWwgc3RlcC4K CiAgT3B0aW9uIEI6IEFkZCBlbnYtPmRhZ19tb2RlIGZsYWcgdG8gZG9fY2hlY2soKTsgd2hlbiBz ZXQsCiAgICAgICAgICAgIGRvX2NoZWNrKCkgdXNlcyBwcmUtcG9wdWxhdGVkIGVudi0+ZGFnX3N0 YXRlc1tdIGFuZCBza2lwcwogICAgICAgICAgICBpc19zdGF0ZV92aXNpdGVkKCkgY29tcGFyaXNv bnMgKH4yMCBsaW5lcyBhZGRlZCB0bwogICAgICAgICAgICBkb19jaGVjaygpLCBubyBjb2RlIGR1 cGxpY2F0aW9uKS4KClRoZSBzdGF0ZSBtZXJnZSBsb2dpYywgREFHIGRldGVjdGlvbiwgYW5kIHRv cG9sb2dpY2FsIHRyYXZlcnNhbCBhcmUKaW5kZXBlbmRlbnQgb2YgdGhpcyBjaG9pY2UgYW5kIGFy ZSBwcmVzZW50ZWQgaW4gZnVsbCBiZWxvdy4KCkJlbmNobWFyayBkYXRhIHdpbGwgYmUgaW5jbHVk ZWQgaW4gdjEgb25jZSB0aGUgaW50ZWdyYXRpb24gYXBwcm9hY2gKaXMgY29uZmlybWVkLiBUaW1p bmcgd2lsbCBiZSBtZWFzdXJlZCBhdCBCUEZfUFJPR19MT0FEIHN5c2NhbGwgbGV2ZWwKd2l0aCB2 ZXJpZmllci1vbmx5IGlzb2xhdGlvbi4KClNpZ25lZC1vZmYtYnk6IFNldW5naHllb24gTGVlIDxo eWVvbjMxMjVAZ21haWwuY29tPgotLS0KCk9wZW4gUXVlc3Rpb25zIGZvciBNYWludGFpbmVycwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpRMSAoQ3JpdGljYWwpOiBJbnRlZ3JhdGlv biB3aXRoIGRvX2NoZWNrKCkgaW5uZXIgbG9vcAogIE9wdGlvbiBBIG9yIEIgYXMgZGVzY3JpYmVk IGFib3ZlPwoKUTI6IFNjb3BlCiAgU2hvdWxkIHRoaXMgYXBwbHkgdG8gYWxsIHByb2dyYW0gdHlw ZXMsIG9yIG9ubHkgWERQL1RDIHdoZXJlIERBRwogIHByb2dyYW1zIChlLmcuLCBDaWxpdW0gcG9s aWN5IHByb2dyYW1zKSBhcmUgbW9zdCBjb21tb24/CgpRMzogS2NvbmZpZyBndWFyZAogIElzIGEg Q09ORklHX0JQRl9EQUdfT1BUIEtjb25maWcgc3ltYm9sIGFwcHJvcHJpYXRlLCBvciBzaG91bGQg dGhpcwogIGJlIHVuY29uZGl0aW9uYWwgZ2l2ZW4gdGhlIE8oVitFKSBvdmVyaGVhZCBpcyBuZWds aWdpYmxlPwoKUTQ6IFN1YnByb2dyYW0gaGFuZGxpbmcKICBDdXJyZW50IFJGQyBmYWxscyBiYWNr IHRvIGZ1bGwgdmVyaWZpZXIgZm9yIEJQRl9QU0VVRE9fQ0FMTCBwcm9ncmFtcy4KICBJcyBwZXIt c3VicHJvZyBEQUcgYW5hbHlzaXMgd29ydGggYWRkaW5nIGluIGEgZm9sbG93LXVwPwoKLS0tCgog aW5jbHVkZS9saW51eC9icGYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzICsKIGlu Y2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggICAgICAgICAgICAgICAgICB8ICAgNiArCiBrZXJu ZWwvYnBmL3ZlcmlmaWVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMTUgKysrKysrKysr KysrKysrKysrCiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9kYWdfdmVyaWZ5LmMg fCAyMzAgKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA0NTQgaW5zZXJ0aW9u cygrKQoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmLmggYi9pbmNsdWRlL2xpbnV4L2Jw Zi5oCi0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmgKKysrIGIvaW5jbHVkZS9saW51eC9icGYuaApA QCAtLi4uIEBACiBzdHJ1Y3QgYnBmX3Byb2dfYXV4IHsKICAgICAvKiAuLi4gZXhpc3RpbmcgZmll bGRzIC4uLiAqLworICAgIHVuc2lnbmVkIGludCBjZmdfaXNfYWN5Y2xpYyA6IDE7ICAvKiBDRkcg aGFzIG5vIGJhY2stZWRnZXMgKERBRykgKi8KICAgICAvKiAuLi4gKi8KIH07CgpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3Zlcmlm aWVyLmgKLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAorKysgYi9pbmNsdWRlL2xp bnV4L2JwZl92ZXJpZmllci5oCkBAIC0uLi4gQEAKKy8qCisgKiBicGZfZGFnX2luZm8gLSBvdXRw dXQgb2YgY29tcHV0ZV9kYWdfdG9wbygpLgorICoKKyAqIEB0b3BvX29yZGVyOiAgdG9wb2xvZ2lj YWwgdmlzaXQgb3JkZXI7IHRvcG9fb3JkZXJbaV0gaXMgdGhlIGluc24gaW5kZXgKKyAqICAgICAg ICAgICAgICAgb2YgdGhlIGktdGggaW5zdHJ1Y3Rpb24gaW4gdG9wb2xvZ2ljYWwgb3JkZXIuCisg KiBAaW5fZGVncmVlOiAgIHNuYXBzaG90IG9mIG9yaWdpbmFsIGluLWRlZ3JlZSBwZXIgaW5zdHJ1 Y3Rpb24gc2xvdCwKKyAqICAgICAgICAgICAgICAgdGFrZW4gYmVmb3JlIEthaG4ncyB0cmF2ZXJz YWwuIFVzZWQgYnkgZG9fY2hlY2tfZGFnKCkKKyAqICAgICAgICAgICAgICAgdG8gZGV0ZWN0IGpv aW4gcG9pbnRzIChpbl9kZWdyZWVbbl0gPiAxKS4KKyAqIEBpbnNuX2NudDogICAgZW52LT5wcm9n LT5sZW4gYXQgY29tcHV0YXRpb24gdGltZS4KKyAqLworc3RydWN0IGJwZl9kYWdfaW5mbyB7Cisg ICAgaW50ICp0b3BvX29yZGVyOworICAgIGludCAqaW5fZGVncmVlOworICAgIGludCAgaW5zbl9j bnQ7Cit9OwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYv dmVyaWZpZXIuYwotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKKysrIGIva2VybmVsL2JwZi92 ZXJpZmllci5jCkBAIC0uLi4gQEAKK3N0YXRpYyB2b2lkIGZyZWVfZGFnX2luZm8oc3RydWN0IGJw Zl9kYWdfaW5mbyAqZGFnKQoreworICAgIGlmICghZGFnKQorICAgICAgICByZXR1cm47CisgICAg a2ZyZWUoZGFnLT50b3BvX29yZGVyKTsKKyAgICBrZnJlZShkYWctPmluX2RlZ3JlZSk7CisgICAg a2ZyZWUoZGFnKTsKK30KKworLyoKKyAqIGNvbXB1dGVfZGFnX3RvcG8oKSAtIGRldGVjdCBhY3lj bGljIENGRyBhbmQgcmV0dXJuIHRvcG9sb2dpY2FsIG9yZGVyLgorICoKKyAqIEltcGxlbWVudHMg S2FobidzIGFsZ29yaXRobTogcmVwZWF0ZWRseSByZW1vdmUgemVyby1pbi1kZWdyZWUgbm9kZXMu CisgKiBJZiBhbGwgbm9kZXMgYXJlIHByb2Nlc3NlZCAodmlzaXRlZCA9PSBpbnNuX2NudCksIENG RyBoYXMgbm8gYmFjay1lZGdlcy4KKyAqCisgKiBSZXR1cm5zIGFsbG9jYXRlZCBicGZfZGFnX2lu Zm8gb24gc3VjY2VzczsgY2FsbGVyIG11c3QgZnJlZV9kYWdfaW5mbygpLgorICogUmV0dXJucyBO VUxMIGlmIGN5Y2xpYywgY29udGFpbnMgQlBGLXRvLUJQRiBjYWxscywgb3Igb24gYWxsb2MgZmFp bHVyZS4KKyAqIEFsbCBOVUxMIHBhdGhzIGFyZSBzYWZlOiBjYWxsZXIgZmFsbHMgYmFjayB0byB1 bm1vZGlmaWVkIGRvX2NoZWNrKCkuCisgKgorICogSGFuZGxlcyBCUEZfSk1QLCBCUEZfSk1QMzIs IEJQRl9MRF9JTU02NCB3aWRlIGluc3RydWN0aW9ucy4KKyAqIEFzc3VtZXMgY2hlY2tfY2ZnKCkg aGFzIGFscmVhZHkgcnVuLgorICovCitzdGF0aWMgc3RydWN0IGJwZl9kYWdfaW5mbyAqY29tcHV0 ZV9kYWdfdG9wbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KQoreworICAgIHN0cnVjdCBi cGZfaW5zbiAqaW5zbnMgPSBlbnYtPnByb2ctPmluc25zaTsKKyAgICBpbnQgaW5zbl9jbnQgPSBl bnYtPnByb2ctPmxlbjsKKyAgICBzdHJ1Y3QgYnBmX2RhZ19pbmZvICpkYWcgPSBOVUxMOworICAg IGludCAqaW5fZGVncmVlID0gTlVMTCwgKnF1ZXVlID0gTlVMTDsKKyAgICBib29sICppc19kdW1t eSA9IE5VTEw7CisgICAgaW50IGhlYWQgPSAwLCB0YWlsID0gMCwgdmlzaXRlZCA9IDAsIGk7CisK KyAgICBkYWcgICAgICAgPSBremFsbG9jKHNpemVvZigqZGFnKSwgR0ZQX0tFUk5FTCk7CisgICAg aW5fZGVncmVlID0ga2NhbGxvYyhpbnNuX2NudCwgc2l6ZW9mKGludCksICBHRlBfS0VSTkVMKTsK KyAgICBxdWV1ZSAgICAgPSBrY2FsbG9jKGluc25fY250LCBzaXplb2YoaW50KSwgIEdGUF9LRVJO RUwpOworICAgIGlzX2R1bW15ICA9IGtjYWxsb2MoaW5zbl9jbnQsIHNpemVvZihib29sKSwgR0ZQ X0tFUk5FTCk7CisgICAgaWYgKCFkYWcgfHwgIWluX2RlZ3JlZSB8fCAhcXVldWUgfHwgIWlzX2R1 bW15KQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAvKiBQYXNzIDE6IGNvbXB1dGUgaW4tZGVn cmVlcyBmb3IgZWFjaCBpbnN0cnVjdGlvbiBzbG90LiAqLworICAgIGZvciAoaSA9IDA7IGkgPCBp bnNuX2NudDsgaSsrKSB7CisgICAgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9ICZpbnNuc1tp XTsKKyAgICAgICAgdTggY2xzID0gQlBGX0NMQVNTKGluc24tPmNvZGUpOworICAgICAgICB1OCBv cDsKKworICAgICAgICAvKgorICAgICAgICAgKiBCUEZfTERfSU1NNjQ6IHR3by1zbG90IHdpZGUg aW5zdHJ1Y3Rpb24uCisgICAgICAgICAqIFRoZSBzZWNvbmQgKGR1bW15KSBzbG90IGhhcyBubyBy ZWFsIGVkZ2VzOyBmYWxsLXRocm91Z2gKKyAgICAgICAgICogc2tpcHMgdG8gc2xvdCBpKzIuCisg ICAgICAgICAqLworICAgICAgICBpZiAoaW5zbi0+Y29kZSA9PSAoQlBGX0xEIHwgQlBGX0lNTSB8 IEJQRl9EVykpIHsKKyAgICAgICAgICAgIGlmIChpICsgMSA8IGluc25fY250KQorICAgICAgICAg ICAgICAgIGlzX2R1bW15W2kgKyAxXSA9IHRydWU7CisgICAgICAgICAgICBpZiAoaSArIDIgPCBp bnNuX2NudCkKKyAgICAgICAgICAgICAgICBpbl9kZWdyZWVbaSArIDJdKys7CisgICAgICAgICAg ICBpKys7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChj bHMgIT0gQlBGX0pNUCAmJiBjbHMgIT0gQlBGX0pNUDMyKSB7CisgICAgICAgICAgICBpZiAoaSAr IDEgPCBpbnNuX2NudCkKKyAgICAgICAgICAgICAgICBpbl9kZWdyZWVbaSArIDFdKys7CisgICAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG9wID0gQlBGX09QKGluc24t PmNvZGUpOworCisgICAgICAgIGlmIChvcCA9PSBCUEZfRVhJVCkKKyAgICAgICAgICAgIGNvbnRp bnVlOworCisgICAgICAgIC8qIEJQRi10by1CUEYgc3VicHJvZyBjYWxsOiBmYWxsIGJhY2sgdG8g ZnVsbCB2ZXJpZmllci4gKi8KKyAgICAgICAgaWYgKG9wID09IEJQRl9DQUxMICYmIGluc24tPnNy Y19yZWcgPT0gQlBGX1BTRVVET19DQUxMKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAg ICAgIHsKKyAgICAgICAgICAgIGludCB0Z3QgPSBpICsgMSArIGluc24tPm9mZjsKKyAgICAgICAg ICAgIGlmICh0Z3QgPj0gMCAmJiB0Z3QgPCBpbnNuX2NudCkKKyAgICAgICAgICAgICAgICBpbl9k ZWdyZWVbdGd0XSsrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9wICE9IEJQRl9KQSAmJiBp ICsgMSA8IGluc25fY250KQorICAgICAgICAgICAgaW5fZGVncmVlW2kgKyAxXSsrOworICAgIH0K KworICAgIC8qIFNuYXBzaG90IGluLWRlZ3JlZXMgYmVmb3JlIFBhc3MgMyBtb2RpZmllcyB0aGVt LiAqLworICAgIGRhZy0+aW5fZGVncmVlID0ga2NhbGxvYyhpbnNuX2NudCwgc2l6ZW9mKGludCks IEdGUF9LRVJORUwpOworICAgIGlmICghZGFnLT5pbl9kZWdyZWUpCisgICAgICAgIGdvdG8gZmFp bDsKKyAgICBtZW1jcHkoZGFnLT5pbl9kZWdyZWUsIGluX2RlZ3JlZSwgaW5zbl9jbnQgKiBzaXpl b2YoaW50KSk7CisKKyAgICAvKiBQYXNzIDI6IHNlZWQgcXVldWUgd2l0aCB6ZXJvLWluLWRlZ3Jl ZSBub2Rlcy4gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgaW5zbl9jbnQ7IGkrKykKKyAgICAgICAg aWYgKGluX2RlZ3JlZVtpXSA9PSAwKQorICAgICAgICAgICAgcXVldWVbdGFpbCsrXSA9IGk7CisK KyAgICAvKiBQYXNzIDM6IEthaG4ncyB0b3BvbG9naWNhbCB0cmF2ZXJzYWwuICovCisgICAgd2hp bGUgKGhlYWQgPCB0YWlsKSB7CisgICAgICAgIGludCBub2RlID0gcXVldWVbaGVhZCsrXTsKKyAg ICAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuID0gJmluc25zW25vZGVdOworICAgICAgICB1OCBj bHMgPSBCUEZfQ0xBU1MoaW5zbi0+Y29kZSk7CisgICAgICAgIHU4IG9wOworCisgICAgICAgIHZp c2l0ZWQrKzsKKworICAgICAgICBpZiAoaXNfZHVtbXlbbm9kZV0pCisgICAgICAgICAgICBjb250 aW51ZTsKKworICAgICAgICBvcCA9IChjbHMgPT0gQlBGX0pNUCB8fCBjbHMgPT0gQlBGX0pNUDMy KSA/CisgICAgICAgICAgICAgIEJQRl9PUChpbnNuLT5jb2RlKSA6IDB4ZmY7CisKKyAgICAgICAg aWYgKG9wID09IEJQRl9FWElUKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg KGNscyA9PSBCUEZfSk1QIHx8IGNscyA9PSBCUEZfSk1QMzIpIHsKKyAgICAgICAgICAgIGludCB0 Z3QgPSBub2RlICsgMSArIGluc24tPm9mZjsKKyAgICAgICAgICAgIGlmICh0Z3QgPj0gMCAmJiB0 Z3QgPCBpbnNuX2NudCkKKyAgICAgICAgICAgICAgICBpZiAoLS1pbl9kZWdyZWVbdGd0XSA9PSAw KQorICAgICAgICAgICAgICAgICAgICBxdWV1ZVt0YWlsKytdID0gdGd0OworICAgICAgICAgICAg aWYgKG9wICE9IEJQRl9KQSAmJiBub2RlICsgMSA8IGluc25fY250KQorICAgICAgICAgICAgICAg IGlmICgtLWluX2RlZ3JlZVtub2RlICsgMV0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcXVl dWVbdGFpbCsrXSA9IG5vZGUgKyAxOworICAgICAgICB9IGVsc2UgaWYgKGluc24tPmNvZGUgPT0g KEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFcpKSB7CisgICAgICAgICAgICBpZiAobm9kZSArIDIg PCBpbnNuX2NudCkKKyAgICAgICAgICAgICAgICBpZiAoLS1pbl9kZWdyZWVbbm9kZSArIDJdID09 IDApCisgICAgICAgICAgICAgICAgICAgIHF1ZXVlW3RhaWwrK10gPSBub2RlICsgMjsKKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChub2RlICsgMSA8IGluc25fY250KQorICAgICAg ICAgICAgICAgIGlmICgtLWluX2RlZ3JlZVtub2RlICsgMV0gPT0gMCkKKyAgICAgICAgICAgICAg ICAgICAgcXVldWVbdGFpbCsrXSA9IG5vZGUgKyAxOworICAgICAgICB9CisgICAgfQorCisgICAg aWYgKHZpc2l0ZWQgIT0gaW5zbl9jbnQpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGRhZy0+ dG9wb19vcmRlciA9IHF1ZXVlOworICAgIGRhZy0+aW5zbl9jbnQgICA9IGluc25fY250OworICAg IGtmcmVlKGluX2RlZ3JlZSk7CisgICAga2ZyZWUoaXNfZHVtbXkpOworICAgIHJldHVybiBkYWc7 CisKK2ZhaWw6CisgICAga2ZyZWUocXVldWUpOworICAgIGtmcmVlKGluX2RlZ3JlZSk7CisgICAg a2ZyZWUoaXNfZHVtbXkpOworICAgIGlmIChkYWcpIHsKKyAgICAgICAga2ZyZWUoZGFnLT5pbl9k ZWdyZWUpOworICAgICAgICBrZnJlZShkYWcpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30K KworLyoKKyAqIGRhZ19tZXJnZV9zdGF0ZSgpIC0gcHJvcGFnYXRlIHZlcmlmaWVyIHN0YXRlIHRv IGEgc3VjY2Vzc29yIGluc3RydWN0aW9uLgorICoKKyAqIEZpcnN0IHByZWRlY2Vzc29yOiBjb3B5 IHN0YXRlIChlc3RhYmxpc2hlcyB0aGUgYmFzZWxpbmUpLgorICogU3Vic2VxdWVudCBwcmVkZWNl c3NvcnM6IGNvbnNlcnZhdGl2ZSBtZXJnZSB2aWEgbWVyZ2VfdmVyaWZpZXJfc3RhdGUoKS4KKyAq CisgKiBJZiBwYXRoIEEgaGFzIFIyID0gc2NhbGFyIFswLDVdIGFuZCBwYXRoIEIgaGFzIFIyID0g Tk9UX0lOSVQsCisgKiB0aGUgbWVyZ2VkIHJlc3VsdCBpcyBSMiA9IE5PVF9JTklULgorICoKKyAq IG1lcmdlX3ZlcmlmaWVyX3N0YXRlKCkgaXMgcmV1c2VkIHVuY2hhbmdlZDsgbm8gbmV3IG1lcmdl IHNlbWFudGljcy4KKyAqLworc3RhdGljIGludCBkYWdfbWVyZ2Vfc3RhdGUoc3RydWN0IGJwZl92 ZXJpZmllcl9lbnYgKmVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBicGZf dmVyaWZpZXJfc3RhdGUgKipzdGF0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg c3VjYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZp ZXJfc3RhdGUgKmZyb20pCit7CisgICAgaWYgKHN1Y2MgPCAwIHx8IHN1Y2MgPj0gZW52LT5wcm9n LT5sZW4pCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgaWYgKCFzdGF0ZXNbc3VjY10p IHsKKyAgICAgICAgc3RhdGVzW3N1Y2NdID0ga3phbGxvYyhzaXplb2YoKnN0YXRlc1tzdWNjXSks IEdGUF9LRVJORUwpOworICAgICAgICBpZiAoIXN0YXRlc1tzdWNjXSkKKyAgICAgICAgICAgIHJl dHVybiAtRU5PTUVNOworICAgICAgICByZXR1cm4gY29weV92ZXJpZmllcl9zdGF0ZShzdGF0ZXNb c3VjY10sIGZyb20pOworICAgIH0KKworICAgIHJldHVybiBtZXJnZV92ZXJpZmllcl9zdGF0ZShl bnYsIHN0YXRlc1tzdWNjXSwgZnJvbSk7Cit9CisKKy8qCisgKiBkb19jaGVja19kYWcoKSAtIHZl cmlmaWVyIGZhc3QtcGF0aCBmb3IgYWN5Y2xpYyBCUEYgcHJvZ3JhbXMuCisgKgorICogUFJFU0VS VkVTOiBhbGwgcmVnaXN0ZXIgdHlwZS9ib3VuZHMgcHJvcGFnYXRpb24sIG1lbW9yeSBhY2Nlc3Mg Y2hlY2tzLAorICogICAgICAgICAgICBzdGFjayBkZXB0aCB0cmFja2luZywgcG9pbnRlciB0eXBl IHZhbGlkYXRpb24uCisgKiBTS0lQUzogICAgIGlzX3N0YXRlX3Zpc2l0ZWQoKSAvIHN0YXRlc19l cXVhbCgpIGVxdWl2YWxlbmNlIGxvb3AuCisgKgorICogUHJvY2Vzc2VzIGluc3RydWN0aW9ucyBp biB0b3BvbG9naWNhbCBvcmRlciAoZGFnLT50b3BvX29yZGVyW10pLgorICogTWFpbnRhaW5zIGEg cGVyLWluc3RydWN0aW9uIHN0YXRlIHRhYmxlIChzdGF0ZXNbaW5zbl9jbnRdKS4KKyAqIEF0IGpv aW4gcG9pbnRzIChkYWctPmluX2RlZ3JlZVtub2RlXSA+IDEpLCBjb25zZXJ2YXRpdmVseSBtZXJn ZXMKKyAqIGFsbCBpbmNvbWluZyBzdGF0ZXMgdmlhIGRhZ19tZXJnZV9zdGF0ZSgpIEJFRk9SRSBw cm9jZXNzaW5nIHRoZQorICogaW5zdHJ1Y3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgZG9fY2hlY2tf ZGFnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCisgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3QgYnBmX2RhZ19pbmZvICpkYWcpCit7CisgICAgaW50IGluc25fY250ID0g ZW52LT5wcm9nLT5sZW47CisgICAgc3RydWN0IGJwZl92ZXJpZmllcl9zdGF0ZSAqKnN0YXRlczsK KyAgICBpbnQgZXJyID0gMCwgaTsKKworICAgIHN0YXRlcyA9IGtjYWxsb2MoaW5zbl9jbnQsIHNp emVvZigqc3RhdGVzKSwgR0ZQX0tFUk5FTCk7CisgICAgaWYgKCFzdGF0ZXMpCisgICAgICAgIHJl dHVybiAtRU5PTUVNOworCisgICAgc3RhdGVzWzBdID0ga3phbGxvYyhzaXplb2YoKnN0YXRlc1sw XSksIEdGUF9LRVJORUwpOworICAgIGlmICghc3RhdGVzWzBdKSB7CisgICAgICAgIGVyciA9IC1F Tk9NRU07CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICBlcnIgPSBpbml0X3ZlcmlmaWVy X3N0YXRlKGVudiwgc3RhdGVzWzBdKTsKKyAgICBpZiAoZXJyKQorICAgICAgICBnb3RvIG91dDsK KworICAgIGZvciAoaSA9IDA7IGkgPCBpbnNuX2NudDsgaSsrKSB7CisgICAgICAgIGludCBub2Rl ID0gZGFnLT50b3BvX29yZGVyW2ldOworICAgICAgICBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX3N0YXRl ICpjdXIgPSBzdGF0ZXNbbm9kZV07CisgICAgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9ICZl bnYtPnByb2ctPmluc25zaVtub2RlXTsKKyAgICAgICAgdTggY2xzID0gQlBGX0NMQVNTKGluc24t PmNvZGUpOworICAgICAgICB1OCBvcCAgPSAoY2xzID09IEJQRl9KTVAgfHwgY2xzID09IEJQRl9K TVAzMikgPworICAgICAgICAgICAgICAgICAgQlBGX09QKGluc24tPmNvZGUpIDogMHhmZjsKKwor ICAgICAgICBpZiAoIWN1cikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qCisg ICAgICAgICAqIFJGQyBpbnRlZ3JhdGlvbiBwb2ludCAoT3BlbiBRdWVzdGlvbiBRMSkuCisgICAg ICAgICAqCisgICAgICAgICAqIFRoaXMgaXMgd2hlcmUgdGhlIHBlci1pbnN0cnVjdGlvbiB2ZXJp ZmljYXRpb24gY2FsbCBnb2VzCisgICAgICAgICAqIG9uY2UgdGhlIGludGVncmF0aW9uIGFwcHJv YWNoIGlzIGNvbmZpcm1lZCBieSBtYWludGFpbmVycy4KKyAgICAgICAgICogVGhlIHN0YXRlIG1l cmdlIGxvZ2ljIGFib3ZlIGFuZCBiZWxvdyBpcyBpbmRlcGVuZGVudCBvZgorICAgICAgICAgKiB3 aGljaCBvcHRpb24gaXMgY2hvc2VuLgorICAgICAgICAgKgorICAgICAgICAgKiBPcHRpb24gQTog ZXh0cmFjdCB2ZXJpZnlfb25lX2luc24oKSBmcm9tIGRvX2NoZWNrKCkuCisgICAgICAgICAqIE9w dGlvbiBCOiBhZGQgZW52LT5kYWdfbW9kZTsgZG9fY2hlY2soKSB1c2VzIGRhZ19zdGF0ZXNbXQor ICAgICAgICAgKiAgICAgICAgICAgYW5kIHNraXBzIGlzX3N0YXRlX3Zpc2l0ZWQoKSB3aGVuIGZs YWcgaXMgc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgZW52LT5jdXJfc3RhdGUgPSBjdXI7Cisg ICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICBnb3RvIG91dDsKKworICAgICAgICBpZiAob3Ag PT0gQlBGX0VYSVQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoY2xzID09 IEJQRl9KTVAgfHwgY2xzID09IEJQRl9KTVAzMikgeworICAgICAgICAgICAgaWYgKG9wID09IEJQ Rl9KQSkgeworICAgICAgICAgICAgICAgIGVyciA9IGRhZ19tZXJnZV9zdGF0ZShlbnYsIHN0YXRl cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSArIDEgKyBpbnNu LT5vZmYsIGN1cik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVyciA9 IGRhZ19tZXJnZV9zdGF0ZShlbnYsIHN0YXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbm9kZSArIDEgKyBpbnNuLT5vZmYsIGN1cik7CisgICAgICAgICAgICAgICAg aWYgKCFlcnIpCisgICAgICAgICAgICAgICAgICAgIGVyciA9IGRhZ19tZXJnZV9zdGF0ZShlbnYs IHN0YXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUg KyAxLCBjdXIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGluc24tPmNvZGUg PT0gKEJQRl9MRCB8IEJQRl9JTU0gfCBCUEZfRFcpKSB7CisgICAgICAgICAgICBlcnIgPSBkYWdf bWVyZ2Vfc3RhdGUoZW52LCBzdGF0ZXMsIG5vZGUgKyAyLCBjdXIpOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgZXJyID0gZGFnX21lcmdlX3N0YXRlKGVudiwgc3RhdGVzLCBub2RlICsg MSwgY3VyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICBnb3Rv IG91dDsKKyAgICB9CisKK291dDoKKyAgICBmb3IgKGkgPSAwOyBpIDwgaW5zbl9jbnQ7IGkrKykK KyAgICAgICAgaWYgKHN0YXRlc1tpXSkKKyAgICAgICAgICAgIGZyZWVfdmVyaWZpZXJfc3RhdGUo c3RhdGVzW2ldLCBmYWxzZSk7CisgICAga2ZyZWUoc3RhdGVzKTsKKyAgICByZXR1cm4gZXJyOwor fQorCisvKiBEQUcgZmFzdC1wYXRoIGhvb2sgaW4gZG9fY2hlY2tfbWFpbigpICovCisgICAgewor ICAgICAgICBzdHJ1Y3QgYnBmX2RhZ19pbmZvICpkYWcgPSBjb21wdXRlX2RhZ190b3BvKGVudik7 CisgICAgICAgIGlmIChkYWcpIHsKKyAgICAgICAgICAgIGVudi0+cHJvZy0+YXV4LT5jZmdfaXNf YWN5Y2xpYyA9IDE7CisgICAgICAgICAgICByZXQgPSBkb19jaGVja19kYWcoZW52LCBkYWcpOwor ICAgICAgICAgICAgZnJlZV9kYWdfaW5mbyhkYWcpOworICAgICAgICAgICAgaWYgKHJldCA9PSAw KQorICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgZW52LT5wcm9nLT5hdXgt PmNmZ19pc19hY3ljbGljID0gMDsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIH0KKyAg ICB9CisgICAgcmV0ID0gZG9fY2hlY2soZW52KTsKK291dDoKCmRpZmYgLS1naXQgYS90b29scy90 ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9kYWdfdmVyaWZ5LmMgYi90b29scy90ZXN0aW5nL3Nl bGZ0ZXN0cy9icGYvdGVzdF9kYWdfdmVyaWZ5LmMKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVz dHMvYnBmL3Rlc3RfZGFnX3ZlcmlmeS5jCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2Jw Zi90ZXN0X2RhZ192ZXJpZnkuYwpAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAqIEJQRiB2ZXJpZmll ciBEQUcgb3B0aW1pemF0aW9uIC0tIGNvcnJlY3RuZXNzIHRlc3Qgc3VpdGUuCisgKgorICogVGVz dHM6CisgKiAgIDEuIFNpbXBsZSBEQUcgKHNpbmdsZSBiYXNpYyBibG9jayk6IG11c3QgUEFTUwor ICogICAyLiBPT0IgYWNjZXNzOiBtdXN0IFJFSkVDVCAoc2VjdXJpdHkgcHJlc2VydmVkKQorICog ICAzLiBVbmluaXRpYWxpemVkIHJlZ2lzdGVyOiBtdXN0IFJFSkVDVAorICogICA0LiBEQUcgd2l0 aCB0d28tYnJhbmNoIGVhcmx5LWV4aXQgKG5vIGpvaW4pOiBtdXN0IFBBU1MKKyAqICAgNS4gQ3lj bGljIHByb2dyYW06IG11c3QgUEFTUyB2aWEgZnVsbC12ZXJpZmllciBmYWxsYmFjaworICogICA2 LiBEQUcgd2l0aCBqb2luIHBvaW50LCBSMCBpbml0IG9uIGFsbCBwYXRoczogbXVzdCBQQVNTCisg KiAgIDcuIERBRyB3aXRoIGpvaW4gcG9pbnQsIFIwIHVuaW5pdCBvbiBvbmUgcGF0aDogbXVzdCBS RUpFQ1QKKyAqICAgICAgKHZhbGlkYXRlcyBjb25zZXJ2YXRpdmUgbWVyZ2VfdmVyaWZpZXJfc3Rh dGUoKSBhdCBqb2luIHBvaW50cykKKyAqLworCisjaW5jbHVkZSA8dGVzdF9wcm9ncy5oPgorI2lu Y2x1ZGUgPGxpbnV4L2JwZi5oPgorI2luY2x1ZGUgPGJwZi9icGYuaD4KKyNpbmNsdWRlIDxicGYv bGliYnBmLmg+CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gcHJvZ19zaW1wbGVfZGFn W10gPSB7CisgICAgQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDIpLAorICAgIEJQRl9FWElUX0lO U04oKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gcHJvZ19vb2JfYWNjZXNz W10gPSB7CisgICAgQlBGX0xEX0lNTTY0KEJQRl9SRUdfMSwgMHhERUFEQkVFRlVMTCksCisgICAg QlBGX0xEWF9NRU0oQlBGX1csIEJQRl9SRUdfMCwgQlBGX1JFR18xLCAwKSwKKyAgICBCUEZfRVhJ VF9JTlNOKCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pbnNuIHByb2dfdW5pbml0 X3JlZ1tdID0geworICAgIEJQRl9NT1Y2NF9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzkpLAorICAg IEJQRl9FWElUX0lOU04oKSwKK307CisKKy8qCisgKiBpbnNuIDA6IFIxID0gMQorICogaW5zbiAx OiBpZiBSMSAhPSAwIGdvdG8gKzIgIC0+ICBpbnNuIDQgIFtwYXRoIEJdCisgKiBpbnNuIDI6IFIw ID0gMSAgICAgICAgICAgICAgW3BhdGggQTogZmFsbC10aHJvdWdoXQorICogaW5zbiAzOiBleGl0 CisgKiBpbnNuIDQ6IFIwID0gMiAgICAgICAgICAgICAgW3BhdGggQl0KKyAqIGluc24gNTogZXhp dAorICogTm8gam9pbiBwb2ludC4gQm90aCBwYXRocyBleGl0IGluZGVwZW5kZW50bHkuCisgKi8K K3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gcHJvZ19kYWdfYnJhbmNoW10gPSB7CisgICAg QlBGX01PVjY0X0lNTShCUEZfUkVHXzEsIDEpLAorICAgIEJQRl9KTVBfSU1NKEJQRl9KTkUsIEJQ Rl9SRUdfMSwgMCwgMiksCisgICAgQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLAorICAgIEJQ Rl9FWElUX0lOU04oKSwKKyAgICBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgMiksCisgICAgQlBG X0VYSVRfSU5TTigpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBwcm9nX2N5 Y2xpY1tdID0geworICAgIEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18xLCAwKSwKKyAgICBCUEZfQUxV NjRfSU1NKEJQRl9BREQsIEJQRl9SRUdfMSwgMSksCisgICAgQlBGX0pNUF9JTU0oQlBGX0pMVCwg QlBGX1JFR18xLCAxMCwgLTIpLAorICAgIEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAyKSwKKyAg ICBCUEZfRVhJVF9JTlNOKCksCit9OworCisvKgorICogaW5zbiAwOiBSMSA9IDAKKyAqIGluc24g MTogaWYgUjEgPT0gMCBnb3RvICsyICAtPiAgaW5zbiA0ICBbcGF0aCBBXQorICogaW5zbiAyOiBS MCA9IDEgICAgICAgICAgICAgIFtwYXRoIEI6IFIxICE9IDBdCisgKiBpbnNuIDM6IGdvdG8gKzEg ICAgICAgICAgICAgLT4gIGluc24gNQorICogaW5zbiA0OiBSMCA9IDIgICAgICAgICAgICAgIFtw YXRoIEE6IFIxID09IDBdCisgKiAgICAgICAgICBmYWxsLXRocm91Z2gKKyAqIGluc24gNTogZXhp dCAgICAgICAgICAgICAgICA8LSBKT0lOIFBPSU5UIChpbl9kZWdyZWUgPSAyKQorICoKKyAqIFBh dGggQTogMC0+MSh0YWtlbiktPjQtPjUgICBSMCA9IDIKKyAqIFBhdGggQjogMC0+MShmYWxsKS0+ Mi0+My0+NSBSMCA9IDEKKyAqIE1lcmdlOiBSMCA9IHNjYWxhciBvbiBib3RoIHBhdGhzIC0+IEFD Q0VQVAorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pbnNuIHByb2dfZGFnX2pvaW5fcGFz c1tdID0geworICAgIEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18xLCAwKSwKKyAgICBCUEZfSk1QX0lN TShCUEZfSkVRLCBCUEZfUkVHXzEsIDAsIDIpLAorICAgIEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18w LCAxKSwKKyAgICBCUEZfSk1QX0EoMSksCisgICAgQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDIp LAorICAgIEJQRl9FWElUX0lOU04oKSwKK307CisKKy8qCisgKiBpbnNuIDA6IFIxID0gMAorICog aW5zbiAxOiBpZiBSMSA9PSAwIGdvdG8gKzIgIC0+ICBpbnNuIDQgIFtwYXRoIEFdCisgKiBpbnNu IDI6IFIwID0gMSAgICAgICAgICAgICAgW3BhdGggQjogUjAgc2V0XQorICogaW5zbiAzOiBnb3Rv ICsxICAgICAgICAgICAgIC0+ICBpbnNuIDUKKyAqIGluc24gNDogUjIgPSA5OSAgICAgICAgICAg ICBbcGF0aCBBOiBSMCBOT1Qgc2V0XQorICogICAgICAgICAgZmFsbC10aHJvdWdoCisgKiBpbnNu IDU6IGV4aXQgICAgICAgICAgICAgICAgPC0gSk9JTiBQT0lOVAorICoKKyAqIFBhdGggQTogUjAg PSBOT1RfSU5JVCBhdCBpbnNuIDUKKyAqIFBhdGggQjogUjAgPSBzY2FsYXIgIGF0IGluc24gNQor ICogQ29uc2VydmF0aXZlIG1lcmdlOiBSMCA9IE5PVF9JTklUIC0+IFJFSkVDVAorICovCitzdGF0 aWMgY29uc3Qgc3RydWN0IGJwZl9pbnNuIHByb2dfZGFnX2pvaW5fcmVqZWN0W10gPSB7CisgICAg QlBGX01PVjY0X0lNTShCUEZfUkVHXzEsIDApLAorICAgIEJQRl9KTVBfSU1NKEJQRl9KRVEsIEJQ Rl9SRUdfMSwgMCwgMiksCisgICAgQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsIDEpLAorICAgIEJQ Rl9KTVBfQSgxKSwKKyAgICBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMiwgOTkpLAorICAgIEJQRl9F WElUX0lOU04oKSwKK307CisKK3ZvaWQgdGVzdF9kYWdfdmVyaWZ5KHZvaWQpCit7CisgICAgY2hh ciBsb2dfYnVmWzQwOTZdOworICAgIGludCBwcm9nX2ZkOworCisgICAgTElCQlBGX09QVFMoYnBm X3Byb2dfbG9hZF9vcHRzLCBvcHRzLAorICAgICAgICAubG9nX2J1ZiAgID0gbG9nX2J1ZiwKKyAg ICAgICAgLmxvZ19zaXplICA9IHNpemVvZihsb2dfYnVmKSwKKyAgICAgICAgLmxvZ19sZXZlbCA9 IDEsCisgICAgKTsKKworI2RlZmluZSBMT0FEKGluc25zKSBcCisgICAgYnBmX3Byb2dfbG9hZChC UEZfUFJPR19UWVBFX1hEUCwgTlVMTCwgIkdQTCIsIFwKKyAgICAgICAgICAgICAgICAgIGluc25z LCBBUlJBWV9TSVpFKGluc25zKSwgJm9wdHMpCisKKyAgICBwcm9nX2ZkID0gTE9BRChwcm9nX3Np bXBsZV9kYWcpOworICAgIEFTU0VSVF9HVChwcm9nX2ZkLCAwLCAidGVzdDE6IHNpbXBsZSBEQUcg bXVzdCBsb2FkIik7CisgICAgaWYgKHByb2dfZmQgPiAwKSBjbG9zZShwcm9nX2ZkKTsKKworICAg IHByb2dfZmQgPSBMT0FEKHByb2dfb29iX2FjY2Vzcyk7CisgICAgQVNTRVJUX0xUKHByb2dfZmQs IDAsICJ0ZXN0MjogT09CIGFjY2VzcyBtdXN0IGJlIFJFSkVDVEVEIik7CisKKyAgICBwcm9nX2Zk ID0gTE9BRChwcm9nX3VuaW5pdF9yZWcpOworICAgIEFTU0VSVF9MVChwcm9nX2ZkLCAwLCAidGVz dDM6IHVuaW5pdCByZWdpc3RlciBtdXN0IGJlIFJFSkVDVEVEIik7CisKKyAgICBwcm9nX2ZkID0g TE9BRChwcm9nX2RhZ19icmFuY2gpOworICAgIEFTU0VSVF9HVChwcm9nX2ZkLCAwLCAidGVzdDQ6 IHR3by1icmFuY2ggREFHIG11c3QgbG9hZCIpOworICAgIGlmIChwcm9nX2ZkID4gMCkgY2xvc2Uo cHJvZ19mZCk7CisKKyAgICBwcm9nX2ZkID0gTE9BRChwcm9nX2N5Y2xpYyk7CisgICAgQVNTRVJU X0dUKHByb2dfZmQsIDAsICJ0ZXN0NTogY3ljbGljIG11c3QgbG9hZCB2aWEgZnVsbC12ZXJpZmll ciBmYWxsYmFjayIpOworICAgIGlmIChwcm9nX2ZkID4gMCkgY2xvc2UocHJvZ19mZCk7CisKKyAg ICBwcm9nX2ZkID0gTE9BRChwcm9nX2RhZ19qb2luX3Bhc3MpOworICAgIEFTU0VSVF9HVChwcm9n X2ZkLCAwLCAidGVzdDY6IGpvaW4tcG9pbnQgREFHIChSMCBpbml0IGFsbCBwYXRocykgbXVzdCBs b2FkIik7CisgICAgaWYgKHByb2dfZmQgPiAwKSBjbG9zZShwcm9nX2ZkKTsKKworICAgIHByb2df ZmQgPSBMT0FEKHByb2dfZGFnX2pvaW5fcmVqZWN0KTsKKyAgICBBU1NFUlRfTFQocHJvZ19mZCwg MCwKKyAgICAgICAgICAgICAgInRlc3Q3OiBqb2luLXBvaW50IERBRyAoUjAgdW5pbml0IG9uIHBh dGggQSkgbXVzdCBiZSBSRUpFQ1RFRCIpOwoKKyN1bmRlZiBMT0FECit9