From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail.kernel.org ([198.145.29.99]:50696 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751779AbeEQQkX (ORCPT ); Thu, 17 May 2018 12:40:23 -0400 Date: Thu, 17 May 2018 18:40:04 +0200 From: Greg KH To: Carlos Manuel Santos , Samuel Ortiz , Stephen Hemminger Cc: linux-usb@vger.kernel.org, linux-wireless@vger.kernel.org Subject: Re: ACS ACR122U not working: pn533_usb 1-1:1.0: NFC: Couldn't poweron... Message-ID: <20180517164004.GA8413@kroah.com> (sfid-20180517_184028_166758_E6C75FE2) References: <20180517141217.GA32551@kroah.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii In-Reply-To: <20180517141217.GA32551@kroah.com> Sender: linux-wireless-owner@vger.kernel.org List-ID: Adding the network and NFC developers as this really is a NFC driver bug, not a USB core issue... On Thu, May 17, 2018 at 04:12:17PM +0200, Greg KH wrote: > On Thu, May 17, 2018 at 02:10:57PM +0100, Carlos Manuel Santos wrote: > > Hello. > > I'm having troubles with this NFC card reader. It seems kernel driver > > pn533 is not working properly. > > At this moment I have my work stalled. I need to add NFC support to a > > software product and I can't get the device to work. NFC tools won't > > work, the device is not detected. > > > > This is what I get from "dmesg": > > > > [ 4.182300] nfc: nfc_init: NFC Core ver 0.1 > > [ 4.182318] NET: Registered protocol family 39 > > [ 4.184676] hidraw: raw HID events driver (C) Jiri Kosina > > [ 4.193366] ------------[ cut here ]------------ > > [ 4.193366] transfer buffer not dma capable > > [ 4.193398] WARNING: CPU: 2 PID: 259 at drivers/usb/core/hcd.c:1584 > > usb_hcd_map_urb_for_dma+0x413/0x570 [usbcore] > > [ 4.193399] Modules linked in: usbhid(+) pn533_usb(+) pn533 hid nfc > > snd_soc_skl(+) rtsx_usb_ms snd_soc_skl_ipc memstick snd_hda_ext_core > > snd_soc_sst_dsp snd_soc_sst_ipc ecdh_generic snd_soc_acpi snd_soc_core > > snd_hda_codec_realtek(+) snd_hda_codec_generic snd_compress ac97_bus > > snd_pcm_dmaengine arc4 intel_rapl x86_pkg_temp_thermal > > intel_powerclamp coretemp kvm_intel snd_hda_intel kvm iTCO_wdt > > snd_hda_codec iTCO_vendor_support iwlmvm i915 nls_iso8859_1 nls_cp437 > > mac80211 vfat fat ppdev irqbypass crct10dif_pclmul crc32_pclmul > > ghash_clmulni_intel uvcvideo pcbc snd_hda_core iwlwifi > > videobuf2_vmalloc videobuf2_memops aesni_intel videobuf2_v4l2 > > snd_hwdep aes_x86_64 crypto_simd glue_helper cryptd snd_pcm > > intel_cstate videobuf2_common e1000e intel_uncore snd_timer cfg80211 > > intel_rapl_perf tpm_crb psmouse > > [ 4.193427] videodev pcspkr input_leds intel_wmi_thunderbolt > > wmi_bmof ptp snd pps_core i2c_i801 soundcore toshiba_acpi mei_me media > > sparse_keymap toshiba_bluetooth mei intel_gtt industrialio > > intel_pch_thermal shpchp parport_pc tpm_tis tpm_tis_core battery > > rfkill parport evdev rtc_cmos mac_hid tpm rng_core ac sg crypto_user > > ip_tables x_tables rtsx_usb_sdmmc mmc_core rtsx_usb ext4 > > crc32c_generic crc16 mbcache jbd2 fscrypto sr_mod cdrom sd_mod > > serio_raw atkbd libps2 ahci libahci xhci_pci xhci_hcd crc32c_intel > > libata usbcore scsi_mod usb_common i8042 serio nouveau led_class > > mxm_wmi wmi i2c_algo_bit drm_kms_helper syscopyarea sysfillrect > > sysimgblt fb_sys_fops ttm drm agpgart > > [ 4.193458] CPU: 2 PID: 259 Comm: systemd-udevd Not tainted 4.16.8-1-ARCH #1 > > [ 4.193459] Hardware name: TOSHIBA SATELLITE PRO A50-C/SATELLITE > > PRO A50-C, BIOS Version 7.50 09/26/2016 > > [ 4.193467] RIP: 0010:usb_hcd_map_urb_for_dma+0x413/0x570 [usbcore] > > [ 4.193468] RSP: 0018:ffffa3b44282f9f8 EFLAGS: 00010282 > > [ 4.193469] RAX: 0000000000000000 RBX: ffff981fc9e320c0 RCX: 0000000000000001 > > [ 4.193470] RDX: 0000000080000001 RSI: 0000000000000002 RDI: 00000000ffffffff > > [ 4.193471] RBP: ffff981fd42f0000 R08: 0000000713ed01d2 R09: 000000000000001f > > [ 4.193472] R10: 0000000000000344 R11: 000000000000f300 R12: 00000000014000c0 > > [ 4.193473] R13: 00000000fffffff5 R14: ffff981fd2592b98 R15: 00000000c0410280 > > [ 4.193475] FS: 00007f4fb98d0d40(0000) GS:ffff981fe6d00000(0000) > > knlGS:0000000000000000 > > [ 4.193476] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > > [ 4.193477] CR2: 0000562b4a68f6e8 CR3: 00000004532d6004 CR4: 00000000003606e0 > > [ 4.193478] Call Trace: > > [ 4.193488] usb_hcd_submit_urb+0x38d/0xb20 [usbcore] > > [ 4.193492] ? pn533_usb_probe+0x61/0x4d0 [pn533_usb] > > [ 4.193495] ? __kmalloc+0x19e/0x220 > > [ 4.193498] pn533_usb_probe+0x397/0x4d0 [pn533_usb] > > [ 4.193507] usb_probe_interface+0xe4/0x2f0 [usbcore] > > [ 4.193511] driver_probe_device+0x2b9/0x460 > > [ 4.193514] ? __driver_attach+0xb6/0xe0 > > [ 4.193516] ? driver_probe_device+0x460/0x460 > > [ 4.193518] ? bus_for_each_dev+0x76/0xc0 > > [ 4.193520] ? bus_add_driver+0x152/0x230 > > [ 4.193522] ? driver_register+0x6b/0xb0 > > [ 4.193530] ? usb_register_driver+0x7a/0x130 [usbcore] > > [ 4.193531] ? 0xffffffffc13b6000 > > [ 4.193534] ? do_one_initcall+0x48/0x13b > > [ 4.193537] ? free_unref_page_commit+0x6a/0x100 > > [ 4.193539] ? kmem_cache_alloc_trace+0xdc/0x1c0 > > [ 4.193542] ? do_init_module+0x5a/0x210 > > [ 4.193544] ? load_module+0x247a/0x29f0 > > [ 4.193549] ? SyS_init_module+0x139/0x180 > > [ 4.193550] ? SyS_init_module+0x139/0x180 > > [ 4.193554] ? do_syscall_64+0x74/0x190 > > [ 4.193556] ? entry_SYSCALL_64_after_hwframe+0x3d/0xa2 > > [ 4.193559] Code: 49 39 c9 73 30 80 3d 7d b5 02 00 00 41 bd f5 ff > > ff ff 0f 85 57 ff ff ff 48 c7 c7 88 9d 6e c0 c6 05 63 b5 02 00 01 e8 > > 97 85 9a ec <0f> 0b 8b 53 64 e9 3a ff ff ff 65 48 8b 0c 25 00 5c 01 00 > > 48 8b > > [ 4.193589] ---[ end trace 37ff3cbaf04a5b5d ]--- > > [ 4.193612] usb 1-1: NFC: Reader power on cmd error -11 > > [ 4.193614] pn533_usb 1-1:1.0: NFC: Couldn't poweron the reader (error -11) > > [ 4.193618] pn533_usb: probe of 1-1:1.0 failed with error -11 > > [ 4.193637] usbcore: registered new interface driver pn533_usb > > [ 4.198216] usbcore: registered new interface driver usbhid > > > > > > Please find the full dmesg in the link below: > > https://pastebin.com/ck4sZuUY > > Odd that this driver has ever worked. Has it worked for you on older > kernels? > > It looks like it is trying to send data off of the stack. At first > glance, I see at least two places it is doing this, which is what is > causing the errors you are seeing. I'll go audit the whole thing in a > few hours when I get a chance. > > Are you able to build and test a kernel patch if I make one for you? Here's a totally untested, and not even built, patch that I knocked up that should fix this type of issue. I'll try to at least build it later tonight... thanks, greg k-h -------------- From: Greg Kroah-Hartman Subject: [PATCH] NFC: pn533: don't send USB data off of the stack It's amazing that this driver ever worked, but now that x86 doesn't allow USB data to be sent off of the stack, it really does not work at all. Fix this up by properly allocating the data for the small "commands" that get sent to the device. The USB stack will free the buffer when the data has been transmitted, that is why there is no kfree() to mirror the call to kmalloc(). Reported-by: Carlos Manuel Santos Cc: Samuel Ortiz Cc: Stephen Hemminger Cc: stable Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/nfc/pn533/usb.c b/drivers/nfc/pn533/usb.c index e153e8b64bb8..15291cc4f4b5 100644 --- a/drivers/nfc/pn533/usb.c +++ b/drivers/nfc/pn533/usb.c @@ -150,10 +150,17 @@ static int pn533_usb_send_ack(struct pn533 *dev, gfp_t flags) struct pn533_usb_phy *phy = dev->phy; static const u8 ack[6] = {0x00, 0x00, 0xff, 0x00, 0xff, 0x00}; /* spec 7.1.1.3: Preamble, SoPC (2), ACK Code (2), Postamble */ + char *buffer; int rc; + buffer = kmalloc(sizeof(ack), GFP_KERNEL); + if (!buffer) + return -ENOMEM; + memcpy(buffer, ack, sizeof(ack)); + phy->out_urb->transfer_buffer = (u8 *)ack; phy->out_urb->transfer_buffer_length = sizeof(ack); + phy->out_urb |= URB_FREE_BUFFER; rc = usb_submit_urb(phy->out_urb, flags); return rc; @@ -170,6 +177,7 @@ static int pn533_usb_send_frame(struct pn533 *dev, phy->out_urb->transfer_buffer = out->data; phy->out_urb->transfer_buffer_length = out->len; + phy->out_urb &= ~URB_FREE_BUFFER; print_hex_dump_debug("PN533 TX: ", DUMP_PREFIX_NONE, 16, 1, out->data, out->len, false); @@ -375,12 +383,18 @@ static int pn533_acr122_poweron_rdr(struct pn533_usb_phy *phy) /* Power on th reader (CCID cmd) */ u8 cmd[10] = {PN533_ACR122_PC_TO_RDR_ICCPOWERON, 0, 0, 0, 0, 0, 0, 3, 0, 0}; + char *buffer; int rc; void *cntx; struct pn533_acr122_poweron_rdr_arg arg; dev_dbg(&phy->udev->dev, "%s\n", __func__); + buffer = kmalloc(sizeof(cmd), GFP_KERNEL); + if (!buffer) + return -ENOMEM; + memcpy(buffer, cmd, sizeof(cmd)); + init_completion(&arg.done); cntx = phy->in_urb->context; /* backup context */ @@ -389,6 +403,7 @@ static int pn533_acr122_poweron_rdr(struct pn533_usb_phy *phy) phy->out_urb->transfer_buffer = cmd; phy->out_urb->transfer_buffer_length = sizeof(cmd); + phy->out_urb |= URB_FREE_BUFFER; print_hex_dump_debug("ACR122 TX: ", DUMP_PREFIX_NONE, 16, 1, cmd, sizeof(cmd), false); From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: ACS ACR122U not working: pn533_usb 1-1:1.0: NFC: Couldn't poweron... From: Greg Kroah-Hartman Message-Id: <20180517164004.GA8413@kroah.com> Date: Thu, 17 May 2018 18:40:04 +0200 To: Carlos Manuel Santos , Samuel Ortiz , Stephen Hemminger Cc: linux-usb@vger.kernel.org, linux-wireless@vger.kernel.org List-ID: QWRkaW5nIHRoZSBuZXR3b3JrIGFuZCBORkMgZGV2ZWxvcGVycyBhcyB0aGlzIHJlYWxseSBpcyBh IE5GQyBkcml2ZXIKYnVnLCBub3QgYSBVU0IgY29yZSBpc3N1ZS4uLgoKT24gVGh1LCBNYXkgMTcs IDIwMTggYXQgMDQ6MTI6MTdQTSArMDIwMCwgR3JlZyBLSCB3cm90ZToKPiBPbiBUaHUsIE1heSAx NywgMjAxOCBhdCAwMjoxMDo1N1BNICswMTAwLCBDYXJsb3MgTWFudWVsIFNhbnRvcyB3cm90ZToK PiA+IEhlbGxvLgo+ID4gSSdtIGhhdmluZyB0cm91YmxlcyB3aXRoIHRoaXMgTkZDIGNhcmQgcmVh ZGVyLiBJdCBzZWVtcyBrZXJuZWwgZHJpdmVyCj4gPiBwbjUzMyBpcyBub3Qgd29ya2luZyBwcm9w ZXJseS4KPiA+IEF0IHRoaXMgbW9tZW50IEkgaGF2ZSBteSB3b3JrIHN0YWxsZWQuIEkgbmVlZCB0 byBhZGQgTkZDIHN1cHBvcnQgdG8gYQo+ID4gc29mdHdhcmUgcHJvZHVjdCBhbmQgSSBjYW4ndCBn ZXQgdGhlIGRldmljZSB0byB3b3JrLiBORkMgdG9vbHMgd29uJ3QKPiA+IHdvcmssIHRoZSBkZXZp Y2UgaXMgbm90IGRldGVjdGVkLgo+ID4gCj4gPiBUaGlzIGlzIHdoYXQgSSBnZXQgZnJvbSAiZG1l c2ciOgo+ID4gCj4gPiBbICAgIDQuMTgyMzAwXSBuZmM6IG5mY19pbml0OiBORkMgQ29yZSB2ZXIg MC4xCj4gPiBbICAgIDQuMTgyMzE4XSBORVQ6IFJlZ2lzdGVyZWQgcHJvdG9jb2wgZmFtaWx5IDM5 Cj4gPiBbICAgIDQuMTg0Njc2XSBoaWRyYXc6IHJhdyBISUQgZXZlbnRzIGRyaXZlciAoQykgSmly aSBLb3NpbmEKPiA+IFsgICAgNC4xOTMzNjZdIC0tLS0tLS0tLS0tLVsgY3V0IGhlcmUgXS0tLS0t LS0tLS0tLQo+ID4gWyAgICA0LjE5MzM2Nl0gdHJhbnNmZXIgYnVmZmVyIG5vdCBkbWEgY2FwYWJs ZQo+ID4gWyAgICA0LjE5MzM5OF0gV0FSTklORzogQ1BVOiAyIFBJRDogMjU5IGF0IGRyaXZlcnMv dXNiL2NvcmUvaGNkLmM6MTU4NAo+ID4gdXNiX2hjZF9tYXBfdXJiX2Zvcl9kbWErMHg0MTMvMHg1 NzAgW3VzYmNvcmVdCj4gPiBbICAgIDQuMTkzMzk5XSBNb2R1bGVzIGxpbmtlZCBpbjogdXNiaGlk KCspIHBuNTMzX3VzYigrKSBwbjUzMyBoaWQgbmZjCj4gPiBzbmRfc29jX3NrbCgrKSBydHN4X3Vz Yl9tcyBzbmRfc29jX3NrbF9pcGMgbWVtc3RpY2sgc25kX2hkYV9leHRfY29yZQo+ID4gc25kX3Nv Y19zc3RfZHNwIHNuZF9zb2Nfc3N0X2lwYyBlY2RoX2dlbmVyaWMgc25kX3NvY19hY3BpIHNuZF9z b2NfY29yZQo+ID4gc25kX2hkYV9jb2RlY19yZWFsdGVrKCspIHNuZF9oZGFfY29kZWNfZ2VuZXJp YyBzbmRfY29tcHJlc3MgYWM5N19idXMKPiA+IHNuZF9wY21fZG1hZW5naW5lIGFyYzQgaW50ZWxf cmFwbCB4ODZfcGtnX3RlbXBfdGhlcm1hbAo+ID4gaW50ZWxfcG93ZXJjbGFtcCBjb3JldGVtcCBr dm1faW50ZWwgc25kX2hkYV9pbnRlbCBrdm0gaVRDT193ZHQKPiA+IHNuZF9oZGFfY29kZWMgaVRD T192ZW5kb3Jfc3VwcG9ydCBpd2xtdm0gaTkxNSBubHNfaXNvODg1OV8xIG5sc19jcDQzNwo+ID4g bWFjODAyMTEgdmZhdCBmYXQgcHBkZXYgaXJxYnlwYXNzIGNyY3QxMGRpZl9wY2xtdWwgY3JjMzJf cGNsbXVsCj4gPiBnaGFzaF9jbG11bG5pX2ludGVsIHV2Y3ZpZGVvIHBjYmMgc25kX2hkYV9jb3Jl IGl3bHdpZmkKPiA+IHZpZGVvYnVmMl92bWFsbG9jIHZpZGVvYnVmMl9tZW1vcHMgYWVzbmlfaW50 ZWwgdmlkZW9idWYyX3Y0bDIKPiA+IHNuZF9od2RlcCBhZXNfeDg2XzY0IGNyeXB0b19zaW1kIGds dWVfaGVscGVyIGNyeXB0ZCBzbmRfcGNtCj4gPiBpbnRlbF9jc3RhdGUgdmlkZW9idWYyX2NvbW1v biBlMTAwMGUgaW50ZWxfdW5jb3JlIHNuZF90aW1lciBjZmc4MDIxMQo+ID4gaW50ZWxfcmFwbF9w ZXJmIHRwbV9jcmIgcHNtb3VzZQo+ID4gWyAgICA0LjE5MzQyN10gIHZpZGVvZGV2IHBjc3BrciBp bnB1dF9sZWRzIGludGVsX3dtaV90aHVuZGVyYm9sdAo+ID4gd21pX2Jtb2YgcHRwIHNuZCBwcHNf Y29yZSBpMmNfaTgwMSBzb3VuZGNvcmUgdG9zaGliYV9hY3BpIG1laV9tZSBtZWRpYQo+ID4gc3Bh cnNlX2tleW1hcCB0b3NoaWJhX2JsdWV0b290aCBtZWkgaW50ZWxfZ3R0IGluZHVzdHJpYWxpbwo+ ID4gaW50ZWxfcGNoX3RoZXJtYWwgc2hwY2hwIHBhcnBvcnRfcGMgdHBtX3RpcyB0cG1fdGlzX2Nv cmUgYmF0dGVyeQo+ID4gcmZraWxsIHBhcnBvcnQgZXZkZXYgcnRjX2Ntb3MgbWFjX2hpZCB0cG0g cm5nX2NvcmUgYWMgc2cgY3J5cHRvX3VzZXIKPiA+IGlwX3RhYmxlcyB4X3RhYmxlcyBydHN4X3Vz Yl9zZG1tYyBtbWNfY29yZSBydHN4X3VzYiBleHQ0Cj4gPiBjcmMzMmNfZ2VuZXJpYyBjcmMxNiBt YmNhY2hlIGpiZDIgZnNjcnlwdG8gc3JfbW9kIGNkcm9tIHNkX21vZAo+ID4gc2VyaW9fcmF3IGF0 a2JkIGxpYnBzMiBhaGNpIGxpYmFoY2kgeGhjaV9wY2kgeGhjaV9oY2QgY3JjMzJjX2ludGVsCj4g PiBsaWJhdGEgdXNiY29yZSBzY3NpX21vZCB1c2JfY29tbW9uIGk4MDQyIHNlcmlvIG5vdXZlYXUg bGVkX2NsYXNzCj4gPiBteG1fd21pIHdtaSBpMmNfYWxnb19iaXQgZHJtX2ttc19oZWxwZXIgc3lz Y29weWFyZWEgc3lzZmlsbHJlY3QKPiA+IHN5c2ltZ2JsdCBmYl9zeXNfZm9wcyB0dG0gZHJtIGFn cGdhcnQKPiA+IFsgICAgNC4xOTM0NThdIENQVTogMiBQSUQ6IDI1OSBDb21tOiBzeXN0ZW1kLXVk ZXZkIE5vdCB0YWludGVkIDQuMTYuOC0xLUFSQ0ggIzEKPiA+IFsgICAgNC4xOTM0NTldIEhhcmR3 YXJlIG5hbWU6IFRPU0hJQkEgU0FURUxMSVRFIFBSTyBBNTAtQy9TQVRFTExJVEUKPiA+IFBSTyBB NTAtQywgQklPUyBWZXJzaW9uIDcuNTAgICAwOS8yNi8yMDE2Cj4gPiBbICAgIDQuMTkzNDY3XSBS SVA6IDAwMTA6dXNiX2hjZF9tYXBfdXJiX2Zvcl9kbWErMHg0MTMvMHg1NzAgW3VzYmNvcmVdCj4g PiBbICAgIDQuMTkzNDY4XSBSU1A6IDAwMTg6ZmZmZmEzYjQ0MjgyZjlmOCBFRkxBR1M6IDAwMDEw MjgyCj4gPiBbICAgIDQuMTkzNDY5XSBSQVg6IDAwMDAwMDAwMDAwMDAwMDAgUkJYOiBmZmZmOTgx ZmM5ZTMyMGMwIFJDWDogMDAwMDAwMDAwMDAwMDAwMQo+ID4gWyAgICA0LjE5MzQ3MF0gUkRYOiAw MDAwMDAwMDgwMDAwMDAxIFJTSTogMDAwMDAwMDAwMDAwMDAwMiBSREk6IDAwMDAwMDAwZmZmZmZm ZmYKPiA+IFsgICAgNC4xOTM0NzFdIFJCUDogZmZmZjk4MWZkNDJmMDAwMCBSMDg6IDAwMDAwMDA3 MTNlZDAxZDIgUjA5OiAwMDAwMDAwMDAwMDAwMDFmCj4gPiBbICAgIDQuMTkzNDcyXSBSMTA6IDAw MDAwMDAwMDAwMDAzNDQgUjExOiAwMDAwMDAwMDAwMDBmMzAwIFIxMjogMDAwMDAwMDAwMTQwMDBj MAo+ID4gWyAgICA0LjE5MzQ3M10gUjEzOiAwMDAwMDAwMGZmZmZmZmY1IFIxNDogZmZmZjk4MWZk MjU5MmI5OCBSMTU6IDAwMDAwMDAwYzA0MTAyODAKPiA+IFsgICAgNC4xOTM0NzVdIEZTOiAgMDAw MDdmNGZiOThkMGQ0MCgwMDAwKSBHUzpmZmZmOTgxZmU2ZDAwMDAwKDAwMDApCj4gPiBrbmxHUzow MDAwMDAwMDAwMDAwMDAwCj4gPiBbICAgIDQuMTkzNDc2XSBDUzogIDAwMTAgRFM6IDAwMDAgRVM6 IDAwMDAgQ1IwOiAwMDAwMDAwMDgwMDUwMDMzCj4gPiBbICAgIDQuMTkzNDc3XSBDUjI6IDAwMDA1 NjJiNGE2OGY2ZTggQ1IzOiAwMDAwMDAwNDUzMmQ2MDA0IENSNDogMDAwMDAwMDAwMDM2MDZlMAo+ ID4gWyAgICA0LjE5MzQ3OF0gQ2FsbCBUcmFjZToKPiA+IFsgICAgNC4xOTM0ODhdICB1c2JfaGNk X3N1Ym1pdF91cmIrMHgzOGQvMHhiMjAgW3VzYmNvcmVdCj4gPiBbICAgIDQuMTkzNDkyXSAgPyBw bjUzM191c2JfcHJvYmUrMHg2MS8weDRkMCBbcG41MzNfdXNiXQo+ID4gWyAgICA0LjE5MzQ5NV0g ID8gX19rbWFsbG9jKzB4MTllLzB4MjIwCj4gPiBbICAgIDQuMTkzNDk4XSAgcG41MzNfdXNiX3By b2JlKzB4Mzk3LzB4NGQwIFtwbjUzM191c2JdCj4gPiBbICAgIDQuMTkzNTA3XSAgdXNiX3Byb2Jl X2ludGVyZmFjZSsweGU0LzB4MmYwIFt1c2Jjb3JlXQo+ID4gWyAgICA0LjE5MzUxMV0gIGRyaXZl cl9wcm9iZV9kZXZpY2UrMHgyYjkvMHg0NjAKPiA+IFsgICAgNC4xOTM1MTRdICA/IF9fZHJpdmVy X2F0dGFjaCsweGI2LzB4ZTAKPiA+IFsgICAgNC4xOTM1MTZdICA/IGRyaXZlcl9wcm9iZV9kZXZp Y2UrMHg0NjAvMHg0NjAKPiA+IFsgICAgNC4xOTM1MThdICA/IGJ1c19mb3JfZWFjaF9kZXYrMHg3 Ni8weGMwCj4gPiBbICAgIDQuMTkzNTIwXSAgPyBidXNfYWRkX2RyaXZlcisweDE1Mi8weDIzMAo+ ID4gWyAgICA0LjE5MzUyMl0gID8gZHJpdmVyX3JlZ2lzdGVyKzB4NmIvMHhiMAo+ID4gWyAgICA0 LjE5MzUzMF0gID8gdXNiX3JlZ2lzdGVyX2RyaXZlcisweDdhLzB4MTMwIFt1c2Jjb3JlXQo+ID4g WyAgICA0LjE5MzUzMV0gID8gMHhmZmZmZmZmZmMxM2I2MDAwCj4gPiBbICAgIDQuMTkzNTM0XSAg PyBkb19vbmVfaW5pdGNhbGwrMHg0OC8weDEzYgo+ID4gWyAgICA0LjE5MzUzN10gID8gZnJlZV91 bnJlZl9wYWdlX2NvbW1pdCsweDZhLzB4MTAwCj4gPiBbICAgIDQuMTkzNTM5XSAgPyBrbWVtX2Nh Y2hlX2FsbG9jX3RyYWNlKzB4ZGMvMHgxYzAKPiA+IFsgICAgNC4xOTM1NDJdICA/IGRvX2luaXRf bW9kdWxlKzB4NWEvMHgyMTAKPiA+IFsgICAgNC4xOTM1NDRdICA/IGxvYWRfbW9kdWxlKzB4MjQ3 YS8weDI5ZjAKPiA+IFsgICAgNC4xOTM1NDldICA/IFN5U19pbml0X21vZHVsZSsweDEzOS8weDE4 MAo+ID4gWyAgICA0LjE5MzU1MF0gID8gU3lTX2luaXRfbW9kdWxlKzB4MTM5LzB4MTgwCj4gPiBb ICAgIDQuMTkzNTU0XSAgPyBkb19zeXNjYWxsXzY0KzB4NzQvMHgxOTAKPiA+IFsgICAgNC4xOTM1 NTZdICA/IGVudHJ5X1NZU0NBTExfNjRfYWZ0ZXJfaHdmcmFtZSsweDNkLzB4YTIKPiA+IFsgICAg NC4xOTM1NTldIENvZGU6IDQ5IDM5IGM5IDczIDMwIDgwIDNkIDdkIGI1IDAyIDAwIDAwIDQxIGJk IGY1IGZmCj4gPiBmZiBmZiAwZiA4NSA1NyBmZiBmZiBmZiA0OCBjNyBjNyA4OCA5ZCA2ZSBjMCBj NiAwNSA2MyBiNSAwMiAwMCAwMSBlOAo+ID4gOTcgODUgOWEgZWMgPDBmPiAwYiA4YiA1MyA2NCBl OSAzYSBmZiBmZiBmZiA2NSA0OCA4YiAwYyAyNSAwMCA1YyAwMSAwMAo+ID4gNDggOGIKPiA+IFsg ICAgNC4xOTM1ODldIC0tLVsgZW5kIHRyYWNlIDM3ZmYzY2JhZjA0YTViNWQgXS0tLQo+ID4gWyAg ICA0LjE5MzYxMl0gdXNiIDEtMTogTkZDOiBSZWFkZXIgcG93ZXIgb24gY21kIGVycm9yIC0xMQo+ ID4gWyAgICA0LjE5MzYxNF0gcG41MzNfdXNiIDEtMToxLjA6IE5GQzogQ291bGRuJ3QgcG93ZXJv biB0aGUgcmVhZGVyIChlcnJvciAtMTEpCj4gPiBbICAgIDQuMTkzNjE4XSBwbjUzM191c2I6IHBy b2JlIG9mIDEtMToxLjAgZmFpbGVkIHdpdGggZXJyb3IgLTExCj4gPiBbICAgIDQuMTkzNjM3XSB1 c2Jjb3JlOiByZWdpc3RlcmVkIG5ldyBpbnRlcmZhY2UgZHJpdmVyIHBuNTMzX3VzYgo+ID4gWyAg ICA0LjE5ODIxNl0gdXNiY29yZTogcmVnaXN0ZXJlZCBuZXcgaW50ZXJmYWNlIGRyaXZlciB1c2Jo aWQKPiA+IAo+ID4gCj4gPiBQbGVhc2UgZmluZCB0aGUgZnVsbCBkbWVzZyBpbiB0aGUgbGluayBi ZWxvdzoKPiA+IGh0dHBzOi8vcGFzdGViaW4uY29tL2NrNHNadVVZCj4gCj4gT2RkIHRoYXQgdGhp cyBkcml2ZXIgaGFzIGV2ZXIgd29ya2VkLiAgSGFzIGl0IHdvcmtlZCBmb3IgeW91IG9uIG9sZGVy Cj4ga2VybmVscz8KPiAKPiBJdCBsb29rcyBsaWtlIGl0IGlzIHRyeWluZyB0byBzZW5kIGRhdGEg b2ZmIG9mIHRoZSBzdGFjay4gIEF0IGZpcnN0Cj4gZ2xhbmNlLCBJIHNlZSBhdCBsZWFzdCB0d28g cGxhY2VzIGl0IGlzIGRvaW5nIHRoaXMsIHdoaWNoIGlzIHdoYXQgaXMKPiBjYXVzaW5nIHRoZSBl cnJvcnMgeW91IGFyZSBzZWVpbmcuICAgSSdsbCBnbyBhdWRpdCB0aGUgd2hvbGUgdGhpbmcgaW4g YQo+IGZldyBob3VycyB3aGVuIEkgZ2V0IGEgY2hhbmNlLgo+IAo+IEFyZSB5b3UgYWJsZSB0byBi dWlsZCBhbmQgdGVzdCBhIGtlcm5lbCBwYXRjaCBpZiBJIG1ha2Ugb25lIGZvciB5b3U/CgpIZXJl J3MgYSB0b3RhbGx5IHVudGVzdGVkLCBhbmQgbm90IGV2ZW4gYnVpbHQsIHBhdGNoIHRoYXQgSSBr bm9ja2VkIHVwCnRoYXQgc2hvdWxkIGZpeCB0aGlzIHR5cGUgb2YgaXNzdWUuCgpJJ2xsIHRyeSB0 byBhdCBsZWFzdCBidWlsZCBpdCBsYXRlciB0b25pZ2h0Li4uCgp0aGFua3MsCgpncmVnIGstaAoK LS0tLS0tLS0tLS0tLS0KCkZyb206IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQGxpbnV4Zm91 bmRhdGlvbi5vcmc+ClN1YmplY3Q6IFtQQVRDSF0gTkZDOiBwbjUzMzogZG9uJ3Qgc2VuZCBVU0Ig ZGF0YSBvZmYgb2YgdGhlIHN0YWNrCgpJdCdzIGFtYXppbmcgdGhhdCB0aGlzIGRyaXZlciBldmVy IHdvcmtlZCwgYnV0IG5vdyB0aGF0IHg4NiBkb2Vzbid0CmFsbG93IFVTQiBkYXRhIHRvIGJlIHNl bnQgb2ZmIG9mIHRoZSBzdGFjaywgaXQgcmVhbGx5IGRvZXMgbm90IHdvcmsgYXQKYWxsLiAgRml4 IHRoaXMgdXAgYnkgcHJvcGVybHkgYWxsb2NhdGluZyB0aGUgZGF0YSBmb3IgdGhlIHNtYWxsCiJj b21tYW5kcyIgdGhhdCBnZXQgc2VudCB0byB0aGUgZGV2aWNlLgoKVGhlIFVTQiBzdGFjayB3aWxs IGZyZWUgdGhlIGJ1ZmZlciB3aGVuIHRoZSBkYXRhIGhhcyBiZWVuIHRyYW5zbWl0dGVkLAp0aGF0 IGlzIHdoeSB0aGVyZSBpcyBubyBrZnJlZSgpIHRvIG1pcnJvciB0aGUgY2FsbCB0byBrbWFsbG9j KCkuCgpSZXBvcnRlZC1ieTogQ2FybG9zIE1hbnVlbCBTYW50b3MgPGNtbXBzYW50b3NAZ21haWwu Y29tPgpDYzogU2FtdWVsIE9ydGl6IDxzYW1lb0BsaW51eC5pbnRlbC5jb20+CkNjOiBTdGVwaGVu IEhlbW1pbmdlciA8c3RlcGhlbkBuZXR3b3JrcGx1bWJlci5vcmc+CkNjOiBzdGFibGUgPHN0YWJs ZUB2Z2VyLmtlcm5lbC5vcmc+ClNpZ25lZC1vZmYtYnk6IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3Jl Z2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+Ci0tLQpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlz dDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgtdXNiIiBpbgp0aGUgYm9keSBvZiBh IG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZwpNb3JlIG1ham9yZG9tbyBpbmZv IGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL25mYy9wbjUzMy91c2IuYyBiL2RyaXZlcnMvbmZjL3BuNTMzL3VzYi5jCmlu ZGV4IGUxNTNlOGI2NGJiOC4uMTUyOTFjYzRmNGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9w bjUzMy91c2IuYworKysgYi9kcml2ZXJzL25mYy9wbjUzMy91c2IuYwpAQCAtMTUwLDEwICsxNTAs MTcgQEAgc3RhdGljIGludCBwbjUzM191c2Jfc2VuZF9hY2soc3RydWN0IHBuNTMzICpkZXYsIGdm cF90IGZsYWdzKQogCXN0cnVjdCBwbjUzM191c2JfcGh5ICpwaHkgPSBkZXYtPnBoeTsKIAlzdGF0 aWMgY29uc3QgdTggYWNrWzZdID0gezB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4MDB9 OwogCS8qIHNwZWMgNy4xLjEuMzogIFByZWFtYmxlLCBTb1BDICgyKSwgQUNLIENvZGUgKDIpLCBQ b3N0YW1ibGUgKi8KKwljaGFyICpidWZmZXI7CiAJaW50IHJjOwogCisJYnVmZmVyID0ga21hbGxv YyhzaXplb2YoYWNrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiAtRU5P TUVNOworCW1lbWNweShidWZmZXIsIGFjaywgc2l6ZW9mKGFjaykpOworCiAJcGh5LT5vdXRfdXJi LT50cmFuc2Zlcl9idWZmZXIgPSAodTggKilhY2s7CiAJcGh5LT5vdXRfdXJiLT50cmFuc2Zlcl9i dWZmZXJfbGVuZ3RoID0gc2l6ZW9mKGFjayk7CisJcGh5LT5vdXRfdXJiIHw9IFVSQl9GUkVFX0JV RkZFUjsKIAlyYyA9IHVzYl9zdWJtaXRfdXJiKHBoeS0+b3V0X3VyYiwgZmxhZ3MpOwogCiAJcmV0 dXJuIHJjOwpAQCAtMTcwLDYgKzE3Nyw3IEBAIHN0YXRpYyBpbnQgcG41MzNfdXNiX3NlbmRfZnJh bWUoc3RydWN0IHBuNTMzICpkZXYsCiAKIAlwaHktPm91dF91cmItPnRyYW5zZmVyX2J1ZmZlciA9 IG91dC0+ZGF0YTsKIAlwaHktPm91dF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBvdXQt PmxlbjsKKwlwaHktPm91dF91cmIgJj0gflVSQl9GUkVFX0JVRkZFUjsKIAogCXByaW50X2hleF9k dW1wX2RlYnVnKCJQTjUzMyBUWDogIiwgRFVNUF9QUkVGSVhfTk9ORSwgMTYsIDEsCiAJCQkgICAg IG91dC0+ZGF0YSwgb3V0LT5sZW4sIGZhbHNlKTsKQEAgLTM3NSwxMiArMzgzLDE4IEBAIHN0YXRp YyBpbnQgcG41MzNfYWNyMTIyX3Bvd2Vyb25fcmRyKHN0cnVjdCBwbjUzM191c2JfcGh5ICpwaHkp CiAJLyogUG93ZXIgb24gdGggcmVhZGVyIChDQ0lEIGNtZCkgKi8KIAl1OCBjbWRbMTBdID0ge1BO NTMzX0FDUjEyMl9QQ19UT19SRFJfSUNDUE9XRVJPTiwKIAkJICAgICAgMCwgMCwgMCwgMCwgMCwg MCwgMywgMCwgMH07CisJY2hhciAqYnVmZmVyOwogCWludCByYzsKIAl2b2lkICpjbnR4OwogCXN0 cnVjdCBwbjUzM19hY3IxMjJfcG93ZXJvbl9yZHJfYXJnIGFyZzsKIAogCWRldl9kYmcoJnBoeS0+ dWRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAorCWJ1ZmZlciA9IGttYWxsb2Moc2l6ZW9m KGNtZCksIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKwlt ZW1jcHkoYnVmZmVyLCBjbWQsIHNpemVvZihjbWQpKTsKKwogCWluaXRfY29tcGxldGlvbigmYXJn LmRvbmUpOwogCWNudHggPSBwaHktPmluX3VyYi0+Y29udGV4dDsgIC8qIGJhY2t1cCBjb250ZXh0 ICovCiAKQEAgLTM4OSw2ICs0MDMsNyBAQCBzdGF0aWMgaW50IHBuNTMzX2FjcjEyMl9wb3dlcm9u X3JkcihzdHJ1Y3QgcG41MzNfdXNiX3BoeSAqcGh5KQogCiAJcGh5LT5vdXRfdXJiLT50cmFuc2Zl cl9idWZmZXIgPSBjbWQ7CiAJcGh5LT5vdXRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0g c2l6ZW9mKGNtZCk7CisJcGh5LT5vdXRfdXJiIHw9IFVSQl9GUkVFX0JVRkZFUjsKIAogCXByaW50 X2hleF9kdW1wX2RlYnVnKCJBQ1IxMjIgVFg6ICIsIERVTVBfUFJFRklYX05PTkUsIDE2LCAxLAog CQkgICAgICAgY21kLCBzaXplb2YoY21kKSwgZmFsc2UpOwo=