mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
Merge android-5.4.12 (4bbb960) into msm-5.4
* refs/heads/tmp-4bbb960: Revert "BACKPORT: FROMLIST: Update Inline Encryption from v5 to v6 of patch series" GKI: enable CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y Linux 5.4.12 drm/i915/gen9: Clear residual context state on context switch netfilter: ipset: avoid null deref when IPSET_ATTR_LINENO is present netfilter: conntrack: dccp, sctp: handle null timeout argument netfilter: arp_tables: init netns pointer in xt_tgchk_param struct phy: cpcap-usb: Fix flakey host idling and enumerating of devices phy: cpcap-usb: Fix error path when no host driver is loaded USB: Fix: Don't skip endpoint descriptors with maxpacket=0 HID: hiddev: fix mess in hiddev_open() ath10k: fix memory leak rtl8xxxu: prevent leaking urb scsi: bfa: release allocated memory in case of error rpmsg: char: release allocated memory mwifiex: pcie: Fix memory leak in mwifiex_pcie_alloc_cmdrsp_buf mwifiex: fix possible heap overflow in mwifiex_process_country_ie() staging: vt6656: remove bool from vnt_radio_power_on ret um: Implement copy_thread_tls clone3: ensure copy_thread_tls is implemented xtensa: Implement copy_thread_tls riscv: Implement copy_thread_tls parisc: Implement copy_thread_tls arm: Implement copy_thread_tls arm64: Implement copy_thread_tls arm64: Move __ARCH_WANT_SYS_CLONE3 definition to uapi headers tty: always relink the port tty: link tty and port before configuring it as console iommu/vt-d: Fix adding non-PCI devices to Intel IOMMU serdev: Don't claim unsupported ACPI serial devices staging: rtl8188eu: Add device code for TP-Link TL-WN727N v5.21 staging: vt6656: limit reg output to block size staging: vt6656: correct return of vnt_init_registers. staging: comedi: adv_pci1710: fix AI channels 16-31 for PCI-1713 usb: musb: dma: Correct parameter passed to IRQ handler usb: musb: Disable pullup at init usb: musb: fix idling for suspend after disconnect interrupt USB: serial: option: add ZLP support for 0x1bc7/0x9010 USB-PD tcpm: bad warning+size, PPS adapters usb: ohci-da8xx: ensure error return on variable error is set usb: cdns3: should not use the same dev_id for shared interrupt handler staging: vt6656: Fix non zero logical return of, usb_control_msg staging: vt6656: set usb_set_intfdata on driver fail. pstore/ram: Regularize prz label allocation lifetime gpiolib: acpi: Add honor_wakeup module-option + quirk mechanism gpiolib: acpi: Turn dmi_system_id table into a generic quirk table can: can_dropped_invalid_skb(): ensure an initialized headroom in outgoing CAN sk_buffs can: mscan: mscan_rx_poll(): fix rx path lockup when returning from polling to irq mode can: tcan4x5x: tcan4x5x_can_probe(): get the device out of standby before register access can: gs_usb: gs_usb_probe(): use descriptors of current altsetting can: kvaser_usb: fix interface sanity check IB/hfi1: Adjust flow PSN with the correct resync_psn drm/i915/gt: Mark up virtual engine uabi_instance drm/i915: Add Wa_1407352427:icl,ehl drm/dp_mst: correct the shifting in DP_REMOTE_I2C_READ drm/fb-helper: Round up bits_per_pixel if possible drm/sun4i: tcon: Set RGB DCLK min. divider based on hardware model Revert "drm/amdgpu: Set no-retry as default." drm/i915: Add Wa_1408615072 and Wa_1407596294 to icl,ehl Input: input_event - fix struct padding on sparc64 Input: add safety guards to input_set_keycode() HID: hid-input: clear unmapped usages HID: hidraw: Fix returning EPOLLOUT from hidraw_poll HID: uhid: Fix returning EPOLLOUT from uhid_char_poll HID: Fix slab-out-of-bounds read in hid_field_extract tracing: Change offset type to s32 in preempt/irq tracepoints tracing: Have stack tracer compile when MCOUNT_INSN_SIZE is not defined kernel/trace: Fix do not unregister tracepoints when register sched_migrate_task fail rtc: sun6i: Add support for RTC clocks on R40 tpm: Handle negative priv->response_len in tpm_common_read() tpm: Revert "tpm_tis_core: Turn on the TPM before probing IRQ's" tpm: Revert "tpm_tis_core: Set TPM_CHIP_FLAG_IRQ before probing for interrupts" tpm: Revert "tpm_tis: reserve chip for duration of tpm_tis_core_init" ALSA: hda/realtek - Add quirk for the bass speaker on Lenovo Yoga X1 7th gen ALSA: hda/realtek - Set EAPD control to default for ALC222 ALSA: hda/realtek - Add new codec supported for ALCS1200A ALSA: usb-audio: Apply the sample rate quirk for Bose Companion 5 usb: chipidea: host: Disable port power only if previously enabled powercap: intel_rapl: add NULL pointer check to rapl_mmio_cpu_online() i2c: fix bus recovery stop mode timing chardev: Avoid potential use-after-free in 'chrdev_open()' UPSTREAM: vhost, kcov: collect coverage from vhost_worker UPSTREAM: usb, kcov: collect coverage from hub_event ANDROID: update kernel ABI for kcov changes UPSTREAM: kcov: remote coverage support ANDROID: gki_defconfig: Enable blk-crypto fallback BACKPORT: FROMLIST: Update Inline Encryption from v5 to v6 of patch series ANDROID: tty: serdev: Fix broken serial console input ANDROID: reset: hisi-reboot: adb reboot bootloader Change-Id: I6e1ce85864cd7c26ad17d2d6bc12232433d50bde Signed-off-by: Blagovest Kolenichev <[email protected]>
This commit is contained in:
commit
7855a48fa7
106 changed files with 26433 additions and 25687 deletions
|
|
@ -288,6 +288,12 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
|
|||
offset = report->size;
|
||||
report->size += parser->global.report_size * parser->global.report_count;
|
||||
|
||||
/* Total size check: Allow for possible report index byte */
|
||||
if (report->size > (HID_MAX_BUFFER_SIZE - 1) << 3) {
|
||||
hid_err(parser->device, "report is too long\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!parser->local.usage_index) /* Ignore padding fields */
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -1132,9 +1132,15 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
|
|||
}
|
||||
|
||||
mapped:
|
||||
if (device->driver->input_mapped && device->driver->input_mapped(device,
|
||||
hidinput, field, usage, &bit, &max) < 0)
|
||||
goto ignore;
|
||||
if (device->driver->input_mapped &&
|
||||
device->driver->input_mapped(device, hidinput, field, usage,
|
||||
&bit, &max) < 0) {
|
||||
/*
|
||||
* The driver indicated that no further generic handling
|
||||
* of the usage is desired.
|
||||
*/
|
||||
return;
|
||||
}
|
||||
|
||||
set_bit(usage->type, input->evbit);
|
||||
|
||||
|
|
@ -1215,9 +1221,11 @@ mapped:
|
|||
set_bit(MSC_SCAN, input->mscbit);
|
||||
}
|
||||
|
||||
ignore:
|
||||
return;
|
||||
|
||||
ignore:
|
||||
usage->type = 0;
|
||||
usage->code = 0;
|
||||
}
|
||||
|
||||
static void hidinput_handle_scroll(struct hid_usage *usage,
|
||||
|
|
|
|||
|
|
@ -252,10 +252,10 @@ static __poll_t hidraw_poll(struct file *file, poll_table *wait)
|
|||
|
||||
poll_wait(file, &list->hidraw->wait, wait);
|
||||
if (list->head != list->tail)
|
||||
return EPOLLIN | EPOLLRDNORM | EPOLLOUT;
|
||||
return EPOLLIN | EPOLLRDNORM;
|
||||
if (!list->hidraw->exist)
|
||||
return EPOLLERR | EPOLLHUP;
|
||||
return 0;
|
||||
return EPOLLOUT | EPOLLWRNORM;
|
||||
}
|
||||
|
||||
static int hidraw_open(struct inode *inode, struct file *file)
|
||||
|
|
|
|||
|
|
@ -772,7 +772,7 @@ static __poll_t uhid_char_poll(struct file *file, poll_table *wait)
|
|||
if (uhid->head != uhid->tail)
|
||||
return EPOLLIN | EPOLLRDNORM;
|
||||
|
||||
return 0;
|
||||
return EPOLLOUT | EPOLLWRNORM;
|
||||
}
|
||||
|
||||
static const struct file_operations uhid_fops = {
|
||||
|
|
|
|||
|
|
@ -241,12 +241,51 @@ static int hiddev_release(struct inode * inode, struct file * file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int __hiddev_open(struct hiddev *hiddev, struct file *file)
|
||||
{
|
||||
struct hiddev_list *list;
|
||||
int error;
|
||||
|
||||
lockdep_assert_held(&hiddev->existancelock);
|
||||
|
||||
list = vzalloc(sizeof(*list));
|
||||
if (!list)
|
||||
return -ENOMEM;
|
||||
|
||||
mutex_init(&list->thread_lock);
|
||||
list->hiddev = hiddev;
|
||||
|
||||
if (!hiddev->open++) {
|
||||
error = hid_hw_power(hiddev->hid, PM_HINT_FULLON);
|
||||
if (error < 0)
|
||||
goto err_drop_count;
|
||||
|
||||
error = hid_hw_open(hiddev->hid);
|
||||
if (error < 0)
|
||||
goto err_normal_power;
|
||||
}
|
||||
|
||||
spin_lock_irq(&hiddev->list_lock);
|
||||
list_add_tail(&list->node, &hiddev->list);
|
||||
spin_unlock_irq(&hiddev->list_lock);
|
||||
|
||||
file->private_data = list;
|
||||
|
||||
return 0;
|
||||
|
||||
err_normal_power:
|
||||
hid_hw_power(hiddev->hid, PM_HINT_NORMAL);
|
||||
err_drop_count:
|
||||
hiddev->open--;
|
||||
vfree(list);
|
||||
return error;
|
||||
}
|
||||
|
||||
/*
|
||||
* open file op
|
||||
*/
|
||||
static int hiddev_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct hiddev_list *list;
|
||||
struct usb_interface *intf;
|
||||
struct hid_device *hid;
|
||||
struct hiddev *hiddev;
|
||||
|
|
@ -255,66 +294,14 @@ static int hiddev_open(struct inode *inode, struct file *file)
|
|||
intf = usbhid_find_interface(iminor(inode));
|
||||
if (!intf)
|
||||
return -ENODEV;
|
||||
|
||||
hid = usb_get_intfdata(intf);
|
||||
hiddev = hid->hiddev;
|
||||
|
||||
if (!(list = vzalloc(sizeof(struct hiddev_list))))
|
||||
return -ENOMEM;
|
||||
mutex_init(&list->thread_lock);
|
||||
list->hiddev = hiddev;
|
||||
file->private_data = list;
|
||||
|
||||
/*
|
||||
* no need for locking because the USB major number
|
||||
* is shared which usbcore guards against disconnect
|
||||
*/
|
||||
if (list->hiddev->exist) {
|
||||
if (!list->hiddev->open++) {
|
||||
res = hid_hw_open(hiddev->hid);
|
||||
if (res < 0)
|
||||
goto bail;
|
||||
}
|
||||
} else {
|
||||
res = -ENODEV;
|
||||
goto bail;
|
||||
}
|
||||
|
||||
spin_lock_irq(&list->hiddev->list_lock);
|
||||
list_add_tail(&list->node, &hiddev->list);
|
||||
spin_unlock_irq(&list->hiddev->list_lock);
|
||||
|
||||
mutex_lock(&hiddev->existancelock);
|
||||
/*
|
||||
* recheck exist with existance lock held to
|
||||
* avoid opening a disconnected device
|
||||
*/
|
||||
if (!list->hiddev->exist) {
|
||||
res = -ENODEV;
|
||||
goto bail_unlock;
|
||||
}
|
||||
if (!list->hiddev->open++)
|
||||
if (list->hiddev->exist) {
|
||||
struct hid_device *hid = hiddev->hid;
|
||||
res = hid_hw_power(hid, PM_HINT_FULLON);
|
||||
if (res < 0)
|
||||
goto bail_unlock;
|
||||
res = hid_hw_open(hid);
|
||||
if (res < 0)
|
||||
goto bail_normal_power;
|
||||
}
|
||||
mutex_unlock(&hiddev->existancelock);
|
||||
return 0;
|
||||
bail_normal_power:
|
||||
hid_hw_power(hid, PM_HINT_NORMAL);
|
||||
bail_unlock:
|
||||
res = hiddev->exist ? __hiddev_open(hiddev, file) : -ENODEV;
|
||||
mutex_unlock(&hiddev->existancelock);
|
||||
|
||||
spin_lock_irq(&list->hiddev->list_lock);
|
||||
list_del(&list->node);
|
||||
spin_unlock_irq(&list->hiddev->list_lock);
|
||||
bail:
|
||||
file->private_data = NULL;
|
||||
vfree(list);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue