From owner-freebsd-amd64@FreeBSD.ORG Fri Oct 14 21:40:22 2011 Return-Path: Delivered-To: freebsd-amd64@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D1C101065670 for ; Fri, 14 Oct 2011 21:40:22 +0000 (UTC) (envelope-from pluknet@gmail.com) Received: from mail-yx0-f177.google.com (mail-yx0-f177.google.com [209.85.213.177]) by mx1.freebsd.org (Postfix) with ESMTP id 7F6988FC0C for ; Fri, 14 Oct 2011 21:40:22 +0000 (UTC) Received: by yxk36 with SMTP id 36so1644342yxk.8 for ; Fri, 14 Oct 2011 14:40:22 -0700 (PDT) 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=1WFVI6R4unc3x++UK0GF5Jscf2/0HMPPKxMXXVO5I5c=; b=hLAet3mY4lv9T9tAMuWIuUO/QlhjY3PU2BxFlFkZPlwxv8/AebUcIn8S5phAHYhhpI caZ3BQMCgYLH+Qgipoq8Mhk2i4P+xooVSqNu3zGd7izsb7LUSisf5PTFGfDw9fRPPKSh geaTmvvj8FbK2eWGZE8FcEmUlAwJn71552GaY= MIME-Version: 1.0 Received: by 10.182.202.68 with SMTP id kg4mr6513792obc.21.1318628421832; Fri, 14 Oct 2011 14:40:21 -0700 (PDT) Received: by 10.182.220.1 with HTTP; Fri, 14 Oct 2011 14:40:21 -0700 (PDT) In-Reply-To: References: <714EF3C9-33B0-4EF5-B52C-1E95F7F432F9@fisglobal.com> Date: Sat, 15 Oct 2011 01:40:21 +0400 Message-ID: From: Sergey Kandaurov To: Devin Teske Content-Type: multipart/mixed; boundary=e89a8f646a1dac909804af491af9 Cc: Dave Robison , FreeBSD amd64 Subject: Re: 32-bit route(8) on amd64 host and jails X-BeenThere: freebsd-amd64@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the AMD64 platform List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Oct 2011 21:40:22 -0000 --e89a8f646a1dac909804af491af9 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On 21 September 2011 16:47, Sergey Kandaurov wrote: > On 21 September 2011 06:40, Devin Teske wrote= : >> I'm noticing that a 32-bit route(8) shows strange behaviour while runnin= g under an amd64 kernel (regardless of whether in the base-host -- utilizin= g /usr/lib32/libc.so.7 -- or in a jail and/or vimage -- 32-bit in nature; r= esults are same). >> >> Executable runs fine, but you can't (a) set the default route or (b) vie= w the default route (after successfully setting it with the amd64 build, of= course). >> >> ASIDE: This is under 8.1-RELEASE. >> >> When attempting to set the default route, you get the following... >> >> root@kps0a / # route add -net default 10.10.125.99 >> route: writing to routing socket: Invalid argument >> add net default: gateway 10.10.125.99: Invalid argument >> >> Meanwhile, using the amd64 version, no issues. >> >> When attempting to view the default route, you get the following... >> >> root@kps0a / # route -n get default >> =A0 route to: default >> destination: default >> =A0 =A0 =A0 mask: default >> =A0 =A0gateway: default >> =A0 =A0 =A0flags: >> =A0recvpipe =A0sendpipe =A0ssthresh =A0rtt,msec =A0 =A0mtu =A0 =A0 =A0 = =A0weight =A0 =A0expire >> =A0 =A0 =A0 0 =A0 =A0 =A0 =A0 0 =A0 =A0 =A0 =A0 0 =A0 =A0 =A0 =A0 0 =A0 = =A0 =A0 =A0 0 =A0 =A0 =A0 =A0 0 =A0-1316570637 >> >> It's the "gateway: default" that's out of place. >> > > Currently, FreeBSD has a poor shape of rtsocket freebsd32 compatibility, > AFAIK only sysctl layer (sysctl_rtsock) is aware of it. > That means when a 32bit app writes some data to a routing socket, > kernel expects to receive it in the native ABI, and it doesn't work. Can you please try this preliminary patch and report back? You only need to rebuild kernel and reboot with the attached patch to enable use of e.g. 32-bit route(8) command on amd64 kernel. No any userland utility needs to rebuild to enable the compatibility. Tested on 8.2 amd64 only with route get default and route delete/add. --=20 wbr, pluknet --e89a8f646a1dac909804af491af9 Content-Type: text/x-patch; charset=US-ASCII; name="rtmsg32.diff" Content-Disposition: attachment; filename="rtmsg32.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gtrp0t4t0 SW5kZXg6IHN5cy9uZXQvcnRzb2NrLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldC9ydHNvY2suYwko cmV2aXNpb24gMjI1NjcxKQorKysgc3lzL25ldC9ydHNvY2suYwkod29ya2luZyBjb3B5KQpAQCAt NzUsNiArNzUsNyBAQCBleHRlcm4gdm9pZCBzY3RwX2FkZHJfY2hhbmdlKHN0cnVjdCBpZmFkZHIg KmlmYSwgaQogCiAjaWZkZWYgQ09NUEFUX0ZSRUVCU0QzMgogI2luY2x1ZGUgPHN5cy9tb3VudC5o PgorI2luY2x1ZGUgPHN5cy9zeXNlbnQuaD4KICNpbmNsdWRlIDxjb21wYXQvZnJlZWJzZDMyL2Zy ZWVic2QzMi5oPgogCiBzdHJ1Y3QgaWZfZGF0YTMyIHsKQEAgLTExNCw2ICsxMTUsNDIgQEAgc3Ry dWN0IGlmX21zZ2hkcjMyIHsKIAl1aW50MTZfdCBpZm1faW5kZXg7CiAJc3RydWN0CWlmX2RhdGEz MiBpZm1fZGF0YTsKIH07CisKK3N0cnVjdCBydF9tZXRyaWNzMzIgeworCXVpbnQzMl90CXJteF9s b2NrczsKKwl1aW50MzJfdAlybXhfbXR1OworCXVpbnQzMl90CXJteF9ob3Bjb3VudDsKKwl1aW50 MzJfdAlybXhfZXhwaXJlOworCXVpbnQzMl90CXJteF9yZWN2cGlwZTsKKwl1aW50MzJfdAlybXhf c2VuZHBpcGU7CisJdWludDMyX3QJcm14X3NzdGhyZXNoOworCXVpbnQzMl90CXJteF9ydHQ7CisJ dWludDMyX3QJcm14X3J0dHZhcjsKKwl1aW50MzJfdAlybXhfcGtzZW50OworCXVpbnQzMl90CXJt eF93ZWlnaHQ7CisJdWludDMyX3QJcm14X2ZpbGxlclszXTsKK307CisKK3N0cnVjdCBydF9tc2do ZHIzMiB7CisJdWludDE2X3QJcnRtX21zZ2xlbjsKKwl1aW50OF90CQlydG1fdmVyc2lvbjsKKwl1 aW50OF90CQlydG1fdHlwZTsKKwl1aW50MTZfdAlydG1faW5kZXg7CisJdWludDE2X3QJcnRtX2hv bGUxOworCXVpbnQzMl90CXJ0bV9mbGFnczsKKwl1aW50MzJfdAlydG1fYWRkcnM7CisJdWludDMy X3QJcnRtX3BpZDsKKwl1aW50MzJfdAlydG1fc2VxOworCXVpbnQzMl90CXJ0bV9lcnJubzsKKwl1 aW50MzJfdAlydG1fZm1hc2s7CisJdWludDMyX3QJcnRtX2luaXRzOworCXN0cnVjdCBydF9tZXRy aWNzMzIgcnRtX3JteDsKK307CisKKyNkZWZpbmUJU0FfU0laRTMyKHNhKQkJCQkJCVwKKyAgICAo ICAoIShzYSkgfHwgKChzdHJ1Y3Qgc29ja2FkZHIgKikoc2EpKS0+c2FfbGVuID09IDApID8JXAor CXNpemVvZihpbnQzMl90KQkJOgkJCQlcCisJMSArICggKCgoc3RydWN0IHNvY2thZGRyICopKHNh KSktPnNhX2xlbiAtIDEpIHwgKHNpemVvZihpbnQzMl90KSAtIDEpKSkKICNlbmRpZgogCiBNQUxM T0NfREVGSU5FKE1fUlRBQkxFLCAicm91dGV0YmwiLCAicm91dGluZyB0YWJsZXMiKTsKQEAgLTUw MSw2ICs1MzgsMTM4IEBAIHJ0bV9nZXRfamFpbGVkKHN0cnVjdCBydF9hZGRyaW5mbyAqaW5mbywg c3RydWN0IGlmCiAJcmV0dXJuICgwKTsKIH0KIAorI2lmZGVmIENPTVBBVF9GUkVFQlNEMzIKK3N0 YXRpYyB2b2lkCitmcmVlYnNkMzJfcnRfbWV0cmljc19pbihzdHJ1Y3QgcnRfbWV0cmljczMyICpz cmMsIHN0cnVjdCBydF9tZXRyaWNzICpkc3QpCit7CisKKwliemVybyhkc3QsIHNpemVvZigqZHN0 KSk7CisJQ1AoKnNyYywgKmRzdCwgcm14X210dSk7CisJQ1AoKnNyYywgKmRzdCwgcm14X2V4cGly ZSk7CisJQ1AoKnNyYywgKmRzdCwgcm14X3Brc2VudCk7CisJQ1AoKnNyYywgKmRzdCwgcm14X3dl aWdodCk7Cit9CisKK3N0YXRpYyB2b2lkCitmcmVlYnNkMzJfcnRfbWV0cmljc19vdXQoc3RydWN0 IHJ0X21ldHJpY3MgKnNyYywgc3RydWN0IHJ0X21ldHJpY3MzMiAqZHN0KQoreworCisJYnplcm8o ZHN0LCBzaXplb2YoKmRzdCkpOworCUNQKCpzcmMsICpkc3QsIHJteF9tdHUpOworCUNQKCpzcmMs ICpkc3QsIHJteF9leHBpcmUpOworCUNQKCpzcmMsICpkc3QsIHJteF9wa3NlbnQpOworCUNQKCpz cmMsICpkc3QsIHJteF93ZWlnaHQpOworfQorCitzdGF0aWMgdm9pZAorZnJlZWJzZDMyX3J0X21z Z2hkcl9pbihzdHJ1Y3QgcnRfbXNnaGRyMzIgKnNyYywgc3RydWN0IHJ0X21zZ2hkciAqZHN0KQor eworCisJYnplcm8oZHN0LCBzaXplb2YoKmRzdCkpOworCS8qIENQKCpzcmMsICpkc3QsIHJ0bV9t c2dsZW4pOyAqLwkvKiB1cGRhdGVkIHNlcGFyYXRlbHkgKi8KKwlDUCgqc3JjLCAqZHN0LCBydG1f dmVyc2lvbik7CisJQ1AoKnNyYywgKmRzdCwgcnRtX3R5cGUpOworCUNQKCpzcmMsICpkc3QsIHJ0 bV9pbmRleCk7CisJQ1AoKnNyYywgKmRzdCwgcnRtX2ZsYWdzKTsKKwlDUCgqc3JjLCAqZHN0LCBy dG1fYWRkcnMpOworCUNQKCpzcmMsICpkc3QsIHJ0bV9waWQpOworCUNQKCpzcmMsICpkc3QsIHJ0 bV9zZXEpOworCUNQKCpzcmMsICpkc3QsIHJ0bV9lcnJubyk7CisJQ1AoKnNyYywgKmRzdCwgcnRt X2ZtYXNrKTsKKwlDUCgqc3JjLCAqZHN0LCBydG1faW5pdHMpOworCWZyZWVic2QzMl9ydF9tZXRy aWNzX2luKCZzcmMtPnJ0bV9ybXgsICZkc3QtPnJ0bV9ybXgpOworfQorCitzdGF0aWMgdm9pZAor ZnJlZWJzZDMyX3J0X21zZ2hkcl9vdXQoc3RydWN0IHJ0X21zZ2hkciAqc3JjLCBzdHJ1Y3QgcnRf bXNnaGRyMzIgKmRzdCkKK3sKKworCWJ6ZXJvKGRzdCwgc2l6ZW9mKCpkc3QpKTsKKwkvKiBDUCgq c3JjLCAqZHN0LCBydG1fbXNnbGVuKTsgKi8JLyogdXBkYXRlZCBzZXBhcmF0ZWx5ICovCisJQ1Ao KnNyYywgKmRzdCwgcnRtX3ZlcnNpb24pOworCUNQKCpzcmMsICpkc3QsIHJ0bV90eXBlKTsKKwlD UCgqc3JjLCAqZHN0LCBydG1faW5kZXgpOworCUNQKCpzcmMsICpkc3QsIHJ0bV9mbGFncyk7CisJ Q1AoKnNyYywgKmRzdCwgcnRtX2FkZHJzKTsKKwlDUCgqc3JjLCAqZHN0LCBydG1fcGlkKTsKKwlD UCgqc3JjLCAqZHN0LCBydG1fc2VxKTsKKwlDUCgqc3JjLCAqZHN0LCBydG1fZXJybm8pOworCUNQ KCpzcmMsICpkc3QsIHJ0bV9mbWFzayk7CisJQ1AoKnNyYywgKmRzdCwgcnRtX2luaXRzKTsKKwlm cmVlYnNkMzJfcnRfbWV0cmljc19vdXQoJnNyYy0+cnRtX3JteCwgJmRzdC0+cnRtX3JteCk7Cit9 CisKK3N0YXRpYyBpbnQKK2ZyZWVic2QzMl9ydF9tc3BhY2VfbGVuX2luKGNhZGRyX3QgY3AsIGNh ZGRyX3QgY3BsaW0sIGludCAqYnVmbGVuKQoreworCXN0cnVjdCBzb2NrYWRkciAqc2E7CisJaW50 IGk7CisKKwlmb3IgKGkgPSAwLCAqYnVmbGVuID0gMDsgaSA8IFJUQVhfTUFYICYmIGNwIDwgY3Bs aW07IGkrKykgeworCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKiljcDsKKworCQlpZiAoY3AgKyBz YS0+c2FfbGVuID4gY3BsaW0pCisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCWNwICs9IFNBX1NJWkUz MihzYSk7CisJCSpidWZsZW4gKz0gU0FfU0laRShzYSk7CisJfQorCXJldHVybiAoMCk7Cit9CisK K3N0YXRpYyBpbnQKK2ZyZWVic2QzMl9ydF9tc3BhY2VfbGVuX291dChjYWRkcl90IGNwLCBjYWRk cl90IGNwbGltLCBpbnQgKmJ1ZmxlbikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKnNhOworCWludCBp OworCisJZm9yIChpID0gMCwgKmJ1ZmxlbiA9IDA7IGkgPCBSVEFYX01BWCAmJiBjcCA8IGNwbGlt OyBpKyspIHsKKwkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopY3A7CisKKwkJaWYgKGNwICsgc2Et PnNhX2xlbiA+IGNwbGltKQorCQkJcmV0dXJuIChFSU5WQUwpOworCQljcCArPSBTQV9TSVpFKHNh KTsKKwkJKmJ1ZmxlbiArPSBTQV9TSVpFMzIoc2EpOworCX0KKwlyZXR1cm4gKDApOworfQorCitz dGF0aWMgaW50CitmcmVlYnNkMzJfcnRfbXNwYWNlX2luKGNhZGRyX3QgY3AsIGNhZGRyX3QgY3A2 NCwgY2FkZHJfdCBjcGxpbSkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKnNhOworCWludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IFJUQVhfTUFYICYmIGNwIDwgY3BsaW07IGkrKykgeworCQlzYSA9IChz dHJ1Y3Qgc29ja2FkZHIgKiljcDsKKworCQlpZiAoY3AgKyBzYS0+c2FfbGVuID4gY3BsaW0pCisJ CQlyZXR1cm4gKEVJTlZBTCk7CisJCW1lbWNweShjcDY0LCBjcCwgU0FfU0laRTMyKHNhKSk7CisJ CWNwICs9IFNBX1NJWkUzMihzYSk7CisJCWNwNjQgKz0gU0FfU0laRShzYSk7CisJfQorCXJldHVy biAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2ZyZWVic2QzMl9ydF9tc3BhY2Vfb3V0KGNhZGRyX3Qg Y3AsIGNhZGRyX3QgY3AzMiwgY2FkZHJfdCBjcGxpbSkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKnNh OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFJUQVhfTUFYICYmIGNwIDwgY3BsaW07IGkr KykgeworCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKiljcDsKKworCQlpZiAoY3AgKyBzYS0+c2Ff bGVuID4gY3BsaW0pCisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCW1lbWNweShjcDMyLCBjcCwgU0Ff U0laRShzYSkpOworCQljcCArPSBTQV9TSVpFKHNhKTsKKwkJY3AzMiArPSBTQV9TSVpFMzIoc2Ep OworCX0KKwlyZXR1cm4gKDApOworfQorI2VuZGlmCisKIC8qQVJHU1VTRUQqLwogc3RhdGljIGlu dAogcm91dGVfb3V0cHV0KHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qgc29ja2V0ICpzbykKQEAgLTUx Myw3ICs2ODIsMTQgQEAgcm91dGVfb3V0cHV0KHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qgc29ja2V0 ICpzbykKIAlpbnQgbGVuLCBlcnJvciA9IDA7CiAJc3RydWN0IGlmbmV0ICppZnAgPSBOVUxMOwog CXVuaW9uIHNvY2thZGRyX3VuaW9uIHNhdW47CisJc2l6ZV90IHJ0bWxlbjsKKyNpZmRlZiBDT01Q QVRfRlJFRUJTRDMyCisJc3RydWN0IHJ0X21zZ2hkcjMyICpydG0zMiA9IE5VTEw7CisJaW50IGxl bjMyID0gMCwgcnRfbXNwYWNlX2xlbiA9IDAsIHdyYXAzMiA9IDA7CiAKKwlpZiAoU1ZfQ1VSUFJP Q19GTEFHKFNWX0lMUDMyKSkKKwkJd3JhcDMyID0gMTsKKyNlbmRpZgogI2RlZmluZSBzZW5kZXJy KGUpIHsgZXJyb3IgPSBlOyBnb3RvIGZsdXNoO30KIAlpZiAobSA9PSBOVUxMIHx8ICgobS0+bV9s ZW4gPCBzaXplb2YobG9uZykpICYmCiAJCSAgICAgICAobSA9IG1fcHVsbHVwKG0sIHNpemVvZihs b25nKSkpID09IE5VTEwpKQpAQCAtNTIxLDE3ICs2OTcsNTAgQEAgcm91dGVfb3V0cHV0KHN0cnVj dCBtYnVmICptLCBzdHJ1Y3Qgc29ja2V0ICpzbykKIAlpZiAoKG0tPm1fZmxhZ3MgJiBNX1BLVEhE UikgPT0gMCkKIAkJcGFuaWMoInJvdXRlX291dHB1dCIpOwogCWxlbiA9IG0tPm1fcGt0aGRyLmxl bjsKLQlpZiAobGVuIDwgc2l6ZW9mKCpydG0pIHx8CisKKyNpZmRlZiBDT01QQVRfRlJFRUJTRDMy CisJaWYgKHdyYXAzMikgeworCQlydG1sZW4gPSBzaXplb2YoKnJ0bTMyKTsKKwkJbGVuMzIgPSBs ZW47CisJfSBlbHNlCisjZW5kaWYKKwkJcnRtbGVuID0gc2l6ZW9mKCpydG0pOworCisJaWYgKGxl biA8IHJ0bWxlbiB8fAogCSAgICBsZW4gIT0gbXRvZChtLCBzdHJ1Y3QgcnRfbXNnaGRyICopLT5y dG1fbXNnbGVuKSB7CiAJCWluZm8ucnRpX2luZm9bUlRBWF9EU1RdID0gTlVMTDsKIAkJc2VuZGVy cihFSU5WQUwpOwogCX0KLQlSX01hbGxvYyhydG0sIHN0cnVjdCBydF9tc2doZHIgKiwgbGVuKTsK KworI2lmZGVmIENPTVBBVF9GUkVFQlNEMzIKKwlpZiAod3JhcDMyKSB7CisJCVJfTWFsbG9jKHJ0 bTMyLCBzdHJ1Y3QgcnRfbXNnaGRyMzIgKiwgbGVuMzIpOworCQlpZiAocnRtMzIgPT0gTlVMTCkg eworCQkJaW5mby5ydGlfaW5mb1tSVEFYX0RTVF0gPSBOVUxMOworCQkJc2VuZGVycihFTk9CVUZT KTsKKwkJfQorCQltX2NvcHlkYXRhKG0sIDAsIGxlbjMyLCAoY2FkZHJfdClydG0zMik7CisJCWZy ZWVic2QzMl9ydF9tc3BhY2VfbGVuX2luKChjYWRkcl90KShydG0zMiArIDEpLCBsZW4zMiArIChj YWRkcl90KXJ0bTMyLCAmcnRfbXNwYWNlX2xlbik7CisJCS8qIGZpeHVwIGxlbiB0byBhbGxvYyBy dG0gb2YgbmF0aXZlIHNpemUgKi8KKwkJbGVuID0gcnRfbXNwYWNlX2xlbiArIHNpemVvZigqcnRt KTsKKwl9CisjZW5kaWYKKwlSX1phbGxvYyhydG0sIHN0cnVjdCBydF9tc2doZHIgKiwgbGVuKTsK IAlpZiAocnRtID09IE5VTEwpIHsKIAkJaW5mby5ydGlfaW5mb1tSVEFYX0RTVF0gPSBOVUxMOwog CQlzZW5kZXJyKEVOT0JVRlMpOwogCX0KLQltX2NvcHlkYXRhKG0sIDAsIGxlbiwgKGNhZGRyX3Qp cnRtKTsKKworI2lmZGVmIENPTVBBVF9GUkVFQlNEMzIKKwlpZiAod3JhcDMyKSB7CisJCWZyZWVi c2QzMl9ydF9tc2doZHJfaW4ocnRtMzIsIHJ0bSk7CisJCWZyZWVic2QzMl9ydF9tc3BhY2VfaW4o KGNhZGRyX3QpKHJ0bTMyICsgMSksCisJCSAgICAoY2FkZHJfdCkocnRtICsgMSksIChjYWRkcl90 KXJ0bTMyICsgbGVuMzIpOworCQlydG0tPnJ0bV9tc2dsZW4gPSBsZW47CisJfSBlbHNlCisjZW5k aWYKKwkJbV9jb3B5ZGF0YShtLCAwLCBsZW4sIChjYWRkcl90KXJ0bSk7CisKIAlpZiAocnRtLT5y dG1fdmVyc2lvbiAhPSBSVE1fVkVSU0lPTikgewogCQlpbmZvLnJ0aV9pbmZvW1JUQVhfRFNUXSA9 IE5VTEw7CiAJCXNlbmRlcnIoRVBST1RPTk9TVVBQT1JUKTsKQEAgLTU0Myw2ICs3NTIsMTYgQEAg cm91dGVfb3V0cHV0KHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qgc29ja2V0ICpzbykKIAkJaW5mby5y dGlfaW5mb1tSVEFYX0RTVF0gPSBOVUxMOwogCQlzZW5kZXJyKEVJTlZBTCk7CiAJfQorLyoKKyAg ICAgICAgaW50IGk7IHVpbnQxNl90ICpqOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgKiAoaW50 KXNpemVvZih1aW50MTZfdCkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgICAgaiA9ICh1 aW50MTZfdCAqKXJ0bTsKKyAgICAgICAgICAgICAgICAgIGlmIChpICUgOCA9PSAwKQorICAgICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiXG4weCUwNGp4ICIsICh1aW50bWF4X3QpaSpzaXpl b2YodWludDE2X3QpKTsKKyAgICAgICAgICAgICAgICAgIHByaW50ZigiJTA0eCAiLCBic3dhcDE2 KGpbaV0pKTsKKyAgICAgICAgfTsgcHJpbnRmKCJcbiIpOworKi8KIAlpbmZvLnJ0aV9mbGFncyA9 IHJ0bS0+cnRtX2ZsYWdzOwogCWlmIChpbmZvLnJ0aV9pbmZvW1JUQVhfRFNUXSA9PSBOVUxMIHx8 CiAJICAgIGluZm8ucnRpX2luZm9bUlRBWF9EU1RdLT5zYV9mYW1pbHkgPj0gQUZfTUFYIHx8CkBA IC04NzcsMTIgKzEwOTYsNDEgQEAgZmx1c2g6CiAJCXJwID0gc290b3Jhd2NiKHNvKTsKIAl9CiAJ aWYgKHJ0bSkgewotCQltX2NvcHliYWNrKG0sIDAsIHJ0bS0+cnRtX21zZ2xlbiwgKGNhZGRyX3Qp cnRtKTsKLQkJaWYgKG0tPm1fcGt0aGRyLmxlbiA8IHJ0bS0+cnRtX21zZ2xlbikgewotCQkJbV9m cmVlbShtKTsKLQkJCW0gPSBOVUxMOwotCQl9IGVsc2UgaWYgKG0tPm1fcGt0aGRyLmxlbiA+IHJ0 bS0+cnRtX21zZ2xlbikKLQkJCW1fYWRqKG0sIHJ0bS0+cnRtX21zZ2xlbiAtIG0tPm1fcGt0aGRy Lmxlbik7CisjaWZkZWYgQ09NUEFUX0ZSRUVCU0QzMgorCQlpZiAod3JhcDMyKSB7CisJCQlpbnQg cnRfbXNwYWNlX2xlbjMyOworCisJCQlmcmVlYnNkMzJfcnRfbXNwYWNlX2xlbl9vdXQoKGNhZGRy X3QpKHJ0bSArIDEpLAorCQkJICAgIGxlbiArIChjYWRkcl90KXJ0bSwgJnJ0X21zcGFjZV9sZW4z Mik7CisJCQlsZW4zMiA9IHJ0X21zcGFjZV9sZW4zMiArIHNpemVvZigqcnRtMzIpOworCQkJaWYg KGxlbjMyID4gcnRtMzItPnJ0bV9tc2dsZW4pIHsKKwkJCQlzdHJ1Y3QgcnRfbXNnaGRyMzIgKm5l d19ydG0zMjsKKwkJCQlSX01hbGxvYyhuZXdfcnRtMzIsIHN0cnVjdCBydF9tc2doZHIzMiAqLCBs ZW4zMik7CisJCQkJaWYgKG5ld19ydG0zMiA9PSBOVUxMKQorCQkJCQlzZW5kZXJyKEVOT0JVRlMp OworCQkJCWJjb3B5KHJ0bTMyLCBuZXdfcnRtMzIsIHJ0bTMyLT5ydG1fbXNnbGVuKTsKKwkJCQlG cmVlKHJ0bTMyKTsgcnRtMzIgPSBuZXdfcnRtMzI7CisJCQl9CisJCQlmcmVlYnNkMzJfcnRfbXNn aGRyX291dChydG0sIHJ0bTMyKTsKKwkJCXJ0bTMyLT5ydG1fbXNnbGVuID0gbGVuMzI7CisJCQlm cmVlYnNkMzJfcnRfbXNwYWNlX291dCgoY2FkZHJfdCkocnRtICsgMSksCisJCQkgICAgKGNhZGRy X3QpKHJ0bTMyICsgMSksIChjYWRkcl90KXJ0bSArIGxlbik7CisKKwkJCW1fY29weWJhY2sobSwg MCwgcnRtMzItPnJ0bV9tc2dsZW4sIChjYWRkcl90KXJ0bTMyKTsKKwkJCWlmIChtLT5tX3BrdGhk ci5sZW4gPCBydG0zMi0+cnRtX21zZ2xlbikgeworCQkJCW1fZnJlZW0obSk7CisJCQkJbSA9IE5V TEw7CisJCQl9IGVsc2UgaWYgKG0tPm1fcGt0aGRyLmxlbiA+IHJ0bTMyLT5ydG1fbXNnbGVuKQor CQkJCW1fYWRqKG0sIHJ0bTMyLT5ydG1fbXNnbGVuIC0gbS0+bV9wa3RoZHIubGVuKTsKKwkJfSBl bHNlIHsKKyNlbmRpZgorCQkJbV9jb3B5YmFjayhtLCAwLCBydG0tPnJ0bV9tc2dsZW4sIChjYWRk cl90KXJ0bSk7CisJCQlpZiAobS0+bV9wa3RoZHIubGVuIDwgcnRtLT5ydG1fbXNnbGVuKSB7CisJ CQkJbV9mcmVlbShtKTsKKwkJCQltID0gTlVMTDsKKwkJCX0gZWxzZSBpZiAobS0+bV9wa3RoZHIu bGVuID4gcnRtLT5ydG1fbXNnbGVuKQorCQkJCW1fYWRqKG0sIHJ0bS0+cnRtX21zZ2xlbiAtIG0t Pm1fcGt0aGRyLmxlbik7CisJCX0KIAl9CiAJaWYgKG0pIHsKIAkJaWYgKHJwKSB7CkBAIC04OTgs OCArMTE0NiwxMyBAQCBmbHVzaDoKIAkJCXJ0X2Rpc3BhdGNoKG0sIGluZm8ucnRpX2luZm9bUlRB WF9EU1RdKTsKIAl9CiAJLyogaW5mby5ydGlfaW5mb1tSVEFYX0RTVF0gKHVzZWQgYWJvdmUpIGNh biBwb2ludCBpbnNpZGUgb2YgcnRtICovCi0JaWYgKHJ0bSkKKwlpZiAocnRtKSB7CiAJCUZyZWUo cnRtKTsKKyNpZmRlZiBDT01QQVRfRlJFRUJTRDMyCisJCWlmICh3cmFwMzIpCisJCQlGcmVlKHJ0 bTMyKTsKKyNlbmRpZgorCX0KICAgICB9CiAJcmV0dXJuIChlcnJvcik7CiAjdW5kZWYJc2FfZXF1 YWwK --e89a8f646a1dac909804af491af9--