From nobody Sun May 19 03:12:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1597612143; cv=none; d=zohomail.com; s=zohoarc; b=W8+vbsvukZ4AIYlegoc75dGYhS1mS/Gn07hLMPYGruZRR4+ovPboeWxMK1GrSPnfXVnQYU08+g12XpNXj1CnXmWSWhg+1yWz/Avh/Jk88IjhUcBzU0/utXBzDzIf6655sYxSm+1nCsBe8VInZgDYgbOEZB6pSnTxJjC72uh3caw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597612143; h=Content-Type:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=RR/l3QLVjtUSZefrjjmsFX4eCrZFAST0t+QHsIHRunw=; b=TyPrEryYjj8tl6yac6laKohfnEBHgLSFE3V62xPSIpyOebRv3olt9SLVMRG6mtcQ6YaNqJLxqIukyxiWUIX8/vOuSGxY0zBeB5T61HaXsxDh7Fuwt1JGcH73EzCEuHHs4aHM7wg4CrHNw0Poi9tTsqX0phhil79xLk3SUVOFQBA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597612143978688.0080530460115; Sun, 16 Aug 2020 14:09:03 -0700 (PDT) Received: from localhost ([::1]:58360 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k7Ptl-0003IA-VB for importer@patchew.org; Sun, 16 Aug 2020 17:09:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37948) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k7Onl-0001Qn-6i for qemu-devel@nongnu.org; Sun, 16 Aug 2020 15:58:45 -0400 Received: from mail-pj1-x1043.google.com ([2607:f8b0:4864:20::1043]:39159) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k7Oni-0008Bx-4l for qemu-devel@nongnu.org; Sun, 16 Aug 2020 15:58:44 -0400 Received: by mail-pj1-x1043.google.com with SMTP id f9so6649900pju.4 for ; Sun, 16 Aug 2020 12:58:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=RR/l3QLVjtUSZefrjjmsFX4eCrZFAST0t+QHsIHRunw=; b=P4yN7dQd06yU70R34eg8UCPRn/gi3sXp2VNs3FZckIODvKxHtlPPkyVirmNbHbyYem tcfvduXampavXy3f6yfU7L0Rh4JRzMN23PhwWkZ61lsVD3j+K8u6b+FtQZWgOK3UG8xK 8LfMWiv4+hnAL0KdrI0312V97CZpGlZV9Xw1HkNS+rie+89BlCnCJRKlPQLuYINIfZvb PWv1gQ55K0IxNSlmjVVx582gwyzDLYCs3lEJYO8RgrM4Hf/DGxs60f2bYNzWHIx1RI4J QvDteJgHFJkwlGgY/SqEoQTI7THk5bNz0FJgEI83YtNegw2A1aaywIGeoNvYJ9wzslL6 3kLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=RR/l3QLVjtUSZefrjjmsFX4eCrZFAST0t+QHsIHRunw=; b=dfa6+wDAmkCYYe1URY5H1QjxA/aphJnw5j8hp7WU3h3z+gN8ISg1108BRvRqpHwhQ2 M3V1ychOcdc5NVd2X8BCCEIsVxDH0yWCvHEYN6rnMGRmpixpL0wTylkhL0GsHw01oQBr 9VZ1dnTbsTKrnwjsYRKKu+j2VScnrQXyE0WuD5/3UTb9Ya8GbBbKaZDtywbW2iNNqRLR m6QsKowpcJZGk6jPLkglTiPTGxgeRZnYvn4cCGQoS6bD+C3ANDvkh78YkYpv3BM6TRR6 jJy+/EAGkKQp/nbHvSiO1TWF7najz5bThLbsZBtTYBpZsyRY+XHIVNx+h9Mm/Qnp+tXd vK5A== X-Gm-Message-State: AOAM533RVTXbNLGWJGsTMwy5mA7HKCRn+Xpfkisht7bsYrRTjPAB2mEe hEZ9x8YbLyaoF47nUaWme/3Sx/O3upEa5QTCUAlgfWgyQYs= X-Google-Smtp-Source: ABdhPJwlRMynfB9q0kDKZatV8RtoK9keyRE8IGCJ7KHpKV2E3Dm2u2/sSVwJBcZDoaopJPtxo5Earh2MQkUl1mGCd04= X-Received: by 2002:a17:90b:94c:: with SMTP id dw12mr9798960pjb.214.1597607919824; Sun, 16 Aug 2020 12:58:39 -0700 (PDT) MIME-Version: 1.0 From: =?UTF-8?B?0JDQvdC00YDQtdC5INCQ0LvQsNC00YzQtdCy?= Date: Sun, 16 Aug 2020 22:58:28 +0300 Message-ID: Subject: [PATCH] fixed proc myself (linux user) for musl To: qemu-devel@nongnu.org Content-Type: multipart/alternative; boundary="0000000000008d337b05ad04143a" Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1043; envelope-from=aladjev.andrew@gmail.com; helo=mail-pj1-x1043.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Sun, 16 Aug 2020 17:08:20 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Transfer-Encoding: quoted-printable --0000000000008d337b05ad04143a MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RnJvbTogQW5kcmV3IEFsYWRqZXYgPGFsYWRqZXYuYW5kcmV3QGdtYWlsLmNvbT4KRGF0ZTogU3Vu LCAxNiBBdWcgMjAyMCAyMjo1MDoxMyArMDMwMApTdWJqZWN0OiBbUEFUQ0hdIGZpeGVkIHByb2Mg bXlzZWxmIChsaW51eCB1c2VyKSBmb3IgbXVzbApCdWdsaW5rOiBodHRwczovL2J1Z3MuZ2VudG9v Lm9yZy81ODcyMzAKU2lnbmVkLW9mZi1ieTogQW5kcmV3IEFsYWRqZXYgPGFsYWRqZXYuYW5kcmV3 QGdtYWlsLmNvbT4KLS0tCiBsaW51eC11c2VyL01ha2VmaWxlLm9ianMgIHwgIDUgKy0KIGxpbnV4 LXVzZXIvZWxmbG9hZC5jICAgICAgfCAgNyArKy0KIGxpbnV4LXVzZXIvZXhpdC5jICAgICAgICAg fCAgNyArKy0KIGxpbnV4LXVzZXIvbWFpbi5jICAgICAgICAgfCAgMiArLQogbGludXgtdXNlci9x ZW11LmggICAgICAgICB8ICAxICsKIGxpbnV4LXVzZXIvc3lzY2FsbC5jICAgICAgfCA4NSArKysr KysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBsaW51eC11c2VyL3N5c2NhbGxfcHJvYy5j IHwgOTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaW51eC11c2Vy L3N5c2NhbGxfcHJvYy5oIHwgIDggKysrKwogOCBmaWxlcyBjaGFuZ2VkLCAxNTAgaW5zZXJ0aW9u cygrKSwgNjEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGludXgtdXNlci9zeXNj YWxsX3Byb2MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpbnV4LXVzZXIvc3lzY2FsbF9wcm9jLmgK CmRpZmYgLS1naXQgYS9saW51eC11c2VyL01ha2VmaWxlLm9ianMgYi9saW51eC11c2VyL01ha2Vm aWxlLm9ianMKaW5kZXggMTk0MDkxMGE3My4uYWQ4NDM4MDczOCAxMDA2NDQKLS0tIGEvbGludXgt dXNlci9NYWtlZmlsZS5vYmpzCisrKyBiL2xpbnV4LXVzZXIvTWFrZWZpbGUub2JqcwpAQCAtMSw3 ICsxLDggQEAKIG9iai15ID0zRCBtYWluLm8gc3lzY2FsbC5vIHN0cmFjZS5vIG1tYXAubyBzaWdu YWwubyBcCiAgZWxmbG9hZC5vIGxpbnV4bG9hZC5vIHVhY2Nlc3MubyB1bmFtZS5vIFwKLSBzYWZl LXN5c2NhbGwubyAkKFRBUkdFVF9BQklfRElSKS9zaWduYWwubyBcCi0gICAgICAgICQoVEFSR0VU X0FCSV9ESVIpL2NwdV9sb29wLm8gZXhpdC5vIGZkLXRyYW5zLm8KKyBzYWZlLXN5c2NhbGwubyBz eXNjYWxsX3Byb2MubyBcCisgJChUQVJHRVRfQUJJX0RJUikvY3B1X2xvb3AubyAkKFRBUkdFVF9B QklfRElSKS9zaWduYWwubyBcCisgZXhpdC5vIGZkLXRyYW5zLm8KCiBvYmotJChUQVJHRVRfSEFT X0JGTFQpICs9M0QgZmxhdGxvYWQubwogb2JqLSQoVEFSR0VUX0kzODYpICs9M0Qgdm04Ni5vCmRp ZmYgLS1naXQgYS9saW51eC11c2VyL2VsZmxvYWQuYyBiL2xpbnV4LXVzZXIvZWxmbG9hZC5jCmlu ZGV4IDYxOWMwNTRjYzQuLjIwMWRiNjFkOTEgMTAwNjQ0Ci0tLSBhL2xpbnV4LXVzZXIvZWxmbG9h ZC5jCisrKyBiL2xpbnV4LXVzZXIvZWxmbG9hZC5jCkBAIC0yMzE5LDcgKzIzMTksMTAgQEAgZXhp dF9lcnJtc2c6CiAgICBidWZmZXIgaXMgc3VmZmljaWVudGx5IGFsaWduZWQgdG8gcHJlc2VudCBu byBwcm9ibGVtcyB0byB0aGUgaG9zdAogICAgaW4gYWNjZXNzaW5nIGRhdGEgYXQgYWxpZ25lZCBv ZmZzZXRzIHdpdGhpbiB0aGUgYnVmZmVyLgoKLSAgIE9uIHJldHVybjogSU5GTyB2YWx1ZXMgd2ls bCBiZSBmaWxsZWQgaW4sIGFzIG5lY2Vzc2FyeSBvciBhdmFpbGFibGUuICAqLworICAgT24gcmV0 dXJuOiBJTkZPIHZhbHVlcyB3aWxsIGJlIGZpbGxlZCBpbiwgYXMgbmVjZXNzYXJ5IG9yIGF2YWls YWJsZS4KKworICAgV0FSTklORzogdGhpcyBmdW5jdGlvbiB3b24ndCBjbG9zZSAiaW1hZ2VfZmQi LgorKi8KCiBzdGF0aWMgdm9pZCBsb2FkX2VsZl9pbWFnZShjb25zdCBjaGFyICppbWFnZV9uYW1l LCBpbnQgaW1hZ2VfZmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW1hZ2Vf aW5mbyAqaW5mbywgY2hhciAqKnBpbnRlcnBfbmFtZSwKQEAgLTI1NzYsNyArMjU3OSw2IEBAIHN0 YXRpYyB2b2lkIGxvYWRfZWxmX2ltYWdlKGNvbnN0IGNoYXIgKmltYWdlX25hbWUsCmludCBpbWFn ZV9mZCwKCiAgICAgbW1hcF91bmxvY2soKTsKCi0gICAgY2xvc2UoaW1hZ2VfZmQpOwogICAgIHJl dHVybjsKCiAgZXhpdF9yZWFkOgpAQCAtMjYxMCw2ICsyNjEyLDcgQEAgc3RhdGljIHZvaWQgbG9h ZF9lbGZfaW50ZXJwKGNvbnN0IGNoYXIgKmZpbGVuYW1lLApzdHJ1Y3QgaW1hZ2VfaW5mbyAqaW5m bywKICAgICB9CgogICAgIGxvYWRfZWxmX2ltYWdlKGZpbGVuYW1lLCBmZCwgaW5mbywgTlVMTCwg YnBybV9idWYpOworICAgIGNsb3NlKGZkKTsKICAgICByZXR1cm47CgogIGV4aXRfcGVycm9yOgpk aWZmIC0tZ2l0IGEvbGludXgtdXNlci9leGl0LmMgYi9saW51eC11c2VyL2V4aXQuYwppbmRleCAx NTk0MDE1NDQ0Li5mMDYyNmZjNDMyIDEwMDY0NAotLS0gYS9saW51eC11c2VyL2V4aXQuYworKysg Yi9saW51eC11c2VyL2V4aXQuYwpAQCAtMjgsMTIgKzI4LDE1IEBAIGV4dGVybiB2b2lkIF9fZ2Nv dl9kdW1wKHZvaWQpOwoKIHZvaWQgcHJlZXhpdF9jbGVhbnVwKENQVUFyY2hTdGF0ZSAqZW52LCBp bnQgY29kZSkKIHsKKyAgICBjbG9zZShleGVjZmQpOworCiAjaWZkZWYgQ09ORklHX0dQUk9GCiAg ICAgICAgIF9tY2xlYW51cCgpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0dDT1YKICAgICAgICAg X19nY292X2R1bXAoKTsKICNlbmRpZgotICAgICAgICBnZGJfZXhpdChlbnYsIGNvZGUpOwotICAg ICAgICBxZW11X3BsdWdpbl9hdGV4aXRfY2IoKTsKKworICAgIGdkYl9leGl0KGVudiwgY29kZSk7 CisgICAgcWVtdV9wbHVnaW5fYXRleGl0X2NiKCk7CiB9CmRpZmYgLS1naXQgYS9saW51eC11c2Vy L21haW4uYyBiL2xpbnV4LXVzZXIvbWFpbi5jCmluZGV4IDIyNTc4YjE2MzMuLjljYzZjMWU2ZGEg MTAwNjQ0Ci0tLSBhL2xpbnV4LXVzZXIvbWFpbi5jCisrKyBiL2xpbnV4LXVzZXIvbWFpbi5jCkBA IC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiY3J5cHRvL2luaXQuaCIKCiBjaGFyICpleGVjX3Bh dGg7CitpbnQgZXhlY2ZkOwoKIGludCBzaW5nbGVzdGVwOwogc3RhdGljIGNvbnN0IGNoYXIgKmFy Z3YwOwpAQCAtNjI4LDcgKzYyOSw2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndiwg Y2hhciAqKmVudnApCiAgICAgaW50IHRhcmdldF9hcmdjOwogICAgIGludCBpOwogICAgIGludCBy ZXQ7Ci0gICAgaW50IGV4ZWNmZDsKICAgICBpbnQgbG9nX21hc2s7CiAgICAgdW5zaWduZWQgbG9u ZyBtYXhfcmVzZXJ2ZWRfdmE7CgpkaWZmIC0tZ2l0IGEvbGludXgtdXNlci9xZW11LmggYi9saW51 eC11c2VyL3FlbXUuaAppbmRleCA3OTJjNzQyOTBmLi5kODIyZjJiOWRmIDEwMDY0NAotLS0gYS9s aW51eC11c2VyL3FlbXUuaAorKysgYi9saW51eC11c2VyL3FlbXUuaApAQCAtMTU2LDYgKzE1Niw3 IEBAIHR5cGVkZWYgc3RydWN0IFRhc2tTdGF0ZSB7CiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQo MTYpKSkgVGFza1N0YXRlOwoKIGV4dGVybiBjaGFyICpleGVjX3BhdGg7CitleHRlcm4gaW50IGV4 ZWNmZDsKIHZvaWQgaW5pdF90YXNrX3N0YXRlKFRhc2tTdGF0ZSAqdHMpOwogdm9pZCB0YXNrX3Nl dHRpZChUYXNrU3RhdGUgKik7CiB2b2lkIHN0b3BfYWxsX3Rhc2tzKHZvaWQpOwpkaWZmIC0tZ2l0 IGEvbGludXgtdXNlci9zeXNjYWxsLmMgYi9saW51eC11c2VyL3N5c2NhbGwuYwppbmRleCAwNWYw MzkxOWZmLi40ODNhNzM1YzFhIDEwMDY0NAotLS0gYS9saW51eC11c2VyL3N5c2NhbGwuYworKysg Yi9saW51eC11c2VyL3N5c2NhbGwuYwpAQCAtMTIyLDYgKzEyMiw3IEBACiAjaW5jbHVkZSAicWFw aS9lcnJvci5oIgogI2luY2x1ZGUgImZkLXRyYW5zLmgiCiAjaW5jbHVkZSAidGNnL3RjZy5oIgor I2luY2x1ZGUgInN5c2NhbGxfcHJvYy5oIgoKICNpZm5kZWYgQ0xPTkVfSU8KICNkZWZpbmUgQ0xP TkVfSU8gICAgICAgICAgICAgICAgMHg4MDAwMDAwMCAgICAgIC8qIENsb25lIGlvIGNvbnRleHQg Ki8KQEAgLTExMDQsNyArMTEwNSw3IEBAIHN0YXRpYyBpbmxpbmUgcmxpbV90IHRhcmdldF90b19o b3N0X3JsaW0oYWJpX3Vsb25nCnRhcmdldF9ybGltKQogewogICAgIGFiaV91bG9uZyB0YXJnZXRf cmxpbV9zd2FwOwogICAgIHJsaW1fdCByZXN1bHQ7Ci0KKwogICAgIHRhcmdldF9ybGltX3N3YXAg PTNEIHRzd2FwYWwodGFyZ2V0X3JsaW0pOwogICAgIGlmICh0YXJnZXRfcmxpbV9zd2FwID0zRD0z RCBUQVJHRVRfUkxJTV9JTkZJTklUWSkKICAgICAgICAgcmV0dXJuIFJMSU1fSU5GSU5JVFk7CkBA IC0xMTEyLDcgKzExMTMsNyBAQCBzdGF0aWMgaW5saW5lIHJsaW1fdCB0YXJnZXRfdG9faG9zdF9y bGltKGFiaV91bG9uZwp0YXJnZXRfcmxpbSkKICAgICByZXN1bHQgPTNEIHRhcmdldF9ybGltX3N3 YXA7CiAgICAgaWYgKHRhcmdldF9ybGltX3N3YXAgIT0zRCAocmxpbV90KXJlc3VsdCkKICAgICAg ICAgcmV0dXJuIFJMSU1fSU5GSU5JVFk7Ci0KKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAjZW5k aWYKQEAgLTExMjIsMTMgKzExMjMsMTMgQEAgc3RhdGljIGlubGluZSBhYmlfdWxvbmcgaG9zdF90 b190YXJnZXRfcmxpbShybGltX3QKcmxpbSkKIHsKICAgICBhYmlfdWxvbmcgdGFyZ2V0X3JsaW1f c3dhcDsKICAgICBhYmlfdWxvbmcgcmVzdWx0OwotCisKICAgICBpZiAocmxpbSA9M0Q9M0QgUkxJ TV9JTkZJTklUWSB8fCBybGltICE9M0QgKGFiaV9sb25nKXJsaW0pCiAgICAgICAgIHRhcmdldF9y bGltX3N3YXAgPTNEIFRBUkdFVF9STElNX0lORklOSVRZOwogICAgIGVsc2UKICAgICAgICAgdGFy Z2V0X3JsaW1fc3dhcCA9M0QgcmxpbTsKICAgICByZXN1bHQgPTNEIHRzd2FwYWwodGFyZ2V0X3Js aW1fc3dhcCk7Ci0KKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAjZW5kaWYKQEAgLTE2MTUsOSAr MTYxNiw5IEBAIHN0YXRpYyBpbmxpbmUgYWJpX2xvbmcgdGFyZ2V0X3RvX2hvc3RfY21zZyhzdHJ1 Y3QKbXNnaGRyICptc2doLAogICAgIGFiaV91bG9uZyB0YXJnZXRfY21zZ19hZGRyOwogICAgIHN0 cnVjdCB0YXJnZXRfY21zZ2hkciAqdGFyZ2V0X2Ntc2csICp0YXJnZXRfY21zZ19zdGFydDsKICAg ICBzb2NrbGVuX3Qgc3BhY2UgPTNEIDA7Ci0KKwogICAgIG1zZ19jb250cm9sbGVuID0zRCB0c3dh cGFsKHRhcmdldF9tc2doLT5tc2dfY29udHJvbGxlbik7Ci0gICAgaWYgKG1zZ19jb250cm9sbGVu IDwgc2l6ZW9mIChzdHJ1Y3QgdGFyZ2V0X2Ntc2doZHIpKQorICAgIGlmIChtc2dfY29udHJvbGxl biA8IHNpemVvZiAoc3RydWN0IHRhcmdldF9jbXNnaGRyKSkKICAgICAgICAgZ290byB0aGVfZW5k OwogICAgIHRhcmdldF9jbXNnX2FkZHIgPTNEIHRzd2FwYWwodGFyZ2V0X21zZ2gtPm1zZ19jb250 cm9sKTsKICAgICB0YXJnZXRfY21zZyA9M0QgbG9ja191c2VyKFZFUklGWV9SRUFELCB0YXJnZXRf Y21zZ19hZGRyLCBtc2dfY29udHJvbGxlPQpuLAoxKTsKQEAgLTE3MDMsNyArMTcwNCw3IEBAIHN0 YXRpYyBpbmxpbmUgYWJpX2xvbmcgaG9zdF90b190YXJnZXRfY21zZyhzdHJ1Y3QKdGFyZ2V0X21z Z2hkciAqdGFyZ2V0X21zZ2gsCiAgICAgc29ja2xlbl90IHNwYWNlID0zRCAwOwoKICAgICBtc2df Y29udHJvbGxlbiA9M0QgdHN3YXBhbCh0YXJnZXRfbXNnaC0+bXNnX2NvbnRyb2xsZW4pOwotICAg IGlmIChtc2dfY29udHJvbGxlbiA8IHNpemVvZiAoc3RydWN0IHRhcmdldF9jbXNnaGRyKSkKKyAg ICBpZiAobXNnX2NvbnRyb2xsZW4gPCBzaXplb2YgKHN0cnVjdCB0YXJnZXRfY21zZ2hkcikpCiAg ICAgICAgIGdvdG8gdGhlX2VuZDsKICAgICB0YXJnZXRfY21zZ19hZGRyID0zRCB0c3dhcGFsKHRh cmdldF9tc2doLT5tc2dfY29udHJvbCk7CiAgICAgdGFyZ2V0X2Ntc2cgPTNEIGxvY2tfdXNlcihW RVJJRllfV1JJVEUsIHRhcmdldF9jbXNnX2FkZHIsCm1zZ19jb250cm9sbGVuLCAwKTsKQEAgLTU3 NTAsNyArNTc1MSw3IEBAIGFiaV9sb25nIGRvX3NldF90aHJlYWRfYXJlYShDUFVYODZTdGF0ZSAq ZW52LAphYmlfdWxvbmcgcHRyKQogICAgIH0KICAgICB1bmxvY2tfdXNlcl9zdHJ1Y3QodGFyZ2V0 X2xkdF9pbmZvLCBwdHIsIDEpOwoKLSAgICBpZiAobGR0X2luZm8uZW50cnlfbnVtYmVyIDwgVEFS R0VUX0dEVF9FTlRSWV9UTFNfTUlOIHx8CisgICAgaWYgKGxkdF9pbmZvLmVudHJ5X251bWJlciA8 IFRBUkdFVF9HRFRfRU5UUllfVExTX01JTiB8fAogICAgICAgICBsZHRfaW5mby5lbnRyeV9udW1i ZXIgPiBUQVJHRVRfR0RUX0VOVFJZX1RMU19NQVgpCiAgICAgICAgICAgIHJldHVybiAtVEFSR0VU X0VJTlZBTDsKICAgICBzZWdfMzJiaXQgPTNEIGxkdF9pbmZvLmZsYWdzICYgMTsKQEAgLTU4Mjgs NyArNTgyOSw3IEBAIHN0YXRpYyBhYmlfbG9uZyBkb19nZXRfdGhyZWFkX2FyZWEoQ1BVWDg2U3Rh dGUgKmVudiwKYWJpX3Vsb25nIHB0cikKICAgICBscCA9M0QgKHVpbnQzMl90ICopKGdkdF90YWJs ZSArIGlkeCk7CiAgICAgZW50cnlfMSA9M0QgdHN3YXAzMihscFswXSk7CiAgICAgZW50cnlfMiA9 M0QgdHN3YXAzMihscFsxXSk7Ci0KKwogICAgIHJlYWRfZXhlY19vbmx5ID0zRCAoKGVudHJ5XzIg Pj4gOSkgJiAxKSBeIDE7CiAgICAgY29udGVudHMgPTNEIChlbnRyeV8yID4+IDEwKSAmIDM7CiAg ICAgc2VnX25vdF9wcmVzZW50ID0zRCAoKGVudHJ5XzIgPj4gMTUpICYgMSkgXiAxOwpAQCAtNTg0 NCw4ICs1ODQ1LDggQEAgc3RhdGljIGFiaV9sb25nIGRvX2dldF90aHJlYWRfYXJlYShDUFVYODZT dGF0ZSAqZW52LAphYmlfdWxvbmcgcHRyKQogICAgICAgICAocmVhZF9leGVjX29ubHkgPDwgMykg fCAobGltaXRfaW5fcGFnZXMgPDwgNCkgfAogICAgICAgICAoc2VnX25vdF9wcmVzZW50IDw8IDUp IHwgKHVzZWFibGUgPDwgNikgfCAobG0gPDwgNyk7CiAgICAgbGltaXQgPTNEIChlbnRyeV8xICYg MHhmZmZmKSB8IChlbnRyeV8yICAmIDB4ZjAwMDApOwotICAgIGJhc2VfYWRkciA9M0QgKGVudHJ5 XzEgPj4gMTYpIHwKLSAgICAgICAgKGVudHJ5XzIgJiAweGZmMDAwMDAwKSB8CisgICAgYmFzZV9h ZGRyID0zRCAoZW50cnlfMSA+PiAxNikgfAorICAgICAgICAoZW50cnlfMiAmIDB4ZmYwMDAwMDAp IHwKICAgICAgICAgKChlbnRyeV8yICYgMHhmZikgPDwgMTYpOwogICAgIHRhcmdldF9sZHRfaW5m by0+YmFzZV9hZGRyID0zRCB0c3dhcGFsKGJhc2VfYWRkcik7CiAgICAgdGFyZ2V0X2xkdF9pbmZv LT5saW1pdCA9M0QgdHN3YXAzMihsaW1pdCk7CkBAIC03MzUzLDM4ICs3MzU0LDYgQEAgc3RhdGlj IGludCBvcGVuX3NlbGZfYXV4dih2b2lkICpjcHVfZW52LCBpbnQgZmQpCiAgICAgcmV0dXJuIDA7 CiB9Cgotc3RhdGljIGludCBpc19wcm9jX215c2VsZihjb25zdCBjaGFyICpmaWxlbmFtZSwgY29u c3QgY2hhciAqZW50cnkpCi17Ci0gICAgaWYgKCFzdHJuY21wKGZpbGVuYW1lLCAiL3Byb2MvIiwg c3RybGVuKCIvcHJvYy8iKSkpIHsKLSAgICAgICAgZmlsZW5hbWUgKz0zRCBzdHJsZW4oIi9wcm9j LyIpOwotICAgICAgICBpZiAoIXN0cm5jbXAoZmlsZW5hbWUsICJzZWxmLyIsIHN0cmxlbigic2Vs Zi8iKSkpIHsKLSAgICAgICAgICAgIGZpbGVuYW1lICs9M0Qgc3RybGVuKCJzZWxmLyIpOwotICAg ICAgICB9IGVsc2UgaWYgKCpmaWxlbmFtZSA+PTNEICcxJyAmJiAqZmlsZW5hbWUgPD0zRCAnOScp IHsKLSAgICAgICAgICAgIGNoYXIgbXlzZWxmWzgwXTsKLSAgICAgICAgICAgIHNucHJpbnRmKG15 c2VsZiwgc2l6ZW9mKG15c2VsZiksICIlZC8iLCBnZXRwaWQoKSk7Ci0gICAgICAgICAgICBpZiAo IXN0cm5jbXAoZmlsZW5hbWUsIG15c2VsZiwgc3RybGVuKG15c2VsZikpKSB7Ci0gICAgICAgICAg ICAgICAgZmlsZW5hbWUgKz0zRCBzdHJsZW4obXlzZWxmKTsKLSAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXN0cmNt cChmaWxlbmFtZSwgZW50cnkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQot ICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotI2lmIGRlZmluZWQoSE9TVF9XT1JEU19CSUdFTkRJ QU4pICE9M0QgZGVmaW5lZChUQVJHRVRfV09SRFNfQklHRU5ESUFOKSB8fCBcCi0gICAgZGVmaW5l ZChUQVJHRVRfU1BBUkMpIHx8IGRlZmluZWQoVEFSR0VUX002OEspCi1zdGF0aWMgaW50IGlzX3By b2MoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmVudHJ5KQotewotICAgIHJldHVy biBzdHJjbXAoZmlsZW5hbWUsIGVudHJ5KSA9M0Q9M0QgMDsKLX0KLSNlbmRpZgotCiAjaWYgZGVm aW5lZChIT1NUX1dPUkRTX0JJR0VORElBTikgIT0zRCBkZWZpbmVkKFRBUkdFVF9XT1JEU19CSUdF TkRJQU4pCiBzdGF0aWMgaW50IG9wZW5fbmV0X3JvdXRlKHZvaWQgKmNwdV9lbnYsIGludCBmZCkK IHsKQEAgLTc0NjAsMjAgKzc0MjksMTkgQEAgc3RhdGljIGludCBkb19vcGVuYXQodm9pZCAqY3B1 X2VudiwgaW50IGRpcmZkLApjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzLAogICAgICAg ICB7ICJhdXh2Iiwgb3Blbl9zZWxmX2F1eHYsIGlzX3Byb2NfbXlzZWxmIH0sCiAgICAgICAgIHsg ImNtZGxpbmUiLCBvcGVuX3NlbGZfY21kbGluZSwgaXNfcHJvY19teXNlbGYgfSwKICNpZiBkZWZp bmVkKEhPU1RfV09SRFNfQklHRU5ESUFOKSAhPTNEIGRlZmluZWQoVEFSR0VUX1dPUkRTX0JJR0VO RElBTikKLSAgICAgICAgeyAiL3Byb2MvbmV0L3JvdXRlIiwgb3Blbl9uZXRfcm91dGUsIGlzX3By b2MgfSwKKyAgICAgICAgeyAibmV0L3JvdXRlIiwgb3Blbl9uZXRfcm91dGUsIGlzX3Byb2MgfSwK ICNlbmRpZgogI2lmIGRlZmluZWQoVEFSR0VUX1NQQVJDKQotICAgICAgICB7ICIvcHJvYy9jcHVp bmZvIiwgb3Blbl9jcHVpbmZvLCBpc19wcm9jIH0sCisgICAgICAgIHsgImNwdWluZm8iLCBvcGVu X2NwdWluZm8sIGlzX3Byb2MgfSwKICNlbmRpZgogI2lmIGRlZmluZWQoVEFSR0VUX002OEspCi0g ICAgICAgIHsgIi9wcm9jL2hhcmR3YXJlIiwgb3Blbl9oYXJkd2FyZSwgaXNfcHJvYyB9LAorICAg ICAgICB7ICJoYXJkd2FyZSIsIG9wZW5faGFyZHdhcmUsIGlzX3Byb2MgfSwKICNlbmRpZgogICAg ICAgICB7IE5VTEwsIE5VTEwsIE5VTEwgfQogICAgIH07CgotICAgIGlmIChpc19wcm9jX215c2Vs ZihwYXRobmFtZSwgImV4ZSIpKSB7Ci0gICAgICAgIGludCBleGVjZmQgPTNEIHFlbXVfZ2V0YXV4 dmFsKEFUX0VYRUNGRCk7Ci0gICAgICAgIHJldHVybiBleGVjZmQgPyBleGVjZmQgOiBzYWZlX29w ZW5hdChkaXJmZCwgZXhlY19wYXRoLCBmbGFncywKbW9kZSk7CisgICAgaWYgKGlzX3Byb2NfbXlz ZWxmX2V4ZShwYXRobmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIGV4ZWNmZDsKICAgICB9CgogICAg IGZvciAoZmFrZV9vcGVuID0zRCBmYWtlczsgZmFrZV9vcGVuLT5maWxlbmFtZTsgZmFrZV9vcGVu KyspIHsKQEAgLTc3MjgsOCArNzY5NiwxNyBAQCBzdGF0aWMgYWJpX2xvbmcgZG9fc3lzY2FsbDEo dm9pZCAqY3B1X2VudiwgaW50IG51bSwKYWJpX2xvbmcgYXJnMSwKICAgICAgICAgcmV0dXJuIHJl dDsKICNlbmRpZgogICAgIGNhc2UgVEFSR0VUX05SX2Nsb3NlOgotICAgICAgICBmZF90cmFuc191 bnJlZ2lzdGVyKGFyZzEpOwotICAgICAgICByZXR1cm4gZ2V0X2Vycm5vKGNsb3NlKGFyZzEpKTsK KyAgICAgICAgeworICAgICAgICAgICAgaW50IGZkID0zRCBhcmcxOworICAgICAgICAgICAgaWYg KGZkID0zRD0zRCBleGVjZmQpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRv IGNsb3NlIGV4ZWNmZC4KKyAgICAgICAgICAgICAgICAvLyBJdCB3aWxsIGJlIGNsb3NlZCBvbiBx ZW11IGV4aXQuCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIGZkX3RyYW5zX3VucmVnaXN0ZXIoZmQpOworICAgICAgICAgICAgcmV0dXJuIGdl dF9lcnJubyhjbG9zZShmZCkpOworICAgICAgICB9CgogICAgIGNhc2UgVEFSR0VUX05SX2JyazoK ICAgICAgICAgcmV0dXJuIGRvX2JyayhhcmcxKTsKQEAgLTkwMzEsNyArOTAwOCw3IEBAIHN0YXRp YyBhYmlfbG9uZyBkb19zeXNjYWxsMSh2b2lkICpjcHVfZW52LCBpbnQgbnVtLAphYmlfbG9uZyBh cmcxLAogICAgICAgICAgICAgfSBlbHNlIGlmICghYXJnMykgewogICAgICAgICAgICAgICAgIC8q IFNob3J0IGNpcmN1aXQgdGhpcyBmb3IgdGhlIG1hZ2ljIGV4ZSBjaGVjay4gKi8KICAgICAgICAg ICAgICAgICByZXQgPTNEIC1UQVJHRVRfRUlOVkFMOwotICAgICAgICAgICAgfSBlbHNlIGlmIChp c19wcm9jX215c2VsZigoY29uc3QgY2hhciAqKXAsICJleGUiKSkgeworICAgICAgICAgICAgfSBl bHNlIGlmIChpc19wcm9jX215c2VsZl9leGUoKGNvbnN0IGNoYXIgKilwKSkgewogICAgICAgICAg ICAgICAgIGNoYXIgcmVhbFtQQVRIX01BWF0sICp0ZW1wOwogICAgICAgICAgICAgICAgIHRlbXAg PTNEIHJlYWxwYXRoKGV4ZWNfcGF0aCwgcmVhbCk7CiAgICAgICAgICAgICAgICAgLyogUmV0dXJu IHZhbHVlIGlzICMgb2YgYnl0ZXMgdGhhdCB3ZSB3cm90ZSB0byB0aGUgYnVmZmVyLgoqLwpAQCAt OTA2MCw3ICs5MDM3LDcgQEAgc3RhdGljIGFiaV9sb25nIGRvX3N5c2NhbGwxKHZvaWQgKmNwdV9l bnYsIGludCBudW0sCmFiaV9sb25nIGFyZzEsCiAgICAgICAgICAgICBwMiA9M0QgbG9ja191c2Vy KFZFUklGWV9XUklURSwgYXJnMywgYXJnNCwgMCk7CiAgICAgICAgICAgICBpZiAoIXAgfHwgIXAy KSB7CiAgICAgICAgICAgICAgICAgcmV0ID0zRCAtVEFSR0VUX0VGQVVMVDsKLSAgICAgICAgICAg IH0gZWxzZSBpZiAoaXNfcHJvY19teXNlbGYoKGNvbnN0IGNoYXIgKilwLCAiZXhlIikpIHsKKyAg ICAgICAgICAgIH0gZWxzZSBpZiAoaXNfcHJvY19teXNlbGZfZXhlKChjb25zdCBjaGFyICopcCkp IHsKICAgICAgICAgICAgICAgICBjaGFyIHJlYWxbUEFUSF9NQVhdLCAqdGVtcDsKICAgICAgICAg ICAgICAgICB0ZW1wID0zRCByZWFscGF0aChleGVjX3BhdGgsIHJlYWwpOwogICAgICAgICAgICAg ICAgIHJldCA9M0QgdGVtcCA9M0Q9M0QgTlVMTCA/IGdldF9lcnJubygtMSkgOiBzdHJsZW4ocmVh bCkgOwpAQCAtMTA4NDcsNyArMTA4MjQsNyBAQCBzdGF0aWMgYWJpX2xvbmcgZG9fc3lzY2FsbDEo dm9pZCAqY3B1X2VudiwgaW50IG51bSwKYWJpX2xvbmcgYXJnMSwKICAgICAgICAgcmV0dXJuIGdl dF9lcnJubyhmY2hvd24oYXJnMSwgbG93MmhpZ2h1aWQoYXJnMiksCmxvdzJoaWdoZ2lkKGFyZzMp KSk7CiAjaWYgZGVmaW5lZChUQVJHRVRfTlJfZmNob3duYXQpCiAgICAgY2FzZSBUQVJHRVRfTlJf ZmNob3duYXQ6Ci0gICAgICAgIGlmICghKHAgPTNEIGxvY2tfdXNlcl9zdHJpbmcoYXJnMikpKQor ICAgICAgICBpZiAoIShwID0zRCBsb2NrX3VzZXJfc3RyaW5nKGFyZzIpKSkKICAgICAgICAgICAg IHJldHVybiAtVEFSR0VUX0VGQVVMVDsKICAgICAgICAgcmV0ID0zRCBnZXRfZXJybm8oZmNob3du YXQoYXJnMSwgcCwgbG93MmhpZ2h1aWQoYXJnMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsb3cyaGlnaGdpZChhcmc0KSwgYXJnNSkpOwpkaWZmIC0tZ2l0IGEvbGludXgtdXNl ci9zeXNjYWxsX3Byb2MuYyBiL2xpbnV4LXVzZXIvc3lzY2FsbF9wcm9jLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTg1Y2E5OWMxNgotLS0gL2Rldi9udWxsCisrKyBi L2xpbnV4LXVzZXIvc3lzY2FsbF9wcm9jLmMKQEAgLTAsMCArMSw5NiBAQAorI2luY2x1ZGUgInFl bXUvb3NkZXAuaCIKKyNpbmNsdWRlICJlbGYuaCIKKworI2luY2x1ZGUgInN5c2NhbGxfcHJvYy5o IgorI2luY2x1ZGUgInFlbXUuaCIKKworI2RlZmluZSBQUk9DICIvcHJvYy8iCisjZGVmaW5lIFNF TEYgInNlbGYvIgorCisjZGVmaW5lIFNUQVJUU19XSVRIKHBhdGgsIENPTlNUQU5UKSBcCisgIHN0 cmxlbihwYXRoKSA+PTNEIHN0cmxlbihDT05TVEFOVCkgJiYgc3RybmNtcChwYXRoLCBDT05TVEFO VCwKc3RybGVuKENPTlNUQU5UKSkgPTNEPTNEIDAKKworc3RhdGljIGlubGluZSBjaGFyICpzY29w ZV90b19wcm9jKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgICAgaWYgKFNUQVJUU19XSVRIKHBhdGgs IFBST0MpKSB7CisgICAgICAgIHJldHVybiAoY2hhciAqKXBhdGggKyBzdHJsZW4oUFJPQyk7Cisg ICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqc2NvcGVf dG9fcHJvY19teXNlbGYoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgICBjaGFyICpzY29wZV9wYXRo ID0zRCBzY29wZV90b19wcm9jKHBhdGgpOworICAgIGlmIChzY29wZV9wYXRoID0zRD0zRCBOVUxM KSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChTVEFSVFNfV0lUSChz Y29wZV9wYXRoLCBTRUxGKSkgeworICAgICAgICByZXR1cm4gc2NvcGVfcGF0aCArIHN0cmxlbihT RUxGKTsKKyAgICB9CisKKyAgICBpZiAoc3RybGVuKHNjb3BlX3BhdGgpID49M0QgMSAmJiAqc2Nv cGVfcGF0aCA+PTNEICcxJyAmJiAqc2NvcGVfcGF0aCA8PQo9M0QKJzknKSB7CisgICAgICAgIGNo YXIgcGlkX3BhdGhbODBdOworICAgICAgICBzbnByaW50ZihwaWRfcGF0aCwgc2l6ZW9mKHBpZF9w YXRoKSwgIiVkLyIsIGdldHBpZCgpKTsKKyAgICAgICAgaWYgKFNUQVJUU19XSVRIKHNjb3BlX3Bh dGgsIHBpZF9wYXRoKSkgeworICAgICAgICAgICAgcmV0dXJuIHNjb3BlX3BhdGggKyBzdHJsZW4o cGlkX3BhdGgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK2lu dCBpc19wcm9jKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmVudHJ5KQoreworICAgIGNo YXIgKnNjb3BlX3BhdGggPTNEIHNjb3BlX3RvX3Byb2MocGF0aCk7CisgICAgaWYgKHNjb3BlX3Bh dGggPTNEPTNEIE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu IHN0cmNtcChzY29wZV9wYXRoLCBlbnRyeSkgPTNEPTNEIDA7Cit9CisKK2ludCBpc19wcm9jX215 c2VsZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICplbnRyeSkKK3sKKyAgICBjaGFyICpz Y29wZV9wYXRoID0zRCBzY29wZV90b19wcm9jX215c2VsZihwYXRoKTsKKyAgICBpZiAoc2NvcGVf cGF0aCA9M0Q9M0QgTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1 cm4gc3RyY21wKHNjb3BlX3BhdGgsIGVudHJ5KSA9M0Q9M0QgMDsKK30KKworaW50IGlzX3Byb2Nf bXlzZWxmX2V4ZShjb25zdCBjaGFyICpwYXRoKQoreworICAgIGNoYXIgKnNjb3BlX3BhdGggPTNE IHNjb3BlX3RvX3Byb2NfbXlzZWxmKHBhdGgpOworICAgIGlmIChzY29wZV9wYXRoID0zRD0zRCBO VUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIEtlcm5lbCBjcmVhdGVz ICJmZC8je251bWJlcn0iIGxpbmsgYWZ0ZXIgb3BlbmluZyAiZXhlIiBsaW5rLgorICAgIC8vIEJv dGggImV4ZSIgYW5kICJmZC8je251bWJlcn0iIGNhbiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9uLgor CisgICAgLy8gS2VybmVsIGNhbiBwcm92aWRlIGluZmluaXRlIGFtb3VudCBvZiBmZCBudW1iZXJz LgorICAgIC8vIFFlbXUgaXMgZ29pbmcgdG8gYWx3YXlzIHJldHVybiBzaW5nbGUgZ2xvYmFsIGV4 ZWNmZC4KKworICAgIC8vIFNvIHdlIG5lZWQgdG8gY2hlY2sgImV4ZSIgYW5kICJmZC8je2V4ZWNm ZH0iIG9ubHkuCisKKyAgICBpZiAoc3RyY21wKHNjb3BlX3BhdGgsICJleGUiKSA9M0Q9M0QgMCkg eworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpZiAoU1RBUlRTX1dJVEgoc2NvcGVf cGF0aCwgImZkLyIpKSB7CisgICAgICAgIHNjb3BlX3BhdGggKz0zRCBzdHJsZW4oImZkLyIpOwor CisgICAgICAgIGlmIChzdHJsZW4oc2NvcGVfcGF0aCkgPj0zRCAxICYmICpzY29wZV9wYXRoID49 M0QgJzEnICYmICpzY29wZV9wYT0KdGgKPD0zRCAnOScpIHsKKyAgICAgICAgICAgIGNoYXIgZXhl Y2ZkX3BhdGhbODBdOworICAgICAgICAgICAgc25wcmludGYoZXhlY2ZkX3BhdGgsIHNpemVvZihl eGVjZmRfcGF0aCksICIlZCIsIGV4ZWNmZCk7CisgICAgICAgICAgICBpZiAoc3RyY21wKHNjb3Bl X3BhdGgsIGV4ZWNmZF9wYXRoKSA9M0Q9M0QgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAx OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRp ZmYgLS1naXQgYS9saW51eC11c2VyL3N5c2NhbGxfcHJvYy5oIGIvbGludXgtdXNlci9zeXNjYWxs X3Byb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5mMGU1OWMwZTk2 Ci0tLSAvZGV2L251bGwKKysrIGIvbGludXgtdXNlci9zeXNjYWxsX3Byb2MuaApAQCAtMCwwICsx LDggQEAKKyNpZm5kZWYgU1lTQ0FMTF9QUk9DX0gKKyNkZWZpbmUgU1lTQ0FMTF9QUk9DX0gKKwor aW50IGlzX3Byb2MoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZW50cnkpOworaW50IGlz X3Byb2NfbXlzZWxmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmVudHJ5KTsKK2ludCBp c19wcm9jX215c2VsZl9leGUoY29uc3QgY2hhciAqcGF0aCk7CisKKyNlbmRpZgotLT0yMAoyLjI2 LjI= --0000000000008d337b05ad04143a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
From: Andrew Aladjev <aladjev.andrew@gmail.com>
Date: Sun, 16 Aug 2020 22:50= :13 +0300
Subject: [PATCH] fixed proc myself (linux user) for musl
Bu= glink: https://bugs.gentoo.org/5= 87230
Signed-off-by: Andrew Aladjev <aladjev.andrew@gmail.com>
---
=C2=A0linux-user= /Makefile.objs =C2=A0| =C2=A05 +-
=C2=A0linux-user/elfload.c =C2=A0 =C2= =A0 =C2=A0| =C2=A07 ++-
=C2=A0linux-user/exit.c =C2=A0 =C2=A0 =C2=A0 =C2= =A0 | =C2=A07 ++-
=C2=A0linux-user/main.c =C2=A0 =C2=A0 =C2=A0 =C2=A0 | = =C2=A02 +-
=C2=A0linux-user/qemu.h =C2=A0 =C2=A0 =C2=A0 =C2=A0 | =C2=A01= +
=C2=A0linux-user/syscall.c =C2=A0 =C2=A0 =C2=A0| 85 +++++++++++++----= -----------------
=C2=A0linux-user/syscall_proc.c | 96 +++++++++++++++++= ++++++++++++++++++++++
=C2=A0linux-user/syscall_proc.h | =C2=A08 ++++=C2=A08 files changed, 150 insertions(+), 61 deletions(-)
=C2=A0create = mode 100644 linux-user/syscall_proc.c
=C2=A0create mode 100644 linux-use= r/syscall_proc.h

