From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail.kernel.org ([198.145.29.99]:55050 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751815AbeEQQqo (ORCPT ); Thu, 17 May 2018 12:46:44 -0400 Date: Thu, 17 May 2018 18:46:24 +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: <20180517164624.GA28341@kroah.com> (sfid-20180517_184657_161127_C2EF022B) References: <20180517141217.GA32551@kroah.com> <20180517164004.GA8413@kroah.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii In-Reply-To: <20180517164004.GA8413@kroah.com> Sender: linux-wireless-owner@vger.kernel.org List-ID: On Thu, May 17, 2018 at 06:40:04PM +0200, Greg KH wrote: > 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... Ok, that was dumb, this version at least compiles :) -------------- 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..a0542f86efcf 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->transfer_flags |= 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->transfer_flags &= ~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->transfer_flags &= ~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: <20180517164624.GA28341@kroah.com> Date: Thu, 17 May 2018 18:46:24 +0200 To: Carlos Manuel Santos , Samuel Ortiz , Stephen Hemminger Cc: linux-usb@vger.kernel.org, linux-wireless@vger.kernel.org List-ID: T24gVGh1LCBNYXkgMTcsIDIwMTggYXQgMDY6NDA6MDRQTSArMDIwMCwgR3JlZyBLSCB3cm90ZToK PiBBZGRpbmcgdGhlIG5ldHdvcmsgYW5kIE5GQyBkZXZlbG9wZXJzIGFzIHRoaXMgcmVhbGx5IGlz IGEgTkZDIGRyaXZlcgo+IGJ1Zywgbm90IGEgVVNCIGNvcmUgaXNzdWUuLi4KPiAKPiBPbiBUaHUs IE1heSAxNywgMjAxOCBhdCAwNDoxMjoxN1BNICswMjAwLCBHcmVnIEtIIHdyb3RlOgo+ID4gT24g VGh1LCBNYXkgMTcsIDIwMTggYXQgMDI6MTA6NTdQTSArMDEwMCwgQ2FybG9zIE1hbnVlbCBTYW50 b3Mgd3JvdGU6Cj4gPiA+IEhlbGxvLgo+ID4gPiBJJ20gaGF2aW5nIHRyb3VibGVzIHdpdGggdGhp cyBORkMgY2FyZCByZWFkZXIuIEl0IHNlZW1zIGtlcm5lbCBkcml2ZXIKPiA+ID4gcG41MzMgaXMg bm90IHdvcmtpbmcgcHJvcGVybHkuCj4gPiA+IEF0IHRoaXMgbW9tZW50IEkgaGF2ZSBteSB3b3Jr IHN0YWxsZWQuIEkgbmVlZCB0byBhZGQgTkZDIHN1cHBvcnQgdG8gYQo+ID4gPiBzb2Z0d2FyZSBw cm9kdWN0IGFuZCBJIGNhbid0IGdldCB0aGUgZGV2aWNlIHRvIHdvcmsuIE5GQyB0b29scyB3b24n dAo+ID4gPiB3b3JrLCB0aGUgZGV2aWNlIGlzIG5vdCBkZXRlY3RlZC4KPiA+ID4gCj4gPiA+IFRo aXMgaXMgd2hhdCBJIGdldCBmcm9tICJkbWVzZyI6Cj4gPiA+IAo+ID4gPiBbICAgIDQuMTgyMzAw XSBuZmM6IG5mY19pbml0OiBORkMgQ29yZSB2ZXIgMC4xCj4gPiA+IFsgICAgNC4xODIzMThdIE5F VDogUmVnaXN0ZXJlZCBwcm90b2NvbCBmYW1pbHkgMzkKPiA+ID4gWyAgICA0LjE4NDY3Nl0gaGlk cmF3OiByYXcgSElEIGV2ZW50cyBkcml2ZXIgKEMpIEppcmkgS29zaW5hCj4gPiA+IFsgICAgNC4x OTMzNjZdIC0tLS0tLS0tLS0tLVsgY3V0IGhlcmUgXS0tLS0tLS0tLS0tLQo+ID4gPiBbICAgIDQu MTkzMzY2XSB0cmFuc2ZlciBidWZmZXIgbm90IGRtYSBjYXBhYmxlCj4gPiA+IFsgICAgNC4xOTMz OThdIFdBUk5JTkc6IENQVTogMiBQSUQ6IDI1OSBhdCBkcml2ZXJzL3VzYi9jb3JlL2hjZC5jOjE1 ODQKPiA+ID4gdXNiX2hjZF9tYXBfdXJiX2Zvcl9kbWErMHg0MTMvMHg1NzAgW3VzYmNvcmVdCj4g PiA+IFsgICAgNC4xOTMzOTldIE1vZHVsZXMgbGlua2VkIGluOiB1c2JoaWQoKykgcG41MzNfdXNi KCspIHBuNTMzIGhpZCBuZmMKPiA+ID4gc25kX3NvY19za2woKykgcnRzeF91c2JfbXMgc25kX3Nv Y19za2xfaXBjIG1lbXN0aWNrIHNuZF9oZGFfZXh0X2NvcmUKPiA+ID4gc25kX3NvY19zc3RfZHNw IHNuZF9zb2Nfc3N0X2lwYyBlY2RoX2dlbmVyaWMgc25kX3NvY19hY3BpIHNuZF9zb2NfY29yZQo+ ID4gPiBzbmRfaGRhX2NvZGVjX3JlYWx0ZWsoKykgc25kX2hkYV9jb2RlY19nZW5lcmljIHNuZF9j b21wcmVzcyBhYzk3X2J1cwo+ID4gPiBzbmRfcGNtX2RtYWVuZ2luZSBhcmM0IGludGVsX3JhcGwg eDg2X3BrZ190ZW1wX3RoZXJtYWwKPiA+ID4gaW50ZWxfcG93ZXJjbGFtcCBjb3JldGVtcCBrdm1f aW50ZWwgc25kX2hkYV9pbnRlbCBrdm0gaVRDT193ZHQKPiA+ID4gc25kX2hkYV9jb2RlYyBpVENP X3ZlbmRvcl9zdXBwb3J0IGl3bG12bSBpOTE1IG5sc19pc284ODU5XzEgbmxzX2NwNDM3Cj4gPiA+ IG1hYzgwMjExIHZmYXQgZmF0IHBwZGV2IGlycWJ5cGFzcyBjcmN0MTBkaWZfcGNsbXVsIGNyYzMy X3BjbG11bAo+ID4gPiBnaGFzaF9jbG11bG5pX2ludGVsIHV2Y3ZpZGVvIHBjYmMgc25kX2hkYV9j b3JlIGl3bHdpZmkKPiA+ID4gdmlkZW9idWYyX3ZtYWxsb2MgdmlkZW9idWYyX21lbW9wcyBhZXNu aV9pbnRlbCB2aWRlb2J1ZjJfdjRsMgo+ID4gPiBzbmRfaHdkZXAgYWVzX3g4Nl82NCBjcnlwdG9f c2ltZCBnbHVlX2hlbHBlciBjcnlwdGQgc25kX3BjbQo+ID4gPiBpbnRlbF9jc3RhdGUgdmlkZW9i dWYyX2NvbW1vbiBlMTAwMGUgaW50ZWxfdW5jb3JlIHNuZF90aW1lciBjZmc4MDIxMQo+ID4gPiBp bnRlbF9yYXBsX3BlcmYgdHBtX2NyYiBwc21vdXNlCj4gPiA+IFsgICAgNC4xOTM0MjddICB2aWRl b2RldiBwY3Nwa3IgaW5wdXRfbGVkcyBpbnRlbF93bWlfdGh1bmRlcmJvbHQKPiA+ID4gd21pX2Jt b2YgcHRwIHNuZCBwcHNfY29yZSBpMmNfaTgwMSBzb3VuZGNvcmUgdG9zaGliYV9hY3BpIG1laV9t ZSBtZWRpYQo+ID4gPiBzcGFyc2Vfa2V5bWFwIHRvc2hpYmFfYmx1ZXRvb3RoIG1laSBpbnRlbF9n dHQgaW5kdXN0cmlhbGlvCj4gPiA+IGludGVsX3BjaF90aGVybWFsIHNocGNocCBwYXJwb3J0X3Bj IHRwbV90aXMgdHBtX3Rpc19jb3JlIGJhdHRlcnkKPiA+ID4gcmZraWxsIHBhcnBvcnQgZXZkZXYg cnRjX2Ntb3MgbWFjX2hpZCB0cG0gcm5nX2NvcmUgYWMgc2cgY3J5cHRvX3VzZXIKPiA+ID4gaXBf dGFibGVzIHhfdGFibGVzIHJ0c3hfdXNiX3NkbW1jIG1tY19jb3JlIHJ0c3hfdXNiIGV4dDQKPiA+ ID4gY3JjMzJjX2dlbmVyaWMgY3JjMTYgbWJjYWNoZSBqYmQyIGZzY3J5cHRvIHNyX21vZCBjZHJv bSBzZF9tb2QKPiA+ID4gc2VyaW9fcmF3IGF0a2JkIGxpYnBzMiBhaGNpIGxpYmFoY2kgeGhjaV9w Y2kgeGhjaV9oY2QgY3JjMzJjX2ludGVsCj4gPiA+IGxpYmF0YSB1c2Jjb3JlIHNjc2lfbW9kIHVz Yl9jb21tb24gaTgwNDIgc2VyaW8gbm91dmVhdSBsZWRfY2xhc3MKPiA+ID4gbXhtX3dtaSB3bWkg aTJjX2FsZ29fYml0IGRybV9rbXNfaGVscGVyIHN5c2NvcHlhcmVhIHN5c2ZpbGxyZWN0Cj4gPiA+ IHN5c2ltZ2JsdCBmYl9zeXNfZm9wcyB0dG0gZHJtIGFncGdhcnQKPiA+ID4gWyAgICA0LjE5MzQ1 OF0gQ1BVOiAyIFBJRDogMjU5IENvbW06IHN5c3RlbWQtdWRldmQgTm90IHRhaW50ZWQgNC4xNi44 LTEtQVJDSCAjMQo+ID4gPiBbICAgIDQuMTkzNDU5XSBIYXJkd2FyZSBuYW1lOiBUT1NISUJBIFNB VEVMTElURSBQUk8gQTUwLUMvU0FURUxMSVRFCj4gPiA+IFBSTyBBNTAtQywgQklPUyBWZXJzaW9u IDcuNTAgICAwOS8yNi8yMDE2Cj4gPiA+IFsgICAgNC4xOTM0NjddIFJJUDogMDAxMDp1c2JfaGNk X21hcF91cmJfZm9yX2RtYSsweDQxMy8weDU3MCBbdXNiY29yZV0KPiA+ID4gWyAgICA0LjE5MzQ2 OF0gUlNQOiAwMDE4OmZmZmZhM2I0NDI4MmY5ZjggRUZMQUdTOiAwMDAxMDI4Mgo+ID4gPiBbICAg IDQuMTkzNDY5XSBSQVg6IDAwMDAwMDAwMDAwMDAwMDAgUkJYOiBmZmZmOTgxZmM5ZTMyMGMwIFJD WDogMDAwMDAwMDAwMDAwMDAwMQo+ID4gPiBbICAgIDQuMTkzNDcwXSBSRFg6IDAwMDAwMDAwODAw MDAwMDEgUlNJOiAwMDAwMDAwMDAwMDAwMDAyIFJESTogMDAwMDAwMDBmZmZmZmZmZgo+ID4gPiBb ICAgIDQuMTkzNDcxXSBSQlA6IGZmZmY5ODFmZDQyZjAwMDAgUjA4OiAwMDAwMDAwNzEzZWQwMWQy IFIwOTogMDAwMDAwMDAwMDAwMDAxZgo+ID4gPiBbICAgIDQuMTkzNDcyXSBSMTA6IDAwMDAwMDAw MDAwMDAzNDQgUjExOiAwMDAwMDAwMDAwMDBmMzAwIFIxMjogMDAwMDAwMDAwMTQwMDBjMAo+ID4g PiBbICAgIDQuMTkzNDczXSBSMTM6IDAwMDAwMDAwZmZmZmZmZjUgUjE0OiBmZmZmOTgxZmQyNTky Yjk4IFIxNTogMDAwMDAwMDBjMDQxMDI4MAo+ID4gPiBbICAgIDQuMTkzNDc1XSBGUzogIDAwMDA3 ZjRmYjk4ZDBkNDAoMDAwMCkgR1M6ZmZmZjk4MWZlNmQwMDAwMCgwMDAwKQo+ID4gPiBrbmxHUzow MDAwMDAwMDAwMDAwMDAwCj4gPiA+IFsgICAgNC4xOTM0NzZdIENTOiAgMDAxMCBEUzogMDAwMCBF UzogMDAwMCBDUjA6IDAwMDAwMDAwODAwNTAwMzMKPiA+ID4gWyAgICA0LjE5MzQ3N10gQ1IyOiAw MDAwNTYyYjRhNjhmNmU4IENSMzogMDAwMDAwMDQ1MzJkNjAwNCBDUjQ6IDAwMDAwMDAwMDAzNjA2 ZTAKPiA+ID4gWyAgICA0LjE5MzQ3OF0gQ2FsbCBUcmFjZToKPiA+ID4gWyAgICA0LjE5MzQ4OF0g IHVzYl9oY2Rfc3VibWl0X3VyYisweDM4ZC8weGIyMCBbdXNiY29yZV0KPiA+ID4gWyAgICA0LjE5 MzQ5Ml0gID8gcG41MzNfdXNiX3Byb2JlKzB4NjEvMHg0ZDAgW3BuNTMzX3VzYl0KPiA+ID4gWyAg ICA0LjE5MzQ5NV0gID8gX19rbWFsbG9jKzB4MTllLzB4MjIwCj4gPiA+IFsgICAgNC4xOTM0OThd ICBwbjUzM191c2JfcHJvYmUrMHgzOTcvMHg0ZDAgW3BuNTMzX3VzYl0KPiA+ID4gWyAgICA0LjE5 MzUwN10gIHVzYl9wcm9iZV9pbnRlcmZhY2UrMHhlNC8weDJmMCBbdXNiY29yZV0KPiA+ID4gWyAg ICA0LjE5MzUxMV0gIGRyaXZlcl9wcm9iZV9kZXZpY2UrMHgyYjkvMHg0NjAKPiA+ID4gWyAgICA0 LjE5MzUxNF0gID8gX19kcml2ZXJfYXR0YWNoKzB4YjYvMHhlMAo+ID4gPiBbICAgIDQuMTkzNTE2 XSAgPyBkcml2ZXJfcHJvYmVfZGV2aWNlKzB4NDYwLzB4NDYwCj4gPiA+IFsgICAgNC4xOTM1MThd ICA/IGJ1c19mb3JfZWFjaF9kZXYrMHg3Ni8weGMwCj4gPiA+IFsgICAgNC4xOTM1MjBdICA/IGJ1 c19hZGRfZHJpdmVyKzB4MTUyLzB4MjMwCj4gPiA+IFsgICAgNC4xOTM1MjJdICA/IGRyaXZlcl9y ZWdpc3RlcisweDZiLzB4YjAKPiA+ID4gWyAgICA0LjE5MzUzMF0gID8gdXNiX3JlZ2lzdGVyX2Ry aXZlcisweDdhLzB4MTMwIFt1c2Jjb3JlXQo+ID4gPiBbICAgIDQuMTkzNTMxXSAgPyAweGZmZmZm ZmZmYzEzYjYwMDAKPiA+ID4gWyAgICA0LjE5MzUzNF0gID8gZG9fb25lX2luaXRjYWxsKzB4NDgv MHgxM2IKPiA+ID4gWyAgICA0LjE5MzUzN10gID8gZnJlZV91bnJlZl9wYWdlX2NvbW1pdCsweDZh LzB4MTAwCj4gPiA+IFsgICAgNC4xOTM1MzldICA/IGttZW1fY2FjaGVfYWxsb2NfdHJhY2UrMHhk Yy8weDFjMAo+ID4gPiBbICAgIDQuMTkzNTQyXSAgPyBkb19pbml0X21vZHVsZSsweDVhLzB4MjEw Cj4gPiA+IFsgICAgNC4xOTM1NDRdICA/IGxvYWRfbW9kdWxlKzB4MjQ3YS8weDI5ZjAKPiA+ID4g WyAgICA0LjE5MzU0OV0gID8gU3lTX2luaXRfbW9kdWxlKzB4MTM5LzB4MTgwCj4gPiA+IFsgICAg NC4xOTM1NTBdICA/IFN5U19pbml0X21vZHVsZSsweDEzOS8weDE4MAo+ID4gPiBbICAgIDQuMTkz NTU0XSAgPyBkb19zeXNjYWxsXzY0KzB4NzQvMHgxOTAKPiA+ID4gWyAgICA0LjE5MzU1Nl0gID8g ZW50cnlfU1lTQ0FMTF82NF9hZnRlcl9od2ZyYW1lKzB4M2QvMHhhMgo+ID4gPiBbICAgIDQuMTkz NTU5XSBDb2RlOiA0OSAzOSBjOSA3MyAzMCA4MCAzZCA3ZCBiNSAwMiAwMCAwMCA0MSBiZCBmNSBm Zgo+ID4gPiBmZiBmZiAwZiA4NSA1NyBmZiBmZiBmZiA0OCBjNyBjNyA4OCA5ZCA2ZSBjMCBjNiAw NSA2MyBiNSAwMiAwMCAwMSBlOAo+ID4gPiA5NyA4NSA5YSBlYyA8MGY+IDBiIDhiIDUzIDY0IGU5 IDNhIGZmIGZmIGZmIDY1IDQ4IDhiIDBjIDI1IDAwIDVjIDAxIDAwCj4gPiA+IDQ4IDhiCj4gPiA+ IFsgICAgNC4xOTM1ODldIC0tLVsgZW5kIHRyYWNlIDM3ZmYzY2JhZjA0YTViNWQgXS0tLQo+ID4g PiBbICAgIDQuMTkzNjEyXSB1c2IgMS0xOiBORkM6IFJlYWRlciBwb3dlciBvbiBjbWQgZXJyb3Ig LTExCj4gPiA+IFsgICAgNC4xOTM2MTRdIHBuNTMzX3VzYiAxLTE6MS4wOiBORkM6IENvdWxkbid0 IHBvd2Vyb24gdGhlIHJlYWRlciAoZXJyb3IgLTExKQo+ID4gPiBbICAgIDQuMTkzNjE4XSBwbjUz M191c2I6IHByb2JlIG9mIDEtMToxLjAgZmFpbGVkIHdpdGggZXJyb3IgLTExCj4gPiA+IFsgICAg NC4xOTM2MzddIHVzYmNvcmU6IHJlZ2lzdGVyZWQgbmV3IGludGVyZmFjZSBkcml2ZXIgcG41MzNf dXNiCj4gPiA+IFsgICAgNC4xOTgyMTZdIHVzYmNvcmU6IHJlZ2lzdGVyZWQgbmV3IGludGVyZmFj ZSBkcml2ZXIgdXNiaGlkCj4gPiA+IAo+ID4gPiAKPiA+ID4gUGxlYXNlIGZpbmQgdGhlIGZ1bGwg ZG1lc2cgaW4gdGhlIGxpbmsgYmVsb3c6Cj4gPiA+IGh0dHBzOi8vcGFzdGViaW4uY29tL2NrNHNa dVVZCj4gPiAKPiA+IE9kZCB0aGF0IHRoaXMgZHJpdmVyIGhhcyBldmVyIHdvcmtlZC4gIEhhcyBp dCB3b3JrZWQgZm9yIHlvdSBvbiBvbGRlcgo+ID4ga2VybmVscz8KPiA+IAo+ID4gSXQgbG9va3Mg bGlrZSBpdCBpcyB0cnlpbmcgdG8gc2VuZCBkYXRhIG9mZiBvZiB0aGUgc3RhY2suICBBdCBmaXJz dAo+ID4gZ2xhbmNlLCBJIHNlZSBhdCBsZWFzdCB0d28gcGxhY2VzIGl0IGlzIGRvaW5nIHRoaXMs IHdoaWNoIGlzIHdoYXQgaXMKPiA+IGNhdXNpbmcgdGhlIGVycm9ycyB5b3UgYXJlIHNlZWluZy4g ICBJJ2xsIGdvIGF1ZGl0IHRoZSB3aG9sZSB0aGluZyBpbiBhCj4gPiBmZXcgaG91cnMgd2hlbiBJ IGdldCBhIGNoYW5jZS4KPiA+IAo+ID4gQXJlIHlvdSBhYmxlIHRvIGJ1aWxkIGFuZCB0ZXN0IGEg a2VybmVsIHBhdGNoIGlmIEkgbWFrZSBvbmUgZm9yIHlvdT8KPiAKPiBIZXJlJ3MgYSB0b3RhbGx5 IHVudGVzdGVkLCBhbmQgbm90IGV2ZW4gYnVpbHQsIHBhdGNoIHRoYXQgSSBrbm9ja2VkIHVwCj4g dGhhdCBzaG91bGQgZml4IHRoaXMgdHlwZSBvZiBpc3N1ZS4KPiAKPiBJJ2xsIHRyeSB0byBhdCBs ZWFzdCBidWlsZCBpdCBsYXRlciB0b25pZ2h0Li4uCgpPaywgdGhhdCB3YXMgZHVtYiwgdGhpcyB2 ZXJzaW9uIGF0IGxlYXN0IGNvbXBpbGVzIDopCgotLS0tLS0tLS0tLS0tLQoKRnJvbTogR3JlZyBL cm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4KU3ViamVjdDogW1BBVENI XSBORkM6IHBuNTMzOiBkb24ndCBzZW5kIFVTQiBkYXRhIG9mZiBvZiB0aGUgc3RhY2sKCkl0J3Mg YW1hemluZyB0aGF0IHRoaXMgZHJpdmVyIGV2ZXIgd29ya2VkLCBidXQgbm93IHRoYXQgeDg2IGRv ZXNuJ3QKYWxsb3cgVVNCIGRhdGEgdG8gYmUgc2VudCBvZmYgb2YgdGhlIHN0YWNrLCBpdCByZWFs bHkgZG9lcyBub3Qgd29yayBhdAphbGwuICBGaXggdGhpcyB1cCBieSBwcm9wZXJseSBhbGxvY2F0 aW5nIHRoZSBkYXRhIGZvciB0aGUgc21hbGwKImNvbW1hbmRzIiB0aGF0IGdldCBzZW50IHRvIHRo ZSBkZXZpY2UuCgpUaGUgVVNCIHN0YWNrIHdpbGwgZnJlZSB0aGUgYnVmZmVyIHdoZW4gdGhlIGRh dGEgaGFzIGJlZW4gdHJhbnNtaXR0ZWQsCnRoYXQgaXMgd2h5IHRoZXJlIGlzIG5vIGtmcmVlKCkg dG8gbWlycm9yIHRoZSBjYWxsIHRvIGttYWxsb2MoKS4KClJlcG9ydGVkLWJ5OiBDYXJsb3MgTWFu dWVsIFNhbnRvcyA8Y21tcHNhbnRvc0BnbWFpbC5jb20+CkNjOiBTYW11ZWwgT3J0aXogPHNhbWVv QGxpbnV4LmludGVsLmNvbT4KQ2M6IFN0ZXBoZW4gSGVtbWluZ2VyIDxzdGVwaGVuQG5ldHdvcmtw bHVtYmVyLm9yZz4KQ2M6IHN0YWJsZSA8c3RhYmxlQHZnZXIua2VybmVsLm9yZz4KU2lnbmVkLW9m Zi1ieTogR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4KLS0t ClRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmli ZSBsaW51eC11c2IiIGluCnRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5r ZXJuZWwub3JnCk1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcv bWFqb3Jkb21vLWluZm8uaHRtbAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3BuNTMzL3VzYi5j IGIvZHJpdmVycy9uZmMvcG41MzMvdXNiLmMKaW5kZXggZTE1M2U4YjY0YmI4Li5hMDU0MmY4NmVm Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3BuNTMzL3VzYi5jCisrKyBiL2RyaXZlcnMvbmZj L3BuNTMzL3VzYi5jCkBAIC0xNTAsMTAgKzE1MCwxNyBAQCBzdGF0aWMgaW50IHBuNTMzX3VzYl9z ZW5kX2FjayhzdHJ1Y3QgcG41MzMgKmRldiwgZ2ZwX3QgZmxhZ3MpCiAJc3RydWN0IHBuNTMzX3Vz Yl9waHkgKnBoeSA9IGRldi0+cGh5OwogCXN0YXRpYyBjb25zdCB1OCBhY2tbNl0gPSB7MHgwMCwg MHgwMCwgMHhmZiwgMHgwMCwgMHhmZiwgMHgwMH07CiAJLyogc3BlYyA3LjEuMS4zOiAgUHJlYW1i bGUsIFNvUEMgKDIpLCBBQ0sgQ29kZSAoMiksIFBvc3RhbWJsZSAqLworCWNoYXIgKmJ1ZmZlcjsK IAlpbnQgcmM7CiAKKwlidWZmZXIgPSBrbWFsbG9jKHNpemVvZihhY2spLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGJ1ZmZlciwgYWNrLCBz aXplb2YoYWNrKSk7CisKIAlwaHktPm91dF91cmItPnRyYW5zZmVyX2J1ZmZlciA9ICh1OCAqKWFj azsKIAlwaHktPm91dF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBzaXplb2YoYWNrKTsK KwlwaHktPm91dF91cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9GUkVFX0JVRkZFUjsKIAlyYyA9 IHVzYl9zdWJtaXRfdXJiKHBoeS0+b3V0X3VyYiwgZmxhZ3MpOwogCiAJcmV0dXJuIHJjOwpAQCAt MTcwLDYgKzE3Nyw3IEBAIHN0YXRpYyBpbnQgcG41MzNfdXNiX3NlbmRfZnJhbWUoc3RydWN0IHBu NTMzICpkZXYsCiAKIAlwaHktPm91dF91cmItPnRyYW5zZmVyX2J1ZmZlciA9IG91dC0+ZGF0YTsK IAlwaHktPm91dF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBvdXQtPmxlbjsKKwlwaHkt Pm91dF91cmItPnRyYW5zZmVyX2ZsYWdzICY9IH5VUkJfRlJFRV9CVUZGRVI7CiAKIAlwcmludF9o ZXhfZHVtcF9kZWJ1ZygiUE41MzMgVFg6ICIsIERVTVBfUFJFRklYX05PTkUsIDE2LCAxLAogCQkJ ICAgICBvdXQtPmRhdGEsIG91dC0+bGVuLCBmYWxzZSk7CkBAIC0zNzUsMTIgKzM4MywxOCBAQCBz dGF0aWMgaW50IHBuNTMzX2FjcjEyMl9wb3dlcm9uX3JkcihzdHJ1Y3QgcG41MzNfdXNiX3BoeSAq cGh5KQogCS8qIFBvd2VyIG9uIHRoIHJlYWRlciAoQ0NJRCBjbWQpICovCiAJdTggY21kWzEwXSA9 IHtQTjUzM19BQ1IxMjJfUENfVE9fUkRSX0lDQ1BPV0VST04sCiAJCSAgICAgIDAsIDAsIDAsIDAs IDAsIDAsIDMsIDAsIDB9OworCWNoYXIgKmJ1ZmZlcjsKIAlpbnQgcmM7CiAJdm9pZCAqY250eDsK IAlzdHJ1Y3QgcG41MzNfYWNyMTIyX3Bvd2Vyb25fcmRyX2FyZyBhcmc7CiAKIAlkZXZfZGJnKCZw aHktPnVkZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKKwlidWZmZXIgPSBrbWFsbG9jKHNp emVvZihjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07 CisJbWVtY3B5KGJ1ZmZlciwgY21kLCBzaXplb2YoY21kKSk7CisKIAlpbml0X2NvbXBsZXRpb24o JmFyZy5kb25lKTsKIAljbnR4ID0gcGh5LT5pbl91cmItPmNvbnRleHQ7ICAvKiBiYWNrdXAgY29u dGV4dCAqLwogCkBAIC0zODksNiArNDAzLDcgQEAgc3RhdGljIGludCBwbjUzM19hY3IxMjJfcG93 ZXJvbl9yZHIoc3RydWN0IHBuNTMzX3VzYl9waHkgKnBoeSkKIAogCXBoeS0+b3V0X3VyYi0+dHJh bnNmZXJfYnVmZmVyID0gY21kOwogCXBoeS0+b3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0 aCA9IHNpemVvZihjbWQpOworCXBoeS0+b3V0X3VyYi0+dHJhbnNmZXJfZmxhZ3MgJj0gflVSQl9G UkVFX0JVRkZFUjsKIAogCXByaW50X2hleF9kdW1wX2RlYnVnKCJBQ1IxMjIgVFg6ICIsIERVTVBf UFJFRklYX05PTkUsIDE2LCAxLAogCQkgICAgICAgY21kLCBzaXplb2YoY21kKSwgZmFsc2UpOwo=