Linux 4.4.241
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.4.241 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
------------
Documentation/networking/ip-sysctl.txt | 4 Makefile | 2 arch/arm/mm/cache-l2x0.c | 16 +- arch/arm64/boot/dts/xilinx/zynqmp.dtsi | 4 arch/powerpc/include/asm/reg.h | 2 arch/powerpc/kernel/tau_6xx.c | 82 ++++-------- arch/powerpc/perf/hv-gpci-requests.h | 6 arch/powerpc/platforms/Kconfig | 9 - arch/powerpc/platforms/powernv/opal-dump.c | 41 ++++-- arch/powerpc/platforms/pseries/rng.c | 1 arch/powerpc/sysdev/xics/icp-hv.c | 1 arch/x86/kvm/emulate.c | 2 arch/x86/mm/dump_pagetables.c | 2 drivers/cpufreq/powernv-cpufreq.c | 9 - drivers/crypto/ixp4xx_crypto.c | 2 drivers/crypto/omap-sham.c | 3 drivers/edac/i5100_edac.c | 11 - drivers/gpu/drm/gma500/cdv_intel_dp.c | 2 drivers/gpu/drm/virtio/virtgpu_kms.c | 2 drivers/gpu/drm/virtio/virtgpu_vq.c | 10 + drivers/hid/hid-roccat-kone.c | 23 ++- drivers/infiniband/hw/mlx4/cm.c | 3 drivers/input/keyboard/ep93xx_keypad.c | 4 drivers/input/keyboard/omap4-keypad.c | 6 drivers/input/serio/sun4i-ps2.c | 9 - drivers/input/touchscreen/imx6ul_tsc.c | 27 ++-- drivers/media/firewire/firedtv-fw.c | 6 drivers/media/i2c/m5mols/m5mols_core.c | 3 drivers/media/i2c/tc358743.c | 2 drivers/media/pci/bt8xx/bttv-driver.c | 13 +- drivers/media/pci/saa7134/saa7134-tvaudio.c | 3 drivers/media/platform/exynos4-is/fimc-isp.c | 4 drivers/media/platform/exynos4-is/fimc-lite.c | 2 drivers/media/platform/exynos4-is/media-dev.c | 8 - drivers/media/platform/exynos4-is/mipi-csis.c | 4 drivers/media/platform/omap3isp/isp.c | 6 drivers/media/platform/sti/bdisp/bdisp-v4l2.c | 3 drivers/media/platform/ti-vpe/vpe.c | 2 drivers/media/rc/ati_remote.c | 4 drivers/media/usb/uvc/uvc_v4l2.c | 30 ++++ drivers/memory/fsl-corenet-cf.c | 6 drivers/memory/omap-gpmc.c | 4 drivers/mfd/rtsx_pcr.c | 4 drivers/mfd/sm501.c | 8 + drivers/misc/mic/scif/scif_rma.c | 4 drivers/misc/vmw_vmci/vmci_queue_pair.c | 10 - drivers/mmc/core/sdio_cis.c | 3 drivers/mtd/lpddr/lpddr2_nvm.c | 35 ++--- drivers/mtd/mtdoops.c | 11 - drivers/net/ethernet/cisco/enic/enic.h | 1 drivers/net/ethernet/cisco/enic/enic_api.c | 6 drivers/net/ethernet/cisco/enic/enic_main.c | 27 +++- drivers/net/ethernet/ibm/ibmveth.c | 13 +- drivers/net/ethernet/korina.c | 3 drivers/net/ethernet/realtek/r8169.c | 116 +++++++++--------- drivers/net/wan/hdlc.c | 10 + drivers/net/wan/hdlc_raw_eth.c | 1 drivers/net/wireless/ath/ath10k/htt_rx.c | 8 + drivers/net/wireless/ath/ath6kl/main.c | 3 drivers/net/wireless/ath/ath6kl/wmi.c | 5 drivers/net/wireless/ath/ath9k/hif_usb.c | 19 ++ drivers/net/wireless/ath/ath9k/htc_hst.c | 2 drivers/net/wireless/ath/wcn36xx/main.c | 2 drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c | 2 drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c | 4 drivers/net/wireless/mwifiex/scan.c | 2 drivers/net/wireless/mwifiex/sdio.c | 2 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 10 + drivers/scsi/csiostor/csio_hw.c | 2 drivers/scsi/ibmvscsi/ibmvfc.c | 1 drivers/scsi/mvumi.c | 1 drivers/scsi/qla4xxx/ql4_os.c | 2 drivers/tty/hvc/hvcs.c | 14 +- drivers/tty/ipwireless/network.c | 4 drivers/tty/ipwireless/tty.c | 2 drivers/tty/pty.c | 2 drivers/tty/serial/Kconfig | 1 drivers/usb/class/cdc-acm.c | 11 + drivers/usb/class/cdc-wdm.c | 72 ++++++++--- drivers/usb/core/urb.c | 89 ++++++++----- drivers/usb/gadget/function/f_printer.c | 16 ++ drivers/usb/gadget/function/u_ether.c | 2 drivers/usb/host/ohci-hcd.c | 16 +- drivers/vfio/pci/vfio_pci_intrs.c | 4 drivers/video/backlight/sky81452-backlight.c | 1 drivers/video/fbdev/sis/init.c | 11 - drivers/video/fbdev/vga16fb.c | 14 +- drivers/virt/fsl_hypervisor.c | 17 +- fs/cifs/asn1.c | 16 +- fs/ntfs/inode.c | 6 fs/quota/quota_v2.c | 1 fs/reiserfs/inode.c | 3 fs/reiserfs/super.c | 8 - fs/udf/inode.c | 25 ++- fs/udf/super.c | 6 fs/xfs/xfs_rtalloc.c | 11 + include/linux/compiler.h | 22 ++- include/linux/kasan-checks.h | 12 + include/net/ip.h | 6 include/scsi/scsi_common.h | 7 + include/trace/events/target.h | 12 - kernel/debug/kdb/kdb_io.c | 8 - kernel/power/hibernate.c | 11 - lib/crc32.c | 2 lib/string.c | 2 mm/kasan/kasan.c | 76 +++++++---- net/bluetooth/l2cap_sock.c | 7 - net/ipv4/icmp.c | 7 - net/ipv4/tcp_input.c | 2 net/netfilter/ipvs/ip_vs_ctl.c | 7 - net/nfc/netlink.c | 2 net/tipc/msg.c | 3 net/wireless/nl80211.c | 5 security/integrity/ima/ima_crypto.c | 2 sound/core/seq/oss/seq_oss.c | 7 - sound/firewire/bebob/bebob_hwdep.c | 3 tools/perf/util/intel-pt.c | 8 - 117 files changed, 811 insertions(+), 452 deletions(-)
Abhishek Pandit-Subedi (1):
Bluetooth: Only mark socket zapped after unlocking
Adam Goode (1):
media: uvcvideo: Ensure all probed info is returned to v4l2
Adrian Hunter (1):
perf intel-pt: Fix "context_switch event has no tid" error
Alex Dewar (1):
VMCI: check return value of get_user_pages_fast() for errors
Alex Williamson (1):
vfio/pci: Clear token on bypass registration failure
Andrey Ryabinin (6):
mm/kasan: print name of mem[set,cpy,move]() caller in report mm/kasan: add API to check memory regions compiler.h, kasan: Avoid duplicating __read_once_size_nocheck() compiler.h: Add read_word_at_a_time() function. lib/strscpy: Shut up KASAN false-positives in strscpy() x86/mm/ptdump: Fix soft lockup in page table walker
Arnd Bergmann (1):
mtd: lpddr: fix excessive stack usage with clang
Artem Savkov (1):
pty: do tty_flip_buffer_push without port->lock in pty_write
Brooke Basile (1):
ath9k: hif_usb: fix race condition between usb_get_urb() and usb_kill_anchored_urbs()
Bryan O'Donoghue (1):
wcn36xx: Fix reported 802.11n rx_highest rate wcn3660/wcn3680
Chris Chiu (1):
rtl8xxxu: prevent potential memory leak
Christoph Hellwig (1):
PM: hibernate: remove the bogus call to get_gendisk() in software_resume()
Christophe JAILLET (3):
crypto: ixp4xx - Fix the size used in a 'dma_free_coherent()' call
mwifiex: Do not use GFP_KERNEL in atomic context
scsi: qla4xxx: Fix an error handling path in 'qla4xxx_get_host_stats()'
Colin Ian King (1):
video: fbdev: vga16fb: fix setting of pixclock because a pass-by-value error
Cong Wang (1):
tipc: fix the skb_unshare() in tipc_buf_append()
Dan Carpenter (9):
ALSA: bebob: potential info leak in hwdep_read()
cifs: remove bogus debug code
ath6kl: prevent potential array overflow in ath6kl_add_new_sta()
ath9k: Fix potential out of bounds in ath9k_htc_txcompletion_cb()
HID: roccat: add bounds checking in kone_sysfs_write_settings()
ath6kl: wmi: prevent a shift wrapping bug in ath6kl_wmi_delete_pstream_cmd()
mfd: sm501: Fix leaks in probe()
Input: imx6ul_tsc - clean up some errors in imx6ul_tsc_resume()
memory: omap-gpmc: Fix a couple off by ones
Daniel Thompson (1):
kdb: Fix pager search for multi-line strings
Darrick J. Wong (1):
xfs: make sure the rt allocator doesn't run off the end
David Wilder (1):
ibmveth: Identify ingress large send packets.
Defang Bo (1):
nfc: Ensure presence of NFC_ATTR_FIRMWARE_NAME attribute in nfc_genl_fw_download()
Dinghao Liu (3):
EDAC/i5100: Fix error handling order in i5100_init_one()
media: omap3isp: Fix memleak in isp_probe
media: bdisp: Fix runtime PM imbalance on error
Doug Horn (1):
Fix use after free in get_capset_info callback.
Eli Billauer (1):
usb: core: Solve race condition in anchor cleanup functions
Eric Biggers (1):
reiserfs: only call unlock_new_inode() if I_NEW
Eric Dumazet (2):
icmp: randomize the global rate limiter
quota: clear padding in v2r1_mem2diskdqb()
Finn Thain (3):
powerpc/tau: Use appropriate temperature sample interval powerpc/tau: Remove duplicated set_thresholds() call powerpc/tau: Disable TAU between measurements
Greg Kroah-Hartman (1):
Linux 4.4.241
Guillaume Tucker (1):
ARM: 9007/1: l2c: fix prefetch bits init in L2X0_AUX_CTRL using DT values
Hamish Martin (1):
usb: ohci: Default to per-port over-current protection
Heiner Kallweit (1):
r8169: fix data corruption issue on RTL8402
Håkon Bugge (1):
IB/mlx4: Adjust delayed work when a dup is observed
Jan Kara (3):
udf: Limit sparing table size
udf: Avoid accessing uninitialized data on failed inode read
reiserfs: Fix memory leak in reiserfs_parse_options()
Jing Xiangfeng (2):
scsi: mvumi: Fix error return in mvumi_io_attach()
scsi: ibmvfc: Fix error return in ibmvfc_probe()
Johannes Berg (1):
nl80211: fix non-split wiphy information
Kajol Jain (1):
powerpc/perf/hv-gpci: Fix starting index value
Keita Suzuki (2):
misc: rtsx: Fix memory leak in rtsx_pci_probe
brcmsmac: fix memory leak in wlc_phy_attach_lcnphy
Krzysztof Kozlowski (4):
Input: ep93xx_keypad - fix handling of platform_get_irq() error
Input: omap4-keypad - fix handling of platform_get_irq() error
Input: sun4i-ps2 - fix handling of platform_get_irq() error
memory: fsl-corenet-cf: Fix handling of platform_get_irq() error
Lorenzo Colitti (1):
usb: gadget: u_ether: enable qmult on SuperSpeed Plus as well
Maciej Żenczykowski (1):
net/ipv4: always honour route mtu during forwarding
Mark Tomlinson (1):
mtd: mtdoops: Don't write panic data twice
Mauro Carvalho Chehab (1):
media: saa7134: avoid a shift overflow
Michal Simek (1):
arm64: dts: zynqmp: Remove additional compatible string for i2c IPs
Neal Cardwell (1):
tcp: fix to update snd_wl1 in bulk receiver fast path
Nicholas Mc Guire (2):
powerpc/pseries: Fix missing of_node_put() in rng_init() powerpc/icp-hv: Fix missing of_node_put() in success path
Oliver Neukum (2):
media: ati_remote: sanity check for both endpoints
USB: cdc-wdm: Make wdm_flush() interruptible and add wdm_fsync().
Pali Rohár (1):
mmc: sdio: Check for CISTPL_VERS_1 buffer size
Pavel Machek (1):
media: firewire: fix memory leak
Peilin Ye (1):
ipvs: Fix uninit-value in do_ip_vs_set_ctl()
Qiushi Wu (4):
media: ti-vpe: Fix a missing check and reference count leak
media: exynos4-is: Fix several reference count leaks due to pm_runtime_get_sync
media: exynos4-is: Fix a reference count leak due to pm_runtime_get_sync
media: exynos4-is: Fix a reference count leak
Robert Hoo (1):
KVM: x86: emulating RDPID failure shall return #UD rather than #GP
Roberto Sassu (1):
ima: Don't ignore errors from crypto_shash_update()
Roman Bolshakov (1):
scsi: target: core: Add CONTROL field for trace events
Rustam Kovhaev (1):
ntfs: add check for mft record size in superblock
Souptick Joarder (2):
drivers/virt/fsl_hypervisor: Fix error handling path
misc: mic: scif: Fix error handling path
Srikar Dronamraju (1):
cpufreq: powernv: Fix frame-size-overflow in powernv_cpufreq_reboot_notifier
Sylwester Nawrocki (1):
media: Revert "media: exynos4-is: Add missed check for pinctrl_lookup_state()"
Takashi Iwai (1):
ALSA: seq: oss: Avoid mutex lock for a long-time ioctl
Tero Kristo (1):
crypto: omap-sham - fix digcnt register handling with export/import
Thomas Gleixner (1):
net: enic: Cure the enic api locking trainwreck
Tianjia Zhang (1):
scsi: csiostor: Fix wrong return value in csio_hw_prep_fw()
Tobias Jordan (1):
lib/crc32.c: fix trivial typo in preprocessor condition
Tom Rix (5):
media: m5mols: Check function pointer in m5mols_sensor_power
media: tc358743: initialize variable
drm/gma500: fix error check
video: fbdev: sis: fix null ptr dereference
mwifiex: fix double free
Tong Zhang (2):
tty: serial: earlycon dependency
tty: ipwireless: fix error handling
Tyrel Datwyler (1):
tty: hvcs: Don't NULL tty->driver_data until hvcs_cleanup()
Valentin Vidic (2):
net: korina: fix kfree of rx/tx descriptor array
net: korina: cast KSEG0 address to pointer in kfree
Vasant Hegde (1):
powerpc/powernv/dump: Fix race while processing OPAL dump
Vincent Mailhol (1):
usb: cdc-acm: add quirk to blacklist ETAS ES58X devices
Wang Yufen (1):
brcm80211: fix possible memleak in brcmf_proto_msgbuf_attach
Xiaolong Huang (1):
media: media/pci: prevent memory leak in bttv_probe
Xie He (2):
net: hdlc: In hdlc_rcv, check to make sure dev is an HDLC device
net: hdlc_raw_eth: Clear the IFF_TX_SKB_SHARING flag after calling ether_setup
Zekun Shen (1):
ath10k: check idx validity in __ath10k_htt_rx_ring_fill_n()
Zqiang (1):
usb: gadget: function: printer: fix use-after-free in __lock_acquire
[email protected] (1):
backlight: sky81452-backlight: Fix refcount imbalance on error
Greg Kroah-Hartman
maintainerDocumentation/networking/ip-sysctl.txt +3 -1
@@ -868,12 +868,14 @@ icmp_ratelimit - INTEGER icmp_msgs_per_sec - INTEGER Limit maximal number of ICMP packets sent per second from this host. Only messages whose type matches icmp_ratemask (see below) are - controlled by this limit. + controlled by this limit. For security reasons, the precise count + of messages per second is randomized. Default: 1000 icmp_msgs_burst - INTEGER icmp_msgs_per_sec controls number of ICMP packets sent per second, while icmp_msgs_burst controls the burst size of these packets. + For security reasons, the precise burst size is randomized. Default: 50 icmp_ratemask - INTEGER
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 4 -SUBLEVEL = 240 +SUBLEVEL = 241 EXTRAVERSION = NAME = Blurry Fish Butt
arch/arm/mm/cache-l2x0.c +12 -4
@@ -1228,20 +1228,28 @@ static void __init l2c310_of_parse(const struct device_node *np, ret =of_property_read_u32 (np,"prefetch-data" , &val);if (ret ==0 ) { -if (val) +if (val) { prefetch |=L310_PREFETCH_CTRL_DATA_PREFETCH ; -else + *aux_val |=L310_PREFETCH_CTRL_DATA_PREFETCH ; + }else { prefetch &= ~L310_PREFETCH_CTRL_DATA_PREFETCH ; + *aux_val &= ~L310_PREFETCH_CTRL_DATA_PREFETCH ; + } + *aux_mask &= ~L310_PREFETCH_CTRL_DATA_PREFETCH ; }else if (ret != -EINVAL ) {pr_err ("L2C-310 OF prefetch-data property value is missing\n" ); } ret =of_property_read_u32 (np,"prefetch-instr" , &val);if (ret ==0 ) { -if (val) +if (val) { prefetch |=L310_PREFETCH_CTRL_INSTR_PREFETCH ; -else + *aux_val |=L310_PREFETCH_CTRL_INSTR_PREFETCH ; + }else { prefetch &= ~L310_PREFETCH_CTRL_INSTR_PREFETCH ; + *aux_val &= ~L310_PREFETCH_CTRL_INSTR_PREFETCH ; + } + *aux_mask &= ~L310_PREFETCH_CTRL_INSTR_PREFETCH ; }else if (ret != -EINVAL ) {pr_err ("L2C-310 OF prefetch-instr property value is missing\n" ); }
arch/arm64/boot/dts/xilinx/zynqmp.dtsi +2 -2
@@ -191,7 +191,7 @@ }; i2c0: i2c@ff020000 { - compatible = "cdns,i2c-r1p14", "cdns,i2c-r1p10"; + compatible = "cdns,i2c-r1p14"; status = "disabled"; interrupt-parent = <&gic>; interrupts = <0 17 4>;
@@ -202,7 +202,7 @@ }; i2c1: i2c@ff030000 { - compatible = "cdns,i2c-r1p14", "cdns,i2c-r1p10"; + compatible = "cdns,i2c-r1p14"; status = "disabled"; interrupt-parent = <&gic>; interrupts = <0 18 4>;
arch/powerpc/include/asm/reg.h +1 -1
@@ -647,7 +647,7 @@#define THRM1_TIN (1 << 31)#define THRM1_TIV (1 << 30)#define THRM1_THRES (x) ((x&0x7f)<<23) -#define THRM3_SITV (x) ((x&0x3fff)<<1) +#define THRM3_SITV (x) ((x & 0x1fff) << 1)#define THRM1_TID (1<<2)#define THRM1_TIE (1<<1)#define THRM1_V (1<<0)
arch/powerpc/kernel/tau_6xx.c +28 -54
123 lines not on this page · raw message
arch/powerpc/perf/hv-gpci-requests.h +3 -3
@@ -94,7 +94,7 @@ REQUEST(__field(0, 8, partition_id)#define REQUEST_NAME system_performance_capabilities#define REQUEST_NUM 0x40 -#define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff" +#define REQUEST_IDX_KIND "starting_index=0xffffffff"#include I (REQUEST_BEGIN ) REQUEST(__field(0, 1, perf_collect_privileged) __field(0x1, 1, capability_mask)
@@ -222,7 +222,7 @@ REQUEST(__field(0, 2, partition_id)#define REQUEST_NAME system_hypervisor_times#define REQUEST_NUM 0xF0 -#define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff" +#define REQUEST_IDX_KIND "starting_index=0xffffffff"#include I (REQUEST_BEGIN ) REQUEST(__count(0, 8, time_spent_to_dispatch_virtual_processors) __count(0x8, 8, time_spent_processing_virtual_processor_timers)
@@ -233,7 +233,7 @@ REQUEST(__count(0, 8, time_spent_to_dispatch_virtual_processors)#define REQUEST_NAME system_tlbie_count_and_time#define REQUEST_NUM 0xF4 -#define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff" +#define REQUEST_IDX_KIND "starting_index=0xffffffff"#include I (REQUEST_BEGIN )REQUEST (__count (0 ,8 , tlbie_instructions_issued)/*
arch/powerpc/platforms/Kconfig +2 -7
@@ -242,7 +242,7 @@ config TAU temp is actually what /proc/cpuinfo says it is. config TAU_INT - bool "Interrupt driven TAU driver (DANGEROUS)" + bool "Interrupt driven TAU driver (EXPERIMENTAL)" depends on TAU ---help--- The TAU supports an interrupt driven mode which causes an interrupt
@@ -250,12 +250,7 @@ config TAU_INT to get notified the temp has exceeded a range. With this option off, a timer is used to re-check the temperature periodically. - However, on some cpus it appears that the TAU interrupt hardware - is buggy and can cause a situation which would lead unexplained hard - lockups. - - Unless you are extending the TAU driver, or enjoy kernel/hardware - debugging, leave this option off. + If in doubt, say N here. config TAU_AVERAGE bool "Average high and low temp"
arch/powerpc/platforms/powernv/opal-dump.c +29 -12
65 lines not on this page · raw message
arch/powerpc/platforms/pseries/rng.c +1 -0
@@ -40,6 +40,7 @@ static __init int rng_init(void) ppc_md.get_random_seed = pseries_get_random_long; +of_node_put (dn);return 0 ; }machine_subsys_initcall (pseries, rng_init);
arch/powerpc/sysdev/xics/icp-hv.c +1 -0
@@ -179,6 +179,7 @@ int icp_hv_init(void) icp_ops = &icp_hv_ops; +of_node_put (np);return 0 ; }
arch/x86/kvm/emulate.c +1 -1
@@ -3524,7 +3524,7 @@ static int em_rdpid(struct x86_emulate_ctxt *ctxt)u64 tsc_aux =0 ;if (ctxt->ops->get_msr (ctxt,MSR_TSC_AUX , &tsc_aux)) -return emulate_gp (ctxt,0 ); +return emulate_ud (ctxt); ctxt->dst.val = tsc_aux;return X86EMUL_CONTINUE ; }
arch/x86/mm/dump_pagetables.c +2 -0
@@ -15,6 +15,7 @@#include <linux/debugfs.h> #include <linux/mm.h> #include <linux/module.h> +#include <linux/sched.h> #include <linux/seq_file.h> #include <asm/pgtable.h>
@@ -407,6 +408,7 @@ static void ptdump_walk_pgd_level_core(struct seq_file *m, pgd_t *pgd, }else note_page (m, &st,__pgprot (0 ),1 ); +cond_resched (); start++; }
drivers/cpufreq/powernv-cpufreq.c +6 -3
@@ -410,12 +410,15 @@ static int powernv_cpufreq_reboot_notifier(struct notifier_block *nb, unsigned long action, void *unused) { int cpu; -struct cpufreq_policy cpu_policy; +struct cpufreq_policy *cpu_policy; rebooting = true;for_each_online_cpu (cpu) { -cpufreq_get_policy (&cpu_policy, cpu); -powernv_cpufreq_target_index (&cpu_policy,get_nominal_index ()); + cpu_policy =cpufreq_cpu_get (cpu); +if (!cpu_policy) +continue ; +powernv_cpufreq_target_index (cpu_policy,get_nominal_index ()); +cpufreq_cpu_put (cpu_policy); }return NOTIFY_DONE ;
drivers/crypto/ixp4xx_crypto.c +1 -1
@@ -533,7 +533,7 @@ static void release_ixp_crypto(struct device *dev)if (crypt_virt) {dma_free_coherent (dev, -NPE_QLEN_TOTAL *sizeof (struct crypt_ctl ), +NPE_QLEN *sizeof (struct crypt_ctl ), crypt_virt, crypt_phys); }return ;
drivers/crypto/omap-sham.c +3 -0
@@ -453,6 +453,9 @@ static void omap_sham_write_ctrl_omap4(struct omap_sham_dev *dd, size_t length,struct omap_sham_reqctx *ctx =ahash_request_ctx (dd->req);u32 val, mask; +if (likely (ctx->digcnt)) +omap_sham_write (dd,SHA_REG_DIGCNT (dd), ctx->digcnt); +/* * Setting ALGO_CONST only for the first iteration and * CLOSE_HASH only for the last one. Note that flags mode bits
drivers/edac/i5100_edac.c +5 -6
@@ -1075,16 +1075,15 @@ static int i5100_init_one(struct pci_dev *pdev, const struct pci_device_id *id) PCI_DEVICE_ID_INTEL_5100_19, 0);if (!einj) { ret = -ENODEV ; - goto bail_einj; + goto bail_mc_free; } rc =pci_enable_device (einj);if (rc <0 ) { ret = rc; - goto bail_disable_einj; + goto bail_einj; } - mci->pdev = &pdev->dev; priv = mci->pvt_info;
@@ -1151,14 +1150,14 @@ static int i5100_init_one(struct pci_dev *pdev, const struct pci_device_id *id) bail_scrub: priv->scrub_enable =0 ;cancel_delayed_work_sync (&(priv->i5100_scrubbing)); -edac_mc_free (mci); - -bail_disable_einj:pci_disable_device (einj); bail_einj:pci_dev_put (einj); +bail_mc_free: +edac_mc_free (mci); + bail_disable_ch1:pci_disable_device (ch1mm);
drivers/gpu/drm/gma500/cdv_intel_dp.c +1 -1
@@ -2120,7 +2120,7 @@ cdv_intel_dp_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev intel_dp->dpcd, sizeof(intel_dp->dpcd));cdv_intel_edp_panel_vdd_off (gma_encoder); -if (ret ==0 ) { +if (ret <=0 ) {/* if this fails, presume the device is a ghost */ DRM_INFO ("failed to retrieve link info, disabling eDP\n" );cdv_intel_dp_encoder_destroy (encoder);
drivers/gpu/drm/virtio/virtgpu_kms.c +2 -0
@@ -113,8 +113,10 @@ static void virtio_gpu_get_capsets(struct virtio_gpu_device *vgdev, vgdev->capsets[i].id > 0, 5 * HZ);if (ret ==0 ) {DRM_ERROR ("timed out waiting for cap set %d\n" , i); +spin_lock (&vgdev->display_info_lock);kfree (vgdev->capsets); vgdev->capsets =NULL ; +spin_unlock (&vgdev->display_info_lock);return ; } DRM_INFO("cap set %d: id %d, max-version %d, max-size %d\n",
drivers/gpu/drm/virtio/virtgpu_vq.c +7 -3
@@ -596,9 +596,13 @@ static void virtio_gpu_cmd_get_capset_info_cb(struct virtio_gpu_device *vgdev,int i =le32_to_cpu (cmd->capset_index);spin_lock (&vgdev->display_info_lock); - vgdev->capsets[i].id =le32_to_cpu (resp->capset_id); - vgdev->capsets[i].max_version =le32_to_cpu (resp->capset_max_version); - vgdev->capsets[i].max_size =le32_to_cpu (resp->capset_max_size); +if (vgdev->capsets) { + vgdev->capsets[i].id =le32_to_cpu (resp->capset_id); + vgdev->capsets[i].max_version =le32_to_cpu (resp->capset_max_version); + vgdev->capsets[i].max_size =le32_to_cpu (resp->capset_max_size); + }else { +DRM_ERROR ("invalid capset memory." ); + }spin_unlock (&vgdev->display_info_lock);wake_up (&vgdev->resp_wq); }
drivers/hid/hid-roccat-kone.c +16 -7
@@ -299,31 +299,40 @@ static ssize_t kone_sysfs_write_settings(struct file *fp, struct kobject *kobj,struct kone_device *kone =hid_get_drvdata (dev_get_drvdata (dev));struct usb_device *usb_dev =interface_to_usbdev (to_usb_interface (dev));int retval =0 , difference, old_profile; +struct kone_settings *settings = (struct kone_settings *)buf;/* I need to get my data in one piece */ if (off !=0 || count !=sizeof (struct kone_settings ))return -EINVAL ;mutex_lock (&kone->kone_lock); - difference =memcmp (buf, &kone->settings,sizeof (struct kone_settings )); + difference =memcmp (settings, &kone->settings, +sizeof (struct kone_settings ));if (difference) { - retval =kone_set_settings (usb_dev, - (struct kone_settings const *)buf); -if (retval) { -mutex_unlock (&kone->kone_lock); -return retval; +if (settings->startup_profile <1 || + settings->startup_profile >5 ) { + retval = -EINVAL ; + goto unlock; } + retval =kone_set_settings (usb_dev, settings); +if (retval) + goto unlock; + old_profile = kone->settings.startup_profile; -memcpy (&kone->settings, buf,sizeof (struct kone_settings )); +memcpy (&kone->settings, settings,sizeof (struct kone_settings ));kone_profile_activated (kone, kone->settings.startup_profile);if (kone->settings.startup_profile != old_profile)kone_profile_report (kone, kone->settings.startup_profile); } +unlock:mutex_unlock (&kone->kone_lock); +if (retval) +return retval; +return sizeof (struct kone_settings ); } static BIN_ATTR(settings, 0660, kone_sysfs_read_settings,
drivers/infiniband/hw/mlx4/cm.c +3 -0
@@ -309,6 +309,9 @@ static void schedule_delayed(struct ib_device *ibdev, struct id_map_entry *id)if (!sriov->is_going_down) { id->scheduled_delete =1 ;schedule_delayed_work (&id->timeout,CM_CLEANUP_CACHE_TIMEOUT ); + }else if (id->scheduled_delete) { +/* Adjust timeout if already scheduled */ +mod_delayed_work (system_wq, &id->timeout,CM_CLEANUP_CACHE_TIMEOUT ); }spin_unlock_irqrestore (&sriov->going_down_lock, flags);spin_unlock (&sriov->id_map_lock);
drivers/input/keyboard/ep93xx_keypad.c +2 -2
@@ -257,8 +257,8 @@ static int ep93xx_keypad_probe(struct platform_device *pdev) } keypad->irq =platform_get_irq (pdev,0 ); -if (!keypad->irq) { - err = -ENXIO ; +if (keypad->irq <0 ) { + err = keypad->irq; goto failed_free; }
drivers/input/keyboard/omap4-keypad.c +2 -4
@@ -253,10 +253,8 @@ static int omap4_keypad_probe(struct platform_device *pdev) } irq =platform_get_irq (pdev,0 ); -if (!irq) { -dev_err (&pdev->dev,"no keyboard irq assigned\n" ); -return -EINVAL ; - } +if (irq <0 ) +return irq; keypad_data =kzalloc (sizeof (struct omap4_keypad ),GFP_KERNEL );if (!keypad_data) {
drivers/input/serio/sun4i-ps2.c +3 -6
@@ -210,7 +210,6 @@ static int sun4i_ps2_probe(struct platform_device *pdev)struct sun4i_ps2data *drvdata;struct serio *serio;struct device *dev = &pdev->dev; -unsigned int irq;int error; drvdata =kzalloc (sizeof (struct sun4i_ps2data ),GFP_KERNEL );
@@ -263,14 +262,12 @@ static int sun4i_ps2_probe(struct platform_device *pdev)writel (0 , drvdata->reg_base +PS2_REG_GCTL );/* Get IRQ for the device */ - irq =platform_get_irq (pdev,0 ); -if (!irq) { -dev_err (dev,"no IRQ found\n" ); - error = -ENXIO ; + drvdata->irq =platform_get_irq (pdev,0 ); +if (drvdata->irq <0 ) { + error = drvdata->irq; goto err_disable_clk; } - drvdata->irq = irq; drvdata->serio = serio; drvdata->dev = dev;
drivers/input/touchscreen/imx6ul_tsc.c +16 -11
@@ -490,20 +490,25 @@ static int __maybe_unused imx6ul_tsc_resume(struct device *dev)mutex_lock (&input_dev->mutex); -if (input_dev->users) { - retval =clk_prepare_enable (tsc->adc_clk); -if (retval) - goto out; - - retval =clk_prepare_enable (tsc->tsc_clk); -if (retval) { -clk_disable_unprepare (tsc->adc_clk); - goto out; - } +if (!input_dev->users) + goto out; - retval =imx6ul_tsc_init (tsc); + retval =clk_prepare_enable (tsc->adc_clk); +if (retval) + goto out; + + retval =clk_prepare_enable (tsc->tsc_clk); +if (retval) { +clk_disable_unprepare (tsc->adc_clk); + goto out; } + retval =imx6ul_tsc_init (tsc); +if (retval) { +clk_disable_unprepare (tsc->tsc_clk); +clk_disable_unprepare (tsc->adc_clk); + goto out; + } out:mutex_unlock (&input_dev->mutex);return retval;
drivers/media/firewire/firedtv-fw.c +4 -2
@@ -271,8 +271,10 @@ static int node_probe(struct fw_unit *unit, const struct ieee1394_device_id *id) name_len =fw_csr_string (unit->directory,CSR_MODEL , name,sizeof (name)); -if (name_len <0 ) -return name_len; +if (name_len <0 ) { + err = name_len; + goto fail_free; + }for (i =ARRAY_SIZE (model_names); --i; )if (strlen (model_names[i]) <= name_len &&strncmp (name, model_names[i], name_len) ==0 )
drivers/media/i2c/m5mols/m5mols_core.c +2 -1
@@ -754,7 +754,8 @@ static int m5mols_sensor_power(struct m5mols_info *info, bool enable) ret =regulator_bulk_enable (ARRAY_SIZE (supplies), supplies);if (ret) { - info->set_power (&client->dev,0 ); +if (info->set_power) + info->set_power (&client->dev,0 );return ret; }
drivers/media/i2c/tc358743.c +1 -1
@@ -1325,7 +1325,7 @@ static int tc358743_isr(struct v4l2_subdev *sd, u32 status, bool *handled)static irqreturn_t tc358743_irq_handler (int irq,void *dev_id) {struct tc358743_state *state = dev_id; -bool handled; +bool handled = false;tc358743_isr (&state->sd,0 , &handled);
drivers/media/pci/bt8xx/bttv-driver.c +10 -3
@@ -4053,11 +4053,13 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id) btv->id = dev->device;if (pci_enable_device (dev)) {pr_warn ("%d: Can't enable device\n" , btv->c.nr); -return -EIO ; + result = -EIO ; + goto free_mem; }if (pci_set_dma_mask (dev,DMA_BIT_MASK (32 ))) {pr_warn ("%d: No suitable DMA available\n" , btv->c.nr); -return -EIO ; + result = -EIO ; + goto free_mem; } if (!request_mem_region(pci_resource_start(dev,0), pci_resource_len(dev,0),
@@ -4065,7 +4067,8 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id)pr_warn ("%d: can't request iomem (0x%llx)\n" , btv->c.nr, (unsigned long long )pci_resource_start (dev,0 )); -return -EBUSY ; + result = -EBUSY ; + goto free_mem; }pci_set_master (dev);pci_set_command (dev);
@@ -4251,6 +4254,10 @@ fail0:release_mem_region (pci_resource_start (btv->c.pci,0 ),pci_resource_len (btv->c.pci,0 ));pci_disable_device (btv->c.pci); + +free_mem: + bttvs[btv->c.nr] =NULL ; +kfree (btv);return result; }
drivers/media/pci/saa7134/saa7134-tvaudio.c +2 -1
@@ -696,7 +696,8 @@ int saa_dsp_writel(struct saa7134_dev *dev, int reg, u32 value) {int err; -audio_dbg (2 ,"dsp write reg 0x%x = 0x%06x\n" , reg <<2 , value); +audio_dbg (2 ,"dsp write reg 0x%x = 0x%06x\n" , + (reg <<2 ) &0xffffffff , value); err =saa_dsp_wait_bit (dev,SAA7135_DSP_RWSTATE_WRR );if (err <0 )return err;
drivers/media/platform/exynos4-is/fimc-isp.c +3 -1
@@ -311,8 +311,10 @@ static int fimc_isp_subdev_s_power(struct v4l2_subdev *sd, int on)if (on) { ret =pm_runtime_get_sync (&is->pdev->dev); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put (&is->pdev->dev);return ret; + }set_bit (IS_ST_PWR_ON , &is->state); ret =fimc_is_start_firmware (is);
drivers/media/platform/exynos4-is/fimc-lite.c +1 -1
@@ -487,7 +487,7 @@ static int fimc_lite_open(struct file *file)set_bit (ST_FLITE_IN_USE , &fimc->state); ret =pm_runtime_get_sync (&fimc->pdev->dev);if (ret <0 ) - goto unlock; + goto err_pm; ret =v4l2_fh_open (file);if (ret <0 )
drivers/media/platform/exynos4-is/media-dev.c +4 -4
@@ -413,8 +413,10 @@ static int fimc_md_register_sensor_entities(struct fimc_md *fmd)return -ENXIO ; ret =pm_runtime_get_sync (fmd->pmf); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put (fmd->pmf);return ret; + } fmd->num_sensors =0 ;
@@ -1170,11 +1172,9 @@ static int fimc_md_get_pinctrl(struct fimc_md *fmd)if (IS_ERR (pctl->state_default))return PTR_ERR (pctl->state_default); +/* PINCTRL_STATE_IDLE is optional */ pctl->state_idle =pinctrl_lookup_state (pctl->pinctrl,PINCTRL_STATE_IDLE ); -if (IS_ERR (pctl->state_idle)) -return PTR_ERR (pctl->state_idle); -return 0 ; }
drivers/media/platform/exynos4-is/mipi-csis.c +3 -1
@@ -513,8 +513,10 @@ static int s5pcsis_s_stream(struct v4l2_subdev *sd, int enable)if (enable) {s5pcsis_clear_counters (state); ret =pm_runtime_get_sync (&state->pdev->dev); -if (ret && ret !=1 ) +if (ret && ret !=1 ) { +pm_runtime_put_noidle (&state->pdev->dev);return ret; + } }mutex_lock (&state->lock);
drivers/media/platform/omap3isp/isp.c +4 -2
@@ -2388,8 +2388,10 @@ static int isp_probe(struct platform_device *pdev) mem =platform_get_resource (pdev,IORESOURCE_MEM , i); isp->mmio_base[map_idx] =devm_ioremap_resource (isp->dev, mem); -if (IS_ERR (isp->mmio_base[map_idx])) -return PTR_ERR (isp->mmio_base[map_idx]); +if (IS_ERR (isp->mmio_base[map_idx])) { + ret =PTR_ERR (isp->mmio_base[map_idx]); + goto error; + } } ret =isp_get_clocks (isp);
drivers/media/platform/sti/bdisp/bdisp-v4l2.c +1 -2
@@ -1369,7 +1369,7 @@ static int bdisp_probe(struct platform_device *pdev) ret =pm_runtime_get_sync (dev);if (ret <0 ) {dev_err (dev,"failed to set PM\n" ); - goto err_dbg; + goto err_pm; }/* Continuous memory allocator */
@@ -1406,7 +1406,6 @@ err_vb2_dma:vb2_dma_contig_cleanup_ctx (bdisp->alloc_ctx); err_pm:pm_runtime_put (dev); -err_dbg:bdisp_debugfs_remove (bdisp); err_v4l2:v4l2_device_unregister (&bdisp->v4l2_dev);
drivers/media/platform/ti-vpe/vpe.c +2 -0
@@ -2135,6 +2135,8 @@ static int vpe_runtime_get(struct platform_device *pdev) r =pm_runtime_get_sync (&pdev->dev);WARN_ON (r <0 ); +if (r) +pm_runtime_put_noidle (&pdev->dev);return r <0 ? r :0 ; }
drivers/media/rc/ati_remote.c +4 -0
@@ -843,6 +843,10 @@ static int ati_remote_probe(struct usb_interface *interface,err ("%s: endpoint_in message size==0? \n" , __func__);return -ENODEV ; } +if (!usb_endpoint_is_int_out (endpoint_out)) { +err ("%s: Unexpected endpoint_out\n" , __func__); +return -ENODEV ; + } ati_remote =kzalloc (sizeof (struct ati_remote ),GFP_KERNEL ); rc_dev =rc_allocate_device ();
drivers/media/usb/uvc/uvc_v4l2.c +30 -0
@@ -242,11 +242,41 @@ static int uvc_v4l2_try_format(struct uvc_streaming *stream,if (ret <0 ) goto done; +/* After the probe, update fmt with the values returned from +* negotiation with the device. +*/ +for (i =0 ; i < stream->nformats; ++i) { +if (probe->bFormatIndex == stream->format[i].index) { + format = &stream->format[i]; +break ; + } + } + +if (i == stream->nformats) { +uvc_trace (UVC_TRACE_FORMAT ,"Unknown bFormatIndex %u\n" , + probe->bFormatIndex); +return -EINVAL ; + } + +for (i =0 ; i < format->nframes; ++i) { +if (probe->bFrameIndex == format->frame[i].bFrameIndex) { + frame = &format->frame[i]; +break ; + } + } + +if (i == format->nframes) { +uvc_trace (UVC_TRACE_FORMAT ,"Unknown bFrameIndex %u\n" , + probe->bFrameIndex); +return -EINVAL ; + } + fmt->fmt.pix.width = frame->wWidth; fmt->fmt.pix.height = frame->wHeight; fmt->fmt.pix.field =V4L2_FIELD_NONE ; fmt->fmt.pix.bytesperline = format->bpp * frame->wWidth /8 ; fmt->fmt.pix.sizeimage = probe->dwMaxVideoFrameSize; + fmt->fmt.pix.pixelformat = format->fcc; fmt->fmt.pix.colorspace = format->colorspace; fmt->fmt.pix.priv =0 ;
drivers/memory/fsl-corenet-cf.c +2 -4
@@ -215,10 +215,8 @@ static int ccf_probe(struct platform_device *pdev)dev_set_drvdata (&pdev->dev, ccf); irq =platform_get_irq (pdev,0 ); -if (!irq) { -dev_err (&pdev->dev,"%s: no irq\n" , __func__); -return -ENXIO ; - } +if (irq <0 ) +return irq; ret =devm_request_irq (&pdev->dev, irq, ccf_irq,0 , pdev->name, ccf);if (ret) {
drivers/memory/omap-gpmc.c +2 -2
@@ -928,7 +928,7 @@ static int gpmc_cs_remap(int cs, u32 base)int ret;u32 old_base, size; -if (cs > gpmc_cs_num) { +if (cs >= gpmc_cs_num) {pr_err ("%s: requested chip-select is disabled\n" , __func__);return -ENODEV ; }
@@ -963,7 +963,7 @@ int gpmc_cs_request(int cs, unsigned long size, unsigned long *base)struct resource *res = &gpmc->mem;int r =-1 ; -if (cs > gpmc_cs_num) { +if (cs >= gpmc_cs_num) {pr_err ("%s: requested chip-select is disabled\n" , __func__);return -ENODEV ; }
drivers/mfd/rtsx_pcr.c +3 -1
@@ -1255,12 +1255,14 @@ static int rtsx_pci_probe(struct pci_dev *pcidev, ret =mfd_add_devices (&pcidev->dev, pcr->id, rtsx_pcr_cells,ARRAY_SIZE (rtsx_pcr_cells),NULL ,0 ,NULL );if (ret <0 ) - goto disable_irq; + goto free_slots;schedule_delayed_work (&pcr->idle_work,msecs_to_jiffies (200 ));return 0 ; +free_slots: +kfree (pcr->slots); disable_irq:free_irq (pcr->irq, (void *)pcr); disable_msi:
drivers/mfd/sm501.c +7 -1
@@ -1430,8 +1430,14 @@ static int sm501_plat_probe(struct platform_device *dev) goto err_claim; } -return sm501_init_dev (sm); + ret =sm501_init_dev (sm); +if (ret) + goto err_unmap; + +return 0 ; + err_unmap: +iounmap (sm->regs); err_claim:release_resource (sm->regs_claim);kfree (sm->regs_claim);
drivers/misc/mic/scif/scif_rma.c +2 -2
@@ -1403,6 +1403,8 @@ retry: NULL);up_write (&mm->mmap_sem);if (nr_pages != pinned_pages->nr_pages) { +if (pinned_pages->nr_pages <0 ) + pinned_pages->nr_pages =0 ;if (try_upgrade) {if (ulimit) __scif_dec_pinned_vm_lock(mm,
@@ -1423,7 +1425,6 @@ retry:if (pinned_pages->nr_pages < nr_pages) { err = -EFAULT ; - pinned_pages->nr_pages = nr_pages; goto dec_pinned; }
@@ -1436,7 +1437,6 @@ dec_pinned:__scif_dec_pinned_vm_lock (mm, nr_pages,0 );/* Something went wrong! Rollback */ error_unmap: - pinned_pages->nr_pages = nr_pages;scif_destroy_pinned_pages (pinned_pages); *pages =NULL ; dev_dbg(scif_info.mdev.this_device,
drivers/misc/vmw_vmci/vmci_queue_pair.c +6 -4
@@ -758,8 +758,9 @@ static int qp_host_get_user_memory(u64 produce_uva,if (retval < (int )produce_q->kernel_if->num_pages) {pr_debug ("get_user_pages_fast(produce) failed (retval=%d)" , retval); -qp_release_pages (produce_q->kernel_if->u.h.header_page, - retval, false); +if (retval >0 ) +qp_release_pages (produce_q->kernel_if->u.h.header_page, + retval, false); err =VMCI_ERROR_NO_MEM ; goto out; }
@@ -770,8 +771,9 @@ static int qp_host_get_user_memory(u64 produce_uva,if (retval < (int )consume_q->kernel_if->num_pages) {pr_debug ("get_user_pages_fast(consume) failed (retval=%d)" , retval); -qp_release_pages (consume_q->kernel_if->u.h.header_page, - retval, false); +if (retval >0 ) +qp_release_pages (consume_q->kernel_if->u.h.header_page, + retval, false);qp_release_pages (produce_q->kernel_if->u.h.header_page, produce_q->kernel_if->num_pages, false); err =VMCI_ERROR_NO_MEM ;
drivers/mmc/core/sdio_cis.c +3 -0
@@ -30,6 +30,9 @@ static int cistpl_vers_1(struct mmc_card *card, struct sdio_func *func,unsigned i, nr_strings;char **buffer, *string; +if (size <2 ) +return 0 ; +/* Find all null-terminated (including zero length) strings in the TPLLV1_INFO field. Trailing garbage is ignored. */ buf +=2 ;
drivers/mtd/lpddr/lpddr2_nvm.c +19 -16
@@ -408,6 +408,17 @@ static int lpddr2_nvm_lock(struct mtd_info *mtd, loff_t start_add,return lpddr2_nvm_do_block_op (mtd, start_add, len,LPDDR2_NVM_LOCK ); } +static const struct mtd_info lpddr2_nvm_mtd_info = { + .type =MTD_RAM , + .writesize =1 , + .flags = (MTD_CAP_NVRAM |MTD_POWERUP_LOCK ), + ._read = lpddr2_nvm_read, + ._write = lpddr2_nvm_write, + ._erase = lpddr2_nvm_erase, + ._unlock = lpddr2_nvm_unlock, + ._lock = lpddr2_nvm_lock, +}; +/* * lpddr2_nvm driver probe method */
@@ -448,6 +459,7 @@ static int lpddr2_nvm_probe(struct platform_device *pdev) .pfow_base = OW_BASE_ADDRESS, .fldrv_priv = pcm_data, }; +if (IS_ERR (map->virt))return PTR_ERR (map->virt);
@@ -459,22 +471,13 @@ static int lpddr2_nvm_probe(struct platform_device *pdev)return PTR_ERR (pcm_data->ctl_regs);/* Populate mtd_info data structure */ - *mtd = (struct mtd_info ) { - .dev = { .parent = &pdev->dev }, - .name = pdev->dev.init_name, - .type =MTD_RAM , - .priv = map, - .size =resource_size (add_range), - .erasesize =ERASE_BLOCKSIZE * pcm_data->bus_width, - .writesize =1 , - .writebufsize =WRITE_BUFFSIZE * pcm_data->bus_width, - .flags = (MTD_CAP_NVRAM |MTD_POWERUP_LOCK ), - ._read = lpddr2_nvm_read, - ._write = lpddr2_nvm_write, - ._erase = lpddr2_nvm_erase, - ._unlock = lpddr2_nvm_unlock, - ._lock = lpddr2_nvm_lock, - }; + *mtd = lpddr2_nvm_mtd_info; + mtd->dev.parent = &pdev->dev; + mtd->name = pdev->dev.init_name; + mtd->priv = map; + mtd->size =resource_size (add_range); + mtd->erasesize =ERASE_BLOCKSIZE * pcm_data->bus_width; + mtd->writebufsize =WRITE_BUFFSIZE * pcm_data->bus_width;/* Verify the presence of the device looking for PFOW string */ if (!lpddr2_nvm_pfow_present (map)) {
drivers/mtd/mtdoops.c +6 -5
@@ -313,12 +313,13 @@ static void mtdoops_do_dump(struct kmsg_dumper *dumper,kmsg_dump_get_buffer (dumper, true, cxt->oops_buf +MTDOOPS_HEADER_SIZE , record_size -MTDOOPS_HEADER_SIZE ,NULL ); -/* Panics must be written immediately */ -if (reason !=KMSG_DUMP_OOPS ) +if (reason !=KMSG_DUMP_OOPS ) { +/* Panics must be written immediately */ mtdoops_write (cxt,1 ); - -/* For other cases, schedule work to write it "nicely" */ -schedule_work (&cxt->work_write); + }else { +/* For other cases, schedule work to write it "nicely" */ +schedule_work (&cxt->work_write); + } }static void mtdoops_notify_add (struct mtd_info *mtd)
drivers/net/ethernet/cisco/enic/enic.h +1 -0
@@ -163,6 +163,7 @@ struct enic {u16 num_vfs;#endif spinlock_t enic_api_lock; +bool enic_api_busy;struct enic_port_profile *pp;/* work queue cache line section */
drivers/net/ethernet/cisco/enic/enic_api.c +6 -0
@@ -34,6 +34,12 @@ int enic_api_devcmd_proxy_by_index(struct net_device *netdev, int vf,struct vnic_dev *vdev = enic->vdev;spin_lock (&enic->enic_api_lock); +while (enic->enic_api_busy) { +spin_unlock (&enic->enic_api_lock); +cpu_relax (); +spin_lock (&enic->enic_api_lock); + } +spin_lock_bh (&enic->devcmd_lock);vnic_dev_cmd_proxy_by_index_start (vdev, vf);
drivers/net/ethernet/cisco/enic/enic_main.c +21 -6
@@ -1938,8 +1938,6 @@ static int enic_dev_wait(struct vnic_dev *vdev,int done;int err; -BUG_ON (in_interrupt ()); - err =start (vdev, arg);if (err)return err;
@@ -2116,6 +2114,13 @@ static int enic_set_rss_nic_cfg(struct enic *enic) rss_hash_bits, rss_base_cpu, rss_enable); } +static void enic_set_api_busy (struct enic *enic,bool busy) +{ +spin_lock (&enic->enic_api_lock); + enic->enic_api_busy = busy; +spin_unlock (&enic->enic_api_lock); +} +static void enic_reset (struct work_struct *work) { struct enic *enic = container_of(work, struct enic, reset);
@@ -2125,7 +2130,9 @@ static void enic_reset(struct work_struct *work)rtnl_lock (); -spin_lock (&enic->enic_api_lock); +/* Stop any activity from infiniband */ +enic_set_api_busy (enic, true); +enic_stop (enic->netdev);enic_dev_soft_reset (enic);enic_reset_addr_lists (enic);
@@ -2133,7 +2140,10 @@ static void enic_reset(struct work_struct *work)enic_set_rss_nic_cfg (enic);enic_dev_set_ig_vlan_rewrite_mode (enic);enic_open (enic->netdev); -spin_unlock (&enic->enic_api_lock); + +/* Allow infiniband to fiddle with the device again */ +enic_set_api_busy (enic, false); +call_netdevice_notifiers (NETDEV_REBOOT , enic->netdev);rtnl_unlock ();
@@ -2145,7 +2155,9 @@ static void enic_tx_hang_reset(struct work_struct *work)rtnl_lock (); -spin_lock (&enic->enic_api_lock); +/* Stop any activity from infiniband */ +enic_set_api_busy (enic, true); +enic_dev_hang_notify (enic);enic_stop (enic->netdev);enic_dev_hang_reset (enic);
@@ -2154,7 +2166,10 @@ static void enic_tx_hang_reset(struct work_struct *work)enic_set_rss_nic_cfg (enic);enic_dev_set_ig_vlan_rewrite_mode (enic);enic_open (enic->netdev); -spin_unlock (&enic->enic_api_lock); + +/* Allow infiniband to fiddle with the device again */ +enic_set_api_busy (enic, false); +call_netdevice_notifiers (NETDEV_REBOOT , enic->netdev);rtnl_unlock ();
drivers/net/ethernet/ibm/ibmveth.c +12 -1
@@ -1254,6 +1254,7 @@ static int ibmveth_poll(struct napi_struct *napi, int budget)int offset =ibmveth_rxq_frame_offset (adapter);int csum_good =ibmveth_rxq_csum_good (adapter);int lrg_pkt =ibmveth_rxq_large_packet (adapter); +__sum16 iph_check =0 ; skb =ibmveth_rxq_get_buffer (adapter);
@@ -1305,7 +1306,17 @@ static int ibmveth_poll(struct napi_struct *napi, int budget) } } -if (length > netdev->mtu +ETH_HLEN ) { +/* PHYP without PLSO support places a -1 in the ip +* checksum for large send frames. +*/ +if (skb->protocol ==cpu_to_be16 (ETH_P_IP )) { +struct iphdr *iph = (struct iphdr *)skb->data; + + iph_check = iph->check; + } + +if ((length > netdev->mtu +ETH_HLEN ) || + lrg_pkt || iph_check ==0xffff ) {ibmveth_rx_mss_helper (skb, mss, lrg_pkt); adapter->rx_large_packets++; }
drivers/net/ethernet/korina.c +2 -1
@@ -1188,7 +1188,7 @@ out:return rc; probe_err_register: -kfree (lp->td_ring); +kfree ((struct dma_desc *)KSEG0ADDR (lp->td_ring)); probe_err_td_ring:iounmap (lp->tx_dma_regs); probe_err_dma_tx:
@@ -1208,6 +1208,7 @@ static int korina_remove(struct platform_device *pdev)iounmap (lp->eth_regs);iounmap (lp->rx_dma_regs);iounmap (lp->tx_dma_regs); +kfree ((struct dma_desc *)KSEG0ADDR (lp->td_ring));unregister_netdev (bif->dev);free_netdev (bif->dev);
drivers/net/ethernet/realtek/r8169.c +60 -56
134 lines not on this page · raw message
drivers/net/wan/hdlc.c +9 -1
@@ -57,7 +57,15 @@ int hdlc_change_mtu(struct net_device *dev, int new_mtu)static int hdlc_rcv (struct sk_buff *skb,struct net_device *dev,struct packet_type *p,struct net_device *orig_dev) { -struct hdlc_device *hdlc =dev_to_hdlc (dev); +struct hdlc_device *hdlc; + +/* First make sure "dev" is an HDLC device */ +if (!(dev->priv_flags &IFF_WAN_HDLC )) { +kfree_skb (skb); +return NET_RX_SUCCESS ; + } + + hdlc =dev_to_hdlc (dev);if (!net_eq (dev_net (dev), &init_net)) {kfree_skb (skb);
drivers/net/wan/hdlc_raw_eth.c +1 -0
@@ -101,6 +101,7 @@ static int raw_eth_ioctl(struct net_device *dev, struct ifreq *ifr) old_qlen = dev->tx_queue_len;ether_setup (dev); dev->tx_queue_len = old_qlen; + dev->priv_flags &= ~IFF_TX_SKB_SHARING ;eth_hw_addr_random (dev);netif_dormant_off (dev);return 0 ;
drivers/net/wireless/ath/ath10k/htt_rx.c +8 -0
@@ -99,6 +99,14 @@ static int __ath10k_htt_rx_ring_fill_n(struct ath10k_htt *htt, int num)BUILD_BUG_ON (HTT_RX_RING_FILL_LEVEL >=HTT_RX_RING_SIZE /2 ); idx =__le32_to_cpu (*htt->rx_ring.alloc_idx.vaddr); + +if (idx <0 || idx >= htt->rx_ring.size) { +ath10k_err (htt->ar,"rx ring index is not valid, firmware malfunctioning?\n" ); + idx &= htt->rx_ring.size_mask; + ret = -ENOMEM ; + goto fail; + } +while (num >0 ) { skb =dev_alloc_skb (HTT_RX_BUF_SIZE +HTT_RX_DESC_ALIGN );if (!skb) {
drivers/net/wireless/ath/ath6kl/main.c +3 -0
@@ -430,6 +430,9 @@ void ath6kl_connect_ap_mode_sta(struct ath6kl_vif *vif, u16 aid, u8 *mac_addr,ath6kl_dbg (ATH6KL_DBG_TRC ,"new station %pM aid=%d\n" , mac_addr, aid); +if (aid <1 || aid >AP_MAX_NUM_STA ) +return ; +if (assoc_req_len >sizeof (struct ieee80211_hdr_3addr )) {struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) assoc_info;
drivers/net/wireless/ath/ath6kl/wmi.c +5 -0
@@ -2644,6 +2644,11 @@ int ath6kl_wmi_delete_pstream_cmd(struct wmi *wmi, u8 if_idx, u8 traffic_class,return -EINVAL ; } +if (tsid >=16 ) { +ath6kl_err ("invalid tsid: %d\n" , tsid); +return -EINVAL ; + } + skb =ath6kl_wmi_get_new_buf (sizeof (*cmd));if (!skb)return -ENOMEM ;
drivers/net/wireless/ath/ath9k/hif_usb.c +19 -0
@@ -445,10 +445,19 @@ static void hif_usb_stop(void *hif_handle)spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags);/* The pending URBs have to be canceled. */ +spin_lock_irqsave (&hif_dev->tx.tx_lock, flags);list_for_each_entry_safe (tx_buf, tx_buf_tmp, &hif_dev->tx.tx_pending, list) { +usb_get_urb (tx_buf->urb); +spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags);usb_kill_urb (tx_buf->urb); +list_del (&tx_buf->list); +usb_free_urb (tx_buf->urb); +kfree (tx_buf->buf); +kfree (tx_buf); +spin_lock_irqsave (&hif_dev->tx.tx_lock, flags); } +spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags);usb_kill_anchored_urbs (&hif_dev->mgmt_submitted); }
@@ -758,27 +767,37 @@ static void ath9k_hif_usb_dealloc_tx_urbs(struct hif_device_usb *hif_dev)struct tx_buf *tx_buf =NULL , *tx_buf_tmp =NULL ;unsigned long flags; +spin_lock_irqsave (&hif_dev->tx.tx_lock, flags);list_for_each_entry_safe (tx_buf, tx_buf_tmp, &hif_dev->tx.tx_buf, list) { +usb_get_urb (tx_buf->urb); +spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags);usb_kill_urb (tx_buf->urb);list_del (&tx_buf->list);usb_free_urb (tx_buf->urb);kfree (tx_buf->buf);kfree (tx_buf); +spin_lock_irqsave (&hif_dev->tx.tx_lock, flags); } +spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags);spin_lock_irqsave (&hif_dev->tx.tx_lock, flags); hif_dev->tx.flags |=HIF_USB_TX_FLUSH ;spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags); +spin_lock_irqsave (&hif_dev->tx.tx_lock, flags);list_for_each_entry_safe (tx_buf, tx_buf_tmp, &hif_dev->tx.tx_pending, list) { +usb_get_urb (tx_buf->urb); +spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags);usb_kill_urb (tx_buf->urb);list_del (&tx_buf->list);usb_free_urb (tx_buf->urb);kfree (tx_buf->buf);kfree (tx_buf); +spin_lock_irqsave (&hif_dev->tx.tx_lock, flags); } +spin_unlock_irqrestore (&hif_dev->tx.tx_lock, flags);usb_kill_anchored_urbs (&hif_dev->mgmt_submitted); }
drivers/net/wireless/ath/ath9k/htc_hst.c +2 -0
@@ -346,6 +346,8 @@ void ath9k_htc_txcompletion_cb(struct htc_target *htc_handle,if (skb) { htc_hdr = (struct htc_frame_hdr *) skb->data; +if (htc_hdr->endpoint_id >=ARRAY_SIZE (htc_handle->endpoint)) + goto ret; endpoint = &htc_handle->endpoint[htc_hdr->endpoint_id];skb_pull (skb,sizeof (struct htc_frame_hdr ));
drivers/net/wireless/ath/wcn36xx/main.c +1 -1
@@ -156,7 +156,7 @@ static struct ieee80211_supported_band wcn_band_5ghz = { .ampdu_density = IEEE80211_HT_MPDU_DENSITY_16, .mcs = { .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, - .rx_highest =cpu_to_le16 (72 ), + .rx_highest =cpu_to_le16 (150 ), .tx_params = IEEE80211_HT_MCS_TX_DEFINED, } }
drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c +2 -0
@@ -1530,6 +1530,8 @@ fail:BRCMF_TX_IOCTL_MAX_MSG_SIZE , msgbuf->ioctbuf, msgbuf->ioctbuf_handle); +if (msgbuf->txflow_wq) +destroy_workqueue (msgbuf->txflow_wq);kfree (msgbuf); }return -ENOMEM ;
drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c +3 -1
@@ -5090,8 +5090,10 @@ bool wlc_phy_attach_lcnphy(struct brcms_phy *pi) pi->pi_fptr.radioloftget = wlc_lcnphy_get_radio_loft; pi->pi_fptr.detach = wlc_phy_detach_lcnphy; -if (!wlc_phy_txpwr_srom_read_lcnphy (pi)) +if (!wlc_phy_txpwr_srom_read_lcnphy (pi)) { +kfree (pi->u.pi_lcnphy);return false; + }if (LCNREV_IS (pi->pubpi.phy_rev,1 )) {if (pi_lcn->lcnphy_tempsense_option ==3 ) {
drivers/net/wireless/mwifiex/scan.c +1 -1
@@ -1862,7 +1862,7 @@ mwifiex_parse_single_response_buf(struct mwifiex_private *priv, u8 **bss_info, chan,CFG80211_BSS_FTYPE_UNKNOWN , bssid, timestamp, cap_info_bitmap, beacon_period, - ie_buf, ie_len, rssi, GFP_KERNEL); + ie_buf, ie_len, rssi, GFP_ATOMIC);if (bss) { bss_priv = (struct mwifiex_bss_priv *)bss->priv; bss_priv->band = band;
drivers/net/wireless/mwifiex/sdio.c +2 -0
@@ -1928,6 +1928,8 @@ error:kfree (card->mpa_rx.buf); card->mpa_tx.buf_size =0 ; card->mpa_rx.buf_size =0 ; + card->mpa_tx.buf =NULL ; + card->mpa_rx.buf =NULL ; }return ret;
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c +9 -1
@@ -5135,7 +5135,6 @@ static int rtl8xxxu_submit_int_urb(struct ieee80211_hw *hw) ret =usb_submit_urb (urb,GFP_KERNEL );if (ret) {usb_unanchor_urb (urb); -usb_free_urb (urb); goto error; }
@@ -5144,6 +5143,7 @@ static int rtl8xxxu_submit_int_urb(struct ieee80211_hw *hw)rtl8xxxu_write32 (priv,REG_USB_HIMR , val32); error: +usb_free_urb (urb);return ret; }
@@ -5424,6 +5424,7 @@ static int rtl8xxxu_start(struct ieee80211_hw *hw)struct rtl8xxxu_priv *priv = hw->priv;struct rtl8xxxu_rx_urb *rx_urb;struct rtl8xxxu_tx_urb *tx_urb; +struct sk_buff *skb;unsigned long flags;int ret, i;
@@ -5472,6 +5473,13 @@ static int rtl8xxxu_start(struct ieee80211_hw *hw) rx_urb->hw = hw; ret =rtl8xxxu_submit_rx_urb (priv, rx_urb); +if (ret) { +if (ret != -ENOMEM ) { + skb = (struct sk_buff *)rx_urb->urb.context; +dev_kfree_skb (skb); + } +rtl8xxxu_queue_rx_urb (priv, rx_urb); + } } exit:/*
drivers/scsi/csiostor/csio_hw.c +1 -1
@@ -1973,7 +1973,7 @@ static int csio_hw_prep_fw(struct csio_hw *hw, struct fw_info *fw_info,FW_HDR_FW_VER_MICRO_G (c),FW_HDR_FW_VER_BUILD_G (c),FW_HDR_FW_VER_MAJOR_G (k),FW_HDR_FW_VER_MINOR_G (k), FW_HDR_FW_VER_MICRO_G(k), FW_HDR_FW_VER_BUILD_G(k)); - ret =EINVAL ; + ret = -EINVAL ; goto bye; }
drivers/scsi/ibmvscsi/ibmvfc.c +1 -0
@@ -4790,6 +4790,7 @@ static int ibmvfc_probe(struct vio_dev *vdev, const struct vio_device_id *id)if (IS_ERR (vhost->work_thread)) {dev_err (dev,"Couldn't create kernel thread: %ld\n" ,PTR_ERR (vhost->work_thread)); + rc =PTR_ERR (vhost->work_thread); goto free_host_mem; }
drivers/scsi/mvumi.c +1 -0
@@ -2476,6 +2476,7 @@ static int mvumi_io_attach(struct mvumi_hba *mhba)if (IS_ERR (mhba->dm_thread)) {dev_err (&mhba->pdev->dev,"failed to create device scan thread\n" ); + ret =PTR_ERR (mhba->dm_thread);mutex_unlock (&mhba->sas_discovery_mutex); goto fail_create_thread; }
drivers/scsi/qla4xxx/ql4_os.c +1 -1
@@ -1223,7 +1223,7 @@ static int qla4xxx_get_host_stats(struct Scsi_Host *shost, char *buf, int len)le64_to_cpu (ql_iscsi_stats->iscsi_sequence_error); exit_host_stats:if (ql_iscsi_stats) -dma_free_coherent (&ha->pdev->dev, host_stats_size, +dma_free_coherent (&ha->pdev->dev, stats_size, ql_iscsi_stats, iscsi_stats_dma); ql4_printk(KERN_INFO, ha, "%s: Get host stats done\n",
drivers/tty/hvc/hvcs.c +7 -7
@@ -1232,13 +1232,6 @@ static void hvcs_close(struct tty_struct *tty, struct file *filp)tty_wait_until_sent (tty,HVCS_CLOSE_WAIT ); -/* -* This line is important because it tells hvcs_open that this -* device needs to be re-configured the next time hvcs_open is -* called. -*/ - tty->driver_data =NULL ; -free_irq (irq, hvcsd);return ; }else if (hvcsd->port.count <0 ) {
@@ -1254,6 +1247,13 @@ static void hvcs_cleanup(struct tty_struct * tty) {struct hvcs_struct *hvcsd = tty->driver_data; +/* +* This line is important because it tells hvcs_open that this +* device needs to be re-configured the next time hvcs_open is +* called. +*/ + tty->driver_data =NULL ; +tty_port_put (&hvcsd->port); }
drivers/tty/ipwireless/network.c +2 -2
@@ -116,7 +116,7 @@ static int ipwireless_ppp_start_xmit(struct ppp_channel *ppp_channel, skb->len, notify_packet_sent, network); -if (ret ==-1 ) { +if (ret <0 ) {skb_pull (skb,2 );return 0 ; }
@@ -133,7 +133,7 @@ static int ipwireless_ppp_start_xmit(struct ppp_channel *ppp_channel, notify_packet_sent, network);kfree (buf); -if (ret ==-1 ) +if (ret <0 )return 0 ; }kfree_skb (skb);
drivers/tty/ipwireless/tty.c +1 -1
@@ -217,7 +217,7 @@ static int ipw_write(struct tty_struct *linux_tty, ret =ipwireless_send_packet (tty->hardware,IPW_CHANNEL_RAS , buf, count, ipw_write_packet_sent_callback, tty); -if (ret ==-1 ) { +if (ret <0 ) {mutex_unlock (&tty->ipw_tty_mutex);return 0 ; }
drivers/tty/pty.c +1 -1
@@ -115,10 +115,10 @@ static int pty_write(struct tty_struct *tty, const unsigned char *buf, int c)spin_lock_irqsave (&to->port->lock, flags);/* Stuff the data into the input queue of the other end */ c =tty_insert_flip_string (to->port, buf, c); +spin_unlock_irqrestore (&to->port->lock, flags);/* And shovel */ if (c)tty_flip_buffer_push (to->port); -spin_unlock_irqrestore (&to->port->lock, flags); }return c; }
drivers/tty/serial/Kconfig +1 -0
@@ -9,6 +9,7 @@ menu "Serial drivers" config SERIAL_EARLYCON bool + depends on SERIAL_CORE help Support for early consoles with the earlycon parameter. This enables the console before standard serial driver is probed. The console is
drivers/usb/class/cdc-acm.c +11 -0
@@ -1897,6 +1897,17 @@ static const struct usb_device_id acm_ids[] = { .driver_info = IGNORE_DEVICE, }, +/* Exclude ETAS ES58x */ + { USB_DEVICE(0x108c, 0x0159), /* ES581.4 */ + .driver_info =IGNORE_DEVICE , + }, + { USB_DEVICE(0x108c, 0x0168), /* ES582.1 */ + .driver_info = IGNORE_DEVICE, + }, + { USB_DEVICE(0x108c, 0x0169), /* ES584.1 */ + .driver_info = IGNORE_DEVICE, + }, + { USB_DEVICE(0x1bc7, 0x0021), /* Telit 3G ACM only composition */ .driver_info = SEND_ZERO_PACKET, },
drivers/usb/class/cdc-wdm.c +55 -17
114 lines not on this page · raw message
drivers/usb/core/urb.c +54 -35
120 lines not on this page · raw message
drivers/usb/gadget/function/f_printer.c +14 -2
@@ -35,6 +35,7 @@#include <linux/types.h> #include <linux/ctype.h> #include <linux/cdev.h> +#include <linux/kref.h> #include <asm/byteorder.h> #include <linux/io.h>
@@ -69,7 +70,7 @@ struct printer_dev {struct usb_gadget *gadget;s8 interface;struct usb_ep *in_ep, *out_ep; - +struct kref kref;struct list_head rx_reqs;/* List of free RX structs */ struct list_head rx_reqs_active;/* List of Active RX xfers */ struct list_head rx_buffers;/* List of completed xfers */
@@ -223,6 +224,13 @@ static inline struct usb_endpoint_descriptor *ep_desc(struct usb_gadget *gadget,/*-------------------------------------------------------------------------*/ +static void printer_dev_free (struct kref *kref) +{ + struct printer_dev *dev = container_of(kref, struct printer_dev, kref); + +kfree (dev); +} +static struct usb_request *printer_req_alloc (struct usb_ep *ep,unsigned len,gfp_t gfp_flags) {
@@ -353,6 +361,7 @@ printer_open(struct inode *inode, struct file *fd)spin_unlock_irqrestore (&dev->lock, flags); +kref_get (&dev->kref);DBG (dev,"printer_open returned %x\n" , ret);return ret; }
@@ -370,6 +379,7 @@ printer_close(struct inode *inode, struct file *fd) dev->printer_status &= ~PRINTER_SELECTED ;spin_unlock_irqrestore (&dev->lock, flags); +kref_put (&dev->kref, printer_dev_free);DBG (dev,"printer_close\n" );return 0 ;
@@ -1316,7 +1326,8 @@ static void gprinter_free(struct usb_function *f)struct f_printer_opts *opts; opts = container_of(f->fi, struct f_printer_opts, func_inst); -kfree (dev); + +kref_put (&dev->kref, printer_dev_free);mutex_lock (&opts->lock); --opts->refcnt;mutex_unlock (&opts->lock);
@@ -1385,6 +1396,7 @@ static struct usb_function *gprinter_alloc(struct usb_function_instance *fi)return ERR_PTR (-ENOMEM ); } +kref_init (&dev->kref); ++opts->refcnt; dev->minor = opts->minor; dev->pnp_string = opts->pnp_string;
drivers/usb/gadget/function/u_ether.c +1 -1
@@ -96,7 +96,7 @@ struct eth_dev {static inline int qlen (struct usb_gadget *gadget,unsigned qmult) {if (gadget_is_dualspeed (gadget) && (gadget->speed ==USB_SPEED_HIGH || - gadget->speed ==USB_SPEED_SUPER )) + gadget->speed >=USB_SPEED_SUPER ))return qmult *DEFAULT_QLEN ;else return DEFAULT_QLEN ;
drivers/usb/host/ohci-hcd.c +10 -6
@@ -663,20 +663,24 @@ retry:/* handle root hub init quirks ... */ val =roothub_a (ohci); - val &= ~(RH_A_PSM |RH_A_OCPM ); +/* Configure for per-port over-current protection by default */ + val &= ~RH_A_NOCP ; + val |=RH_A_OCPM ;if (ohci->flags &OHCI_QUIRK_SUPERIO ) { -/* NSC 87560 and maybe others */ +/* NSC 87560 and maybe others. +* Ganged power switching, no over-current protection. +*/ val |=RH_A_NOCP ; - val &= ~(RH_A_POTPGT |RH_A_NPS ); -ohci_writel (ohci, val, &ohci->regs->roothub.a); + val &= ~(RH_A_POTPGT |RH_A_NPS |RH_A_PSM |RH_A_OCPM ); }else if ((ohci->flags &OHCI_QUIRK_AMD756 ) || (ohci->flags &OHCI_QUIRK_HUB_POWER )) {/* hub power always on; required for AMD-756 and some -* Mac platforms. ganged overcurrent reporting, if any. +* Mac platforms. */ val |=RH_A_NPS ; -ohci_writel (ohci, val, &ohci->regs->roothub.a); } +ohci_writel (ohci, val, &ohci->regs->roothub.a); +ohci_writel (ohci,RH_HS_LPSC , &ohci->regs->roothub.status);ohci_writel (ohci, (val &RH_A_NPS ) ?0 :RH_B_PPCM , &ohci->regs->roothub.b);
drivers/vfio/pci/vfio_pci_intrs.c +3 -1
@@ -364,11 +364,13 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev, vdev->ctx[vector].producer.token = trigger; vdev->ctx[vector].producer.irq = irq; ret =irq_bypass_register_producer (&vdev->ctx[vector].producer); -if (unlikely (ret)) +if (unlikely (ret)) {dev_info (&pdev->dev,"irq bypass producer (token %p) registration fails: %d\n" , vdev->ctx[vector].producer.token, ret); + vdev->ctx[vector].producer.token =NULL ; + } vdev->ctx[vector].trigger = trigger;return 0 ;
drivers/video/backlight/sky81452-backlight.c +1 -0
@@ -207,6 +207,7 @@ static struct sky81452_bl_platform_data *sky81452_bl_parse_dt( num_entry);if (ret <0 ) {dev_err (dev,"led-sources node is invalid.\n" ); +of_node_put (np);return ERR_PTR (-EINVAL ); }
drivers/video/fbdev/sis/init.c +5 -6
@@ -2428,6 +2428,11 @@ SiS_SetCRT1FIFO_630(struct SiS_Private *SiS_Pr, unsigned short ModeNo, i =0 ; +if (SiS_Pr->ChipType ==SIS_730 ) + queuedata = &FQBQData730[0 ]; +else + queuedata = &FQBQData[0 ]; +if (ModeNo >0x13 ) {/* Get VCLK */
@@ -2445,12 +2450,6 @@ SiS_SetCRT1FIFO_630(struct SiS_Private *SiS_Pr, unsigned short ModeNo,/* Get half colordepth */ colorth = colortharray[(SiS_Pr->SiS_ModeType - ModeEGA)]; -if (SiS_Pr->ChipType ==SIS_730 ) { - queuedata = &FQBQData730[0 ]; - }else { - queuedata = &FQBQData[0 ]; - } - do { templ = SiS_CalcDelay2(SiS_Pr, queuedata[i]) * VCLK * colorth;
drivers/video/fbdev/vga16fb.c +7 -7
@@ -243,7 +243,7 @@ static void vga16fb_update_fix(struct fb_info *info) }static void vga16fb_clock_chip (struct vga16fb_par *par, -unsigned int pixclock, +unsigned int *pixclock,const struct fb_info *info,int mul,int div) {
@@ -259,14 +259,14 @@ static void vga16fb_clock_chip(struct vga16fb_par *par, { 0 /* bad */, 0x00, 0x00}};int err; - pixclock = (pixclock * mul) / div; + *pixclock = (*pixclock * mul) / div; best = vgaclocks; - err = pixclock - best->pixclock; + err = *pixclock - best->pixclock;if (err <0 ) err = -err;for (ptr = vgaclocks +1 ; ptr->pixclock; ptr++) {int tmp; - tmp = pixclock - ptr->pixclock; + tmp = *pixclock - ptr->pixclock;if (tmp <0 ) tmp = -tmp;if (tmp < err) { err = tmp;
@@ -275,7 +275,7 @@ static void vga16fb_clock_chip(struct vga16fb_par *par, } par->misc |= best->misc; par->clkdiv = best->seq_clock_mode; - pixclock = (best->pixclock * div) / mul; + *pixclock = (best->pixclock * div) / mul; }#define FAIL (X ) return -EINVAL
@@ -497,10 +497,10 @@ static int vga16fb_check_var(struct fb_var_screeninfo *var,if (mode &MODE_8BPP )/* pixel clock == vga clock / 2 */ -vga16fb_clock_chip (par, var->pixclock, info,1 ,2 ); +vga16fb_clock_chip (par, &var->pixclock, info,1 ,2 );else /* pixel clock == vga clock */ -vga16fb_clock_chip (par, var->pixclock, info,1 ,1 ); +vga16fb_clock_chip (par, &var->pixclock, info,1 ,1 ); var->red.offset = var->green.offset = var->blue.offset = var->transp.offset =0 ;
drivers/virt/fsl_hypervisor.c +8 -9
@@ -157,7 +157,7 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)unsigned int i;long ret =0 ; -int num_pinned;/* return value from get_user_pages() */ +int num_pinned =0 ;/* return value from get_user_pages_fast() */ phys_addr_t remote_paddr;/* The next address in the remote buffer */ uint32_t count;/* The number of bytes left to copy */
@@ -174,7 +174,7 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)return -EINVAL ;/* -* The array of pages returned by get_user_pages() covers only +* The array of pages returned by get_user_pages_fast() covers only * page-aligned memory. Since the user buffer is probably not * page-aligned, we need to handle the discrepancy. *
@@ -224,7 +224,7 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)/* * 'pages' is an array of struct page pointers that's initialized by -* get_user_pages(). +* get_user_pages_fast(). */ pages =kzalloc (num_pages *sizeof (struct page *),GFP_KERNEL );if (!pages) {
@@ -241,7 +241,7 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)if (!sg_list_unaligned) {pr_debug ("fsl-hv: could not allocate S/G list\n" ); ret = -ENOMEM ; - goto exit; + goto free_pages; } sg_list =PTR_ALIGN (sg_list_unaligned,sizeof (struct fh_sg_list ));
@@ -254,7 +254,6 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)up_read (¤t->mm->mmap_sem);if (num_pinned != num_pages) { -/* get_user_pages() failed */ pr_debug ("fsl-hv: could not lock source buffer\n" ); ret = (num_pinned <0 ) ? num_pinned : -EFAULT ; goto exit;
@@ -296,13 +295,13 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p) virt_to_phys(sg_list), num_pages); exit: -if (pages) { -for (i =0 ; i < num_pages; i++) -if (pages[i]) -put_page (pages[i]); +if (pages && (num_pinned >0 )) { +for (i =0 ; i < num_pinned; i++) +put_page (pages[i]); }kfree (sg_list_unaligned); +free_pages:kfree (pages);if (!ret)
fs/cifs/asn1.c +8 -8
@@ -541,8 +541,8 @@ decode_negTokenInit(unsigned char *security_blob, int length,return 0 ; }else if ((cls !=ASN1_CTX ) || (con !=ASN1_CON ) || (tag !=ASN1_EOC )) { -cifs_dbg (FYI ,"cls = %d con = %d tag = %d end = %p (%d) exit 0\n" , - cls, con, tag, end, *end); +cifs_dbg (FYI ,"cls = %d con = %d tag = %d end = %p exit 0\n" , + cls, con, tag, end);return 0 ; }
@@ -552,8 +552,8 @@ decode_negTokenInit(unsigned char *security_blob, int length,return 0 ; }else if ((cls !=ASN1_UNI ) || (con !=ASN1_CON ) || (tag !=ASN1_SEQ )) { -cifs_dbg (FYI ,"cls = %d con = %d tag = %d end = %p (%d) exit 1\n" , - cls, con, tag, end, *end); +cifs_dbg (FYI ,"cls = %d con = %d tag = %d end = %p exit 1\n" , + cls, con, tag, end);return 0 ; }
@@ -563,8 +563,8 @@ decode_negTokenInit(unsigned char *security_blob, int length,return 0 ; }else if ((cls !=ASN1_CTX ) || (con !=ASN1_CON ) || (tag !=ASN1_EOC )) { -cifs_dbg (FYI ,"cls = %d con = %d tag = %d end = %p (%d) exit 0\n" , - cls, con, tag, end, *end); +cifs_dbg (FYI ,"cls = %d con = %d tag = %d end = %p exit 0\n" , + cls, con, tag, end);return 0 ; }
@@ -575,8 +575,8 @@ decode_negTokenInit(unsigned char *security_blob, int length,return 0 ; }else if ((cls !=ASN1_UNI ) || (con !=ASN1_CON ) || (tag !=ASN1_SEQ )) { -cifs_dbg (FYI ,"cls = %d con = %d tag = %d end = %p (%d) exit 1\n" , - cls, con, tag, end, *end); +cifs_dbg (FYI ,"cls = %d con = %d tag = %d sequence_end = %p exit 1\n" , + cls, con, tag, sequence_end);return 0 ; }
fs/ntfs/inode.c +6 -0
@@ -1844,6 +1844,12 @@ int ntfs_read_inode_mount(struct inode *vi)brelse (bh); } +if (le32_to_cpu (m->bytes_allocated) != vol->mft_record_size) { +ntfs_error (sb,"Incorrect mft record size %u in superblock, should be %u." , +le32_to_cpu (m->bytes_allocated), vol->mft_record_size); + goto err_out; + } +/* Apply the mst fixups. */ if (post_read_mst_fixup ((NTFS_RECORD *)m, vol->mft_record_size)) {/* FIXME: Try to use the $MFTMirr now. */
fs/quota/quota_v2.c +1 -0
@@ -266,6 +266,7 @@ static void v2r1_mem2diskdqb(void *dp, struct dquot *dquot) d->dqb_curspace =cpu_to_le64 (m->dqb_curspace); d->dqb_btime =cpu_to_le64 (m->dqb_btime); d->dqb_id =cpu_to_le32 (from_kqid (&init_user_ns, dquot->dq_id)); + d->dqb_pad =0 ;if (qtree_entry_unused (info, dp)) d->dqb_itime =cpu_to_le64 (1 ); }
fs/reiserfs/inode.c +2 -1
@@ -2157,7 +2157,8 @@ out_end_trans: out_inserted_sd:clear_nlink (inode); th->t_trans_id =0 ;/* so the caller can't use this handle later */ -unlock_new_inode (inode);/* OK to do even if we hadn't locked it */ +if (inode->i_state &I_NEW ) +unlock_new_inode (inode);iput (inode);return err; }
fs/reiserfs/super.c +4 -4
@@ -1232,6 +1232,10 @@ static int reiserfs_parse_options(struct super_block *s, "turned on.");return 0 ; } +if (qf_names[qtype] != +REISERFS_SB (s)->s_qf_names[qtype]) +kfree (qf_names[qtype]); + qf_names[qtype] =NULL ; if (*arg) { /* Some filename specified? */ if (REISERFS_SB(s)->s_qf_names[qtype] && strcmp(REISERFS_SB(s)->s_qf_names[qtype],
@@ -1261,10 +1265,6 @@ static int reiserfs_parse_options(struct super_block *s,else *mount_options |=1 <<REISERFS_GRPQUOTA ; }else { -if (qf_names[qtype] != -REISERFS_SB (s)->s_qf_names[qtype]) -kfree (qf_names[qtype]); - qf_names[qtype] =NULL ;if (qtype ==USRQUOTA ) *mount_options &= ~(1 <<REISERFS_USRQUOTA );else
fs/udf/inode.c +14 -11
@@ -140,21 +140,24 @@ void udf_evict_inode(struct inode *inode)struct udf_inode_info *iinfo =UDF_I (inode);int want_delete =0 ; -if (!inode->i_nlink && !is_bad_inode (inode)) { - want_delete =1 ; -udf_setsize (inode,0 ); -udf_update_inode (inode,IS_SYNC (inode)); +if (!is_bad_inode (inode)) { +if (!inode->i_nlink) { + want_delete =1 ; +udf_setsize (inode,0 ); +udf_update_inode (inode,IS_SYNC (inode)); + } +if (iinfo->i_alloc_type !=ICBTAG_FLAG_AD_IN_ICB && + inode->i_size != iinfo->i_lenExtents) { +udf_warn (inode->i_sb, +"Inode %lu (mode %o) has inode size %llu different from extent length %llu. Filesystem need not be standards compliant.\n" , + inode->i_ino, inode->i_mode, + (unsigned long long )inode->i_size, + (unsigned long long )iinfo->i_lenExtents); + } }truncate_inode_pages_final (&inode->i_data);invalidate_inode_buffers (inode);clear_inode (inode); -if (iinfo->i_alloc_type !=ICBTAG_FLAG_AD_IN_ICB && - inode->i_size != iinfo->i_lenExtents) { -udf_warn (inode->i_sb,"Inode %lu (mode %o) has inode size %llu different from extent length %llu. Filesystem need not be standards compliant.\n" , - inode->i_ino, inode->i_mode, - (unsigned long long )inode->i_size, - (unsigned long long )iinfo->i_lenExtents); - }kfree (iinfo->i_ext.i_data); iinfo->i_ext.i_data =NULL ;udf_clear_extent_cache (inode);
fs/udf/super.c +6 -0
@@ -1390,6 +1390,12 @@ static int udf_load_sparable_map(struct super_block *sb, (int)spm->numSparingTables);return -EIO ; } +if (le32_to_cpu (spm->sizeSparingTable) > sb->s_blocksize) { +udf_err (sb,"error loading logical volume descriptor: " +"Too big sparing table size (%u)\n" , +le32_to_cpu (spm->sizeSparingTable)); +return -EIO ; + }for (i =0 ; i < spm->numSparingTables; i++) { loc =le32_to_cpu (spm->locSparingTable[i]);
fs/xfs/xfs_rtalloc.c +11 -0
@@ -256,6 +256,9 @@ xfs_rtallocate_extent_block( end =XFS_BLOCKTOBIT (mp, bbno +1 ) -1 ; i <= end; i++) { +/* Make sure we don't scan off the end of the rt volume. */ + maxlen =min (mp->m_sb.sb_rextents, i + maxlen) - i; +/* * See if there's a free extent of maxlen starting at i. * If it's not so then next will contain the first non-free.
@@ -447,6 +450,14 @@ xfs_rtallocate_extent_near(*/ if (bno >= mp->m_sb.sb_rextents) bno = mp->m_sb.sb_rextents -1 ; + +/* Make sure we don't run off the end of the rt volume. */ + maxlen =min (mp->m_sb.sb_rextents, bno + maxlen) - bno; +if (maxlen < minlen) { + *rtblock =NULLRTBLOCK ; +return 0 ; + } +/* * Try the exact allocation first. */
include/linux/compiler.h +14 -8
@@ -241,23 +241,21 @@ void __read_once_size(const volatile void *p, void *res, int size)#ifdef CONFIG_KASAN /* -* This function is not 'inline' because __no_sanitize_address confilcts +* We can't declare function 'inline' because __no_sanitize_address confilcts * with inlining. Attempt to inline it may cause a build failure. * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368 * '__maybe_unused' allows us to avoid defined-but-not-used warnings. */ -static __no_sanitize_address __maybe_unused -void __read_once_size_nocheck(const volatile void *p, void *res, int size) -{ - __READ_ONCE_SIZE; -} +# define __no_kasan_or_inline __no_sanitize_address __maybe_unused#else -static __always_inline +# define __no_kasan_or_inline __always_inline +#endif + +static __no_kasan_or_inline void __read_once_size_nocheck(const volatile void *p, void *res, int size) { __READ_ONCE_SIZE; } -#endif static __always_inline void __write_once_size(volatile void *p, void *res, int size) {
@@ -294,6 +292,7 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s* with an explicit memory barrier or atomic instruction that provides the * required ordering. */ +#include <linux/kasan-checks.h> #define __READ_ONCE (x, check) \ ({ \
@@ -312,6 +311,13 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s*/ #define READ_ONCE_NOCHECK (x) __READ_ONCE(x, 0) +static __no_kasan_or_inline +unsigned long read_word_at_a_time (const void *addr) +{ +kasan_check_read (addr,1 ); +return *(unsigned long *)addr; +} +#define WRITE_ONCE (x, val) \ ({ \ union { typeof(x) __val; char __c[1]; } __u = \
include/linux/kasan-checks.h new file +12 -0
@@ -0,0 +1,12 @@ +#ifndef _LINUX_KASAN_CHECKS_H +#define _LINUX_KASAN_CHECKS_H + +#ifdef CONFIG_KASAN +void kasan_check_read (const void *p,unsigned int size); +void kasan_check_write (const void *p,unsigned int size); +#else +static inline void kasan_check_read (const void *p,unsigned int size) { } +static inline void kasan_check_write (const void *p,unsigned int size) { } +#endif + +#endif
include/net/ip.h +6 -0
@@ -317,12 +317,18 @@ static inline unsigned int ip_dst_mtu_maybe_forward(const struct dst_entry *dst, bool forwarding) {struct net *net =dev_net (dst->dev); +unsigned int mtu;if (net->ipv4.sysctl_ip_fwd_use_pmtu ||ip_mtu_locked (dst) || !forwarding)return dst_mtu (dst); +/* 'forwarding = true' case should always honour route mtu */ + mtu =dst_metric_raw (dst,RTAX_MTU ); +if (mtu) +return mtu; +return min (READ_ONCE (dst->dev->mtu),IP_MAX_MTU ); }
include/scsi/scsi_common.h +7 -0
@@ -24,6 +24,13 @@ scsi_command_size(const unsigned char *cmnd) scsi_varlen_cdb_length(cmnd) : COMMAND_SIZE(cmnd[0]); } +static inline unsigned char +scsi_command_control (const unsigned char *cmnd) +{ +return (cmnd[0 ] ==VARIABLE_LENGTH_CMD ) ? + cmnd[1 ] : cmnd[COMMAND_SIZE (cmnd[0 ]) -1 ]; +} +/* Returns a human-readable name for the device */ extern const char *scsi_device_type (unsigned type);
include/trace/events/target.h +6 -6
@@ -139,6 +139,7 @@ TRACE_EVENT(target_sequencer_start, __field( unsigned int, opcode ) __field( unsigned int, data_length ) __field( unsigned int, task_attribute ) + __field( unsigned char, control ) __array( unsigned char, cdb, TCM_MAX_COMMAND_SIZE ) __string( initiator, cmd->se_sess->se_node_acl->initiatorname ) ),
@@ -148,6 +149,7 @@ TRACE_EVENT(target_sequencer_start, __entry->opcode = cmd->t_task_cdb[0 ]; __entry->data_length = cmd->data_length; __entry->task_attribute = cmd->sam_task_attr; + __entry->control =scsi_command_control (cmd->t_task_cdb);memcpy (__entry->cdb, cmd->t_task_cdb,TCM_MAX_COMMAND_SIZE );__assign_str (initiator, cmd->se_sess->se_node_acl->initiatorname); ),
@@ -157,9 +159,7 @@ TRACE_EVENT(target_sequencer_start,show_opcode_name (__entry->opcode), __entry->data_length,__print_hex (__entry->cdb,16 ),show_task_attribute_name (__entry->task_attribute), -scsi_command_size (__entry->cdb) <=16 ? - __entry->cdb[scsi_command_size (__entry->cdb) -1 ] : - __entry->cdb[1 ] + __entry->control ) );
@@ -174,6 +174,7 @@ TRACE_EVENT(target_cmd_complete, __field( unsigned int, opcode ) __field( unsigned int, data_length ) __field( unsigned int, task_attribute ) + __field( unsigned char, control ) __field( unsigned char, scsi_status ) __field( unsigned char, sense_length ) __array( unsigned char, cdb, TCM_MAX_COMMAND_SIZE )
@@ -186,6 +187,7 @@ TRACE_EVENT(target_cmd_complete, __entry->opcode = cmd->t_task_cdb[0 ]; __entry->data_length = cmd->data_length; __entry->task_attribute = cmd->sam_task_attr; + __entry->control =scsi_command_control (cmd->t_task_cdb); __entry->scsi_status = cmd->scsi_status; __entry->sense_length = cmd->scsi_status ==SAM_STAT_CHECK_CONDITION ?min (18 , ((u8 *) cmd->sense_buffer)[SPC_ADD_SENSE_LEN_OFFSET ] +8 ) :0 ;
@@ -202,9 +204,7 @@ TRACE_EVENT(target_cmd_complete,show_opcode_name (__entry->opcode), __entry->data_length,__print_hex (__entry->cdb,16 ),show_task_attribute_name (__entry->task_attribute), -scsi_command_size (__entry->cdb) <=16 ? - __entry->cdb[scsi_command_size (__entry->cdb) -1 ] : - __entry->cdb[1 ] + __entry->control ) );
kernel/debug/kdb/kdb_io.c +6 -2
@@ -683,12 +683,16 @@ int vkdb_printf(enum kdb_msgsrc src, const char *fmt, va_list ap) size_avail =sizeof (kdb_buffer) - len; goto kdb_print_out; } -if (kdb_grepping_flag >=KDB_GREPPING_FLAG_SEARCH ) +if (kdb_grepping_flag >=KDB_GREPPING_FLAG_SEARCH ) {/* * This was a interactive search (using '/' at more -* prompt) and it has completed. Clear the flag. +* prompt) and it has completed. Replace the \0 with +* its original value to ensure multi-line strings +* are handled properly, and return to normal mode. */ + *cphold = replaced_byte; kdb_grepping_flag =0 ; + }/* * at this point the string is a full line and * should be printed, up to the null.
kernel/power/hibernate.c +0 -11
@@ -779,17 +779,6 @@ static int software_resume(void)/* Check if the device is there */ swsusp_resume_device =name_to_dev_t (resume_file); - -/* -* name_to_dev_t is ineffective to verify parition if resume_file is in -* integer format. (e.g. major:minor) -*/ -if (isdigit (resume_file[0 ]) && resume_wait) { -int partno; -while (!get_gendisk (swsusp_resume_device, &partno)) -msleep (10 ); - } -if (!swsusp_resume_device) {/* * Some device discovery might still be in progress; we need
lib/crc32.c +1 -1
@@ -327,7 +327,7 @@ static inline u32 __pure crc32_be_generic(u32 crc, unsigned char const *p,return crc; } -#if CRC_LE_BITS ==1 +#if CRC_BE_BITS ==1 u32 __pure crc32_be (u32 crc,unsigned char const *p,size_t len) {return crc32_be_generic (crc, p, len,NULL ,CRCPOLY_BE );
lib/string.c +1 -1
@@ -202,7 +202,7 @@ ssize_t strscpy(char *dest, const char *src, size_t count)while (max >=sizeof (unsigned long )) {unsigned long c, data; - c = *(unsigned long *)(src+res); + c =read_word_at_a_time (src+res);if (has_zero (c, &data, &constants)) { data =prep_zero_mask (c, data, &constants); data =create_zero_mask (data);
mm/kasan/kasan.c +46 -30
130 lines not on this page · raw message
net/bluetooth/l2cap_sock.c +4 -3
@@ -1330,8 +1330,6 @@ static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err) parent =bt_sk (sk)->parent; -sock_set_flag (sk,SOCK_ZAPPED ); -switch (chan->state) {case BT_OPEN :case BT_BOUND :
@@ -1358,8 +1356,11 @@ static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)break ; } -release_sock (sk); + +/* Only zap after cleanup to avoid use after free race */ +sock_set_flag (sk,SOCK_ZAPPED ); + } static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state,
net/ipv4/icmp.c +5 -2
@@ -246,7 +246,7 @@ static struct {/** * icmp_global_allow - Are we allowed to send one more ICMP message ? * -* Uses a token bucket to limit our ICMP messages to sysctl_icmp_msgs_per_sec. +* Uses a token bucket to limit our ICMP messages to ~sysctl_icmp_msgs_per_sec. * Returns false if we reached the limit and can not send another packet. * Note: called with BH disabled */
@@ -274,7 +274,10 @@ bool icmp_global_allow(void) } credit =min_t (u32, icmp_global.credit + incr, sysctl_icmp_msgs_burst);if (credit) { - credit--; +/* We want to use a credit of one in average, but need to randomize +* it for security reasons. +*/ + credit =max_t (int, credit -prandom_u32_max (3 ),0 ); rc = true; }WRITE_ONCE (icmp_global.credit, credit);
net/ipv4/tcp_input.c +2 -0
@@ -5531,6 +5531,8 @@ void tcp_rcv_established(struct sock *sk, struct sk_buff *skb,tcp_data_snd_check (sk);if (!inet_csk_ack_scheduled (sk)) goto no_ack; + }else { +tcp_update_wl (tp,TCP_SKB_CB (skb)->seq); }__tcp_ack_snd_check (sk,0 );
net/netfilter/ipvs/ip_vs_ctl.c +4 -3
@@ -2383,6 +2383,10 @@ do_ip_vs_set_ctl(struct sock *sk, int cmd, void __user *user, unsigned int len)/* Set timeout values for (tcp tcpfin udp) */ ret =ip_vs_set_timeout (ipvs, (struct ip_vs_timeout_user *)arg); goto out_unlock; + }else if (!len) { +/* No more commands with len == 0 below */ + ret = -EINVAL ; + goto out_unlock; } usvc_compat = (struct ip_vs_service_user *)arg;
@@ -2459,9 +2463,6 @@ do_ip_vs_set_ctl(struct sock *sk, int cmd, void __user *user, unsigned int len)break ;case IP_VS_SO_SET_DELDEST : ret =ip_vs_del_dest (svc, &udest); -break ; -default : - ret = -EINVAL ; } out_unlock:
net/nfc/netlink.c +1 -1
@@ -1190,7 +1190,7 @@ static int nfc_genl_fw_download(struct sk_buff *skb, struct genl_info *info)u32 idx;char firmware_name[NFC_FIRMWARE_NAME_MAXSIZE +1 ]; -if (!info->attrs[NFC_ATTR_DEVICE_INDEX ]) +if (!info->attrs[NFC_ATTR_DEVICE_INDEX ] || !info->attrs[NFC_ATTR_FIRMWARE_NAME ])return -EINVAL ; idx =nla_get_u32 (info->attrs[NFC_ATTR_DEVICE_INDEX ]);
net/tipc/msg.c +2 -1
@@ -138,7 +138,8 @@ int tipc_buf_append(struct sk_buff **headbuf, struct sk_buff **buf)if (fragid ==FIRST_FRAGMENT ) {if (unlikely (head)) goto err; - frag =skb_unshare (frag,GFP_ATOMIC ); +if (skb_cloned (frag)) + frag =skb_copy (frag,GFP_ATOMIC );if (unlikely (!frag)) goto err; head = *headbuf = frag;
net/wireless/nl80211.c +4 -1
@@ -1672,7 +1672,10 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev,* case we'll continue with more data in the next round, * but break unconditionally so unsplit data stops here. */ - state->split_start++; +if (state->split) + state->split_start++; +else + state->split_start =0 ;break ;case 9 : if (rdev->wiphy.extended_capabilities &&
security/integrity/ima/ima_crypto.c +2 -0
@@ -555,6 +555,8 @@ static int __init ima_calc_boot_aggregate_tfm(char *digest,ima_pcrread (i, pcr_i);/* now accumulate with current aggregate */ rc =crypto_shash_update (shash, pcr_i,TPM_DIGEST_SIZE ); +if (rc !=0 ) +return rc; }if (!rc)crypto_shash_final (shash, digest);
sound/core/seq/oss/seq_oss.c +5 -2
@@ -186,9 +186,12 @@ odev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)if (snd_BUG_ON (!dp))return -ENXIO ; -mutex_lock (®ister_mutex); +if (cmd !=SNDCTL_SEQ_SYNC && +mutex_lock_interruptible (®ister_mutex)) +return -ERESTARTSYS ; rc =snd_seq_oss_ioctl (dp, cmd, arg); -mutex_unlock (®ister_mutex); +if (cmd !=SNDCTL_SEQ_SYNC ) +mutex_unlock (®ister_mutex);return rc; }
sound/firewire/bebob/bebob_hwdep.c +1 -2
@@ -37,12 +37,11 @@ hwdep_read(struct snd_hwdep *hwdep, char __user *buf, long count, }memset (&event,0 ,sizeof (event)); + count =min_t (long, count,sizeof (event.lock_status));if (bebob->dev_lock_changed) { event.lock_status.type =SNDRV_FIREWIRE_EVENT_LOCK_STATUS ; event.lock_status.status = (bebob->dev_lock_count >0 ); bebob->dev_lock_changed = false; - - count =min_t (long, count,sizeof (event.lock_status)); }spin_unlock_irq (&bebob->lock);
tools/perf/util/intel-pt.c +4 -4
@@ -794,6 +794,8 @@ static void intel_pt_set_pid_tid_cpu(struct intel_pt *pt,if (queue->tid ==-1 || pt->have_sched_switch) { ptq->tid =machine__get_current_tid (pt->machine, ptq->cpu); +if (ptq->tid ==-1 ) + ptq->pid =-1 ;thread__zput (ptq->thread); }
@@ -1634,10 +1636,8 @@ static int intel_pt_context_switch(struct intel_pt *pt, union perf_event *event, tid = sample->tid; } -if (tid ==-1 ) { -pr_err ("context_switch event has no tid\n" ); -return -EINVAL ; - } +if (tid ==-1 ) +intel_pt_log ("context_switch event has no tid\n" ); intel_pt_log("context_switch: cpu %d pid %d tid %d time %"PRIu64" tsc %#"PRIx64"\n", cpu, pid, tid, sample->time, perf_time_to_tsc(sample->time,