Linux 4.4.268
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.4.268 kernel.
All users of the 4.4 kernel series must upgrade.
The updated 4.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.4.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/arc/kernel/signal.c | 4 arch/arm/boot/dts/omap3.dtsi | 3 arch/arm/boot/dts/omap4.dtsi | 5 arch/arm/boot/dts/omap5.dtsi | 5 arch/arm/mach-keystone/keystone.c | 4 arch/arm/probes/uprobes/core.c | 4 arch/ia64/mm/discontig.c | 6 arch/s390/kernel/entry.S | 1 arch/x86/kernel/crash.c | 3 drivers/dma/dw/Kconfig | 2 drivers/input/keyboard/nspire-keypad.c | 56 ++-- drivers/input/serio/i8042-x86ia64io.h | 1 drivers/md/dm-table.c | 10 drivers/net/ethernet/amd/pcnet32.c | 5 drivers/net/ethernet/cavium/liquidio/cn66xx_regs.h | 2 drivers/net/ethernet/davicom/dm9000.c | 6 drivers/net/ethernet/intel/i40e/i40e_main.c | 6 drivers/net/usb/hso.c | 35 -- drivers/net/xen-netback/xenbus.c | 12 drivers/scsi/libsas/sas_ata.c | 9 fs/ext4/namei.c | 2 include/linux/compiler-clang.h | 14 + include/linux/compiler-gcc.h | 4 include/linux/compiler-intel.h | 4 include/linux/overflow.h | 278 +++++++++++++++++++++ net/core/neighbour.c | 2 net/ieee802154/nl802154.c | 29 ++ net/sctp/socket.c | 13 sound/soc/fsl/fsl_esai.c | 8 tools/arch/ia64/include/asm/barrier.h | 3 31 files changed, 445 insertions(+), 93 deletions(-)
Alexander Aring (7):
net: ieee802154: stop dump llsec keys for monitors
net: ieee802154: stop dump llsec devs for monitors
net: ieee802154: forbid monitor for add llsec dev
net: ieee802154: stop dump llsec devkeys for monitors
net: ieee802154: forbid monitor for add llsec devkey
net: ieee802154: stop dump llsec seclevels for monitors
net: ieee802154: forbid monitor for add llsec seclevel
Alexander Shiyan (1):
ASoC: fsl_esai: Fix TDM slot setup for I2S mode
Andy Shevchenko (1):
dmaengine: dw: Make it dependent to HAS_IOMEM
Anirudh Rayabharam (1):
net: hso: fix null-ptr-deref during tty device unregistration
Arnd Bergmann (2):
ARM: keystone: fix integer overflow warning
Input: i8042 - fix Pegatron C15B ID entry
Christophe JAILLET (1):
net: davicom: Fix regulator not turned off on failed probe
Fabian Vogt (1):
Input: nspire-keypad - enable interrupts only when opened
Fredrik Strupe (1):
ARM: 9071/1: uprobes: Don't hook on thumb instructions
Greg Kroah-Hartman (1):
Linux 4.4.268
Guenter Roeck (1):
pcnet32: Use pci_resource_len to validate PCI resource
Jason Xing (1):
i40e: fix the panic when running bpf in xdpdrv mode
Johan Hovold (1):
net: hso: fix NULL-deref on disconnect regression
John Paul Adrian Glaubitz (1):
ia64: tools: remove duplicate definition of ia64_mf() on ia64
Jolly Shah (1):
scsi: libsas: Reset num_scatter if libata marks qc as NODATA
Kees Cook (1):
overflow.h: Add allocation size calculation helpers
Michael Brown (1):
xen-netback: Check for hotplug-status existence before watching
Mike Galbraith (1):
x86/crash: Fix crash_setup_memmap_entries() out-of-bounds access
Or Cohen (1):
net/sctp: fix race condition in sctp_destroy_sock
Randy Dunlap (1):
ia64: fix discontig.c section mismatches
Rasmus Villemoes (1):
compiler.h: enable builtin overflow checkers and add fallback code
Tong Zhu (1):
neighbour: Disregard DEAD dst in neigh_update
Tony Lindgren (2):
ARM: dts: Fix moving mmc devices with aliases for omap4 & 5
ARM: dts: Fix swapped mmc order for omap3
Vasily Gorbik (1):
s390/entry: save the caller of psw_idle
Wan Jiabing (1):
cavium/liquidio: Fix duplicate argument
Wang Qing (1):
arc: kernel: Return -EFAULT if copy_to_user() fails
Zhang Yi (1):
ext4: correct error label in ext4_rename()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 4 -SUBLEVEL = 267 +SUBLEVEL = 268 EXTRAVERSION = NAME = Blurry Fish Butt
arch/arc/kernel/signal.c +2 -2
@@ -97,7 +97,7 @@ stash_usr_regs(struct rt_sigframe __user *sf, struct pt_regs *regs, sizeof(sf->uc.uc_mcontext.regs.scratch)); err |=__copy_to_user (&sf->uc.uc_sigmask, set,sizeof (sigset_t)); -return err; +return err ? -EFAULT :0 ; }static int restore_usr_regs (struct pt_regs *regs,struct rt_sigframe __user *sf)
@@ -111,7 +111,7 @@ static int restore_usr_regs(struct pt_regs *regs, struct rt_sigframe __user *sf) &(sf->uc.uc_mcontext.regs.scratch), sizeof(sf->uc.uc_mcontext.regs.scratch));if (err) -return err; +return -EFAULT ;set_current_blocked (&set); regs->bta = uregs.scratch.bta;
arch/arm/boot/dts/omap3.dtsi +3 -0
@@ -22,6 +22,9 @@ i2c0 = &i2c1; i2c1 = &i2c2; i2c2 = &i2c3; + mmc0 = &mmc1; + mmc1 = &mmc2; + mmc2 = &mmc3; serial0 = &uart1; serial1 = &uart2; serial2 = &uart3;
arch/arm/boot/dts/omap4.dtsi +5 -0
@@ -21,6 +21,11 @@ i2c1 = &i2c2; i2c2 = &i2c3; i2c3 = &i2c4; + mmc0 = &mmc1; + mmc1 = &mmc2; + mmc2 = &mmc3; + mmc3 = &mmc4; + mmc4 = &mmc5; serial0 = &uart1; serial1 = &uart2; serial2 = &uart3;
arch/arm/boot/dts/omap5.dtsi +5 -0
@@ -26,6 +26,11 @@ i2c2 = &i2c3; i2c3 = &i2c4; i2c4 = &i2c5; + mmc0 = &mmc1; + mmc1 = &mmc2; + mmc2 = &mmc3; + mmc3 = &mmc4; + mmc4 = &mmc5; serial0 = &uart1; serial1 = &uart2; serial2 = &uart3;
arch/arm/mach-keystone/keystone.c +2 -2
@@ -71,7 +71,7 @@ static phys_addr_t keystone_virt_to_idmap(unsigned long x)static long long __init keystone_pv_fixup (void ) {long long offset; -phys_addr_t mem_start, mem_end; +u64 mem_start, mem_end; mem_start =memblock_start_of_DRAM (); mem_end =memblock_end_of_DRAM ();
@@ -84,7 +84,7 @@ static long long __init keystone_pv_fixup(void)if (mem_start <KEYSTONE_HIGH_PHYS_START || mem_end >KEYSTONE_HIGH_PHYS_END ) {pr_crit ("Invalid address space for memory (%08llx-%08llx)\n" , - (u64 )mem_start, (u64 )mem_end); + mem_start, mem_end);return 0 ; }
arch/arm/probes/uprobes/core.c +2 -2
@@ -207,7 +207,7 @@ unsigned long uprobe_get_swbp_addr(struct pt_regs *regs)static struct undef_hook uprobes_arm_break_hook = { .instr_mask =0x0fffffff , .instr_val = (UPROBE_SWBP_ARM_INSN &0x0fffffff ), - .cpsr_mask =MODE_MASK , + .cpsr_mask = (PSR_T_BIT |MODE_MASK ), .cpsr_val =USR_MODE , .fn = uprobe_trap_handler, };
@@ -215,7 +215,7 @@ static struct undef_hook uprobes_arm_break_hook = {static struct undef_hook uprobes_arm_ss_hook = { .instr_mask =0x0fffffff , .instr_val = (UPROBE_SS_ARM_INSN &0x0fffffff ), - .cpsr_mask =MODE_MASK , + .cpsr_mask = (PSR_T_BIT |MODE_MASK ), .cpsr_val =USR_MODE , .fn = uprobe_trap_handler, };
arch/ia64/mm/discontig.c +3 -3
@@ -99,7 +99,7 @@ static int __init build_node_maps(unsigned long start, unsigned long len,* acpi_boot_init() (which builds the node_to_cpu_mask array) hasn't been * called yet. Note that node 0 will also count all non-existent cpus. */ -static int __meminit early_nr_cpus_node (int node) +static int early_nr_cpus_node (int node) {int cpu, n =0 ;
@@ -114,7 +114,7 @@ static int __meminit early_nr_cpus_node(int node)* compute_pernodesize - compute size of pernode data * @node: the node id. */ -static unsigned long __meminit compute_pernodesize (int node) +static unsigned long compute_pernodesize (int node) {unsigned long pernodesize =0 , cpus;
@@ -411,7 +411,7 @@ static void __init reserve_pernode_space(void) } } -static void __meminit scatter_node_data (void ) +static void scatter_node_data (void ) {pg_data_t **dst;int node;
arch/s390/kernel/entry.S +1 -0
@@ -889,6 +889,7 @@ ENTRY(ext_int_handler) * Load idle PSW. The second "half" of this function is in .Lcleanup_idle. */ ENTRY(psw_idle) + stg %r14,(__SF_GPRS+8*8)(%r15) stg %r3,__SF_EMPTY(%r15) larl %r1,.Lpsw_idle_lpsw+4 stg %r1,__SF_EMPTY+8(%r15)
arch/x86/kernel/crash.c +2 -1
@@ -23,6 +23,7 @@#include <linux/module.h> #include <linux/slab.h> #include <linux/vmalloc.h> +#include <linux/overflow.h> #include <asm/processor.h> #include <asm/hardirq.h>
@@ -572,7 +573,7 @@ int crash_setup_memmap_entries(struct kimage *image, struct boot_params *params)struct crash_memmap_data cmd;struct crash_mem *cmem; - cmem =vzalloc (sizeof (struct crash_mem )); + cmem =vzalloc (struct_size (cmem, ranges,1 ));if (!cmem)return -ENOMEM ;
drivers/dma/dw/Kconfig +2 -0
@@ -11,6 +11,7 @@ config DW_DMAC_BIG_ENDIAN_IO config DW_DMAC tristate "Synopsys DesignWare AHB DMA platform driver" + depends on HAS_IOMEM select DW_DMAC_CORE select DW_DMAC_BIG_ENDIAN_IO if AVR32 default y if CPU_AT32AP7000
@@ -21,6 +22,7 @@ config DW_DMAC config DW_DMAC_PCI tristate "Synopsys DesignWare AHB DMA PCI driver" depends on PCI + depends on HAS_IOMEM select DW_DMAC_CORE help Support the Synopsys DesignWare AHB DMA controller on the
drivers/input/keyboard/nspire-keypad.c +31 -25
82 lines not on this page · raw message
drivers/input/serio/i8042-x86ia64io.h +1 -0
@@ -579,6 +579,7 @@ static const struct dmi_system_id i8042_dmi_forcemux_table[] __initconst = {DMI_MATCH (DMI_SYS_VENDOR ,"Sony Corporation" ), DMI_MATCH(DMI_PRODUCT_NAME, "VGN-CS"), }, + }, { .matches = {DMI_MATCH (DMI_SYS_VENDOR ,"ASUSTeK COMPUTER INC." ), DMI_MATCH(DMI_CHASSIS_TYPE, "31"), /* Convertible Notebook */
drivers/md/dm-table.c +5 -5
@@ -516,14 +516,14 @@ static int adjoin(struct dm_table *table, struct dm_target *ti)* On the other hand, dm-switch needs to process bulk data using messages and * excessive use of GFP_NOIO could cause trouble. */ -static char **realloc_argv (unsigned *array_size,char **old_argv) +static char **realloc_argv (unsigned *size,char **old_argv) {char **argv;unsigned new_size;gfp_t gfp; -if (*array_size) { - new_size = *array_size *2 ; +if (*size) { + new_size = *size *2 ; gfp =GFP_KERNEL ; }else { new_size =8 ;
@@ -531,8 +531,8 @@ static char **realloc_argv(unsigned *array_size, char **old_argv) } argv =kmalloc (new_size *sizeof (*argv), gfp);if (argv) { -memcpy (argv, old_argv, *array_size *sizeof (*argv)); - *array_size = new_size; +memcpy (argv, old_argv, *size *sizeof (*argv)); + *size = new_size; }kfree (old_argv);
drivers/net/ethernet/amd/pcnet32.c +3 -2
@@ -1493,8 +1493,7 @@ pcnet32_probe_pci(struct pci_dev *pdev, const struct pci_device_id *ent) }pci_set_master (pdev); - ioaddr =pci_resource_start (pdev,0 ); -if (!ioaddr) { +if (!pci_resource_len (pdev,0 )) {if (pcnet32_debug &NETIF_MSG_PROBE )pr_err ("card has no PCI IO resources, aborting\n" );return -ENODEV ;
@@ -1506,6 +1505,8 @@ pcnet32_probe_pci(struct pci_dev *pdev, const struct pci_device_id *ent)pr_err ("architecture does not support 32bit PCI busmaster DMA\n" );return err; } + + ioaddr =pci_resource_start (pdev,0 );if (!request_region (ioaddr,PCNET32_TOTAL_SIZE ,"pcnet32_probe_pci" )) {if (pcnet32_debug &NETIF_MSG_PROBE )pr_err ("io address range already allocated\n" );
drivers/net/ethernet/cavium/liquidio/cn66xx_regs.h +1 -1
@@ -417,7 +417,7 @@ | CN6XXX_INTR_M0UNWI_ERR \ |CN6XXX_INTR_M1UPB0_ERR \ |CN6XXX_INTR_M1UPWI_ERR \ - |CN6XXX_INTR_M1UPB0_ERR \ + |CN6XXX_INTR_M1UNB0_ERR \ |CN6XXX_INTR_M1UNWI_ERR \ |CN6XXX_INTR_INSTR_DB_OF_ERR \ |CN6XXX_INTR_SLIST_DB_OF_ERR \
drivers/net/ethernet/davicom/dm9000.c +4 -2
@@ -1484,8 +1484,10 @@ dm9000_probe(struct platform_device *pdev)/* Init network device */ ndev =alloc_etherdev (sizeof (struct board_info )); -if (!ndev) -return -ENOMEM ; +if (!ndev) { + ret = -ENOMEM ; + goto out_regulator_disable; + }SET_NETDEV_DEV (ndev, &pdev->dev);
drivers/net/ethernet/intel/i40e/i40e_main.c +6 -0
@@ -8148,6 +8148,7 @@ static int i40e_sw_init(struct i40e_pf *pf) {int err =0 ;int size; +u16 pow; pf->msg_enable =netif_msg_init (I40E_DEFAULT_MSG_ENABLE , (NETIF_MSG_DRV |NETIF_MSG_PROBE |NETIF_MSG_LINK ));
@@ -8182,6 +8183,11 @@ static int i40e_sw_init(struct i40e_pf *pf) pf->rss_table_size = pf->hw.func_caps.rss_table_size; pf->rss_size_max =min_t (int, pf->rss_size_max, pf->hw.func_caps.num_tx_qp); + +/* find the next higher power-of-2 of num cpus */ + pow =roundup_pow_of_two (num_online_cpus ()); + pf->rss_size_max =min_t (int, pf->rss_size_max, pow); +if (pf->hw.func_caps.rss) { pf->flags |=I40E_FLAG_RSS_ENABLED ; pf->rss_size =min_t (int, pf->rss_size_max,num_online_cpus ());
drivers/net/usb/hso.c +13 -22
@@ -635,7 +635,7 @@ static struct hso_serial *get_serial_by_index(unsigned index)return serial; } -static int get_free_serial_index (void ) +static int obtain_minor (struct hso_serial *serial) {int index;unsigned long flags;
@@ -643,8 +643,10 @@ static int get_free_serial_index(void)spin_lock_irqsave (&serial_table_lock, flags);for (index =0 ; index <HSO_SERIAL_TTY_MINORS ; index++) {if (serial_table[index] ==NULL ) { + serial_table[index] = serial->parent; + serial->minor = index;spin_unlock_irqrestore (&serial_table_lock, flags); -return index; +return 0 ; } }spin_unlock_irqrestore (&serial_table_lock, flags);
@@ -653,15 +655,12 @@ static int get_free_serial_index(void)return -1 ; } -static void set_serial_by_index (unsigned index,struct hso_serial *serial) +static void release_minor (struct hso_serial *serial) {unsigned long flags;spin_lock_irqsave (&serial_table_lock, flags); -if (serial) - serial_table[index] = serial->parent; -else - serial_table[index] =NULL ; + serial_table[serial->minor] =NULL ;spin_unlock_irqrestore (&serial_table_lock, flags); }
@@ -2249,6 +2248,7 @@ static int hso_stop_serial_device(struct hso_device *hso_dev)static void hso_serial_tty_unregister (struct hso_serial *serial) {tty_unregister_device (tty_drv, serial->minor); +release_minor (serial); }static void hso_serial_common_free (struct hso_serial *serial)
@@ -2273,25 +2273,23 @@ static int hso_serial_common_create(struct hso_serial *serial, int num_urbs, int rx_size, int tx_size) {struct device *dev; -int minor;int i;tty_port_init (&serial->port); - minor =get_free_serial_index (); -if (minor <0 ) +if (obtain_minor (serial)) goto exit2;/* register our minor number */ serial->parent->dev =tty_port_register_device_attr (&serial->port, - tty_drv, minor, &serial->parent->interface->dev, + tty_drv, serial->minor, &serial->parent->interface->dev, serial->parent, hso_serial_dev_groups); -if (IS_ERR (serial->parent->dev)) +if (IS_ERR (serial->parent->dev)) { +release_minor (serial); goto exit2; + } dev = serial->parent->dev; -/* fill in specific data for later use */ - serial->minor = minor; serial->magic =HSO_SERIAL_MAGIC ;spin_lock_init (&serial->serial_lock); serial->num_rx_urbs = num_urbs;
@@ -2692,9 +2690,6 @@ static struct hso_device *hso_create_bulk_serial_device( serial->write_data = hso_std_serial_write_data; -/* and record this serial */ -set_serial_by_index (serial->minor, serial); -/* setup the proc dirs and files if needed */ hso_log_port (hso_dev);
@@ -2751,9 +2746,6 @@ struct hso_device *hso_create_mux_serial_device(struct usb_interface *interface, serial->shared_int->ref_count++;mutex_unlock (&serial->shared_int->shared_int_lock); -/* and record this serial */ -set_serial_by_index (serial->minor, serial); -/* setup the proc dirs and files if needed */ hso_log_port (hso_dev);
@@ -3139,8 +3131,7 @@ static void hso_free_interface(struct usb_interface *interface)cancel_work_sync (&serial_table[i]->async_put_intf);cancel_work_sync (&serial_table[i]->async_get_intf);hso_serial_tty_unregister (serial); -kref_put (&serial_table[i]->ref, hso_serial_ref_free); -set_serial_by_index (i,NULL ); +kref_put (&serial->parent->ref, hso_serial_ref_free); } }
drivers/net/xen-netback/xenbus.c +8 -4
@@ -849,11 +849,15 @@ static void connect(struct backend_info *be)xenvif_carrier_on (be->vif);unregister_hotplug_status_watch (be); - err =xenbus_watch_pathfmt (dev, &be->hotplug_status_watch,NULL , - hotplug_status_changed, -"%s/%s" , dev->nodename,"hotplug-status" ); -if (!err) +if (xenbus_exists (XBT_NIL , dev->nodename,"hotplug-status" )) { + err =xenbus_watch_pathfmt (dev, &be->hotplug_status_watch, +NULL , hotplug_status_changed, +"%s/%s" , dev->nodename, +"hotplug-status" ); +if (err) + goto err; be->have_hotplug_status_watch =1 ; + }netif_tx_wake_all_queues (be->vif->dev);
drivers/scsi/libsas/sas_ata.c +4 -5
@@ -216,18 +216,17 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)memcpy (task->ata_task.atapi_packet, qc->cdb, qc->dev->cdb_len); task->total_xfer_len = qc->nbytes; task->num_scatter = qc->n_elem; + task->data_dir = qc->dma_dir; + }else if (qc->tf.protocol ==ATA_PROT_NODATA ) { + task->data_dir =DMA_NONE ; }else {for_each_sg (qc->sg, sg, qc->n_elem, si) xfer +=sg_dma_len (sg); task->total_xfer_len = xfer; task->num_scatter = si; - } - -if (qc->tf.protocol ==ATA_PROT_NODATA ) - task->data_dir =DMA_NONE ; -else task->data_dir = qc->dma_dir; + } task->scatter = qc->sg; task->ata_task.retry_count =1 ; task->task_state_flags =SAS_TASK_STATE_PENDING ;
fs/ext4/namei.c +1 -1
@@ -3561,7 +3561,7 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, !ext4_is_child_context_consistent_with_parent(new.dir, old.inode)) { retval = -EXDEV ; - goto end_rename; + goto release_bh; } new.bh = ext4_find_entry(new.dir, &new.dentry->d_name,
include/linux/compiler-clang.h +14 -0
@@ -15,3 +15,17 @@* with any version that can compile the kernel */ #define __UNIQUE_ID (prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) + +/* +* Not all versions of clang implement the the type-generic versions +* of the builtin overflow checkers. Fortunately, clang implements +* __has_builtin allowing us to avoid awkward version +* checks. Unfortunately, we don't know which version of gcc clang +* pretends to be, so the macro may or may not be defined. +*/ +#undef COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW +#if __has_builtin (__builtin_mul_overflow) && \ +__has_builtin (__builtin_add_overflow) && \ +__has_builtin (__builtin_sub_overflow) +#define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1 +#endif
include/linux/compiler-gcc.h +4 -0
@@ -321,3 +321,7 @@* code */ #define uninitialized_var (x) x = x + +#if GCC_VERSION >=50100 +#define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1 +#endif
include/linux/compiler-intel.h +4 -0
@@ -43,3 +43,7 @@#define __builtin_bswap16 _bswap16#endif +/* +* icc defines __GNUC__, but does not implement the builtin overflow checkers. +*/ +#undef COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW
include/linux/overflow.h new file +278 -0
278 lines not on this page · raw message
net/core/neighbour.c +1 -1
@@ -1234,7 +1234,7 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,* we can reinject the packet there. */ n2 =NULL ; -if (dst) { +if (dst && dst->obsolete !=DST_OBSOLETE_DEAD ) { n2 =dst_neigh_lookup_skb (dst, skb);if (n2) n1 = n2;
net/ieee802154/nl802154.c +29 -0
@@ -1481,6 +1481,11 @@ nl802154_dump_llsec_key(struct sk_buff *skb, struct netlink_callback *cb)if (err)return err; +if (wpan_dev->iftype ==NL802154_IFTYPE_MONITOR ) { + err = skb->len; + goto out_err; + } +if (!wpan_dev->netdev) { err = -EINVAL ; goto out_err;
@@ -1653,6 +1658,11 @@ nl802154_dump_llsec_dev(struct sk_buff *skb, struct netlink_callback *cb)if (err)return err; +if (wpan_dev->iftype ==NL802154_IFTYPE_MONITOR ) { + err = skb->len; + goto out_err; + } +if (!wpan_dev->netdev) { err = -EINVAL ; goto out_err;
@@ -1740,6 +1750,9 @@ static int nl802154_add_llsec_dev(struct sk_buff *skb, struct genl_info *info)struct wpan_dev *wpan_dev = dev->ieee802154_ptr;struct ieee802154_llsec_device dev_desc; +if (wpan_dev->iftype ==NL802154_IFTYPE_MONITOR ) +return -EOPNOTSUPP ; +if (ieee802154_llsec_parse_device (info->attrs[NL802154_ATTR_SEC_DEVICE ], &dev_desc) <0 )return -EINVAL ;
@@ -1826,6 +1839,11 @@ nl802154_dump_llsec_devkey(struct sk_buff *skb, struct netlink_callback *cb)if (err)return err; +if (wpan_dev->iftype ==NL802154_IFTYPE_MONITOR ) { + err = skb->len; + goto out_err; + } +if (!wpan_dev->netdev) { err = -EINVAL ; goto out_err;
@@ -1883,6 +1901,9 @@ static int nl802154_add_llsec_devkey(struct sk_buff *skb, struct genl_info *infostruct ieee802154_llsec_device_key key;__le64 extended_addr; +if (wpan_dev->iftype ==NL802154_IFTYPE_MONITOR ) +return -EOPNOTSUPP ; +if (!info->attrs[NL802154_ATTR_SEC_DEVKEY ] || nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX, info->attrs[NL802154_ATTR_SEC_DEVKEY],
@@ -1992,6 +2013,11 @@ nl802154_dump_llsec_seclevel(struct sk_buff *skb, struct netlink_callback *cb)if (err)return err; +if (wpan_dev->iftype ==NL802154_IFTYPE_MONITOR ) { + err = skb->len; + goto out_err; + } +if (!wpan_dev->netdev) { err = -EINVAL ; goto out_err;
@@ -2077,6 +2103,9 @@ static int nl802154_add_llsec_seclevel(struct sk_buff *skb,struct wpan_dev *wpan_dev = dev->ieee802154_ptr;struct ieee802154_llsec_seclevel sl; +if (wpan_dev->iftype ==NL802154_IFTYPE_MONITOR ) +return -EOPNOTSUPP ; +if (llsec_parse_seclevel (info->attrs[NL802154_ATTR_SEC_LEVEL ], &sl) <0 )return -EINVAL ;
net/sctp/socket.c +5 -8
@@ -1567,11 +1567,9 @@ static void sctp_close(struct sock *sk, long timeout)/* Supposedly, no process has access to the socket, but * the net layers still may. -* Also, sctp_destroy_sock() needs to be called with addr_wq_lock -* held and that should be grabbed before socket lock. */ -spin_lock_bh (&net->sctp.addr_wq_lock); -bh_lock_sock_nested (sk); +local_bh_disable (); +bh_lock_sock (sk);/* Hold the sock, since sk_common_release() will put sock_put() * and we have just a little more cleanup.
@@ -1580,7 +1578,7 @@ static void sctp_close(struct sock *sk, long timeout)sk_common_release (sk);bh_unlock_sock (sk); -spin_unlock_bh (&net->sctp.addr_wq_lock); +local_bh_enable ();sock_put (sk);
@@ -4161,9 +4159,6 @@ static int sctp_init_sock(struct sock *sk)sk_sockets_allocated_inc (sk);sock_prot_inuse_add (net, sk->sk_prot,1 ); -/* Nothing can fail after this block, otherwise -* sctp_destroy_sock() will be called without addr_wq_lock held -*/ if (net->sctp.default_auto_asconf) {spin_lock (&sock_net (sk)->sctp.addr_wq_lock); list_add_tail(&sp->auto_asconf_list,
@@ -4198,7 +4193,9 @@ static void sctp_destroy_sock(struct sock *sk)if (sp->do_auto_asconf) { sp->do_auto_asconf =0 ; +spin_lock_bh (&sock_net (sk)->sctp.addr_wq_lock);list_del (&sp->auto_asconf_list); +spin_unlock_bh (&sock_net (sk)->sctp.addr_wq_lock); }sctp_endpoint_free (sp->ep);local_bh_disable ();
sound/soc/fsl/fsl_esai.c +5 -3
@@ -488,11 +488,13 @@ static int fsl_esai_startup(struct snd_pcm_substream *substream,ESAI_SAICR_SYNC , esai_priv->synchronous ? ESAI_SAICR_SYNC : 0); -/* Set a default slot number -- 2 */ +/* Set slots count */ regmap_update_bits (esai_priv->regmap,REG_ESAI_TCCR , - ESAI_xCCR_xDC_MASK,ESAI_xCCR_xDC (2 )); + ESAI_xCCR_xDC_MASK, +ESAI_xCCR_xDC (esai_priv->slots));regmap_update_bits (esai_priv->regmap,REG_ESAI_RCCR , - ESAI_xCCR_xDC_MASK,ESAI_xCCR_xDC (2 )); + ESAI_xCCR_xDC_MASK, +ESAI_xCCR_xDC (esai_priv->slots)); }return 0 ;
tools/arch/ia64/include/asm/barrier.h +0 -3
@@ -38,9 +38,6 @@* sequential memory pages only. */ -/* XXX From arch/ia64/include/uapi/asm/gcc_intrin.h */ -#define ia64_mf () asm volatile ("mf" ::: "memory") -#define mb () ia64_mf()#define rmb () mb()#define wmb () mb()