Linux 5.19.16
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.19.16 kernel.
All users of the 5.19 kernel series must upgrade.
The updated 5.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.19.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/powerpc/include/asm/paca.h | 1 arch/powerpc/include/asm/rtas.h | 1 arch/powerpc/kernel/paca.c | 32 ---------- arch/powerpc/kernel/rtas.c | 54 ------------------ arch/powerpc/sysdev/xics/ics-rtas.c | 22 +++---- drivers/char/mem.c | 4 - drivers/char/random.c | 25 +++++--- drivers/crypto/qat/qat_common/qat_asym_algs.c | 12 ++-- drivers/input/joystick/xpad.c | 20 ++++++ drivers/misc/pci_endpoint_test.c | 34 +++++++++-- drivers/net/wireless/mac80211_hwsim.c | 2 drivers/nvme/host/pci.c | 3 - drivers/scsi/stex.c | 17 +++-- drivers/usb/dwc3/core.c | 50 ---------------- drivers/usb/dwc3/drd.c | 50 ++++++++++++++++ drivers/usb/serial/qcserial.c | 1 fs/ceph/file.c | 10 ++- fs/nilfs2/inode.c | 19 ++++++ fs/nilfs2/segment.c | 21 ++++--- include/scsi/scsi_cmnd.h | 2 net/mac80211/ieee80211_i.h | 8 ++ net/mac80211/rx.c | 12 ++-- net/mac80211/util.c | 34 ++++++----- net/mctp/af_mctp.c | 23 +++++-- net/mctp/route.c | 10 +-- net/wireless/scan.c | 77 ++++++++++++++++---------- security/integrity/platform_certs/load_uefi.c | 2 sound/pci/hda/hda_intel.c | 3 - sound/pci/hda/patch_realtek.c | 18 ++++++ 30 files changed, 313 insertions(+), 256 deletions(-)
Andy Shevchenko (2):
Revert "USB: fixup for merge issue with "usb: dwc3: Don't switch OTG -> peripheral if extcon is present""
Revert "usb: dwc3: Don't switch OTG -> peripheral if extcon is present"Cameron Gutman (1):
Input: xpad - fix wireless 360 controller breaking after suspend
Frank Wunderlich (1):
USB: serial: qcserial: add new usb-id for Dell branded EM7455
Giovanni Cabiddu (1):
Revert "crypto: qat - reduce size of mapped region"
Greg Kroah-Hartman (1):
Linux 5.19.16
Hu Weiwen (1):
ceph: don't truncate file in atomic_open
Jason A. Donenfeld (4):
random: restore O_NONBLOCK support
random: clamp credited irq bits to maximum mixed
random: avoid reading two cache lines on irq randomness
random: use expired timer rather than wq for mixing fast pool
Jeremy Kerr (1):
mctp: prevent double key removal and unref
Johannes Berg (9):
wifi: cfg80211: fix u8 overflow in cfg80211_update_notlisted_nontrans()
wifi: cfg80211/mac80211: reject bad MBSSID elements
wifi: mac80211: fix MBSSID parsing use-after-free
wifi: cfg80211: ensure length byte is present before access
wifi: cfg80211: fix BSS refcounting bugs
wifi: cfg80211: avoid nontransmitted BSS list corruption
wifi: mac80211_hwsim: avoid mac80211 warning on bad rate
wifi: mac80211: fix crash in beacon protection for P2P-device
wifi: cfg80211: update hidden BSSes to avoid WARN_ON
Linus Torvalds (1):
scsi: stex: Properly zero out the passthrough command structure
Nathan Lynch (1):
Revert "powerpc/rtas: Implement reentrant rtas call"
Orlando Chamberlain (1):
efi: Correct Macmini DMI match in uefi cert quirk
Pavel Rojtberg (1):
Input: xpad - add supported devices as contributed on github
Rishabh Bhatnagar (1):
nvme-pci: set min_align_mask before calculating max_hw_sectors
Ryusuke Konishi (4):
nilfs2: fix NULL pointer dereference at nilfs_bmap_lookup_at_level()
nilfs2: fix use-after-free bug of struct nilfs_root
nilfs2: fix leak of nilfs_root in case of writer thread creation failure
nilfs2: replace WARN_ONs by nilfs_error for checkpoint acquisition failure
Shunsuke Mie (2):
misc: pci_endpoint_test: Aggregate params checking for xfer
misc: pci_endpoint_test: Fix pci_endpoint_test_{copy,write,read}() panic
Takashi Iwai (2):
ALSA: hda: Fix position reporting on Poulsbo
ALSA: hda/realtek: Add quirk for HP Zbook Firefly 14 G9 model
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 19 -SUBLEVEL = 15 +SUBLEVEL = 16 EXTRAVERSION = NAME = Superb Owl
arch/powerpc/include/asm/paca.h +0 -1
@@ -263,7 +263,6 @@ struct paca_struct {u64 l1d_flush_size;#endif #ifdef CONFIG_PPC_PSERIES -struct rtas_args *rtas_args_reentrant;u8 *mce_data_buf;/* buffer to hold per cpu rtas errlog */ #endif /* CONFIG_PPC_PSERIES */
arch/powerpc/include/asm/rtas.h +0 -1
@@ -240,7 +240,6 @@ extern struct rtas_t rtas;extern int rtas_token (const char *service);extern int rtas_service_present (const char *service);extern int rtas_call (int token,int ,int ,int *, ...); -int rtas_call_reentrant (int token,int nargs,int nret,int *outputs, ...);void rtas_call_unlocked (struct rtas_args *args,int token,int nargs,int nret, ...);extern void __noreturn rtas_restart (char *cmd);
arch/powerpc/kernel/paca.c +0 -32
@@ -16,7 +16,6 @@#include <asm/kexec.h> #include <asm/svm.h> #include <asm/ultravisor.h> -#include <asm/rtas.h> #include "setup.h"
@@ -170,30 +169,6 @@ static struct slb_shadow * __init new_slb_shadow(int cpu, unsigned long limit) }#endif /* CONFIG_PPC_64S_HASH_MMU */ -#ifdef CONFIG_PPC_PSERIES -/** -* new_rtas_args() - Allocates rtas args -* @cpu: CPU number -* @limit: Memory limit for this allocation -* -* Allocates a struct rtas_args and return it's pointer, -* if not in Hypervisor mode -* -* Return: Pointer to allocated rtas_args -* NULL if CPU in Hypervisor Mode -*/ -static struct rtas_args *__init new_rtas_args (int cpu,unsigned long limit) -{ - limit = min_t(unsigned long, limit, RTAS_INSTANTIATE_MAX); - -if (early_cpu_has_feature (CPU_FTR_HVMODE )) -return NULL ; - -return alloc_paca_data (sizeof (struct rtas_args ),L1_CACHE_BYTES , - limit, cpu); -} -#endif /* CONFIG_PPC_PSERIES */ -/* The Paca is an array with one entry per processor. Each contains an * lppaca, which contains the information shared between the * hypervisor and Linux.
@@ -232,10 +207,6 @@ void __init initialise_paca(struct paca_struct *new_paca, int cpu)/* For now -- if we have threads this will be adjusted later */ new_paca->tcd_ptr = &new_paca->tcd;#endif - -#ifdef CONFIG_PPC_PSERIES - new_paca->rtas_args_reentrant =NULL ; -#endif }/* Put the paca pointer into r13 and SPRG_PACA */
@@ -307,9 +278,6 @@ void __init allocate_paca(int cpu)#endif #ifdef CONFIG_PPC_64S_HASH_MMU paca->slb_shadow_ptr =new_slb_shadow (cpu, limit); -#endif -#ifdef CONFIG_PPC_PSERIES - paca->rtas_args_reentrant =new_rtas_args (cpu, limit);#endif paca_struct_size +=sizeof (struct paca_struct ); }
arch/powerpc/kernel/rtas.c +0 -54
66 lines not on this page · raw message
arch/powerpc/sysdev/xics/ics-rtas.c +11 -11
@@ -36,8 +36,8 @@ static void ics_rtas_unmask_irq(struct irq_data *d) server =xics_get_irq_server (d->irq,irq_data_get_affinity_mask (d),0 ); - call_status =rtas_call_reentrant (ibm_set_xive,3 ,1 ,NULL , hw_irq, - server,DEFAULT_PRIORITY ); + call_status =rtas_call (ibm_set_xive,3 ,1 ,NULL , hw_irq, server, +DEFAULT_PRIORITY );if (call_status !=0 ) { printk(KERN_ERR "%s: ibm_set_xive irq %u server %x returned %d\n",
@@ -46,7 +46,7 @@ static void ics_rtas_unmask_irq(struct irq_data *d) }/* Now unmask the interrupt (often a no-op) */ - call_status =rtas_call_reentrant (ibm_int_on,1 ,1 ,NULL , hw_irq); + call_status =rtas_call (ibm_int_on,1 ,1 ,NULL , hw_irq);if (call_status !=0 ) {printk (KERN_ERR "%s: ibm_int_on irq=%u returned %d\n" , __func__, hw_irq, call_status);
@@ -68,7 +68,7 @@ static void ics_rtas_mask_real_irq(unsigned int hw_irq)if (hw_irq ==XICS_IPI )return ; - call_status =rtas_call_reentrant (ibm_int_off,1 ,1 ,NULL , hw_irq); + call_status =rtas_call (ibm_int_off,1 ,1 ,NULL , hw_irq);if (call_status !=0 ) {printk (KERN_ERR "%s: ibm_int_off irq=%u returned %d\n" , __func__, hw_irq, call_status);
@@ -76,8 +76,8 @@ static void ics_rtas_mask_real_irq(unsigned int hw_irq) }/* Have to set XIVE to 0xff to be able to remove a slot */ - call_status =rtas_call_reentrant (ibm_set_xive,3 ,1 ,NULL , hw_irq, - xics_default_server,0xff ); + call_status =rtas_call (ibm_set_xive,3 ,1 ,NULL , hw_irq, + xics_default_server,0xff );if (call_status !=0 ) {printk (KERN_ERR "%s: ibm_set_xive(0xff) irq=%u returned %d\n" , __func__, hw_irq, call_status);
@@ -108,7 +108,7 @@ static int ics_rtas_set_affinity(struct irq_data *d,if (hw_irq ==XICS_IPI || hw_irq ==XICS_IRQ_SPURIOUS )return -1 ; - status =rtas_call_reentrant (ibm_get_xive,1 ,3 , xics_status, hw_irq); + status =rtas_call (ibm_get_xive,1 ,3 , xics_status, hw_irq);if (status) { printk(KERN_ERR "%s: ibm,get-xive irq=%u returns %d\n",
@@ -126,8 +126,8 @@ static int ics_rtas_set_affinity(struct irq_data *d,pr_debug ("%s: irq %d [hw 0x%x] server: 0x%x\n" , __func__, d->irq, hw_irq, irq_server); - status =rtas_call_reentrant (ibm_set_xive,3 ,1 ,NULL , - hw_irq, irq_server, xics_status[1 ]); + status =rtas_call (ibm_set_xive,3 ,1 ,NULL , + hw_irq, irq_server, xics_status[1 ]);if (status) { printk(KERN_ERR "%s: ibm,set-xive irq=%u returns %d\n",
@@ -158,7 +158,7 @@ static int ics_rtas_check(struct ics *ics, unsigned int hw_irq)return -EINVAL ;/* Check if RTAS knows about this interrupt */ - rc =rtas_call_reentrant (ibm_get_xive,1 ,3 , status, hw_irq); + rc =rtas_call (ibm_get_xive,1 ,3 , status, hw_irq);if (rc)return -ENXIO ;
@@ -174,7 +174,7 @@ static long ics_rtas_get_server(struct ics *ics, unsigned long vec) {int rc, status[2 ]; - rc =rtas_call_reentrant (ibm_get_xive,1 ,3 , status, vec); + rc =rtas_call (ibm_get_xive,1 ,3 , status, vec);if (rc)return -1 ;return status[0 ];
drivers/char/mem.c +2 -2
@@ -706,8 +706,8 @@ static const struct memdev { #endif [5] = { "zero", 0666, &zero_fops, FMODE_NOWAIT }, [7] = { "full", 0666, &full_fops, 0 }, - [8] = { "random", 0666, &random_fops, 0 }, - [9 ] = {"urandom" ,0666 , &urandom_fops,0 }, + [8] = { "random", 0666, &random_fops, FMODE_NOWAIT }, + [9 ] = {"urandom" ,0666 , &urandom_fops,FMODE_NOWAIT }, #ifdef CONFIG_PRINTK [11] = { "kmsg", 0644, &kmsg_fops, 0 }, #endif
drivers/char/random.c +17 -8
@@ -903,20 +903,23 @@ EXPORT_SYMBOL_GPL(unregister_random_vmfork_notifier);#endif struct fast_pool { -struct work_struct mix;unsigned long pool[4 ];unsigned long last;unsigned int count; +struct timer_list mix; }; +static void mix_interrupt_randomness (struct timer_list *work); + static DEFINE_PER_CPU(struct fast_pool, irq_randomness) = { #ifdef CONFIG_64BIT #define FASTMIX_PERM SIPHASH_PERMUTATION - .pool = { SIPHASH_CONST_0, SIPHASH_CONST_1, SIPHASH_CONST_2, SIPHASH_CONST_3 } + .pool = { SIPHASH_CONST_0, SIPHASH_CONST_1, SIPHASH_CONST_2, SIPHASH_CONST_3 }, #else #define FASTMIX_PERM HSIPHASH_PERMUTATION - .pool = { HSIPHASH_CONST_0, HSIPHASH_CONST_1, HSIPHASH_CONST_2, HSIPHASH_CONST_3 } + .pool = { HSIPHASH_CONST_0, HSIPHASH_CONST_1, HSIPHASH_CONST_2, HSIPHASH_CONST_3 }, #endif + .mix = __TIMER_INITIALIZER(mix_interrupt_randomness, 0) }; /*
@@ -958,7 +961,7 @@ int __cold random_online_cpu(unsigned int cpu) }#endif -static void mix_interrupt_randomness (struct work_struct *work) +static void mix_interrupt_randomness (struct timer_list *work) { struct fast_pool *fast_pool = container_of(work, struct fast_pool, mix);/*
@@ -989,7 +992,7 @@ static void mix_interrupt_randomness(struct work_struct *work)local_irq_enable ();mix_pool_bytes (pool,sizeof (pool)); -credit_init_bits (max (1u , (count &U16_MAX ) /64 )); + credit_init_bits(clamp_t(unsigned int, (count & U16_MAX) / 64, 1, sizeof(pool) * 8));memzero_explicit (pool,sizeof (pool)); }
@@ -1012,10 +1015,11 @@ void add_interrupt_randomness(int irq)if (new_count <1024 && !time_is_before_jiffies (fast_pool->last +HZ ))return ; -if (unlikely (!fast_pool->mix.func)) -INIT_WORK (&fast_pool->mix, mix_interrupt_randomness); fast_pool->count |=MIX_INFLIGHT ; -queue_work_on (raw_smp_processor_id (), system_highpri_wq, &fast_pool->mix); +if (!timer_pending (&fast_pool->mix)) { + fast_pool->mix.expires = jiffies; +add_timer_on (&fast_pool->mix,raw_smp_processor_id ()); + } }EXPORT_SYMBOL_GPL (add_interrupt_randomness);
@@ -1330,6 +1334,11 @@ static ssize_t random_read_iter(struct kiocb *kiocb, struct iov_iter *iter) {int ret; +if (!crng_ready () && + ((kiocb->ki_flags & (IOCB_NOWAIT |IOCB_NOIO )) || + (kiocb->ki_filp->f_flags &O_NONBLOCK ))) +return -EAGAIN ; + ret =wait_for_random_bytes ();if (ret !=0 )return ret;
drivers/crypto/qat/qat_common/qat_asym_algs.c +6 -6
@@ -333,13 +333,13 @@ static int qat_dh_compute_value(struct kpp_request *req) qat_req->out.dh.out_tab[1 ] =0 ;/* Mapping in.in.b or in.in_g2.xa is the same */ qat_req->phy_in =dma_map_single (dev, &qat_req->in.dh.in.b, -sizeof (qat_req->in.dh.in.b), +sizeof (struct qat_dh_input_params ),DMA_TO_DEVICE );if (unlikely (dma_mapping_error (dev, qat_req->phy_in))) goto unmap_dst; qat_req->phy_out =dma_map_single (dev, &qat_req->out.dh.r, -sizeof (qat_req->out.dh.r), +sizeof (struct qat_dh_output_params ),DMA_TO_DEVICE );if (unlikely (dma_mapping_error (dev, qat_req->phy_out))) goto unmap_in_params;
@@ -730,13 +730,13 @@ static int qat_rsa_enc(struct akcipher_request *req) qat_req->in.rsa.in_tab[3 ] =0 ; qat_req->out.rsa.out_tab[1 ] =0 ; qat_req->phy_in =dma_map_single (dev, &qat_req->in.rsa.enc.m, -sizeof (qat_req->in.rsa.enc.m), +sizeof (struct qat_rsa_input_params ),DMA_TO_DEVICE );if (unlikely (dma_mapping_error (dev, qat_req->phy_in))) goto unmap_dst; qat_req->phy_out =dma_map_single (dev, &qat_req->out.rsa.enc.c, -sizeof (qat_req->out.rsa.enc.c), +sizeof (struct qat_rsa_output_params ),DMA_TO_DEVICE );if (unlikely (dma_mapping_error (dev, qat_req->phy_out))) goto unmap_in_params;
@@ -876,13 +876,13 @@ static int qat_rsa_dec(struct akcipher_request *req) qat_req->in.rsa.in_tab[3 ] =0 ; qat_req->out.rsa.out_tab[1 ] =0 ; qat_req->phy_in =dma_map_single (dev, &qat_req->in.rsa.dec.c, -sizeof (qat_req->in.rsa.dec.c), +sizeof (struct qat_rsa_input_params ),DMA_TO_DEVICE );if (unlikely (dma_mapping_error (dev, qat_req->phy_in))) goto unmap_dst; qat_req->phy_out =dma_map_single (dev, &qat_req->out.rsa.dec.m, -sizeof (qat_req->out.rsa.dec.m), +sizeof (struct qat_rsa_output_params ),DMA_TO_DEVICE );if (unlikely (dma_mapping_error (dev, qat_req->phy_out))) goto unmap_in_params;
drivers/input/joystick/xpad.c +19 -1
@@ -113,6 +113,8 @@ static const struct xpad_device {u8 xtype; } xpad_device[] = { { 0x0079, 0x18d4, "GPD Win 2 X-Box Controller", 0, XTYPE_XBOX360 }, + { 0x03eb, 0xff01, "Wooting One (Legacy)", 0, XTYPE_XBOX360 }, + { 0x03eb, 0xff02, "Wooting Two (Legacy)", 0, XTYPE_XBOX360 }, { 0x044f, 0x0f00, "Thrustmaster Wheel", 0, XTYPE_XBOX }, { 0x044f, 0x0f03, "Thrustmaster Wheel", 0, XTYPE_XBOX }, { 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX },
@@ -244,6 +246,7 @@ static const struct xpad_device { { 0x0f0d, 0x0063, "Hori Real Arcade Pro Hayabusa (USA) Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, { 0x0f0d, 0x0067, "HORIPAD ONE", 0, XTYPE_XBOXONE }, { 0x0f0d, 0x0078, "Hori Real Arcade Pro V Kai Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, + { 0x0f0d, 0x00c5, "Hori Fighting Commander ONE", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, { 0x0f30, 0x010b, "Philips Recoil", 0, XTYPE_XBOX }, { 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX }, { 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX },
@@ -260,6 +263,7 @@ static const struct xpad_device { { 0x1430, 0x8888, "TX6500+ Dance Pad (first generation)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX }, { 0x1430, 0xf801, "RedOctane Controller", 0, XTYPE_XBOX360 }, { 0x146b, 0x0601, "BigBen Interactive XBOX 360 Controller", 0, XTYPE_XBOX360 }, + { 0x146b, 0x0604, "Bigben Interactive DAIJA Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, { 0x1532, 0x0037, "Razer Sabertooth", 0, XTYPE_XBOX360 }, { 0x1532, 0x0a00, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, { 0x1532, 0x0a03, "Razer Wildcat", 0, XTYPE_XBOXONE },
@@ -325,6 +329,7 @@ static const struct xpad_device { { 0x24c6, 0x5502, "Hori Fighting Stick VX Alt", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, { 0x24c6, 0x5503, "Hori Fighting Edge", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, { 0x24c6, 0x5506, "Hori SOULCALIBUR V Stick", 0, XTYPE_XBOX360 }, + { 0x24c6, 0x5510, "Hori Fighting Commander ONE (Xbox 360/PC Mode)", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, { 0x24c6, 0x550d, "Hori GEM Xbox controller", 0, XTYPE_XBOX360 }, { 0x24c6, 0x550e, "Hori Real Arcade Pro V Kai 360", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, { 0x24c6, 0x551a, "PowerA FUSION Pro Controller", 0, XTYPE_XBOXONE },
@@ -334,6 +339,14 @@ static const struct xpad_device { { 0x24c6, 0x5b03, "Thrustmaster Ferrari 458 Racing Wheel", 0, XTYPE_XBOX360 }, { 0x24c6, 0x5d04, "Razer Sabertooth", 0, XTYPE_XBOX360 }, { 0x24c6, 0xfafe, "Rock Candy Gamepad for Xbox 360", 0, XTYPE_XBOX360 }, + { 0x2563, 0x058d, "OneXPlayer Gamepad", 0, XTYPE_XBOX360 }, + { 0x2dc8, 0x2000, "8BitDo Pro 2 Wired Controller fox Xbox", 0, XTYPE_XBOXONE }, + { 0x31e3, 0x1100, "Wooting One", 0, XTYPE_XBOX360 }, + { 0x31e3, 0x1200, "Wooting Two", 0, XTYPE_XBOX360 }, + { 0x31e3, 0x1210, "Wooting Lekker", 0, XTYPE_XBOX360 }, + { 0x31e3, 0x1220, "Wooting Two HE", 0, XTYPE_XBOX360 }, + { 0x31e3, 0x1300, "Wooting 60HE (AVR)", 0, XTYPE_XBOX360 }, + { 0x31e3, 0x1310, "Wooting 60HE (ARM)", 0, XTYPE_XBOX360 }, { 0x3285, 0x0607, "Nacon GC-100", 0, XTYPE_XBOX360 }, { 0x3767, 0x0101, "Fanatec Speedster 3 Forceshock Wheel", 0, XTYPE_XBOX }, { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
@@ -419,6 +432,7 @@ static const signed short xpad_abs_triggers[] = {static const struct usb_device_id xpad_table[] = { {USB_INTERFACE_INFO ('X' ,'B' ,0 ) },/* X-Box USB-IF not approved class */ XPAD_XBOX360_VENDOR (0x0079 ),/* GPD Win 2 Controller */ +XPAD_XBOX360_VENDOR (0x03eb ),/* Wooting Keyboards (Legacy) */ XPAD_XBOX360_VENDOR (0x044f ),/* Thrustmaster X-Box 360 controllers */ XPAD_XBOX360_VENDOR (0x045e ),/* Microsoft X-Box 360 controllers */ XPAD_XBOXONE_VENDOR (0x045e ),/* Microsoft X-Box One controllers */
@@ -429,6 +443,7 @@ static const struct usb_device_id xpad_table[] = { { USB_DEVICE(0x0738, 0x4540) }, /* Mad Catz Beat Pad */XPAD_XBOXONE_VENDOR (0x0738 ),/* Mad Catz FightStick TE 2 */ XPAD_XBOX360_VENDOR (0x07ff ),/* Mad Catz GamePad */ +XPAD_XBOX360_VENDOR (0x0c12 ),/* Zeroplus X-Box 360 controllers */ XPAD_XBOX360_VENDOR (0x0e6f ),/* 0x0e6f X-Box 360 controllers */ XPAD_XBOXONE_VENDOR (0x0e6f ),/* 0x0e6f X-Box One controllers */ XPAD_XBOX360_VENDOR(0x0f0d), /* Hori Controllers */
@@ -450,8 +465,12 @@ static const struct usb_device_id xpad_table[] = {XPAD_XBOXONE_VENDOR (0x20d6 ),/* PowerA Controllers */ XPAD_XBOX360_VENDOR (0x24c6 ),/* PowerA Controllers */ XPAD_XBOXONE_VENDOR (0x24c6 ),/* PowerA Controllers */ +XPAD_XBOX360_VENDOR (0x2563 ),/* OneXPlayer Gamepad */ +XPAD_XBOX360_VENDOR (0x260d ),/* Dareu H101 */ +XPAD_XBOXONE_VENDOR (0x2dc8 ),/* 8BitDo Pro 2 Wired Controller for Xbox */ XPAD_XBOXONE_VENDOR (0x2e24 ),/* Hyperkin Duke X-Box One pad */ XPAD_XBOX360_VENDOR (0x2f24 ),/* GameSir Controllers */ +XPAD_XBOX360_VENDOR (0x31e3 ),/* Wooting Keyboards */ XPAD_XBOX360_VENDOR(0x3285), /* Nacon GC-100 */ { } };
@@ -1972,7 +1991,6 @@ static struct usb_driver xpad_driver = { .disconnect = xpad_disconnect, .suspend = xpad_suspend, .resume = xpad_resume, - .reset_resume = xpad_resume, .id_table = xpad_table, };
drivers/misc/pci_endpoint_test.c +28 -6
@@ -332,6 +332,22 @@ static bool pci_endpoint_test_msi_irq(struct pci_endpoint_test *test,return false; } +static int pci_endpoint_test_validate_xfer_params (struct device *dev, +struct pci_endpoint_test_xfer_param *param,size_t alignment) +{ +if (!param->size) { +dev_dbg (dev,"Data size is zero\n" ); +return -EINVAL ; + } + +if (param->size >SIZE_MAX - alignment) { +dev_dbg (dev,"Maximum transfer data size exceeded\n" ); +return -EINVAL ; + } + +return 0 ; +} +static bool pci_endpoint_test_copy (struct pci_endpoint_test *test,unsigned long arg) {
@@ -363,9 +379,11 @@ static bool pci_endpoint_test_copy(struct pci_endpoint_test *test,return false; } + err =pci_endpoint_test_validate_xfer_params (dev, ¶m, alignment); +if (err) +return false; + size = param.size; -if (size >SIZE_MAX - alignment) - goto err; use_dma = !!(param.flags &PCITEST_FLAGS_USE_DMA );if (use_dma)
@@ -497,9 +515,11 @@ static bool pci_endpoint_test_write(struct pci_endpoint_test *test,return false; } + err =pci_endpoint_test_validate_xfer_params (dev, ¶m, alignment); +if (err) +return false; + size = param.size; -if (size >SIZE_MAX - alignment) - goto err; use_dma = !!(param.flags &PCITEST_FLAGS_USE_DMA );if (use_dma)
@@ -595,9 +615,11 @@ static bool pci_endpoint_test_read(struct pci_endpoint_test *test,return false; } + err =pci_endpoint_test_validate_xfer_params (dev, ¶m, alignment); +if (err) +return false; + size = param.size; -if (size >SIZE_MAX - alignment) - goto err; use_dma = !!(param.flags &PCITEST_FLAGS_USE_DMA );if (use_dma)
drivers/net/wireless/mac80211_hwsim.c +2 -0
@@ -4251,6 +4251,8 @@ static int hwsim_cloned_frame_received_nl(struct sk_buff *skb_2, rx_status.band = channel->band; rx_status.rate_idx =nla_get_u32 (info->attrs[HWSIM_ATTR_RX_RATE ]); +if (rx_status.rate_idx >= data2->hw->wiphy->bands[rx_status.band]->n_bitrates) + goto out; rx_status.signal =nla_get_u32 (info->attrs[HWSIM_ATTR_SIGNAL ]); hdr = (void *)skb->data;
drivers/nvme/host/pci.c +2 -1
@@ -2825,6 +2825,8 @@ static void nvme_reset_work(struct work_struct *work) goto out; } +dma_set_min_align_mask (dev->dev,NVME_CTRL_PAGE_SIZE -1 ); +/* * If we're called to reset a live controller first shut it down before * moving on.
@@ -2858,7 +2860,6 @@ static void nvme_reset_work(struct work_struct *work)* Don't limit the IOMMU merged segment size. */ dma_set_max_seg_size (dev->dev,0xffffffff ); -dma_set_min_align_mask (dev->dev,NVME_CTRL_PAGE_SIZE -1 );mutex_unlock (&dev->shutdown_lock);
drivers/scsi/stex.c +9 -8
@@ -665,16 +665,17 @@ static int stex_queuecommand_lck(struct scsi_cmnd *cmd)return 0 ;case PASSTHRU_CMD :if (cmd->cmnd[1 ] ==PASSTHRU_GET_DRVVER ) { -struct st_drvver ver; +const struct st_drvver ver = { + .major =ST_VER_MAJOR , + .minor =ST_VER_MINOR , + .oem =ST_OEM , + .build =ST_BUILD_VER , + .signature[0 ] =PASSTHRU_SIGNATURE , + .console_id = host->max_id -1 , + .host_no = hba->host->host_no, + };size_t cp_len =sizeof (ver); - ver.major =ST_VER_MAJOR ; - ver.minor =ST_VER_MINOR ; - ver.oem =ST_OEM ; - ver.build =ST_BUILD_VER ; - ver.signature[0 ] =PASSTHRU_SIGNATURE ; - ver.console_id = host->max_id -1 ; - ver.host_no = hba->host->host_no; cp_len =scsi_sg_copy_from_buffer (cmd, &ver, cp_len);if (sizeof (ver) == cp_len) cmd->result =DID_OK <<16 ;
drivers/usb/dwc3/core.c +1 -49
74 lines not on this page · raw message
drivers/usb/dwc3/drd.c +50 -0
68 lines not on this page · raw message
drivers/usb/serial/qcserial.c +1 -0
@@ -177,6 +177,7 @@ static const struct usb_device_id id_table[] = { {DEVICE_SWI(0x413c, 0x81b3)}, /* Dell Wireless 5809e Gobi(TM) 4G LTE Mobile Broadband Card (rev3) */ {DEVICE_SWI(0x413c, 0x81b5)}, /* Dell Wireless 5811e QDL */ {DEVICE_SWI(0x413c, 0x81b6)}, /* Dell Wireless 5811e QDL */ + {DEVICE_SWI(0x413c, 0x81c2)}, /* Dell Wireless 5811e */ {DEVICE_SWI(0x413c, 0x81cb)}, /* Dell Wireless 5816e QDL */ {DEVICE_SWI(0x413c, 0x81cc)}, /* Dell Wireless 5816e */ {DEVICE_SWI(0x413c, 0x81cf)}, /* Dell Wireless 5819 */
fs/ceph/file.c +7 -3
@@ -740,6 +740,12 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry,if (dentry->d_name.len >NAME_MAX )return -ENAMETOOLONG ; +/* +* Do not truncate the file, since atomic_open is called before the +* permission check. The caller will do the truncation afterward. +*/ + flags &= ~O_TRUNC ; +if (flags &O_CREAT ) {if (ceph_quota_is_max_files_exceeded (dir))return -EDQUOT ;
@@ -807,9 +813,7 @@ int ceph_atomic_open(struct inode *dir, struct dentry *dentry, }set_bit (CEPH_MDS_R_PARENT_LOCKED , &req->r_req_flags); - err =ceph_mdsc_do_request (mdsc, - (flags & (O_CREAT |O_TRUNC )) ? dir :NULL , - req); + err =ceph_mdsc_do_request (mdsc, (flags &O_CREAT ) ? dir :NULL , req);if (err == -ENOENT ) { dentry =ceph_handle_snapdir (req, dentry);if (IS_ERR (dentry)) {
fs/nilfs2/inode.c +18 -1
@@ -328,6 +328,7 @@ struct inode *nilfs_new_inode(struct inode *dir, umode_t mode)struct inode *inode;struct nilfs_inode_info *ii;struct nilfs_root *root; +struct buffer_head *bh;int err = -ENOMEM ;ino_t ino;
@@ -343,11 +344,25 @@ struct inode *nilfs_new_inode(struct inode *dir, umode_t mode) ii->i_state =BIT (NILFS_I_NEW ); ii->i_root = root; - err =nilfs_ifile_create_inode (root->ifile, &ino, &ii->i_bh); + err =nilfs_ifile_create_inode (root->ifile, &ino, &bh);if (unlikely (err)) goto failed_ifile_create_inode;/* reference count of i_bh inherits from nilfs_mdt_read_block() */ +if (unlikely (ino <NILFS_USER_INO )) { +nilfs_warn (sb, +"inode bitmap is inconsistent for reserved inodes" ); +do { +brelse (bh); + err =nilfs_ifile_create_inode (root->ifile, &ino, &bh); +if (unlikely (err)) + goto failed_ifile_create_inode; + }while (ino <NILFS_USER_INO ); + +nilfs_info (sb,"repaired inode bitmap for reserved inodes" ); + } + ii->i_bh = bh; +atomic64_inc (&root->inodes_count);inode_init_owner (&init_user_ns, inode, dir, mode); inode->i_ino = ino;
@@ -440,6 +455,8 @@ int nilfs_read_inode_common(struct inode *inode, inode->i_atime.tv_nsec =le32_to_cpu (raw_inode->i_mtime_nsec); inode->i_ctime.tv_nsec =le32_to_cpu (raw_inode->i_ctime_nsec); inode->i_mtime.tv_nsec =le32_to_cpu (raw_inode->i_mtime_nsec); +if (nilfs_is_metadata_file_inode (inode) && !S_ISREG (inode->i_mode)) +return -EIO ;/* this inode is for metadata and corrupted */ if (inode->i_nlink ==0 )return -ESTALE ;/* this inode is deleted */
fs/nilfs2/segment.c +13 -8
@@ -875,9 +875,11 @@ static int nilfs_segctor_create_checkpoint(struct nilfs_sc_info *sci)nilfs_mdt_mark_dirty (nilfs->ns_cpfile);nilfs_cpfile_put_checkpoint ( nilfs->ns_cpfile, nilfs->ns_cno, bh_cp); - }else -WARN_ON (err == -EINVAL || err == -ENOENT ); - + }else if (err == -EINVAL || err == -ENOENT ) { +nilfs_error (sci->sc_super, +"checkpoint creation failed due to metadata corruption." ); + err = -EIO ; + }return err; }
@@ -891,7 +893,11 @@ static int nilfs_segctor_fill_in_checkpoint(struct nilfs_sc_info *sci) err =nilfs_cpfile_get_checkpoint (nilfs->ns_cpfile, nilfs->ns_cno,0 , &raw_cp, &bh_cp);if (unlikely (err)) { -WARN_ON (err == -EINVAL || err == -ENOENT ); +if (err == -EINVAL || err == -ENOENT ) { +nilfs_error (sci->sc_super, +"checkpoint finalization failed due to metadata corruption." ); + err = -EIO ; + } goto failed_ibh; } raw_cp->cp_snapshot_list.ssl_next =0 ;
@@ -2786,10 +2792,9 @@ int nilfs_attach_log_writer(struct super_block *sb, struct nilfs_root *root)inode_attach_wb (nilfs->ns_bdev->bd_inode,NULL ); err =nilfs_segctor_start_thread (nilfs->ns_writer); -if (err) { -kfree (nilfs->ns_writer); - nilfs->ns_writer =NULL ; - } +if (unlikely (err)) +nilfs_detach_log_writer (sb); +return err; }
include/scsi/scsi_cmnd.h +1 -1
@@ -201,7 +201,7 @@ static inline unsigned int scsi_get_resid(struct scsi_cmnd *cmd)for_each_sg (scsi_sglist (cmd), sg, nseg, __i) static inline int scsi_sg_copy_from_buffer(struct scsi_cmnd *cmd, -void *buf,int buflen) +const void *buf,int buflen) {return sg_copy_from_buffer (scsi_sglist (cmd),scsi_sg_count (cmd), buf, buflen);
net/mac80211/ieee80211_i.h +8 -0
@@ -1640,6 +1640,14 @@ struct ieee802_11_elems {/* whether a parse error occurred while retrieving these elements */ bool parse_error; + +/* +* scratch buffer that can be used for various element parsing related +* tasks, e.g., element de-fragmentation etc. +*/ +size_t scratch_len; +u8 *scratch_pos; +u8 scratch[]; }; static inline struct ieee80211_local *hw_to_local(
net/mac80211/rx.c +7 -5
@@ -1988,10 +1988,11 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)if (mmie_keyidx <NUM_DEFAULT_KEYS +NUM_DEFAULT_MGMT_KEYS || mmie_keyidx >=NUM_DEFAULT_KEYS +NUM_DEFAULT_MGMT_KEYS + -NUM_DEFAULT_BEACON_KEYS ) { -cfg80211_rx_unprot_mlme_mgmt (rx->sdata->dev, - skb->data, - skb->len); +NUM_DEFAULT_BEACON_KEYS ) { +if (rx->sdata->dev) +cfg80211_rx_unprot_mlme_mgmt (rx->sdata->dev, + skb->data, + skb->len);return RX_DROP_MONITOR ;/* unexpected BIP keyidx */ }
@@ -2139,7 +2140,8 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)/* either the frame has been decrypted or will be dropped */ status->flag |=RX_FLAG_DECRYPTED ; -if (unlikely (ieee80211_is_beacon (fc) && result ==RX_DROP_UNUSABLE )) +if (unlikely (ieee80211_is_beacon (fc) && result ==RX_DROP_UNUSABLE && + rx->sdata->dev))cfg80211_rx_unprot_mlme_mgmt (rx->sdata->dev, skb->data, skb->len);
net/mac80211/util.c +18 -16
@@ -1439,6 +1439,8 @@ static size_t ieee802_11_find_bssid_profile(const u8 *start, size_t len,for_each_element_id (elem,WLAN_EID_MULTIPLE_BSSID , start, len) {if (elem->datalen <2 )continue ; +if (elem->data[0 ] <1 || elem->data[0 ] >8 ) +continue ;for_each_element (sub, elem->data +1 , elem->datalen -1 ) {u8 new_bssid[ETH_ALEN ];
@@ -1501,25 +1503,27 @@ struct ieee802_11_elems *ieee802_11_parse_elems_crc(const u8 *start, size_t len,const struct element *non_inherit =NULL ;u8 *nontransmitted_profile;int nontransmitted_profile_len =0 ; +size_t scratch_len = len; - elems =kzalloc (sizeof (*elems),GFP_ATOMIC ); + elems =kzalloc (sizeof (*elems) + scratch_len,GFP_ATOMIC );if (!elems)return NULL ; elems->ie_start = start; elems->total_len = len; - - nontransmitted_profile =kmalloc (len,GFP_ATOMIC ); -if (nontransmitted_profile) { - nontransmitted_profile_len = -ieee802_11_find_bssid_profile (start, len, elems, - transmitter_bssid, - bss_bssid, - nontransmitted_profile); - non_inherit = -cfg80211_find_ext_elem (WLAN_EID_EXT_NON_INHERITANCE , - nontransmitted_profile, - nontransmitted_profile_len); - } + elems->scratch_len = scratch_len; + elems->scratch_pos = elems->scratch; + + nontransmitted_profile = elems->scratch_pos; + nontransmitted_profile_len = +ieee802_11_find_bssid_profile (start, len, elems, + transmitter_bssid, + bss_bssid, + nontransmitted_profile); + elems->scratch_pos += nontransmitted_profile_len; + elems->scratch_len -= nontransmitted_profile_len; + non_inherit =cfg80211_find_ext_elem (WLAN_EID_EXT_NON_INHERITANCE , + nontransmitted_profile, + nontransmitted_profile_len); crc =_ieee802_11_parse_elems_crc (start, len, action, elems, filter, crc, non_inherit);
@@ -1548,8 +1552,6 @@ struct ieee802_11_elems *ieee802_11_parse_elems_crc(const u8 *start, size_t len, offsetofend(struct ieee80211_bssid_index, dtim_count)) elems->dtim_count = elems->bssid_index->dtim_count; -kfree (nontransmitted_profile); - elems->crc = crc;return elems;
net/mctp/af_mctp.c +16 -7
@@ -295,11 +295,12 @@ __must_hold(&net->mctp.keys_lock)mctp_dev_release_key (key->dev, key);spin_unlock_irqrestore (&key->lock, flags); -hlist_del (&key->hlist); -hlist_del (&key->sklist); - -/* unref for the lists */ -mctp_key_unref (key); +if (!hlist_unhashed (&key->hlist)) { +hlist_del_init (&key->hlist); +hlist_del_init (&key->sklist); +/* unref for the lists */ +mctp_key_unref (key); + }kfree_skb (skb); }
@@ -373,9 +374,17 @@ static int mctp_ioctl_alloctag(struct mctp_sock *msk, unsigned long arg) ctl.tag = tag |MCTP_TAG_OWNER |MCTP_TAG_PREALLOC ;if (copy_to_user ((void __user *)arg, &ctl,sizeof (ctl))) { -spin_lock_irqsave (&key->lock, flags); -__mctp_key_remove (key, net, flags,MCTP_TRACE_KEY_DROPPED ); +unsigned long fl2; +/* Unwind our key allocation: the keys list lock needs to be +* taken before the individual key locks, and we need a valid +* flags value (fl2) to pass to __mctp_key_remove, hence the +* second spin_lock_irqsave() rather than a plain spin_lock(). +*/ +spin_lock_irqsave (&net->mctp.keys_lock, flags); +spin_lock_irqsave (&key->lock, fl2); +__mctp_key_remove (key, net, fl2,MCTP_TRACE_KEY_DROPPED );mctp_key_unref (key); +spin_unlock_irqrestore (&net->mctp.keys_lock, flags);return -EFAULT ; }
net/mctp/route.c +5 -5
@@ -228,12 +228,12 @@ __releases(&key->lock)if (!key->manual_alloc) {spin_lock_irqsave (&net->mctp.keys_lock, flags); -hlist_del (&key->hlist); -hlist_del (&key->sklist); +if (!hlist_unhashed (&key->hlist)) { +hlist_del_init (&key->hlist); +hlist_del_init (&key->sklist); +mctp_key_unref (key); + }spin_unlock_irqrestore (&net->mctp.keys_lock, flags); - -/* unref for the lists */ -mctp_key_unref (key); }/* and one for the local reference */
net/wireless/scan.c +50 -27
152 lines not on this page · raw message
security/integrity/platform_certs/load_uefi.c +1 -1
@@ -31,7 +31,7 @@ static const struct dmi_system_id uefi_skip_cert[] = { { UEFI_QUIRK_SKIP_CERT("Apple Inc.", "MacBookAir8,1") }, { UEFI_QUIRK_SKIP_CERT("Apple Inc.", "MacBookAir8,2") }, { UEFI_QUIRK_SKIP_CERT("Apple Inc.", "MacBookAir9,1") }, - { UEFI_QUIRK_SKIP_CERT("Apple Inc.", "MacMini8,1") }, + { UEFI_QUIRK_SKIP_CERT("Apple Inc.", "Macmini8,1") }, { UEFI_QUIRK_SKIP_CERT("Apple Inc.", "MacPro7,1") }, { UEFI_QUIRK_SKIP_CERT("Apple Inc.", "iMac20,1") }, { UEFI_QUIRK_SKIP_CERT("Apple Inc.", "iMac20,2") },
sound/pci/hda/hda_intel.c +2 -1
@@ -2554,7 +2554,8 @@ static const struct pci_device_id azx_ids[] = { .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },/* Poulsbo */ { PCI_DEVICE(0x8086, 0x811b), - .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_BASE }, + .driver_data =AZX_DRIVER_SCH |AZX_DCAPS_INTEL_PCH_BASE | + AZX_DCAPS_POSFIX_LPIB }, /* Oaktrail */ { PCI_DEVICE(0x8086, 0x080a), .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_BASE },
sound/pci/hda/patch_realtek.c +18 -0
@@ -6717,6 +6717,11 @@ static void cs35l41_fixup_spi_two(struct hda_codec *codec, const struct hda_fixucs35l41_generic_fixup (codec, action,"spi0" ,"CSC3551" ,2 ); } +static void cs35l41_fixup_spi1_two (struct hda_codec *codec,const struct hda_fixup *fix,int action) +{ +cs35l41_generic_fixup (codec, action,"spi1" ,"CSC3551" ,2 ); +} +static void cs35l41_fixup_spi_four (struct hda_codec *codec,const struct hda_fixup *fix,int action) {cs35l41_generic_fixup (codec, action,"spi0" ,"CSC3551" ,4 );
@@ -7102,6 +7107,8 @@ enum {ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED ,ALC245_FIXUP_CS35L41_SPI_2 ,ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED , +ALC245_FIXUP_CS35L41_SPI1_2 , +ALC245_FIXUP_CS35L41_SPI1_2_HP_GPIO_LED ,ALC245_FIXUP_CS35L41_SPI_4 ,ALC245_FIXUP_CS35L41_SPI_4_HP_GPIO_LED , ALC285_FIXUP_HP_SPEAKERS_MICMUTE_LED,
@@ -8948,6 +8955,16 @@ static const struct hda_fixup alc269_fixups[] = { .chained = true, .chain_id = ALC285_FIXUP_HP_GPIO_LED, }, + [ALC245_FIXUP_CS35L41_SPI1_2] = { + .type = HDA_FIXUP_FUNC, + .v.func = cs35l41_fixup_spi1_two, + }, + [ALC245_FIXUP_CS35L41_SPI1_2_HP_GPIO_LED] = { + .type = HDA_FIXUP_FUNC, + .v.func = cs35l41_fixup_spi1_two, + .chained = true, + .chain_id = ALC285_FIXUP_HP_GPIO_LED, + }, [ALC245_FIXUP_CS35L41_SPI_4] = { .type = HDA_FIXUP_FUNC, .v.func = cs35l41_fixup_spi_four,
@@ -9306,6 +9323,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x103c ,0x8aa3 ,"HP ProBook 450 G9 (MB 8AA1)" ,ALC236_FIXUP_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x8aa8 ,"HP EliteBook 640 G9 (MB 8AA6)" ,ALC236_FIXUP_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x8aab ,"HP EliteBook 650 G9 (MB 8AA9)" ,ALC236_FIXUP_HP_GPIO_LED ), +SND_PCI_QUIRK (0x103c ,0x8abb ,"HP ZBook Firefly 14 G9" ,ALC245_FIXUP_CS35L41_SPI1_2_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x8ad1 ,"HP EliteBook 840 14 inch G9 Notebook PC" ,ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x8ad2 ,"HP EliteBook 860 16 inch G9 Notebook PC" ,ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED ), SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),