Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753203AbdHXSgP (ORCPT ); Thu, 24 Aug 2017 14:36:15 -0400 Received: from mail-oi0-f66.google.com ([209.85.218.66]:34308 "EHLO mail-oi0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752774AbdHXSgN (ORCPT ); Thu, 24 Aug 2017 14:36:13 -0400 MIME-Version: 1.0 In-Reply-To: References: <20170816171211.4021-1-christian.brauner@ubuntu.com> <20170816194805.hnof3aqiqykwki7p@gmail.com> <87pobvruzt.fsf@xmission.com> <87ziazqdfr.fsf@xmission.com> <20170824022436.44adb497@mir> <87378hhi3y.fsf@xmission.com> <87wp5tfynr.fsf@xmission.com> <20170824062432.1e05e6f8@mir> <874lsxezal.fsf@xmission.com> From: Linus Torvalds Date: Thu, 24 Aug 2017 11:36:09 -0700 X-Google-Sender-Auth: SU4NBKBPtxb9q254aH8FMyZWkb4 Message-ID: Subject: Re: [PATCH 0/1] devpts: use dynamic_dname() to generate proc name To: "Eric W. Biederman" Cc: Stefan Lippers-Hollmann , Christian Brauner , Christian Brauner , Linux Kernel Mailing List , "Serge E. Hallyn" , Al Viro , Thorsten Leemhuis Content-Type: multipart/mixed; boundary="001a113ce0f833d1c20557841a48" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 10614 Lines: 152 --001a113ce0f833d1c20557841a48 Content-Type: text/plain; charset="UTF-8" On Thu, Aug 24, 2017 at 11:31 AM, Linus Torvalds wrote: > > It should just do a "return ptm_open_peer(file, tty, (int)arg);" instead. Here's the actual tested patch. It "WorksForMe(tm)", including the TIOCGPTPEER ioctl, and also verified that it gets the pathname right in /proc, which was the original problem. But I did *not* check that pbuilder is still happy. Stefan? Linus --001a113ce0f833d1c20557841a48 Content-Type: text/plain; charset="US-ASCII"; name="patch.diff" Content-Disposition: attachment; filename="patch.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j6qsh4nq0 IGRyaXZlcnMvdHR5L3B0eS5jICAgICAgICAgfCA2NCArKysrKysrKysrKysrKysrKysrKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy90dHkvdHR5X2lvLmMgICAgICB8ICAyICsr CiBmcy9kZXZwdHMvaW5vZGUuYyAgICAgICAgIHwgNjMgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLQogaW5jbHVkZS9saW51eC9kZXZwdHNfZnMuaCB8IDEwICsr KysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDg2IGluc2VydGlvbnMoKyksIDUzIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3B0eS5jIGIvZHJpdmVycy90dHkvcHR5LmMKaW5k ZXggMjg0NzQ5ZmIwZjZiLi5iZmQ2NmZjZmY3YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3B0 eS5jCisrKyBiL2RyaXZlcnMvdHR5L3B0eS5jCkBAIC02OSwxMyArNjksOCBAQCBzdGF0aWMgdm9p ZCBwdHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiAj aWZkZWYgQ09ORklHX1VOSVg5OF9QVFlTCiAJCWlmICh0dHktPmRyaXZlciA9PSBwdG1fZHJpdmVy KSB7CiAJCQltdXRleF9sb2NrKCZkZXZwdHNfbXV0ZXgpOwotCQkJaWYgKHR0eS0+bGluay0+ZHJp dmVyX2RhdGEpIHsKLQkJCQlzdHJ1Y3QgcGF0aCAqcGF0aCA9IHR0eS0+bGluay0+ZHJpdmVyX2Rh dGE7Ci0KLQkJCQlkZXZwdHNfcHR5X2tpbGwocGF0aC0+ZGVudHJ5KTsKLQkJCQlwYXRoX3B1dChw YXRoKTsKLQkJCQlrZnJlZShwYXRoKTsKLQkJCX0KKwkJCWlmICh0dHktPmxpbmstPmRyaXZlcl9k YXRhKQorCQkJCWRldnB0c19wdHlfa2lsbCh0dHktPmxpbmstPmRyaXZlcl9kYXRhKTsKIAkJCW11 dGV4X3VubG9jaygmZGV2cHRzX211dGV4KTsKIAkJfQogI2VuZGlmCkBAIC02MDcsMjUgKzYwMiwy NCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGVnYWN5X3B0eV9pbml0KHZvaWQpIHsgfQogc3RhdGlj IHN0cnVjdCBjZGV2IHB0bXhfY2RldjsKIAogLyoqCi0gKglwdHlfb3Blbl9wZWVyIC0gb3BlbiB0 aGUgcGVlciBvZiBhIHB0eQotICoJQHR0eTogdGhlIHBlZXIgb2YgdGhlIHB0eSBiZWluZyBvcGVu ZWQKKyAqCXB0bV9vcGVuX3BlZXIgLSBvcGVuIHRoZSBwZWVyIG9mIGEgcHR5CisgKglAbWFzdGVy OiB0aGUgb3BlbiBzdHJ1Y3QgZmlsZSBvZiB0aGUgcHRteCBkZXZpY2Ugbm9kZQorICoJQHR0eTog dGhlIG1hc3RlciBvZiB0aGUgcHR5IGJlaW5nIG9wZW5lZAorICoJQGZsYWdzOiB0aGUgZmxhZ3Mg Zm9yIG9wZW4KICAqCi0gKglPcGVuIHRoZSBjYWNoZWQgZGVudHJ5IGluIHR0eS0+bGluaywgcHJv dmlkaW5nIGEgc2FmZSB3YXkgZm9yIHVzZXJzcGFjZQotICoJdG8gZ2V0IHRoZSBzbGF2ZSBlbmQg b2YgYSBwdHkgKHdoZXJlIHRoZXkgaGF2ZSB0aGUgbWFzdGVyIGZkIGFuZCBjYW5ub3QKLSAqCWFj Y2VzcyBvciB0cnVzdCB0aGUgbW91bnQgbmFtZXNwYWNlIC9kZXYvcHRzIHdhcyBtb3VudGVkIGlu c2lkZSkuCisgKglQcm92aWRlIGEgcmFjZSBmcmVlIHdheSBmb3IgdXNlcnNwYWNlIHRvIG9wZW4g dGhlIHNsYXZlIGVuZCBvZiBhIHB0eQorICoJKHdoZXJlIHRoZXkgaGF2ZSB0aGUgbWFzdGVyIGZk IGFuZCBjYW5ub3QgYWNjZXNzIG9yIHRydXN0IHRoZSBtb3VudAorICoJbmFtZXNwYWNlIC9kZXYv cHRzIHdhcyBtb3VudGVkIGluc2lkZSkuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZSAqcHR5X29w ZW5fcGVlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgZmxhZ3MpCi17Ci0JaWYgKHR0eS0+ ZHJpdmVyLT5zdWJ0eXBlICE9IFBUWV9UWVBFX01BU1RFUikKLQkJcmV0dXJuIEVSUl9QVFIoLUVJ Tyk7Ci0JcmV0dXJuIGRlbnRyeV9vcGVuKHR0eS0+bGluay0+ZHJpdmVyX2RhdGEsIGZsYWdzLCBj dXJyZW50X2NyZWQoKSk7Ci19Ci0KLXN0YXRpYyBpbnQgcHR5X2dldF9wZWVyKHN0cnVjdCB0dHlf c3RydWN0ICp0dHksIGludCBmbGFncykKK2ludCBwdG1fb3Blbl9wZWVyKHN0cnVjdCBmaWxlICpt YXN0ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBmbGFncykKIHsKIAlpbnQgZmQgPSAt MTsKLQlzdHJ1Y3QgZmlsZSAqZmlscCA9IE5VTEw7CisJc3RydWN0IGZpbGUgKmZpbHA7CiAJaW50 IHJldHZhbCA9IC1FSU5WQUw7CisJc3RydWN0IHBhdGggcGF0aDsKKworCWlmICh0dHktPmRyaXZl ciAhPSBwdG1fZHJpdmVyKQorCQlyZXR1cm4gLUVJTzsKIAogCWZkID0gZ2V0X3VudXNlZF9mZF9m bGFncygwKTsKIAlpZiAoZmQgPCAwKSB7CkBAIC02MzMsNyArNjI3LDE2IEBAIHN0YXRpYyBpbnQg cHR5X2dldF9wZWVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBmbGFncykKIAkJZ290byBl cnI7CiAJfQogCi0JZmlscCA9IHB0eV9vcGVuX3BlZXIodHR5LCBmbGFncyk7CisJLyogQ29tcHV0 ZSB0aGUgc2xhdmUncyBwYXRoICovCisJcGF0aC5tbnQgPSBkZXZwdHNfbW50KG1hc3Rlcik7CisJ aWYgKElTX0VSUihwYXRoLm1udCkpIHsKKwkJcmV0dmFsID0gUFRSX0VSUihwYXRoLm1udCk7CisJ CWdvdG8gZXJyX3B1dDsKKwl9CisJcGF0aC5kZW50cnkgPSB0dHktPmxpbmstPmRyaXZlcl9kYXRh OworCisJZmlscCA9IGRlbnRyeV9vcGVuKCZwYXRoLCBmbGFncywgY3VycmVudF9jcmVkKCkpOwor CW1udHB1dChwYXRoLm1udCk7CiAJaWYgKElTX0VSUihmaWxwKSkgewogCQlyZXR2YWwgPSBQVFJf RVJSKGZpbHApOwogCQlnb3RvIGVycl9wdXQ7CkBAIC02NjIsOCArNjY1LDYgQEAgc3RhdGljIGlu dCBwdHlfdW5peDk4X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCXJldHVybiBwdHlf Z2V0X3BrdG1vZGUodHR5LCAoaW50IF9fdXNlciAqKWFyZyk7CiAJY2FzZSBUSU9DR1BUTjogLyog R2V0IFBUIE51bWJlciAqLwogCQlyZXR1cm4gcHV0X3VzZXIodHR5LT5pbmRleCwgKHVuc2lnbmVk IGludCBfX3VzZXIgKilhcmcpOwotCWNhc2UgVElPQ0dQVFBFRVI6IC8qIE9wZW4gdGhlIG90aGVy IGVuZCAqLwotCQlyZXR1cm4gcHR5X2dldF9wZWVyKHR0eSwgKGludCkgYXJnKTsKIAljYXNlIFRJ T0NTSUc6ICAgIC8qIFNlbmQgc2lnbmFsIHRvIG90aGVyIHNpZGUgb2YgcHR5ICovCiAJCXJldHVy biBwdHlfc2lnbmFsKHR0eSwgKGludCkgYXJnKTsKIAl9CkBAIC03OTEsNyArNzkyLDYgQEAgc3Rh dGljIGludCBwdG14X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAp CiB7CiAJc3RydWN0IHB0c19mc19pbmZvICpmc2k7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsK LQlzdHJ1Y3QgcGF0aCAqcHRzX3BhdGg7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCWludCBy ZXR2YWw7CiAJaW50IGluZGV4OwpAQCAtODQ1LDI2ICs4NDUsMTYgQEAgc3RhdGljIGludCBwdG14 X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiAJCXJldHZhbCA9 IFBUUl9FUlIoZGVudHJ5KTsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9Ci0JLyogV2UgbmVlZCB0 byBjYWNoZSBhIGZha2UgcGF0aCBmb3IgVElPQ0dQVFBFRVIuICovCi0JcHRzX3BhdGggPSBrbWFs bG9jKHNpemVvZihzdHJ1Y3QgcGF0aCksIEdGUF9LRVJORUwpOwotCWlmICghcHRzX3BhdGgpCi0J CWdvdG8gZXJyX3JlbGVhc2U7Ci0JcHRzX3BhdGgtPm1udCA9IGZpbHAtPmZfcGF0aC5tbnQ7Ci0J cHRzX3BhdGgtPmRlbnRyeSA9IGRlbnRyeTsKLQlwYXRoX2dldChwdHNfcGF0aCk7Ci0JdHR5LT5s aW5rLT5kcml2ZXJfZGF0YSA9IHB0c19wYXRoOworCXR0eS0+bGluay0+ZHJpdmVyX2RhdGEgPSBk ZW50cnk7CiAKIAlyZXR2YWwgPSBwdG1fZHJpdmVyLT5vcHMtPm9wZW4odHR5LCBmaWxwKTsKIAlp ZiAocmV0dmFsKQotCQlnb3RvIGVycl9wYXRoX3B1dDsKKwkJZ290byBlcnJfcmVsZWFzZTsKIAog CXR0eV9kZWJ1Z19oYW5ndXAodHR5LCAib3BlbmluZyAoY291bnQ9JWQpXG4iLCB0dHktPmNvdW50 KTsKIAogCXR0eV91bmxvY2sodHR5KTsKIAlyZXR1cm4gMDsKLWVycl9wYXRoX3B1dDoKLQlwYXRo X3B1dChwdHNfcGF0aCk7Ci0Ja2ZyZWUocHRzX3BhdGgpOwogZXJyX3JlbGVhc2U6CiAJdHR5X3Vu bG9jayh0dHkpOwogCS8vIFRoaXMgd2lsbCBhbHNvIHB1dC1yZWYgdGhlIGZzaQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy90dHkvdHR5X2lvLmMgYi9kcml2ZXJzL3R0eS90dHlfaW8uYwppbmRleCA5NzRi MTNkMjQ0MDEuLjE4YmUxNWZjM2UxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdHR5X2lvLmMK KysrIGIvZHJpdmVycy90dHkvdHR5X2lvLmMKQEAgLTI1MTgsNiArMjUxOCw4IEBAIGxvbmcgdHR5 X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25n IGFyZykKIAljYXNlIFRJT0NTU0VSSUFMOgogCQl0dHlfd2Fybl9kZXByZWNhdGVkX2ZsYWdzKHAp OwogCQlicmVhazsKKwljYXNlIFRJT0NHUFRQRUVSOgorCQlyZXR1cm4gcHRtX29wZW5fcGVlcihm aWxlLCB0dHksIChpbnQpYXJnKTsKIAlkZWZhdWx0OgogCQlyZXR2YWwgPSB0dHlfam9iY3RybF9p b2N0bCh0dHksIHJlYWxfdHR5LCBmaWxlLCBjbWQsIGFyZyk7CiAJCWlmIChyZXR2YWwgIT0gLUVO T0lPQ1RMQ01EKQpkaWZmIC0tZ2l0IGEvZnMvZGV2cHRzL2lub2RlLmMgYi9mcy9kZXZwdHMvaW5v ZGUuYwppbmRleCAxMDhkZjJlMzYwMmMuLjhlZDEwNWEyMmRlMyAxMDA2NDQKLS0tIGEvZnMvZGV2 cHRzL2lub2RlLmMKKysrIGIvZnMvZGV2cHRzL2lub2RlLmMKQEAgLTEzMyw2ICsxMzMsNDggQEAg c3RhdGljIGlubGluZSBzdHJ1Y3QgcHRzX2ZzX2luZm8gKkRFVlBUU19TQihzdHJ1Y3Qgc3VwZXJf YmxvY2sgKnNiKQogCXJldHVybiBzYi0+c19mc19pbmZvOwogfQogCitzdGF0aWMgaW50IGRldnB0 c19wdG14X3BhdGgoc3RydWN0IHBhdGggKnBhdGgpCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc3Vw ZXJfYmxvY2sgKnNiOworCisJLyogSGFzIHRoZSBkZXZwdHMgZmlsZXN5c3RlbSBhbHJlYWR5IGJl ZW4gZm91bmQ/ICovCisJc2IgPSBwYXRoLT5tbnQtPm1udF9zYjsKKwlpZiAoc2ItPnNfbWFnaWMg PT0gREVWUFRTX1NVUEVSX01BR0lDKQorCQlyZXR1cm4gMDsKKworCS8qIElzIGEgZGV2cHRzIGZp bGVzeXN0ZW0gYXQgInB0cyIgaW4gdGhlIHNhbWUgZGlyZWN0b3J5PyAqLworCWVyciA9IHBhdGhf cHRzKHBhdGgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzYiA9IHBhdGgtPm1udC0+ bW50X3NiOworCisJLyogSXMgdGhlIHBhdGggdGhlIHJvb3Qgb2YgYSBkZXZwdHMgZmlsZXN5c3Rl bT8gKi8KKwlpZiAoKHNiLT5zX21hZ2ljICE9IERFVlBUU19TVVBFUl9NQUdJQykgfHwKKwkgICAg KHBhdGgtPm1udC0+bW50X3Jvb3QgIT0gc2ItPnNfcm9vdCkpCisJCXJldHVybiAtRU5PREVWOwor CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB2ZnNtb3VudCAqZGV2cHRzX21udChzdHJ1Y3QgZmls ZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcGF0aCBwYXRoOworCWludCBlcnI7CisKKwlwYXRoID0gZmls cC0+Zl9wYXRoOworCXBhdGhfZ2V0KCZwYXRoKTsKKworCWVyciA9IGRldnB0c19wdG14X3BhdGgo JnBhdGgpOworCWlmIChlcnIpIHsKKwkJbW50cHV0KHBhdGgubW50KTsKKwkJcGF0aC5tbnQgPSBF UlJfUFRSKGVycik7CisJfQorCWRwdXQocGF0aC5kZW50cnkpOworCXJldHVybiBwYXRoLm1udDsK K30KKwogc3RydWN0IHB0c19mc19pbmZvICpkZXZwdHNfYWNxdWlyZShzdHJ1Y3QgZmlsZSAqZmls cCkKIHsKIAlzdHJ1Y3QgcHRzX2ZzX2luZm8gKnJlc3VsdDsKQEAgLTE0MywyNyArMTg1LDE2IEBA IHN0cnVjdCBwdHNfZnNfaW5mbyAqZGV2cHRzX2FjcXVpcmUoc3RydWN0IGZpbGUgKmZpbHApCiAJ cGF0aCA9IGZpbHAtPmZfcGF0aDsKIAlwYXRoX2dldCgmcGF0aCk7CiAKLQkvKiBIYXMgdGhlIGRl dnB0cyBmaWxlc3lzdGVtIGFscmVhZHkgYmVlbiBmb3VuZD8gKi8KLQlzYiA9IHBhdGgubW50LT5t bnRfc2I7Ci0JaWYgKHNiLT5zX21hZ2ljICE9IERFVlBUU19TVVBFUl9NQUdJQykgewotCQkvKiBJ cyBhIGRldnB0cyBmaWxlc3lzdGVtIGF0ICJwdHMiIGluIHRoZSBzYW1lIGRpcmVjdG9yeT8gKi8K LQkJZXJyID0gcGF0aF9wdHMoJnBhdGgpOwotCQlpZiAoZXJyKSB7Ci0JCQlyZXN1bHQgPSBFUlJf UFRSKGVycik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qIElzIHRoZSBwYXRoIHRoZSByb290 IG9mIGEgZGV2cHRzIGZpbGVzeXN0ZW0/ICovCi0JCXJlc3VsdCA9IEVSUl9QVFIoLUVOT0RFVik7 Ci0JCXNiID0gcGF0aC5tbnQtPm1udF9zYjsKLQkJaWYgKChzYi0+c19tYWdpYyAhPSBERVZQVFNf U1VQRVJfTUFHSUMpIHx8Ci0JCSAgICAocGF0aC5tbnQtPm1udF9yb290ICE9IHNiLT5zX3Jvb3Qp KQotCQkJZ290byBvdXQ7CisJZXJyID0gZGV2cHRzX3B0bXhfcGF0aCgmcGF0aCk7CisJaWYgKGVy cikgeworCQlyZXN1bHQgPSBFUlJfUFRSKGVycik7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qCiAJ ICogcHR5IGNvZGUgbmVlZHMgdG8gaG9sZCBleHRyYSByZWZlcmVuY2VzIGluIGNhc2Ugb2YgbGFz dCAvZGV2L3R0eSBjbG9zZQogCSAqLworCXNiID0gcGF0aC5tbnQtPm1udF9zYjsKIAlhdG9taWNf aW5jKCZzYi0+c19hY3RpdmUpOwogCXJlc3VsdCA9IERFVlBUU19TQihzYik7CiAKZGlmZiAtLWdp dCBhL2luY2x1ZGUvbGludXgvZGV2cHRzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2RldnB0c19mcy5o CmluZGV4IDI3N2FiOWFmOWFjMi4uZTI3YzU0OGFjZmIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xp bnV4L2RldnB0c19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2cHRzX2ZzLmgKQEAgLTE5LDYg KzE5LDcgQEAKIAogc3RydWN0IHB0c19mc19pbmZvOwogCitzdHJ1Y3QgdmZzbW91bnQgKmRldnB0 c19tbnQoc3RydWN0IGZpbGUgKik7CiBzdHJ1Y3QgcHRzX2ZzX2luZm8gKmRldnB0c19hY3F1aXJl KHN0cnVjdCBmaWxlICopOwogdm9pZCBkZXZwdHNfcmVsZWFzZShzdHJ1Y3QgcHRzX2ZzX2luZm8g Kik7CiAKQEAgLTMyLDYgKzMzLDE1IEBAIHZvaWQgKmRldnB0c19nZXRfcHJpdihzdHJ1Y3QgZGVu dHJ5ICopOwogLyogdW5saW5rICovCiB2b2lkIGRldnB0c19wdHlfa2lsbChzdHJ1Y3QgZGVudHJ5 ICopOwogCisvKiBpbiBwdHkuYyAqLworaW50IHB0bV9vcGVuX3BlZXIoc3RydWN0IGZpbGUgKm1h c3Rlciwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGZsYWdzKTsKKworI2Vsc2UKK3N0YXRp YyBpbmxpbmUgaW50CitwdG1fb3Blbl9wZWVyKHN0cnVjdCBmaWxlICptYXN0ZXIsIHN0cnVjdCB0 dHlfc3RydWN0ICp0dHksIGludCBmbGFncykKK3sKKwlyZXR1cm4gLUVJTzsKK30KICNlbmRpZgog CiAK --001a113ce0f833d1c20557841a48--