From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dmta0014.nifty.com (mta-snd00008.nifty.com [IPv6:2001:268:fa04:731:6a:99:e2:28]) by sourceware.org (Postfix) with ESMTPS id 2996D3875424 for ; Tue, 26 Sep 2023 08:30:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2996D3875424 Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=nifty.ne.jp Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=nifty.ne.jp Received: from HP-Z230 by dmta0014.nifty.com with ESMTP id <20230926083013533.TNOY.39250.HP-Z230@nifty.com> for ; Tue, 26 Sep 2023 17:30:13 +0900 Date: Tue, 26 Sep 2023 17:30:13 +0900 From: Takashi Yano To: newlib@sourceware.org Subject: Re: fprintf() crashes on wide-oriented stream. Message-Id: <20230926173013.30bcc1e76ca307935d4d5950@nifty.ne.jp> In-Reply-To: <20230926124147.a4dd18b495c6e0347a64fec0@nifty.ne.jp> References: <20230926124147.a4dd18b495c6e0347a64fec0@nifty.ne.jp> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Tue__26_Sep_2023_17_30_13_+0900_M6L89APUT96kZqvR" X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,NICE_REPLY_A,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --Multipart=_Tue__26_Sep_2023_17_30_13_+0900_M6L89APUT96kZqvR Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Tue, 26 Sep 2023 12:41:47 +0900 Takashi Yano wrote: > Hi, > > I noticed that the following test case crashes at printf() with current > newlib. > > > #include > #include > #include > > int main() > { > setlocale(LC_ALL, "C.UTF-8"); > wprintf(L"%ls\n", L"aaaa"); /* or fwide(stdout, 1); */ > printf("%ls\n", L"bbbb"); /* <--- crash here */ > return 0; > } > > > I looked into this problem and found the cause. > > A narrow char string which can be odd bytes in length is cast into > a wide char string which should be even bytes in length in __sprint_r/ > __sfputs_r based on the __SWID flag. As a result, if the length is > odd bytes, the reading buffer runs over the buffer length, which causes > a crash. If the length is even bytes, crash does not happen, but garbage > is printed. This hapens if printf("%ls\r\n", L"bbbb"); is used instead. > ^^ > > The same issue seemed to be reported ten years ago. > https://sourceware.org/pipermail/newlib/2013/010831.html > > I have built a patch attached for this issue. > > With this patch, __sfputs_r/__sprint_r is split into two versions, one > is for vfprintf which does not handle wide string, and the other (newly > introduced __sfputws_r/__swprin_r) is for vfwprintf which handles wide > string. Please note that fprintf gets working for wide orient stream > just like BSD libc, which behaves differently from GNU libc. > > This patch also fixes nano-vfprintf.c as well as vfprintf.c/vfwprintf.c > in the same manner. v2: Remove __sprint_r from nano-vfprintf.c which does not seem to be used anymore. -- Takashi Yano --Multipart=_Tue__26_Sep_2023_17_30_13_+0900_M6L89APUT96kZqvR Content-Type: text/plain; name="v2-0001-newlib-libc-Fix-crash-on-fprintf-to-a-wide-orient.patch" Content-Disposition: attachment; filename="v2-0001-newlib-libc-Fix-crash-on-fprintf-to-a-wide-orient.patch" Content-Transfer-Encoding: base64 RnJvbSBlNzU1NDYxY2QyNjgwNTQ4MmYwNjJmY2M1ZGIxNzRjNGI3NzlhZGY5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUu anA+DQpEYXRlOiBUdWUsIDI2IFNlcCAyMDIzIDA4OjE5OjA3ICswOTAwDQpTdWJqZWN0OiBbUEFU Q0ggdjJdIG5ld2xpYjogbGliYzogRml4IGNyYXNoIG9uIGZwcmludGYgdG8gYSB3aWRlLW9yaWVu dGVkDQogc3RyZWFtLg0KDQpQcmV2aW91c2x5LCBmcHJpbnRmKCkgb24gYSB3aWRlLW9yaWVudGVk IHN0cmVhbSBjcmFzaGVzIG9yIG91dHB1dHMNCmdhcmJhZ2UuIFRoaXMgaXMgYmVjYXVzZSBhIG5h cnJvdyBjaGFyIHN0cmluZyB3aGljaCBjYW4gYmUgb2RkIGJ5dGVzDQppbiBsZW5ndGggaXMgY2Fz dCBpbnRvIGEgd2lkZSBjaGFyIHN0cmluZyB3aGljaCBzaG91bGQgYmUgZXZlbg0KYnl0ZXMgaW4g bGVuZ3RoIGluIF9fc3ByaW50X3IvX19zZnB1dHNfciBiYXNlZCBvbiB0aGUgX19TV0lEIGZsYWcu DQpBcyBhIHJlc3VsdCwgaWYgdGhlIGxlbmd0aCBpcyBvZGQgYnl0ZXMsIHRoZSByZWFkaW5nIGJ1 ZmZlciBydW5zIG92ZXINCnRoZSBidWZmZXIgbGVuZ3RoLCB3aGljaCBjYXVzZXMgYSBjcmFzaC4g SWYgdGhlIGxlbmd0aCBpcyBldmVuIGJ5dGVzLA0KZ2FyYmFnZSBpcyBwcmludGVkLg0KDQpXaXRo IHRoaXMgcGF0Y2gsIF9fc2ZwdXRzX3IvX19zcHJpbnRfciBpcyBzcGxpdCBpbnRvIHR3byB2ZXJz aW9uczsNCm9uZSBpcyBmb3IgdmZwcmludGYgd2hpY2ggZG9lcyBub3QgaGFuZGxlIHdpZGUgc3Ry aW5nLCBhbmQgdGhlIG90aGVyDQoobmV3bHkgaW50cm9kdWNlZCBfX3NmcHV0d3Nfci9fX3N3cHJp bl9yKSBpcyBmb3IgdmZ3cHJpbnRmIHdoaWNoDQpoYW5kbGVzIHdpZGUgc3RyaW5nLiBQbGVhc2Ug bm90ZSB0aGF0IGZwcmludGYoKSBnZXRzIHdvcmtpbmcgZm9yDQp3aWRlLW9yaWVudGVkIHN0cmVh bSBqdXN0IGxpa2UgQlNEIGxpYmMsIHdoaWNoIGJlaGF2ZXMgZGlmZmVyZW50bHkNCmZyb20gR05V IGxpYmMuDQoNClJldmV3ZWQtYnk6DQpTaWduZWQtb2ZmLWJ5OiBUYWthc2hpIFlhbm8gPHRha2Fz aGkueWFub0BuaWZ0eS5uZS5qcD4NCi0tLQ0KIG5ld2xpYi9saWJjL3N0ZGlvL25hbm8tdmZwcmlu dGYuYyB8IDcyICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIG5ld2xpYi9saWJjL3N0ZGlv L3ZmcHJpbnRmLmMgICAgICB8IDQ0ICsrLS0tLS0tLS0tLS0tLS0tDQogbmV3bGliL2xpYmMvc3Rk aW8vdmZ3cHJpbnRmLmMgICAgIHwgODEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0K IDMgZmlsZXMgY2hhbmdlZCwgODggaW5zZXJ0aW9ucygrKSwgMTA5IGRlbGV0aW9ucygtKQ0KDQpk aWZmIC0tZ2l0IGEvbmV3bGliL2xpYmMvc3RkaW8vbmFuby12ZnByaW50Zi5jIGIvbmV3bGliL2xp YmMvc3RkaW8vbmFuby12ZnByaW50Zi5jDQppbmRleCAwZDQyYTk0MGYuLmZmY2IxZGY2MiAxMDA2 NDQNCi0tLSBhL25ld2xpYi9saWJjL3N0ZGlvL25hbm8tdmZwcmludGYuYw0KKysrIGIvbmV3bGli L2xpYmMvc3RkaW8vbmFuby12ZnByaW50Zi5jDQpAQCAtMzQwLDU0ICszNDAsNiBAQCBlcnI6DQog ICByZXR1cm4gRU9GOw0KIH0NCiAjZWxzZQ0KLS8qIEFzIF9fc3NwdXRzX3IsIF9fc3ByaW50X3Ig aXMgdXNlZCBieSBvdXRwdXQgZnVuY3Rpb25zIGZvciB3aWRlIGNoYXIsDQotICAgbGlrZSB2Zndw cmludC4gICovDQotLyogRmx1c2ggb3V0IGFsbCB0aGUgdmVjdG9ycyBkZWZpbmVkIGJ5IHRoZSBn aXZlbiB1aW8sDQotICAgdGhlbiByZXNldCBpdCBzbyB0aGF0IGl0IGNhbiBiZSByZXVzZWQuICAq Lw0KLWludA0KLV9fc3ByaW50X3IgKHN0cnVjdCBfcmVlbnQgKnB0ciwNCi0gICAgICAgRklMRSAq ZnAsDQotICAgICAgIHJlZ2lzdGVyIHN0cnVjdCBfX3N1aW8gKnVpbykNCi17DQotICByZWdpc3Rl ciBpbnQgZXJyID0gMDsNCi0NCi0gIGlmICh1aW8tPnVpb19yZXNpZCA9PSAwKQ0KLSAgICB7DQot ICAgICAgdWlvLT51aW9faW92Y250ID0gMDsNCi0gICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSNp ZiBkZWZpbmVkIF9XSURFX09SSUVOVCAmJiAoIWRlZmluZWQgX0VMSVhfTEVWRUwgfHwgX0VMSVhf TEVWRUwgPj0gNCkNCi0gICAgaWYgKGZwLT5fZmxhZ3MyICYgX19TV0lEKQ0KLSAgICAgIHsNCi0J c3RydWN0IF9fc2lvdiAqaW92Ow0KLQl3Y2hhcl90ICpwOw0KLQlpbnQgaSwgbGVuOw0KLQ0KLQlp b3YgPSB1aW8tPnVpb19pb3Y7DQotCWZvciAoOyB1aW8tPnVpb19yZXNpZCAhPSAwOw0KLQkgICAg IHVpby0+dWlvX3Jlc2lkIC09IGxlbiAqIHNpemVvZiAod2NoYXJfdCksIGlvdisrKQ0KLQkgIHsN Ci0JICAgIHAgPSAod2NoYXJfdCAqKSBpb3YtPmlvdl9iYXNlOw0KLQkgICAgbGVuID0gaW92LT5p b3ZfbGVuIC8gc2l6ZW9mICh3Y2hhcl90KTsNCi0JICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkr KykNCi0JICAgICAgew0KLQkJaWYgKF9mcHV0d2NfciAocHRyLCBwW2ldLCBmcCkgPT0gV0VPRikN Ci0JCSAgew0KLQkJICAgIGVyciA9IC0xOw0KLQkJICAgIGdvdG8gb3V0Ow0KLQkJICB9DQotCSAg ICAgIH0NCi0JICB9DQotCX0NCi0gICAgICBlbHNlDQotI2VuZGlmDQotCWVyciA9IF9fc2Z2d3Jp dGVfcihwdHIsIGZwLCB1aW8pOw0KLW91dDoNCi0gIHVpby0+dWlvX3Jlc2lkID0gMDsNCi0gIHVp by0+dWlvX2lvdmNudCA9IDA7DQotICByZXR1cm4gZXJyOw0KLX0NCi0NCiBfTk9JTkxJTkVfU1RB VElDIGludA0KIF9fc2ZwdXRjX3IgKHN0cnVjdCBfcmVlbnQgKnB0ciwNCiAgICAgICAgaW50IGMs DQpAQCAtNDA3LDI3ICszNTksMTEgQEAgX19zZnB1dHNfciAoc3RydWN0IF9yZWVudCAqcHRyLA0K IHsNCiAgIHJlZ2lzdGVyIGludCBpOw0KIA0KLSNpZiBkZWZpbmVkIF9XSURFX09SSUVOVCAmJiAo IWRlZmluZWQgX0VMSVhfTEVWRUwgfHwgX0VMSVhfTEVWRUwgPj0gNCkNCi0gIGlmIChmcC0+X2Zs YWdzMiAmIF9fU1dJRCkNCi0gICAgew0KLSAgICAgIHdjaGFyX3QgKnA7DQotDQotICAgICAgcCA9 ICh3Y2hhcl90ICopIGJ1ZjsNCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgKGxlbiAvIHNpemVvZiAo d2NoYXJfdCkpOyBpKyspDQotCXsNCi0JICBpZiAoX2ZwdXR3Y19yIChwdHIsIHBbaV0sIGZwKSA9 PSBXRU9GKQ0KLQkgICAgcmV0dXJuIC0xOw0KLQl9DQotICAgIH0NCi0gIGVsc2UNCi0jZW5kaWYN CisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykNCiAgICAgew0KLSAgICAgIGZvciAoaSA9IDA7 IGkgPCBsZW47IGkrKykNCi0Jew0KLQkgIC8qIENhbGwgX19zZnB1dGNfciB0byBza2lwIF9mcHV0 Y19yLiAgKi8NCi0JICBpZiAoX19zZnB1dGNfciAocHRyLCAoaW50KWJ1ZltpXSwgZnApID09IEVP RikNCi0JICAgIHJldHVybiAtMTsNCi0JfQ0KKyAgICAgIC8qIENhbGwgX19zZnB1dGNfciB0byBz a2lwIF9mcHV0Y19yLiAgKi8NCisgICAgICBpZiAoX19zZnB1dGNfciAocHRyLCAoaW50KWJ1Zltp XSwgZnApID09IEVPRikNCisJcmV0dXJuIC0xOw0KICAgICB9DQogICByZXR1cm4gKDApOw0KIH0N CmRpZmYgLS1naXQgYS9uZXdsaWIvbGliYy9zdGRpby92ZnByaW50Zi5jIGIvbmV3bGliL2xpYmMv c3RkaW8vdmZwcmludGYuYw0KaW5kZXggNmExOThlMmM2Li45NTQxMmNlZDkgMTAwNjQ0DQotLS0g YS9uZXdsaWIvbGliYy9zdGRpby92ZnByaW50Zi5jDQorKysgYi9uZXdsaWIvbGliYy9zdGRpby92 ZnByaW50Zi5jDQpAQCAtMTg3LDcgKzE4Nyw3IEBAIHN0YXRpYyBjaGFyICpyY3NpZCA9ICIkSWQk IjsNCiAjIGVuZGlmDQogI2VuZGlmDQogDQotLyogVGhlIF9fc3ByaW50X3IvX19zc3ByaW50X3Ig ZnVuY3Rpb25zIGFyZSBzaGFyZWQgYmV0d2VlbiBhbGwgdmVyc2lvbnMgb2YNCisvKiBUaGUgX19z c3B1dHNfci9fX3NzcHJpbnRfciBmdW5jdGlvbnMgYXJlIHNoYXJlZCBiZXR3ZWVuIGFsbCB2ZXJz aW9ucyBvZg0KICAgIHZmcHJpbnRmIGFuZCB2ZndwcmludGYuICBUaGV5IG11c3Qgb25seSBiZSBk ZWZpbmVkIG9uY2UsIHdoaWNoIHdlIGRvIGluDQogICAgdGhlIElOVEVHRVJfT05MWSB2ZXJzaW9u cyBoZXJlLiAqLw0KICNpZmRlZiBTVFJJTkdfT05MWQ0KQEAgLTM3MCwyMyArMzcwLDkgQEAgX19z ZnB1dHNfciAoc3RydWN0IF9yZWVudCAqcHRyLA0KIHsNCiAJcmVnaXN0ZXIgaW50IGk7DQogDQot I2lmIGRlZmluZWQgX1dJREVfT1JJRU5UICYmICghZGVmaW5lZCBfRUxJWF9MRVZFTCB8fCBfRUxJ WF9MRVZFTCA+PSA0KQ0KLQlpZiAoZnAtPl9mbGFnczIgJiBfX1NXSUQpIHsNCi0JCXdjaGFyX3Qg KnA7DQotDQotCQlwID0gKHdjaGFyX3QgKikgYnVmOw0KLQkJZm9yIChpID0gMDsgaSA8IChsZW4g LyBzaXplb2YgKHdjaGFyX3QpKTsgaSsrKSB7DQotCQkJaWYgKF9mcHV0d2NfciAocHRyLCBwW2ld LCBmcCkgPT0gV0VPRikNCi0JCQkJcmV0dXJuIC0xOw0KLQkJfQ0KLQl9IGVsc2Ugew0KLSNlbHNl DQotCXsNCi0jZW5kaWYNCi0JCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgew0KLQkJCWlmIChf ZnB1dGNfciAocHRyLCBidWZbaV0sIGZwKSA9PSBFT0YpDQotCQkJCXJldHVybiAtMTsNCi0JCX0N CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7DQorCQlpZiAoX2ZwdXRjX3IgKHB0ciwgYnVm W2ldLCBmcCkgPT0gRU9GKQ0KKwkJCXJldHVybiAtMTsNCiAJfQ0KIAlyZXR1cm4gKDApOw0KIH0N CkBAIC00MDYsMjcgKzM5Miw3IEBAIF9fc3ByaW50X3IgKHN0cnVjdCBfcmVlbnQgKnB0ciwNCiAJ CXVpby0+dWlvX2lvdmNudCA9IDA7DQogCQlyZXR1cm4gKDApOw0KIAl9DQotI2lmIGRlZmluZWQg X1dJREVfT1JJRU5UICYmICghZGVmaW5lZCBfRUxJWF9MRVZFTCB8fCBfRUxJWF9MRVZFTCA+PSA0 KQ0KLQlpZiAoZnAtPl9mbGFnczIgJiBfX1NXSUQpIHsNCi0JCXN0cnVjdCBfX3Npb3YgKmlvdjsN Ci0JCXdjaGFyX3QgKnA7DQotCQlpbnQgaSwgbGVuOw0KLQ0KLQkJaW92ID0gdWlvLT51aW9faW92 Ow0KLQkJZm9yICg7IHVpby0+dWlvX3Jlc2lkICE9IDA7DQotCQkgICAgIHVpby0+dWlvX3Jlc2lk IC09IGxlbiAqIHNpemVvZiAod2NoYXJfdCksIGlvdisrKSB7DQotCQkJcCA9ICh3Y2hhcl90ICop IGlvdi0+aW92X2Jhc2U7DQotCQkJbGVuID0gaW92LT5pb3ZfbGVuIC8gc2l6ZW9mICh3Y2hhcl90 KTsNCi0JCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsNCi0JCQkJaWYgKF9mcHV0d2NfciAo cHRyLCBwW2ldLCBmcCkgPT0gV0VPRikgew0KLQkJCQkJZXJyID0gLTE7DQotCQkJCQlnb3RvIG91 dDsNCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0JfSBlbHNlDQotI2VuZGlmDQotCQllcnIgPSBfX3Nm dndyaXRlX3IocHRyLCBmcCwgdWlvKTsNCisJZXJyID0gX19zZnZ3cml0ZV9yKHB0ciwgZnAsIHVp byk7DQogb3V0Og0KIAl1aW8tPnVpb19yZXNpZCA9IDA7DQogCXVpby0+dWlvX2lvdmNudCA9IDA7 DQpkaWZmIC0tZ2l0IGEvbmV3bGliL2xpYmMvc3RkaW8vdmZ3cHJpbnRmLmMgYi9uZXdsaWIvbGli Yy9zdGRpby92ZndwcmludGYuYw0KaW5kZXggNzgwN2ExMjI5Li5kZTQ5NGY0NGEgMTAwNjQ0DQot LS0gYS9uZXdsaWIvbGliYy9zdGRpby92ZndwcmludGYuYw0KKysrIGIvbmV3bGliL2xpYmMvc3Rk aW8vdmZ3cHJpbnRmLmMNCkBAIC0xNTUsMTggKzE1NSw5NSBAQCBpbnQgX1ZGV1BSSU5URl9SIChz dHJ1Y3QgX3JlZW50ICosIEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCB2YV9saXN0KTsNCiAjIGlm ZGVmIFNUUklOR19PTkxZDQogIyAgZGVmaW5lIF9fU1BSSU5UIF9fc3NwcmludF9yDQogIyBlbHNl DQotIyAgZGVmaW5lIF9fU1BSSU5UIF9fc3ByaW50X3INCisjICBkZWZpbmUgX19TUFJJTlQgX19z d3ByaW50X3INCiAjIGVuZGlmDQogaW50IF9fU1BSSU5UIChzdHJ1Y3QgX3JlZW50ICosIEZJTEUg KiwgcmVnaXN0ZXIgc3RydWN0IF9fc3VpbyAqKTsNCiAjZWxzZQ0KICMgaWZkZWYgU1RSSU5HX09O TFkNCiAjICBkZWZpbmUgX19TUFJJTlQgX19zc3B1dHNfcg0KICMgZWxzZQ0KLSMgIGRlZmluZSBf X1NQUklOVCBfX3NmcHV0c19yDQorIyAgZGVmaW5lIF9fU1BSSU5UIF9fc2ZwdXR3c19yDQogIyBl bmRpZg0KIGludCBfX1NQUklOVCAoc3RydWN0IF9yZWVudCAqLCBGSUxFICosIGNvbnN0IGNoYXIg Kiwgc2l6ZV90KTsNCiAjZW5kaWYNCisNCiAjaWZuZGVmIFNUUklOR19PTkxZDQorI2lmZGVmIElO VEVHRVJfT05MWQ0KKyNpZm5kZWYgX0ZWV1JJVEVfSU5fU1RSRUFNSU8NCitpbnQNCitfX3NmcHV0 d3NfciAoc3RydWN0IF9yZWVudCAqcHRyLA0KKyAgICAgICBGSUxFICpmcCwNCisgICAgICAgY29u c3QgY2hhciAqYnVmLA0KKyAgICAgICBzaXplX3QgbGVuKQ0KK3sNCisJcmVnaXN0ZXIgaW50IGk7 DQorDQorI2lmIGRlZmluZWQgX1dJREVfT1JJRU5UICYmICghZGVmaW5lZCBfRUxJWF9MRVZFTCB8 fCBfRUxJWF9MRVZFTCA+PSA0KQ0KKwl3Y2hhcl90ICpwOw0KKw0KKwlwID0gKHdjaGFyX3QgKikg YnVmOw0KKwlmb3IgKGkgPSAwOyBpIDwgKGxlbiAvIHNpemVvZiAod2NoYXJfdCkpOyBpKyspIHsN CisJCWlmIChfZnB1dHdjX3IgKHB0ciwgcFtpXSwgZnApID09IFdFT0YpDQorCQkJcmV0dXJuIC0x Ow0KKwl9DQorI2Vsc2UNCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7DQorCQlpZiAoX2Zw dXRjX3IgKHB0ciwgYnVmW2ldLCBmcCkgPT0gRU9GKQ0KKwkJCXJldHVybiAtMTsNCisJfQ0KKyNl bmRpZg0KKwlyZXR1cm4gKDApOw0KK30NCisjZW5kaWYNCisvKg0KKyAqIEZsdXNoIG91dCBhbGwg dGhlIHZlY3RvcnMgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gdWlvLA0KKyAqIHRoZW4gcmVzZXQgaXQg c28gdGhhdCBpdCBjYW4gYmUgcmV1c2VkLg0KKyAqLw0KK2ludA0KK19fc3dwcmludF9yIChzdHJ1 Y3QgX3JlZW50ICpwdHIsDQorICAgICAgIEZJTEUgKmZwLA0KKyAgICAgICByZWdpc3RlciBzdHJ1 Y3QgX19zdWlvICp1aW8pDQorew0KKwlyZWdpc3RlciBpbnQgZXJyID0gMDsNCisNCisJaWYgKHVp by0+dWlvX3Jlc2lkID09IDApIHsNCisJCXVpby0+dWlvX2lvdmNudCA9IDA7DQorCQlyZXR1cm4g KDApOw0KKwl9DQorI2lmIGRlZmluZWQgX1dJREVfT1JJRU5UICYmICghZGVmaW5lZCBfRUxJWF9M RVZFTCB8fCBfRUxJWF9MRVZFTCA+PSA0KQ0KKwlkbyB7DQorCQlzdHJ1Y3QgX19zaW92ICppb3Y7 DQorCQl3Y2hhcl90ICpwOw0KKwkJaW50IGksIGxlbjsNCisNCisJCWlvdiA9IHVpby0+dWlvX2lv djsNCisJCWZvciAoOyB1aW8tPnVpb19yZXNpZCAhPSAwOw0KKwkJCSB1aW8tPnVpb19yZXNpZCAt PSBsZW4gKiBzaXplb2YgKHdjaGFyX3QpLCBpb3YrKykgew0KKwkJCXAgPSAod2NoYXJfdCAqKSBp b3YtPmlvdl9iYXNlOw0KKwkJCWxlbiA9IGlvdi0+aW92X2xlbiAvIHNpemVvZiAod2NoYXJfdCk7 DQorCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7DQorCQkJCWlmIChfZnB1dHdjX3IgKHB0 ciwgcFtpXSwgZnApID09IFdFT0YpIHsNCisJCQkJCWVyciA9IC0xOw0KKwkJCQkJZ290byBvdXQ7 DQorCQkJCX0NCisJCQl9DQorCQl9DQorCX0gd2hpbGUgKDApOw0KKyNlbHNlDQorCWVyciA9IF9f c2Z2d3JpdGVfcihwdHIsIGZwLCB1aW8pOw0KKyNlbmRpZg0KK291dDoNCisJdWlvLT51aW9fcmVz aWQgPSAwOw0KKwl1aW8tPnVpb19pb3ZjbnQgPSAwOw0KKwlyZXR1cm4gKGVycik7DQorfQ0KKyNl bHNlIC8qICFJTlRFR0VSX09OTFkgKi8NCisjaWZuZGVmIF9GVldSSVRFX0lOX1NUUkVBTUlPDQor aW50IF9fc2ZwdXR3c19yIChzdHJ1Y3QgX3JlZW50ICosIEZJTEUgKiwgY29uc3QgY2hhciAqYnVm LCBzaXplX3QpOw0KKyNlbmRpZg0KK2ludCBfX3N3cHJpbnRfciAoc3RydWN0IF9yZWVudCAqLCBG SUxFICosIHJlZ2lzdGVyIHN0cnVjdCBfX3N1aW8gKik7DQorI2VuZGlmIC8qICFJTlRFR0VSX09O TFkgKi8NCisNCiAjaWZkZWYgX1VOQlVGX1NUUkVBTV9PUFQNCiAvKg0KICAqIEhlbHBlciBmdW5j dGlvbiBmb3IgYGZwcmludGYgdG8gdW5idWZmZXJlZCB1bml4IGZpbGUnOiBjcmVhdGVzIGENCi0t IA0KMi4zOS4wDQoNCg== --Multipart=_Tue__26_Sep_2023_17_30_13_+0900_M6L89APUT96kZqvR--