diff --git a/linux-user/Makefile.objs b/linux-user/= Makefile.objs
index 1940910a73..ad84380738 100644
--- a/linux-user/Ma= kefile.objs
+++ b/linux-user/Makefile.objs
@@ -1,7 +1,8 @@
=C2=A0o= bj-y =3D main.o syscall.o strace.o mmap.o signal.o \
=C2=A0 elfload.o li= nuxload.o uaccess.o uname.o \
- safe-syscall.o $(TARGET_ABI_DIR)/signal.= o \
- =C2=A0 =C2=A0 =C2=A0 =C2=A0$(TARGET_ABI_DIR)/cpu_loop.o exit.o fd-= trans.o
+ safe-syscall.o syscall_proc.o \
+ $(TARGET_ABI_DIR)/cpu_loo= p.o $(TARGET_ABI_DIR)/signal.o \
+ exit.o fd-trans.o
=C2=A0
=C2=A0= obj-$(TARGET_HAS_BFLT) +=3D flatload.o
=C2=A0obj-$(TARGET_I386) +=3D vm8= 6.o
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 61= 9c054cc4..201db61d91 100644
--- a/linux-user/elfload.c
+++ b/linux-us= er/elfload.c
@@ -2319,7 +2319,10 @@ exit_errmsg:
=C2=A0 =C2=A0 buffer= is sufficiently aligned to present no problems to the host
=C2=A0 =C2= =A0 in accessing data at aligned offsets within the buffer.
=C2=A0
- = =C2=A0 On return: INFO values will be filled in, as necessary or available.= =C2=A0*/
+ =C2=A0 On return: INFO values will be filled in, as necessar= y or available.
+
+ =C2=A0 WARNING: this function won't close &qu= ot;image_fd".
+*/
=C2=A0
=C2=A0static void load_elf_image(con= st char *image_name, int image_fd,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 struct image= _info *info, char **pinterp_name,
@@ -2576,7 +2579,6 @@ static void load= _elf_image(const char *image_name, int image_fd,
=C2=A0
=C2=A0 =C2=A0= =C2=A0mmap_unlock();
=C2=A0
- =C2=A0 =C2=A0close(image_fd);
=C2= =A0 =C2=A0 =C2=A0return;
=C2=A0
=C2=A0 exit_read:
@@ -2610,6 +2612= ,7 @@ static void load_elf_interp(const char *filename, struct image_info *= info,
=C2=A0 =C2=A0 =C2=A0}
=C2=A0
=C2=A0 =C2=A0 =C2=A0load_elf_im= age(filename, fd, info, NULL, bprm_buf);
+ =C2=A0 =C2=A0close(fd);
= =C2=A0 =C2=A0 =C2=A0return;
=C2=A0
=C2=A0 exit_perror:
diff --git = a/linux-user/exit.c b/linux-user/exit.c
index 1594015444..f0626fc432 100= 644
--- a/linux-user/exit.c
+++ b/linux-user/exit.c
@@ -28,12 +28,= 15 @@ extern void __gcov_dump(void);
=C2=A0
=C2=A0void preexit_cleanu= p(CPUArchState *env, int code)
=C2=A0{
+ =C2=A0 =C2=A0close(execfd);<= br>+
=C2=A0#ifdef CONFIG_GPROF
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0_mcl= eanup();
=C2=A0#endif
=C2=A0#ifdef CONFIG_GCOV
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0__gcov_dump();
=C2=A0#endif
- =C2=A0 =C2=A0 =C2=A0 = =C2=A0gdb_exit(env, code);
- =C2=A0 =C2=A0 =C2=A0 =C2=A0qemu_plugin_atex= it_cb();
+
+ =C2=A0 =C2=A0gdb_exit(env, code);
+ =C2=A0 =C2=A0qemu= _plugin_atexit_cb();
=C2=A0}
diff --git a/linux-user/main.c b/linux-u= ser/main.c
index 22578b1633..9cc6c1e6da 100644
--- a/linux-user/main.= c
+++ b/linux-user/main.c
@@ -48,6 +48,7 @@
=C2=A0#include "c= rypto/init.h"
=C2=A0
=C2=A0char *exec_path;
+int execfd;
= =C2=A0
=C2=A0int singlestep;
=C2=A0static const char *argv0;
@@ -6= 28,7 +629,6 @@ int main(int argc, char **argv, char **envp)
=C2=A0 =C2= =A0 =C2=A0int target_argc;
=C2=A0 =C2=A0 =C2=A0int i;
=C2=A0 =C2=A0 = =C2=A0int ret;
- =C2=A0 =C2=A0int execfd;
=C2=A0 =C2=A0 =C2=A0int log= _mask;
=C2=A0 =C2=A0 =C2=A0unsigned long max_reserved_va;
=C2=A0
d= iff --git a/linux-user/qemu.h b/linux-user/qemu.h
index 792c74290f..d822= f2b9df 100644
--- a/linux-user/qemu.h
+++ b/linux-user/qemu.h
@@ -= 156,6 +156,7 @@ typedef struct TaskState {
=C2=A0} __attribute__((aligne= d(16))) TaskState;
=C2=A0
=C2=A0extern char *exec_path;
+extern in= t execfd;
=C2=A0void init_task_state(TaskState *ts);
=C2=A0void task_= settid(TaskState *);
=C2=A0void stop_all_tasks(void);
diff --git a/li= nux-user/syscall.c b/linux-user/syscall.c
index 05f03919ff..483a735c1a 1= 00644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -12= 2,6 +122,7 @@
=C2=A0#include "qapi/error.h"
=C2=A0#include = "fd-trans.h"
=C2=A0#include "tcg/tcg.h"
+#include= "syscall_proc.h"
=C2=A0
=C2=A0#ifndef CLONE_IO
=C2=A0#d= efine CLONE_IO =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A00x800= 00000 =C2=A0 =C2=A0 =C2=A0/* Clone io context */
@@ -1104,7 +1105,7 @@ s= tatic inline rlim_t target_to_host_rlim(abi_ulong target_rlim)
=C2=A0{=C2=A0 =C2=A0 =C2=A0abi_ulong target_rlim_swap;
=C2=A0 =C2=A0 =C2=A0rl= im_t result;
- =C2=A0 =C2=A0
+
=C2=A0 =C2=A0 =C2=A0target_rlim_swa= p =3D tswapal(target_rlim);
=C2=A0 =C2=A0 =C2=A0if (target_rlim_swap =3D= =3D TARGET_RLIM_INFINITY)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return RLIM_= INFINITY;
@@ -1112,7 +1113,7 @@ static inline rlim_t target_to_host_rlim= (abi_ulong target_rlim)
=C2=A0 =C2=A0 =C2=A0result =3D target_rlim_swap;=
=C2=A0 =C2=A0 =C2=A0if (target_rlim_swap !=3D (rlim_t)result)
=C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0return RLIM_INFINITY;
- =C2=A0 =C2=A0
+=C2=A0 =C2=A0 =C2=A0return result;
=C2=A0}
=C2=A0#endif
@@ -1122= ,13 +1123,13 @@ static inline abi_ulong host_to_target_rlim(rlim_t rlim)=C2=A0{
=C2=A0 =C2=A0 =C2=A0abi_ulong target_rlim_swap;
=C2=A0 =C2= =A0 =C2=A0abi_ulong result;
- =C2=A0 =C2=A0
+
=C2=A0 =C2=A0 =C2=A0= if (rlim =3D=3D RLIM_INFINITY || rlim !=3D (abi_long)rlim)
=C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0target_rlim_swap =3D TARGET_RLIM_INFINITY;
=C2=A0 = =C2=A0 =C2=A0else
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0target_rlim_swap =3D= rlim;
=C2=A0 =C2=A0 =C2=A0result =3D tswapal(target_rlim_swap);
- = =C2=A0 =C2=A0
+
=C2=A0 =C2=A0 =C2=A0return result;
=C2=A0}
=C2= =A0#endif
@@ -1615,9 +1616,9 @@ static inline abi_long target_to_host_cm= sg(struct msghdr *msgh,
=C2=A0 =C2=A0 =C2=A0abi_ulong target_cmsg_addr;<= br>=C2=A0 =C2=A0 =C2=A0struct target_cmsghdr *target_cmsg, *target_cmsg_sta= rt;
=C2=A0 =C2=A0 =C2=A0socklen_t space =3D 0;
- =C2=A0 =C2=A0
+=C2=A0 =C2=A0 =C2=A0msg_controllen =3D tswapal(target_msgh->msg_contro= llen);
- =C2=A0 =C2=A0if (msg_controllen < sizeof (struct target_cmsg= hdr))
+ =C2=A0 =C2=A0if (msg_controllen < sizeof (struct target_cmsg= hdr))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto the_end;
=C2=A0 =C2=A0 = =C2=A0target_cmsg_addr =3D tswapal(target_msgh->msg_control);
=C2=A0 = =C2=A0 =C2=A0target_cmsg =3D lock_user(VERIFY_READ, target_cmsg_addr, msg_c= ontrollen, 1);
@@ -1703,7 +1704,7 @@ static inline abi_long host_to_targ= et_cmsg(struct target_msghdr *target_msgh,
=C2=A0 =C2=A0 =C2=A0socklen_t= space =3D 0;
=C2=A0
=C2=A0 =C2=A0 =C2=A0msg_controllen =3D tswapal(t= arget_msgh->msg_controllen);
- =C2=A0 =C2=A0if (msg_controllen < s= izeof (struct target_cmsghdr))
+ =C2=A0 =C2=A0if (msg_controllen < s= izeof (struct target_cmsghdr))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto th= e_end;
=C2=A0 =C2=A0 =C2=A0target_cmsg_addr =3D tswapal(target_msgh->= msg_control);
=C2=A0 =C2=A0 =C2=A0target_cmsg =3D lock_user(VERIFY_WRITE= , target_cmsg_addr, msg_controllen, 0);
@@ -5750,7 +5751,7 @@ abi_long d= o_set_thread_area(CPUX86State *env, abi_ulong ptr)
=C2=A0 =C2=A0 =C2=A0}=
=C2=A0 =C2=A0 =C2=A0unlock_user_struct(target_ldt_info, ptr, 1);
=C2= =A0
- =C2=A0 =C2=A0if (ldt_info.entry_number < TARGET_GDT_ENTRY_TLS_M= IN ||
+ =C2=A0 =C2=A0if (ldt_info.entry_number < TARGET_GDT_ENTRY_TL= S_MIN ||
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ldt_info.entry_number > TA= RGET_GDT_ENTRY_TLS_MAX)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return= -TARGET_EINVAL;
=C2=A0 =C2=A0 =C2=A0seg_32bit =3D ldt_info.flags & = 1;
@@ -5828,7 +5829,7 @@ static abi_long do_get_thread_area(CPUX86State = *env, abi_ulong ptr)
=C2=A0 =C2=A0 =C2=A0lp =3D (uint32_t *)(gdt_table += idx);
=C2=A0 =C2=A0 =C2=A0entry_1 =3D tswap32(lp[0]);
=C2=A0 =C2=A0 = =C2=A0entry_2 =3D tswap32(lp[1]);
- =C2=A0 =C2=A0
+
=C2=A0 =C2=A0 = =C2=A0read_exec_only =3D ((entry_2 >> 9) & 1) ^ 1;
=C2=A0 =C2= =A0 =C2=A0contents =3D (entry_2 >> 10) & 3;
=C2=A0 =C2=A0 =C2= =A0seg_not_present =3D ((entry_2 >> 15) & 1) ^ 1;
@@ -5844,8 += 5845,8 @@ static abi_long do_get_thread_area(CPUX86State *env, abi_ulong pt= r)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(read_exec_only << 3) | (limi= t_in_pages << 4) |
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(seg_not_pres= ent << 5) | (useable << 6) | (lm << 7);
=C2=A0 =C2=A0 = =C2=A0limit =3D (entry_1 & 0xffff) | (entry_2 =C2=A0& 0xf0000);
= - =C2=A0 =C2=A0base_addr =3D (entry_1 >> 16) |
- =C2=A0 =C2=A0 = =C2=A0 =C2=A0(entry_2 & 0xff000000) |
+ =C2=A0 =C2=A0base_addr =3D = (entry_1 >> 16) |
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0(entry_2 & 0xff= 000000) |
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0((entry_2 & 0xff) <&l= t; 16);
=C2=A0 =C2=A0 =C2=A0target_ldt_info->base_addr =3D tswapal(ba= se_addr);
=C2=A0 =C2=A0 =C2=A0target_ldt_info->limit =3D tswap32(limi= t);
@@ -7353,38 +7354,6 @@ static int open_self_auxv(void *cpu_env, int = fd)
=C2=A0 =C2=A0 =C2=A0return 0;
=C2=A0}
=C2=A0
-static int is= _proc_myself(const char *filename, const char *entry)
-{
- =C2=A0 =C2= =A0if (!strncmp(filename, "/proc/", strlen("/proc/"))) = {
- =C2=A0 =C2=A0 =C2=A0 =C2=A0filename +=3D strlen("/proc/");=
- =C2=A0 =C2=A0 =C2=A0 =C2=A0if (!strncmp(filename, "self/", = strlen("self/"))) {
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0filename +=3D strlen("self/");
- =C2=A0 =C2=A0 =C2=A0 =C2= =A0} else if (*filename >=3D '1' && *filename <=3D &#= 39;9') {
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0char myself[80];=
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0snprintf(myself, sizeof(myse= lf), "%d/", getpid());
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0if (!strncmp(filename, myself, strlen(myself))) {
- =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0filename +=3D strlen(myself);
-= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} else {
- =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
- =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0}
- =C2=A0 =C2=A0 =C2=A0 =C2=A0} else {
- =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
- =C2=A0 =C2=A0 =C2=A0 =C2= =A0}
- =C2=A0 =C2=A0 =C2=A0 =C2=A0if (!strcmp(filename, entry)) {
- = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return 1;
- =C2=A0 =C2=A0 =C2= =A0 =C2=A0}
- =C2=A0 =C2=A0}
- =C2=A0 =C2=A0return 0;
-}
-
-= #if defined(HOST_WORDS_BIGENDIAN) !=3D defined(TARGET_WORDS_BIGENDIAN) || \=
- =C2=A0 =C2=A0defined(TARGET_SPARC) || defined(TARGET_M68K)
-static= int is_proc(const char *filename, const char *entry)
-{
- =C2=A0 =C2= =A0return strcmp(filename, entry) =3D=3D 0;
-}
-#endif
-
=C2=A0= #if defined(HOST_WORDS_BIGENDIAN) !=3D defined(TARGET_WORDS_BIGENDIAN)
= =C2=A0static int open_net_route(void *cpu_env, int fd)
=C2=A0{
@@ -74= 60,20 +7429,19 @@ static int do_openat(void *cpu_env, int dirfd, const char= *pathname, int flags,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0{ "auxv&qu= ot;, open_self_auxv, is_proc_myself },
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0{ "cmdline", open_self_cmdline, is_proc_myself },
=C2=A0#if= defined(HOST_WORDS_BIGENDIAN) !=3D defined(TARGET_WORDS_BIGENDIAN)
- = =C2=A0 =C2=A0 =C2=A0 =C2=A0{ "/proc/net/route", open_net_route, i= s_proc },
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0{ "net/route", open_net= _route, is_proc },
=C2=A0#endif
=C2=A0#if defined(TARGET_SPARC)
- = =C2=A0 =C2=A0 =C2=A0 =C2=A0{ "/proc/cpuinfo", open_cpuinfo, is_pr= oc },
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0{ "cpuinfo", open_cpuinfo, = is_proc },
=C2=A0#endif
=C2=A0#if defined(TARGET_M68K)
- =C2=A0 = =C2=A0 =C2=A0 =C2=A0{ "/proc/hardware", open_hardware, is_proc },=
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0{ "hardware", open_hardware, is_= proc },
=C2=A0#endif
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0{ NULL, NULL, = NULL }
=C2=A0 =C2=A0 =C2=A0};
=C2=A0
- =C2=A0 =C2=A0if (is_proc_my= self(pathname, "exe")) {
- =C2=A0 =C2=A0 =C2=A0 =C2=A0int exec= fd =3D qemu_getauxval(AT_EXECFD);
- =C2=A0 =C2=A0 =C2=A0 =C2=A0return ex= ecfd ? execfd : safe_openat(dirfd, exec_path, flags, mode);
+ =C2=A0 =C2= =A0if (is_proc_myself_exe(pathname)) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0retu= rn execfd;
=C2=A0 =C2=A0 =C2=A0}
=C2=A0
=C2=A0 =C2=A0 =C2=A0for (f= ake_open =3D fakes; fake_open->filename; fake_open++) {
@@ -7728,8 +7= 696,17 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1= ,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return ret;
=C2=A0#endif
=C2= =A0 =C2=A0 =C2=A0case TARGET_NR_close:
- =C2=A0 =C2=A0 =C2=A0 =C2=A0fd_t= rans_unregister(arg1);
- =C2=A0 =C2=A0 =C2=A0 =C2=A0return get_errno(clo= se(arg1));
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0{
+ =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0int fd =3D arg1;
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0if (fd =3D=3D execfd) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0// We don't need to close execfd.
+ =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0// It will be closed on qemu exit.=
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
+= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}
+
+ =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0fd_trans_unregister(fd);
+ =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0return get_errno(close(fd));
+ =C2=A0 =C2=A0 =C2=A0 =C2= =A0}
=C2=A0
=C2=A0 =C2=A0 =C2=A0case TARGET_NR_brk:
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0return do_brk(arg1);
@@ -9031,7 +9008,7 @@ static ab= i_long do_syscall1(void *cpu_env, int num, abi_long arg1,
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} else if (!arg3) {
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Short circuit this for the = magic exe check. */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0ret =3D -TARGET_EINVAL;
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0} else if (is_proc_myself((const char *)p, "exe")) {
+ = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} else if (is_proc_myself_exe((con= st char *)p)) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0char real[PATH_MAX], *temp;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0temp =3D realpath(exec_path, real);
=C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Return value is # of= bytes that we wrote to the buffer. */
@@ -9060,7 +9037,7 @@ static abi_= long do_syscall1(void *cpu_env, int num, abi_long arg1,
=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0p2 =3D lock_user(VERIFY_WRITE, arg3, arg4= , 0);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (!p || !p2) {=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D -TA= RGET_EFAULT;
- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} else if (is_pr= oc_myself((const char *)p, "exe")) {
+ =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0} else if (is_proc_myself_exe((const char *)p)) {
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0char real[PAT= H_MAX], *temp;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0temp =3D realpath(exec_path, real);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D temp =3D=3D NULL ? get_errno(-1) = : strlen(real) ;
@@ -10847,7 +10824,7 @@ static abi_long do_syscall1(voi= d *cpu_env, int num, abi_long arg1,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0re= turn get_errno(fchown(arg1, low2highuid(arg2), low2highgid(arg3)));
=C2= =A0#if defined(TARGET_NR_fchownat)
=C2=A0 =C2=A0 =C2=A0case TARGET_NR_fc= hownat:
- =C2=A0 =C2=A0 =C2=A0 =C2=A0if (!(p =3D lock_user_string(arg2))= )
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0if (!(p =3D lock_user_string(arg2)))
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return -TARGET_EFAULT;
= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ret =3D get_errno(fchownat(arg1, p, low2h= ighuid(arg3),
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 low2highgid(= arg4), arg5));
diff --git a/linux-user/syscall_proc.c b/linux-user/sysca= ll_proc.c
new file mode 100644
index 0000000000..e85ca99c16
--- /d= ev/null
+++ b/linux-user/syscall_proc.c
@@ -0,0 +1,96 @@
+#include= "qemu/osdep.h"
+#include "elf.h"
+
+#include = "syscall_proc.h"
+#include "qemu.h"
+
+#define= PROC "/proc/"
+#define SELF "self/"
+
+#defin= e STARTS_WITH(path, CONSTANT) \
+ =C2=A0strlen(path) >=3D strlen(CONS= TANT) && strncmp(path, CONSTANT, strlen(CONSTANT)) =3D=3D 0
++static inline char *scope_to_proc(const char *path)
+{
+ =C2=A0 =C2= =A0if (STARTS_WITH(path, PROC)) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0return (c= har *)path + strlen(PROC);
+ =C2=A0 =C2=A0}
+
+ =C2=A0 =C2=A0retur= n NULL;
+}
+
+static inline char *scope_to_proc_myself(const char = *path)
+{
+ =C2=A0 =C2=A0char *scope_path =3D scope_to_proc(path);+ =C2=A0 =C2=A0if (scope_path =3D=3D NULL) {
+ =C2=A0 =C2=A0 =C2=A0 =C2= =A0return NULL;
+ =C2=A0 =C2=A0}
+
+ =C2=A0 =C2=A0if (STARTS_WITH(= scope_path, SELF)) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0return scope_path + st= rlen(SELF);
+ =C2=A0 =C2=A0}
+
+ =C2=A0 =C2=A0if (strlen(scope_pat= h) >=3D 1 && *scope_path >=3D '1' && *scope_p= ath <=3D '9') {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0char pid_path[80= ];
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0snprintf(pid_path, sizeof(pid_path), &qu= ot;%d/", getpid());
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0if (STARTS_WITH(sc= ope_path, pid_path)) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return= scope_path + strlen(pid_path);
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0}
+ =C2= =A0 =C2=A0}
+
+ =C2=A0 =C2=A0return NULL;
+}
+
+int is_proc(= const char *path, const char *entry)
+{
+ =C2=A0 =C2=A0char *scope_pa= th =3D scope_to_proc(path);
+ =C2=A0 =C2=A0if (scope_path =3D=3D NULL) {=
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
+ =C2=A0 =C2=A0}
+
+ = =C2=A0 =C2=A0return strcmp(scope_path, entry) =3D=3D 0;
+}
+
+int = is_proc_myself(const char *path, const char *entry)
+{
+ =C2=A0 =C2= =A0char *scope_path =3D scope_to_proc_myself(path);
+ =C2=A0 =C2=A0if (s= cope_path =3D=3D NULL) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;
+ =C2= =A0 =C2=A0}
+
+ =C2=A0 =C2=A0return strcmp(scope_path, entry) =3D=3D = 0;
+}
+
+int is_proc_myself_exe(const char *path)
+{
+ =C2= =A0 =C2=A0char *scope_path =3D scope_to_proc_myself(path);
+ =C2=A0 =C2= =A0if (scope_path =3D=3D NULL) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0return 0;<= br>+ =C2=A0 =C2=A0}
+
+ =C2=A0 =C2=A0// Kernel creates "fd/#{num= ber}" link after opening "exe" link.
+ =C2=A0 =C2=A0// Bo= th "exe" and "fd/#{number}" can be used by application.=
+
+ =C2=A0 =C2=A0// Kernel can provide infinite amount of fd numbers= .
+ =C2=A0 =C2=A0// Qemu is going to always return single global execfd.=
+
+ =C2=A0 =C2=A0// So we need to check "exe" and "fd= /#{execfd}" only.
+
+ =C2=A0 =C2=A0if (strcmp(scope_path, "= exe") =3D=3D 0) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0return 1;
+ =C2= =A0 =C2=A0}
+
+ =C2=A0 =C2=A0if (STARTS_WITH(scope_path, "fd/&qu= ot;)) {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0scope_path +=3D strlen("fd/&qu= ot;);
+
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0if (strlen(scope_path) >=3D 1= && *scope_path >=3D '1' && *scope_path <=3D = '9') {
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0char execfd_pa= th[80];
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0snprintf(execfd_path,= sizeof(execfd_path), "%d", execfd);
+ =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0if (strcmp(scope_path, execfd_path) =3D=3D 0) {
+ = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return 1;
+ =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0}+ =C2=A0 =C2=A0}
+
+ =C2=A0 =C2=A0return 0;
+}
diff --git a/l= inux-user/syscall_proc.h b/linux-user/syscall_proc.h
new file mode 10064= 4
index 0000000000..f0e59c0e96
--- /dev/null
+++ b/linux-user/sysc= all_proc.h
@@ -0,0 +1,8 @@
+#ifndef SYSCALL_PROC_H
+#define SYSCAL= L_PROC_H
+
+int is_proc(const char *path, const char *entry);
+int= is_proc_myself(const char *path, const char *entry);
+int is_proc_mysel= f_exe(const char *path);
+
+#endif
--
2.26.2

--0000000000008d337b05ad04143a--