Linux 4.14.305
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.14.305 kernel.
All users of the 4.14 kernel series must upgrade.
The updated 4.14.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.14.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/ABI/testing/sysfs-kernel-oops_count | 6 Documentation/ABI/testing/sysfs-kernel-warn_count | 6 Documentation/sysctl/kernel.txt | 20 +++ Makefile | 2 arch/alpha/kernel/traps.c | 6 arch/alpha/mm/fault.c | 2 arch/arm/boot/dts/imx6qdl-gw560x.dtsi | 1 arch/arm/kernel/traps.c | 2 arch/arm/mm/fault.c | 2 arch/arm/mm/nommu.c | 2 arch/arm64/kernel/traps.c | 2 arch/arm64/mm/fault.c | 2 arch/h8300/kernel/traps.c | 3 arch/h8300/mm/fault.c | 2 arch/hexagon/kernel/traps.c | 2 arch/ia64/Kconfig | 2 arch/ia64/kernel/mca_drv.c | 3 arch/ia64/kernel/traps.c | 2 arch/ia64/mm/fault.c | 2 arch/m68k/kernel/traps.c | 2 arch/m68k/mm/fault.c | 2 arch/microblaze/kernel/exceptions.c | 4 arch/mips/kernel/traps.c | 2 arch/nios2/kernel/traps.c | 4 arch/openrisc/kernel/traps.c | 2 arch/parisc/kernel/traps.c | 2 arch/powerpc/kernel/traps.c | 2 arch/s390/kernel/dumpstack.c | 2 arch/s390/kernel/nmi.c | 2 arch/sh/kernel/traps.c | 2 arch/sparc/kernel/traps_32.c | 4 arch/sparc/kernel/traps_64.c | 4 arch/x86/entry/entry_32.S | 6 arch/x86/entry/entry_64.S | 8 - arch/x86/kernel/dumpstack.c | 4 arch/x86/kernel/i8259.c | 1 arch/x86/kernel/irqinit.c | 4 arch/x86/lib/iomap_copy_64.S | 2 arch/x86/xen/time.c | 2 arch/xtensa/kernel/traps.c | 2 drivers/dma/dmaengine.c | 7 - drivers/edac/edac_device.c | 15 +- drivers/edac/highbank_mc_edac.c | 7 - drivers/gpu/drm/radeon/atombios_dp.c | 8 - drivers/gpu/drm/radeon/radeon_mode.h | 4 drivers/hid/hid-betopff.c | 17 +- drivers/hid/hid-core.c | 4 drivers/hid/intel-ish-hid/ishtp/dma-if.c | 10 + drivers/infiniband/hw/hfi1/user_exp_rcv.c | 16 +- drivers/input/mouse/synaptics.c | 1 drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 23 ++- drivers/net/ethernet/broadcom/tg3.c | 8 - drivers/net/ethernet/mellanox/mlx5/core/main.c | 8 - drivers/net/ethernet/renesas/ravb_main.c | 4 drivers/net/phy/mdio_bus.c | 7 - drivers/net/usb/sr9700.c | 2 drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | 2 drivers/net/wireless/rndis_wlan.c | 19 --- drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 4 drivers/scsi/hpsa.c | 2 drivers/scsi/qla2xxx/qla_bsg.c | 10 - drivers/scsi/qla2xxx/qla_isr.c | 12 - drivers/scsi/qla2xxx/qla_mr.c | 3 drivers/staging/comedi/drivers/adv_pci1760.c | 2 drivers/usb/gadget/function/f_fs.c | 7 + drivers/usb/host/xhci-plat.c | 2 drivers/w1/w1.c | 6 drivers/w1/w1_int.c | 5 fs/affs/file.c | 2 fs/proc/proc_sysctl.c | 33 +++++ fs/reiserfs/super.c | 6 include/linux/kernel.h | 1 include/linux/sched/task.h | 1 include/linux/sysctl.h | 3 kernel/exit.c | 72 +++++++++++ kernel/module.c | 26 +++- kernel/panic.c | 75 ++++++++++-- kernel/sched/core.c | 3 kernel/trace/trace.c | 2 kernel/trace/trace.h | 1 kernel/trace/trace_output.c | 3 mm/kasan/report.c | 3 mm/util.c | 6 net/bluetooth/hci_core.c | 1 net/ipv6/ip6_gre.c | 12 + net/ipv6/ip6_tunnel.c | 10 - net/ipv6/sit.c | 8 - net/netfilter/nf_conntrack_proto_sctp.c | 25 ++-- net/netlink/af_netlink.c | 31 +++- net/netrom/nr_timer.c | 1 net/nfc/llcp_core.c | 1 net/sctp/bind_addr.c | 6 security/tomoyo/Makefile | 2 tools/objtool/check.c | 3 94 files changed, 470 insertions(+), 214 deletions(-)
Alex Deucher (1):
drm/radeon/dp: make radeon_dp_get_dp_link_config static
Alexander Potapenko (1):
affs: initialize fsdata in affs_truncate()
Alexey V. Vissarionov (1):
scsi: hpsa: Fix allocation size for scsi_host_alloc()
Archie Pusaka (1):
Bluetooth: hci_sync: cancel cmd_timer if hci_open failed
Christoph Hellwig (1):
scsi: qla2xxx: don't break the bsg-lib abstractions
David Christensen (1):
net/tg3: resolve deadlock in tg3_reset_task() during EEH
Dean Luick (2):
IB/hfi1: Reject a zero-length user expected buffer IB/hfi1: Reserve user expected TIDs
Dmitry Torokhov (1):
Revert "Input: synaptics - switch touchpad on HP Laptop 15-da3001TU to RMI mode"
Dongliang Mu (1):
fs: reiserfs: remove useless new_opts in reiserfs_remount
Eric Dumazet (3):
netlink: annotate data races around dst_portid and dst_group
netlink: annotate data races around sk_state
ipv6: ensure sane device mtu in tunnels
Eric W. Biederman (2):
exit: Add and use make_task_dead.
objtool: Add a missing comma to avoid string concatenation
Fabio Estevam (1):
ARM: dts: imx6qdl-gw560x: Remove incorrect 'uart-has-rtscts'
Giulio Benetti (1):
ARM: 9280/1: mm: fix warning on phys_addr_t to void pointer assignment
Greg Kroah-Hartman (3):
wifi: brcmfmac: fix up incorrect 4.14.y backport for brcmf_fw_map_chip_to_name()
xen: Fix up build warning with xen_init_time_ops() reference
Linux 4.14.305
Heiner Kallweit (1):
net: mdio: validate parameter addr in mdiobus_get_phy()
Ian Abbott (1):
comedi: adv_pci1760: Fix PWM instruction handling
Jan Beulich (1):
x86/entry/64: Add instruction suffix to SYSRET
Jann Horn (1):
exit: Put an upper limit on how often we can oops
Jiasheng Jiang (1):
HID: intel_ish-hid: Add check for ishtp_dma_tx_map
Jisoo Jang (1):
net: nfc: Fix use-after-free in local_cleanup()
Kees Cook (7):
exit: Expose "oops_count" to sysfs
exit: Allow oops_limit to be disabled
panic: Consolidate open-coded panic_on_warn checks
panic: Introduce warn_limit
panic: Expose "warn_count" to sysfs
docs: Fix path paste-o for /sys/kernel/warn_count
exit: Use READ_ONCE() for all oops/warn limit reads
Koba Ko (1):
dmaengine: Fix double increment of client_count in dma_chan_get()
Kuniyuki Iwashima (1):
netrom: Fix use-after-free of a listening socket.
Manivannan Sadhasivam (1):
EDAC/device: Respect any driver-supplied workqueue polling value
Marcelo Ricardo Leitner (1):
sctp: fail if no bound addresses can be used for a given scope
Masahiro Yamada (1):
tomoyo: fix broken dependency on *.conf.default
Miaoqian Lin (1):
EDAC/highbank: Fix memory leak in highbank_mc_probe()
Michal Hocko (1):
mm: kvmalloc does not fallback to vmalloc for incompatible gfp flags
Mikulas Patocka (1):
x86/asm: Fix an assembler warning with current binutils
Nathan Chancellor (2):
hexagon: Fix function name in die()
h8300: Fix build errors from do_exit() to make_task_dead() transition
Peter Chen (1):
usb: host: xhci-plat: add wakeup entry at sysfs
Petr Pavlu (1):
module: Don't wait for GOING modules
Pietro Borrello (2):
HID: check empty report_list in hid_validate_values()
HID: betop: check shape of output reports
Raju Rangoju (1):
amd-xgbe: TX Flow Ctrl Registers are h/w ver dependent
Randy Dunlap (2):
net: mlx5: eliminate anonymous module_init & module_exit
ia64: make IA64_MCA_RECOVERY bool instead of tristate
Shang XiaoJing (1):
phy: rockchip-inno-usb2: Fix missing clk_disable_unprepare() in rockchip_usb2phy_power_on()
Sriram Yagnaraman (1):
netfilter: conntrack: fix vtag checks for ABORT/SHUTDOWN_COMPLETE
Steven Rostedt (Google) (1):
tracing: Make sure trace_printk() can output as soon as it can be used
Szymon Heidrich (2):
wifi: rndis_wlan: Prevent buffer overflow in rndis_query_oid
net: usb: sr9700: Handle negative len
Thomas Gleixner (1):
x86/i8259: Mark legacy PIC interrupts with IRQ_LEVEL
Tiezhu Yang (1):
panic: unset panic_on_warn inside panic()
Udipto Goswami (2):
usb: gadget: f_fs: Prevent race during ffs_ep0_queue_wait
usb: gadget: f_fs: Ensure ep0req is dequeued before free_request
Xiaoming Ni (1):
sysctl: add a new register_sysctl_init() interface
Yang Yingliang (2):
w1: fix deadloop in __w1_remove_master_device()
w1: fix WARNING after calling w1_process()
Yoshihiro Shimoda (1):
net: ravb: Fix possible hang if RIS2_QFF1 happen
Greg Kroah-Hartman
maintainerDocumentation/ABI/testing/sysfs-kernel-oops_count new file +6 -0
@@ -0,0 +1,6 @@ +What: /sys/kernel/oops_count +Date: November 2022 +KernelVersion: 6.2.0 +Contact: Linux Kernel Hardening List <[email protected]> +Description: + Shows how many times the system has Oopsed since last boot.
Documentation/ABI/testing/sysfs-kernel-warn_count new file +6 -0
@@ -0,0 +1,6 @@ +What: /sys/kernel/warn_count +Date: November 2022 +KernelVersion: 6.2.0 +Contact: Linux Kernel Hardening List <[email protected]> +Description: + Shows how many times the system has Warned since last boot.
Documentation/sysctl/kernel.txt +20 -0
@@ -48,6 +48,7 @@ show up in /proc/sys/kernel: - msgmnb - msgmni - nmi_watchdog +- oops_limit - osrelease - ostype - overflowgid
@@ -93,6 +94,7 @@ show up in /proc/sys/kernel: - threads-max - unprivileged_bpf_disabled - unknown_nmi_panic +- warn_limit - watchdog - watchdog_thresh - version
@@ -515,6 +517,15 @@ scanned for a given scan. ============================================================== +oops_limit: + +Number of kernel oopses after which the kernel should panic when +``panic_on_oops`` is not set. Setting this to 0 disables checking +the count. Setting this to 1 has the same effect as setting +``panic_on_oops=1``. The default value is 10000. + +============================================================== + osrelease, ostype & version: # cat osrelease
@@ -1062,6 +1073,15 @@ example. If a system hangs up, try pressing the NMI switch. ============================================================== +warn_limit: + +Number of kernel warnings after which the kernel should panic when +``panic_on_warn`` is not set. Setting this to 0 disables checking +the warning count. Setting this to 1 has the same effect as setting +``panic_on_warn=1``. The default value is 0. + +============================================================== + watchdog: This parameter can be used to disable or enable the soft lockup detector
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 14 -SUBLEVEL = 304 +SUBLEVEL = 305 EXTRAVERSION = NAME = Petit Gorille
arch/alpha/kernel/traps.c +3 -3
@@ -192,7 +192,7 @@ die_if_kernel(char * str, struct pt_regs *regs, long err, unsigned long *r9_15)local_irq_enable ();while (1 ); } -do_exit (SIGSEGV ); +make_task_dead (SIGSEGV ); }#ifndef CONFIG_MATHEMU
@@ -609,7 +609,7 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg,printk ("Bad unaligned kernel access at %016lx: %p %lx %lu\n" , pc, va, opcode, reg); -do_exit (SIGSEGV ); +make_task_dead (SIGSEGV ); got_exception:/* Ok, we caught the exception, but we don't want it. Is there
@@ -664,7 +664,7 @@ do_entUna(void * va, unsigned long opcode, unsigned long reg,local_irq_enable ();while (1 ); } -do_exit (SIGSEGV ); +make_task_dead (SIGSEGV ); }/*
arch/alpha/mm/fault.c +1 -1
@@ -206,7 +206,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr,printk (KERN_ALERT "Unable to handle kernel paging request at " "virtual address %016lx\n" , address);die_if_kernel ("Oops" , regs, cause, (unsigned long *)regs -16 ); -do_exit (SIGKILL ); +make_task_dead (SIGKILL );/* We ran out of memory, or some other thing happened to us that made us unable to handle the page fault gracefully. */
arch/arm/boot/dts/imx6qdl-gw560x.dtsi +0 -1
@@ -462,7 +462,6 @@ &uart1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart1>; - uart-has-rtscts; rts-gpios = <&gpio7 1 GPIO_ACTIVE_HIGH>; status = "okay"; };
arch/arm/kernel/traps.c +1 -1
@@ -342,7 +342,7 @@ static void oops_end(unsigned long flags, struct pt_regs *regs, int signr)if (panic_on_oops)panic ("Fatal exception" );if (signr) -do_exit (signr); +make_task_dead (signr); }/*
arch/arm/mm/fault.c +1 -1
@@ -150,7 +150,7 @@ __do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,show_pte (mm, addr);die ("Oops" , regs, fsr);bust_spinlocks (0 ); -do_exit (SIGKILL ); +make_task_dead (SIGKILL ); }/*
arch/arm/mm/nommu.c +1 -1
@@ -379,7 +379,7 @@ void __init paging_init(const struct machine_desc *mdesc)mpu_setup ();/* allocate the zero page. */ - zero_page =memblock_alloc (PAGE_SIZE ,PAGE_SIZE ); + zero_page = (void *)memblock_alloc (PAGE_SIZE ,PAGE_SIZE );if (!zero_page)panic ("%s: Failed to allocate %lu bytes align=0x%lx\n" , __func__,PAGE_SIZE ,PAGE_SIZE );
arch/arm64/kernel/traps.c +1 -1
@@ -223,7 +223,7 @@ void die(const char *str, struct pt_regs *regs, int err)raw_spin_unlock_irqrestore (&die_lock, flags);if (ret !=NOTIFY_STOP ) -do_exit (SIGSEGV ); +make_task_dead (SIGSEGV ); } void arm64_notify_die(const char *str, struct pt_regs *regs,
arch/arm64/mm/fault.c +1 -1
@@ -288,7 +288,7 @@ static void __do_kernel_fault(unsigned long addr, unsigned int esr,show_pte (addr);die ("Oops" , regs, esr);bust_spinlocks (0 ); -do_exit (SIGKILL ); +make_task_dead (SIGKILL ); }/*
arch/h8300/kernel/traps.c +2 -1
@@ -17,6 +17,7 @@#include <linux/types.h> #include <linux/sched.h> #include <linux/sched/debug.h> +#include <linux/sched/task.h> #include <linux/mm_types.h> #include <linux/kernel.h> #include <linux/errno.h>
@@ -110,7 +111,7 @@ void die(const char *str, struct pt_regs *fp, unsigned long err)dump (fp);spin_unlock_irq (&die_lock); -do_exit (SIGSEGV ); +make_task_dead (SIGSEGV ); }static int kstack_depth_to_print =24 ;
arch/h8300/mm/fault.c +1 -1
@@ -52,7 +52,7 @@ asmlinkage int do_page_fault(struct pt_regs *regs, unsigned long address,printk (" at virtual address %08lx\n" , address);if (!user_mode (regs))die ("Oops" , regs, error_code); -do_exit (SIGKILL ); +make_task_dead (SIGKILL );return 1 ; }
arch/hexagon/kernel/traps.c +1 -1
@@ -234,7 +234,7 @@ int die(const char *str, struct pt_regs *regs, long err)panic ("Fatal exception" );oops_exit (); -do_exit (err); +make_task_dead (err);return 0 ; }
arch/ia64/Kconfig +1 -1
@@ -461,7 +461,7 @@ config ARCH_PROC_KCORE_TEXT depends on PROC_KCORE config IA64_MCA_RECOVERY - tristate "MCA recovery from errors other than TLB." + bool "MCA recovery from errors other than TLB." config PERFMON bool "Performance monitor support"
arch/ia64/kernel/mca_drv.c +2 -1
@@ -11,6 +11,7 @@#include <linux/types.h> #include <linux/init.h> #include <linux/sched.h> +#include <linux/sched/task.h> #include <linux/interrupt.h> #include <linux/irq.h> #include <linux/kallsyms.h>
@@ -176,7 +177,7 @@ mca_handler_bh(unsigned long paddr, void *iip, unsigned long ipsr)spin_unlock (&mca_bh_lock);/* This process is about to be killed itself */ -do_exit (SIGKILL ); +make_task_dead (SIGKILL ); }/**
arch/ia64/kernel/traps.c +1 -1
@@ -85,7 +85,7 @@ die (const char *str, struct pt_regs *regs, long err)if (panic_on_oops)panic ("Fatal exception" ); -do_exit (SIGSEGV ); +make_task_dead (SIGSEGV );return 0 ; }
arch/ia64/mm/fault.c +1 -1
@@ -300,7 +300,7 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re regs =NULL ;bust_spinlocks (0 );if (regs) -do_exit (SIGKILL ); +make_task_dead (SIGKILL );return ; out_of_memory:
arch/m68k/kernel/traps.c +1 -1
@@ -1141,7 +1141,7 @@ void die_if_kernel (char *str, struct pt_regs *fp, int nr)pr_crit ("%s: %08x\n" , str, nr);show_registers (fp);add_taint (TAINT_DIE ,LOCKDEP_NOW_UNRELIABLE ); -do_exit (SIGSEGV ); +make_task_dead (SIGSEGV ); } asmlinkage void set_esp0(unsigned long ssp)
arch/m68k/mm/fault.c +1 -1
@@ -50,7 +50,7 @@ int send_fault_sig(struct pt_regs *regs)pr_alert ("Unable to handle kernel access" );pr_cont (" at virtual address %p\n" , siginfo.si_addr);die_if_kernel ("Oops" , regs,0 /*error_code*/ ); -do_exit (SIGKILL ); +make_task_dead (SIGKILL ); }return 1 ;
arch/microblaze/kernel/exceptions.c +2 -2
@@ -44,10 +44,10 @@ void die(const char *str, struct pt_regs *fp, long err)pr_warn ("Oops: %s, sig: %ld\n" , str, err);show_regs (fp);spin_unlock_irq (&die_lock); -/* do_exit() should take care of panic'ing from an interrupt +/* make_task_dead() should take care of panic'ing from an interrupt * context so we don't handle it here */ -do_exit (err); +make_task_dead (err); }/* for user application debugging */
arch/mips/kernel/traps.c +1 -1
@@ -414,7 +414,7 @@ void __noreturn die(const char *str, struct pt_regs *regs)if (regs &&kexec_should_crash (current))crash_kexec (regs); -do_exit (sig); +make_task_dead (sig); }extern struct exception_table_entry __start___dbe_table[];
arch/nios2/kernel/traps.c +2 -2
@@ -43,10 +43,10 @@ void die(const char *str, struct pt_regs *regs, long err)show_regs (regs);spin_unlock_irq (&die_lock);/* -* do_exit() should take care of panic'ing from an interrupt +* make_task_dead() should take care of panic'ing from an interrupt * context so we don't handle it here */ -do_exit (err); +make_task_dead (err); }void _exception (int signo,struct pt_regs *regs,int code,unsigned long addr)
arch/openrisc/kernel/traps.c +1 -1
@@ -265,7 +265,7 @@ void die(const char *str, struct pt_regs *regs, long err) __asm__ __volatile__("l.nop 1" );do {}while (1 );#endif -do_exit (SIGSEGV ); +make_task_dead (SIGSEGV ); }/* This is normally the 'Oops' routine */
arch/parisc/kernel/traps.c +1 -1
@@ -290,7 +290,7 @@ void die_if_kernel(char *str, struct pt_regs *regs, long err)panic ("Fatal exception" );oops_exit (); -do_exit (SIGSEGV ); +make_task_dead (SIGSEGV ); }/* gdb uses break 4,8 */
arch/powerpc/kernel/traps.c +1 -1
@@ -211,7 +211,7 @@ static void oops_end(unsigned long flags, struct pt_regs *regs,panic ("Fatal exception in interrupt" );if (panic_on_oops)panic ("Fatal exception" ); -do_exit (signr); +make_task_dead (signr); }NOKPROBE_SYMBOL (oops_end);
arch/s390/kernel/dumpstack.c +1 -1
@@ -186,5 +186,5 @@ void die(struct pt_regs *regs, const char *str)if (panic_on_oops)panic ("Fatal exception: panic_on_oops" );oops_exit (); -do_exit (SIGSEGV ); +make_task_dead (SIGSEGV ); }
arch/s390/kernel/nmi.c +1 -1
@@ -94,7 +94,7 @@ void s390_handle_mcck(void) "malfunction (code 0x%016lx).\n", mcck.mcck_code);printk (KERN_EMERG "mcck: task: %s, pid: %d.\n" , current->comm, current->pid); -do_exit (SIGSEGV ); +make_task_dead (SIGSEGV ); } }EXPORT_SYMBOL_GPL (s390_handle_mcck);
arch/sh/kernel/traps.c +1 -1
@@ -57,7 +57,7 @@ void die(const char *str, struct pt_regs *regs, long err)if (panic_on_oops)panic ("Fatal exception" ); -do_exit (SIGSEGV ); +make_task_dead (SIGSEGV ); }void die_if_kernel (const char *str,struct pt_regs *regs,long err)
arch/sparc/kernel/traps_32.c +1 -3
@@ -86,9 +86,7 @@ void __noreturn die_if_kernel(char *str, struct pt_regs *regs) }printk ("Instruction DUMP:" );instruction_dump ((unsigned long *) regs->pc); -if (regs->psr &PSR_PS ) -do_exit (SIGKILL ); -do_exit (SIGSEGV ); +make_task_dead ((regs->psr &PSR_PS ) ?SIGKILL :SIGSEGV ); }void do_hw_interrupt (struct pt_regs *regs,unsigned long type)
arch/sparc/kernel/traps_64.c +1 -3
@@ -2547,9 +2547,7 @@ void __noreturn die_if_kernel(char *str, struct pt_regs *regs) }if (panic_on_oops)panic ("Fatal exception" ); -if (regs->tstate &TSTATE_PRIV ) -do_exit (SIGKILL ); -do_exit (SIGSEGV ); +make_task_dead ((regs->tstate &TSTATE_PRIV )?SIGKILL :SIGSEGV ); }EXPORT_SYMBOL (die_if_kernel);
arch/x86/entry/entry_32.S +3 -3
@@ -1068,13 +1068,13 @@ ENTRY(async_page_fault) END(async_page_fault) #endif -ENTRY(rewind_stack_do_exit) +ENTRY(rewind_stack_and_make_dead) /* Prevent any naive code from trying to unwind to our caller. */ xorl %ebp, %ebp movl PER_CPU_VAR(cpu_current_top_of_stack), %esi leal -TOP_OF_KERNEL_STACK_PADDING-PTREGS_SIZE(%esi), %esp - call do_exit + call make_task_dead 1: jmp 1b -END(rewind_stack_do_exit) +END(rewind_stack_and_make_dead)
arch/x86/entry/entry_64.S +4 -4
@@ -1669,10 +1669,10 @@ END(nmi) ENTRY(ignore_sysret) UNWIND_HINT_EMPTY mov $-ENOSYS, %eax - sysret + sysretl END(ignore_sysret) -ENTRY(rewind_stack_do_exit) +ENTRY(rewind_stack_and_make_dead) UNWIND_HINT_FUNC /* Prevent any naive code from trying to unwind to our caller. */ xorl %ebp, %ebp
@@ -1681,5 +1681,5 @@ ENTRY(rewind_stack_do_exit) leaq -PTREGS_SIZE(%rax), %rsp UNWIND_HINT_REGS - call do_exit -END(rewind_stack_do_exit) + call make_task_dead +END(rewind_stack_and_make_dead)
arch/x86/kernel/dumpstack.c +2 -2
@@ -271,7 +271,7 @@ unsigned long oops_begin(void)EXPORT_SYMBOL_GPL (oops_begin);NOKPROBE_SYMBOL (oops_begin); -void __noreturn rewind_stack_do_exit (int signr); +void __noreturn rewind_stack_and_make_dead (int signr);void oops_end (unsigned long flags,struct pt_regs *regs,int signr) {
@@ -303,7 +303,7 @@ void oops_end(unsigned long flags, struct pt_regs *regs, int signr)* reuse the task stack and that existing poisons are invalid. */ kasan_unpoison_task_stack (current); -rewind_stack_do_exit (signr); +rewind_stack_and_make_dead (signr); }NOKPROBE_SYMBOL (oops_end);
arch/x86/kernel/i8259.c +1 -0
@@ -114,6 +114,7 @@ static void make_8259A_irq(unsigned int irq)disable_irq_nosync (irq); io_apic_irqs &= ~(1 <<irq);irq_set_chip_and_handler (irq, &i8259A_chip, handle_level_irq); +irq_set_status_flags (irq,IRQ_LEVEL );enable_irq (irq); }
arch/x86/kernel/irqinit.c +3 -1
@@ -67,8 +67,10 @@ void __init init_ISA_irqs(void)#endif legacy_pic->init (0 ); -for (i =0 ; i <nr_legacy_irqs (); i++) +for (i =0 ; i <nr_legacy_irqs (); i++) {irq_set_chip_and_handler (i, chip, handle_level_irq); +irq_set_status_flags (i,IRQ_LEVEL ); + } }void __init init_IRQ (void )
arch/x86/lib/iomap_copy_64.S +1 -1
@@ -22,6 +22,6 @@ */ ENTRY(__iowrite32_copy) movl %edx,%ecx - rep movsd + rep movsl ret ENDPROC(__iowrite32_copy)
arch/x86/xen/time.c +1 -1
@@ -516,7 +516,7 @@ static void __init xen_time_init(void)pvclock_gtod_register_notifier (&xen_pvclock_gtod_notifier); } -void __ref xen_init_time_ops (void ) +void __init xen_init_time_ops (void ) { xen_sched_clock_offset =xen_clocksource_read (); pv_time_ops = xen_time_ops;
arch/xtensa/kernel/traps.c +1 -1
@@ -547,5 +547,5 @@ void die(const char * str, struct pt_regs * regs, long err)if (panic_on_oops)panic ("Fatal exception" ); -do_exit (err); +make_task_dead (err); }
drivers/dma/dmaengine.c +4 -3
@@ -225,7 +225,8 @@ static int dma_chan_get(struct dma_chan *chan)/* The channel is already in use, update client count */ if (chan->client_count) {__module_get (owner); - goto out; + chan->client_count++; +return 0 ; }if (!try_module_get (owner))
@@ -238,11 +239,11 @@ static int dma_chan_get(struct dma_chan *chan) goto err_out; } + chan->client_count++; +if (!dma_has_cap (DMA_PRIVATE , chan->device->cap_mask))balance_ref_count (chan); -out: - chan->client_count++;return 0 ; err_out:
drivers/edac/edac_device.c +7 -8
@@ -34,6 +34,9 @@static DEFINE_MUTEX (device_ctls_mutex);static LIST_HEAD (edac_device_list); +/* Default workqueue processing interval on this instance, in msecs */ +#define DEFAULT_POLL_INTERVAL 1000 +#ifdef CONFIG_EDAC_DEBUG static void edac_device_dump_device (struct edac_device_ctl_info *edac_dev) {
@@ -366,7 +369,7 @@ static void edac_device_workq_function(struct work_struct *work_req)* whole one second to save timers firing all over the period * between integral seconds */ -if (edac_dev->poll_msec ==1000 ) +if (edac_dev->poll_msec ==DEFAULT_POLL_INTERVAL )edac_queue_work (&edac_dev->work,round_jiffies_relative (edac_dev->delay));else edac_queue_work (&edac_dev->work, edac_dev->delay);
@@ -396,7 +399,7 @@ static void edac_device_workq_setup(struct edac_device_ctl_info *edac_dev,* timers firing on sub-second basis, while they are happy * to fire together on the 1 second exactly */ -if (edac_dev->poll_msec ==1000 ) +if (edac_dev->poll_msec ==DEFAULT_POLL_INTERVAL )edac_queue_work (&edac_dev->work,round_jiffies_relative (edac_dev->delay));else edac_queue_work (&edac_dev->work, edac_dev->delay);
@@ -430,7 +433,7 @@ void edac_device_reset_delay_period(struct edac_device_ctl_info *edac_dev, edac_dev->delay =msecs_to_jiffies (msec);/* See comment in edac_device_workq_setup() above */ -if (edac_dev->poll_msec ==1000 ) +if (edac_dev->poll_msec ==DEFAULT_POLL_INTERVAL )edac_mod_work (&edac_dev->work,round_jiffies_relative (edac_dev->delay));else edac_mod_work (&edac_dev->work, edac_dev->delay);
@@ -472,11 +475,7 @@ int edac_device_add_device(struct edac_device_ctl_info *edac_dev)/* This instance is NOW RUNNING */ edac_dev->op_state =OP_RUNNING_POLL ; -/* -* enable workq processing on this instance, -* default = 1000 msec -*/ -edac_device_workq_setup (edac_dev,1000 ); +edac_device_workq_setup (edac_dev, edac_dev->poll_msec ?:DEFAULT_POLL_INTERVAL ); }else { edac_dev->op_state =OP_RUNNING_INTERRUPT ; }
drivers/edac/highbank_mc_edac.c +5 -2
@@ -185,8 +185,10 @@ static int highbank_mc_probe(struct platform_device *pdev) drvdata = mci->pvt_info;platform_set_drvdata (pdev, mci); -if (!devres_open_group (&pdev->dev,NULL ,GFP_KERNEL )) -return -ENOMEM ; +if (!devres_open_group (&pdev->dev,NULL ,GFP_KERNEL )) { + res = -ENOMEM ; + goto free; + } r =platform_get_resource (pdev,IORESOURCE_MEM ,0 );if (!r) {
@@ -254,6 +256,7 @@ static int highbank_mc_probe(struct platform_device *pdev)edac_mc_del_mc (&pdev->dev); err:devres_release_group (&pdev->dev,NULL ); +free:edac_mc_free (mci);return res; }
drivers/gpu/drm/radeon/atombios_dp.c +4 -4
@@ -302,10 +302,10 @@ static int convert_bpc_to_bpp(int bpc)/***** radeon specific DP functions *****/ -int radeon_dp_get_dp_link_config (struct drm_connector *connector, -const u8 dpcd[DP_DPCD_SIZE ], -unsigned pix_clock, -unsigned *dp_lanes,unsigned *dp_rate) +static int radeon_dp_get_dp_link_config (struct drm_connector *connector, +const u8 dpcd[DP_DPCD_SIZE ], +unsigned pix_clock, +unsigned *dp_lanes,unsigned *dp_rate) {int bpp =convert_bpc_to_bpp (radeon_get_monitor_bpc (connector));static const unsigned link_rates[3 ] = {162000 ,270000 ,540000 };
drivers/gpu/drm/radeon/radeon_mode.h +0 -4
@@ -762,10 +762,6 @@ extern u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector);extern bool radeon_dp_getdpcd (struct radeon_connector *radeon_connector);extern int radeon_dp_get_panel_mode (struct drm_encoder *encoder,struct drm_connector *connector); -extern int radeon_dp_get_dp_link_config (struct drm_connector *connector, -const u8 *dpcd, -unsigned pix_clock, -unsigned *dp_lanes,unsigned *dp_rate);extern void radeon_dp_set_rx_power_state (struct drm_connector *connector,u8 power_state);extern void radeon_dp_aux_init (struct radeon_connector *radeon_connector);
drivers/hid/hid-betopff.c +9 -8
@@ -63,7 +63,6 @@ static int betopff_init(struct hid_device *hid)struct list_head *report_list = &hid->report_enum[HID_OUTPUT_REPORT ].report_list;struct input_dev *dev; -int field_count =0 ;int error;int i, j;
@@ -89,19 +88,21 @@ static int betopff_init(struct hid_device *hid)* ----------------------------------------- * Do init them with default value. */ +if (report->maxfield <4 ) { +hid_err (hid,"not enough fields in the report: %d\n" , + report->maxfield); +return -ENODEV ; + }for (i =0 ; i < report->maxfield; i++) { +if (report->field[i]->report_count <1 ) { +hid_err (hid,"no values in the field\n" ); +return -ENODEV ; + }for (j =0 ; j < report->field[i]->report_count; j++) { report->field[i]->value[j] =0x00 ; - field_count++; } } -if (field_count <4 ) { -hid_err (hid,"not enough fields in the report: %d\n" , - field_count); -return -ENODEV ; - } - betopff =kzalloc (sizeof (*betopff),GFP_KERNEL );if (!betopff)return -ENOMEM ;
drivers/hid/hid-core.c +2 -2
@@ -984,8 +984,8 @@ struct hid_report *hid_validate_values(struct hid_device *hid,* Validating on id 0 means we should examine the first * report in the list. */ - report =list_entry ( - hid->report_enum[type].report_list.next, + report =list_first_entry_or_null ( + &hid->report_enum[type].report_list, struct hid_report, list); }else { report = hid->report_enum[type].report_id_hash[id];
drivers/hid/intel-ish-hid/ishtp/dma-if.c +10 -0
@@ -113,6 +113,11 @@ void *ishtp_cl_get_dma_send_buf(struct ishtp_device *dev,int required_slots = (size /DMA_SLOT_SIZE ) +1 * (size %DMA_SLOT_SIZE !=0 ); +if (!dev->ishtp_dma_tx_map) { +dev_err (dev->devc,"Fail to allocate Tx map\n" ); +return NULL ; + } +spin_lock_irqsave (&dev->ishtp_dma_tx_lock, flags);for (i =0 ; i <= (dev->ishtp_dma_num_slots - required_slots); i++) { free =1 ;
@@ -159,6 +164,11 @@ void ishtp_cl_release_dma_acked_mem(struct ishtp_device *dev,return ; } +if (!dev->ishtp_dma_tx_map) { +dev_err (dev->devc,"Fail to allocate Tx map\n" ); +return ; + } + i = (msg_addr - dev->ishtp_host_dma_tx_buf) /DMA_SLOT_SIZE ;spin_lock_irqsave (&dev->ishtp_dma_tx_lock, flags);for (j =0 ; j < acked_slots; j++) {
drivers/infiniband/hw/hfi1/user_exp_rcv.c +8 -8
@@ -323,6 +323,8 @@ int hfi1_user_exp_rcv_setup(struct hfi1_filedata *fd,if (!PAGE_ALIGNED (tinfo->vaddr))return -EINVAL ; +if (tinfo->length ==0 ) +return -EINVAL ; tidbuf =kzalloc (sizeof (*tidbuf),GFP_KERNEL );if (!tidbuf)
@@ -347,16 +349,13 @@ int hfi1_user_exp_rcv_setup(struct hfi1_filedata *fd,/* Find sets of physically contiguous pages */ tidbuf->n_psets =find_phys_blocks (tidbuf, pinned); -/* -* We don't need to access this under a lock since tid_used is per -* process and the same process cannot be in hfi1_user_exp_rcv_clear() -* and hfi1_user_exp_rcv_setup() at the same time. -*/ +/* Reserve the number of expected tids to be used. */ spin_lock (&fd->tid_lock);if (fd->tid_used + tidbuf->n_psets > fd->tid_limit) pageset_count = fd->tid_limit - fd->tid_used;else pageset_count = tidbuf->n_psets; + fd->tid_used += pageset_count;spin_unlock (&fd->tid_lock);if (!pageset_count)
@@ -466,10 +465,11 @@ int hfi1_user_exp_rcv_setup(struct hfi1_filedata *fd, nomem:hfi1_cdbg (TID ,"total mapped: tidpairs:%u pages:%u (%d)" , tididx, mapped_pages, ret); +/* adjust reserved tid_used to actual count */ +spin_lock (&fd->tid_lock); + fd->tid_used -= pageset_count - tididx; +spin_unlock (&fd->tid_lock);if (tididx) { -spin_lock (&fd->tid_lock); - fd->tid_used += tididx; -spin_unlock (&fd->tid_lock); tinfo->tidcnt = tididx; tinfo->length = mapped_pages *PAGE_SIZE ;
drivers/input/mouse/synaptics.c +0 -1
@@ -192,7 +192,6 @@ static const char * const smbus_pnp_ids[] = {"SYN3221" ,/* HP 15-ay000 */ "SYN323d" ,/* HP Spectre X360 13-w013dx */ "SYN3257" ,/* HP Envy 13-ad105ng */ -"SYN3286" ,/* HP Laptop 15-da3001TU */ NULL };
drivers/net/ethernet/amd/xgbe/xgbe-dev.c +15 -8
@@ -523,19 +523,28 @@ static void xgbe_disable_vxlan(struct xgbe_prv_data *pdata)netif_dbg (pdata, drv, pdata->netdev,"VXLAN acceleration disabled\n" ); } +static unsigned int xgbe_get_fc_queue_count (struct xgbe_prv_data *pdata) +{ +unsigned int max_q_count =XGMAC_MAX_FLOW_CONTROL_QUEUES ; + +/* From MAC ver 30H the TFCR is per priority, instead of per queue */ +if (XGMAC_GET_BITS (pdata->hw_feat.version,MAC_VR ,SNPSVER ) >=0x30 ) +return max_q_count; +else + return min_t(unsigned int, pdata->tx_q_count, max_q_count); +} +static int xgbe_disable_tx_flow_control (struct xgbe_prv_data *pdata) { -unsigned int max_q_count, q_count;unsigned int reg, reg_val; -unsigned int i; +unsigned int i, q_count;/* Clear MTL flow control */ for (i =0 ; i < pdata->rx_q_count; i++)XGMAC_MTL_IOWRITE_BITS (pdata, i,MTL_Q_RQOMR ,EHFC ,0 );/* Clear MAC flow control */ - max_q_count =XGMAC_MAX_FLOW_CONTROL_QUEUES ; - q_count = min_t(unsigned int, pdata->tx_q_count, max_q_count); + q_count =xgbe_get_fc_queue_count (pdata); reg =MAC_Q0TFCR ;for (i =0 ; i < q_count; i++) { reg_val =XGMAC_IOREAD (pdata, reg);
@@ -552,9 +561,8 @@ static int xgbe_enable_tx_flow_control(struct xgbe_prv_data *pdata) {struct ieee_pfc *pfc = pdata->pfc;struct ieee_ets *ets = pdata->ets; -unsigned int max_q_count, q_count;unsigned int reg, reg_val; -unsigned int i; +unsigned int i, q_count;/* Set MTL flow control */ for (i =0 ; i < pdata->rx_q_count; i++) {
@@ -578,8 +586,7 @@ static int xgbe_enable_tx_flow_control(struct xgbe_prv_data *pdata) }/* Set MAC flow control */ - max_q_count =XGMAC_MAX_FLOW_CONTROL_QUEUES ; - q_count = min_t(unsigned int, pdata->tx_q_count, max_q_count); + q_count =xgbe_get_fc_queue_count (pdata); reg =MAC_Q0TFCR ;for (i =0 ; i < q_count; i++) { reg_val =XGMAC_IOREAD (pdata, reg);
drivers/net/ethernet/broadcom/tg3.c +4 -4
@@ -11158,7 +11158,7 @@ static void tg3_reset_task(struct work_struct *work)rtnl_lock ();tg3_full_lock (tp,0 ); -if (!netif_running (tp->dev)) { +if (tp->pcierr_recovery || !netif_running (tp->dev)) {tg3_flag_clear (tp,RESET_TASK_PENDING );tg3_full_unlock (tp);rtnl_unlock ();
@@ -18190,6 +18190,9 @@ static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,netdev_info (netdev,"PCI I/O error detected\n" ); +/* Want to make sure that the reset task doesn't run */ +tg3_reset_task_cancel (tp); +rtnl_lock ();/* Could be second call or maybe we don't have netdev yet */
@@ -18206,9 +18209,6 @@ static pci_ers_result_t tg3_io_error_detected(struct pci_dev *pdev,tg3_timer_stop (tp); -/* Want to make sure that the reset task doesn't run */ -tg3_reset_task_cancel (tp); -netif_device_detach (netdev);/* Clean up software state, even if MMIO is blocked */
drivers/net/ethernet/mellanox/mlx5/core/main.c +4 -4
@@ -1615,7 +1615,7 @@ static void mlx5_core_verify_params(void) } } -static int __init init (void ) +static int __init mlx5_init (void ) {int err;
@@ -1637,7 +1637,7 @@ static int __init init(void)return err; } -static void __exit cleanup(void) +static void __exit mlx5_cleanup(void) {#ifdef CONFIG_MLX5_CORE_EN mlx5e_cleanup ();
@@ -1646,5 +1646,5 @@ static void __exit cleanup(void)mlx5_unregister_debugfs (); } -module_init (init); -module_exit (cleanup); +module_init (mlx5_init); +module_exit (mlx5_cleanup);
drivers/net/ethernet/renesas/ravb_main.c +2 -2
@@ -727,14 +727,14 @@ static void ravb_error_interrupt(struct net_device *ndev)ravb_write (ndev, ~(EIS_QFS |EIS_RESERVED ),EIS );if (eis &EIS_QFS ) { ris2 =ravb_read (ndev,RIS2 ); -ravb_write (ndev, ~(RIS2_QFF0 |RIS2_RFFF |RIS2_RESERVED ), +ravb_write (ndev, ~(RIS2_QFF0 |RIS2_QFF1 |RIS2_RFFF |RIS2_RESERVED ),RIS2 );/* Receive Descriptor Empty int */ if (ris2 &RIS2_QFF0 ) priv->stats[RAVB_BE ].rx_over_errors++; -/* Receive Descriptor Empty int */ +/* Receive Descriptor Empty int */ if (ris2 &RIS2_QFF1 ) priv->stats[RAVB_NC ].rx_over_errors++;
drivers/net/phy/mdio_bus.c +6 -1
@@ -70,7 +70,12 @@ EXPORT_SYMBOL(mdiobus_unregister_device);struct phy_device *mdiobus_get_phy (struct mii_bus *bus,int addr) { -struct mdio_device *mdiodev = bus->mdio_map[addr]; +struct mdio_device *mdiodev; + +if (addr <0 || addr >=ARRAY_SIZE (bus->mdio_map)) +return NULL ; + + mdiodev = bus->mdio_map[addr];if (!mdiodev)return NULL ;
drivers/net/usb/sr9700.c +1 -1
@@ -410,7 +410,7 @@ static int sr9700_rx_fixup(struct usbnet *dev, struct sk_buff *skb)/* ignore the CRC length */ len = (skb->data[1 ] | (skb->data[2 ] <<8 )) -4 ; -if (len >ETH_FRAME_LEN || len > skb->len) +if (len >ETH_FRAME_LEN || len > skb->len || len <0 )return 0 ;/* the last packet of current skb */
drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c +1 -1
@@ -574,7 +574,7 @@ int brcmf_fw_map_chip_to_name(u32 chip, u32 chiprev,if (chiprev >=BITS_PER_TYPE (u32)) {brcmf_err ("Invalid chip revision %u\n" , chiprev); -return NULL ; +return -EINVAL ; }for (i =0 ; i < table_size; i++) {
drivers/net/wireless/rndis_wlan.c +6 -13
@@ -712,8 +712,8 @@ static int rndis_query_oid(struct usbnet *dev, u32 oid, void *data, int *len)struct rndis_query *get;struct rndis_query_c *get_c; } u; -int ret, buflen; -int resplen, respoffs, copylen; +int ret; +size_t buflen, resplen, respoffs, copylen; buflen = *len +sizeof (*u.get);if (buflen <CONTROL_BUFFER_SIZE )
@@ -748,22 +748,15 @@ static int rndis_query_oid(struct usbnet *dev, u32 oid, void *data, int *len)if (respoffs > buflen) {/* Device returned data offset outside buffer, error. */ -netdev_dbg (dev->net,"%s(%s): received invalid " -"data offset: %d > %d\n" , __func__, -oid_to_string (oid), respoffs, buflen); +netdev_dbg (dev->net, +"%s(%s): received invalid data offset: %zu > %zu\n" , + __func__,oid_to_string (oid), respoffs, buflen); ret = -EINVAL ; goto exit_unlock; } -if ((resplen + respoffs) > buflen) { -/* Device would have returned more data if buffer would -* have been big enough. Copy just the bits that we got. -*/ - copylen = buflen - respoffs; - }else { - copylen = resplen; - } + copylen =min (resplen, buflen - respoffs);if (copylen > *len) copylen = *len;
drivers/phy/rockchip/phy-rockchip-inno-usb2.c +3 -1
@@ -477,8 +477,10 @@ static int rockchip_usb2phy_power_on(struct phy *phy)return ret; ret =property_enable (base, &rport->port_cfg->phy_sus, false); -if (ret) +if (ret) { +clk_disable_unprepare (rphy->clk480m);return ret; + }/* waiting for the utmi_clk to become stable */ usleep_range (1500 ,2000 );
drivers/scsi/hpsa.c +1 -1
@@ -5627,7 +5627,7 @@ static int hpsa_scsi_host_alloc(struct ctlr_info *h) {struct Scsi_Host *sh; - sh =scsi_host_alloc (&hpsa_driver_template,sizeof (h)); + sh =scsi_host_alloc (&hpsa_driver_template,sizeof (struct ctlr_info ));if (sh ==NULL ) {dev_err (&h->pdev->dev,"scsi_host_alloc failed\n" );return -ENOMEM ;
drivers/scsi/qla2xxx/qla_bsg.c +4 -6
@@ -924,9 +924,9 @@ qla2x00_process_loopback(struct bsg_job *bsg_job) bsg_job->reply_len =sizeof (struct fc_bsg_reply ) +sizeof (response) +sizeof (uint8_t ); - fw_sts_ptr = ((uint8_t *)scsi_req (bsg_job->req)->sense) + -sizeof (struct fc_bsg_reply ); -memcpy (fw_sts_ptr, response,sizeof (response)); + fw_sts_ptr = bsg_job->reply +sizeof (struct fc_bsg_reply ); +memcpy (bsg_job->reply +sizeof (struct fc_bsg_reply ), response, +sizeof (response)); fw_sts_ptr +=sizeof (response); *fw_sts_ptr = command_sent;
@@ -2558,13 +2558,11 @@ qla24xx_bsg_timeout(struct bsg_job *bsg_job)ql_log (ql_log_warn, vha,0x7089 ,"mbx abort_command " "failed.\n" ); -scsi_req (bsg_job->req)->result = bsg_reply->result = -EIO ; }else {ql_dbg (ql_dbg_user, vha,0x708a ,"mbx abort_command " "success.\n" ); -scsi_req (bsg_job->req)->result = bsg_reply->result =0 ; }spin_lock_irqsave (&ha->hardware_lock, flags);
@@ -2575,7 +2573,7 @@ qla24xx_bsg_timeout(struct bsg_job *bsg_job) }spin_unlock_irqrestore (&ha->hardware_lock, flags);ql_log (ql_log_info, vha,0x708b ,"SRB not found to abort.\n" ); -scsi_req (bsg_job->req)->result = bsg_reply->result = -ENXIO ; + bsg_reply->result = -ENXIO ;return 0 ; done:
drivers/scsi/qla2xxx/qla_isr.c +3 -9
@@ -1540,7 +1540,6 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req,struct fc_bsg_reply *bsg_reply;uint16_t comp_status;uint32_t fw_status[3 ]; -uint8_t * fw_sts_ptr;int res; sp =qla2x00_get_sp_from_handle (vha, func, req, pkt);
@@ -1601,11 +1600,7 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req, type, sp->handle, comp_status, fw_status[1 ], fw_status[2 ],le16_to_cpu (((struct els_sts_entry_24xx *) pkt)->total_byte_count)); - fw_sts_ptr = ((uint8_t *)scsi_req (bsg_job->req)->sense) + -sizeof (struct fc_bsg_reply ); -memcpy ( fw_sts_ptr, fw_status,sizeof (fw_status)); - } -else { + }else { ql_dbg(ql_dbg_user, vha, 0x5040, "ELS-CT pass-through-%s error hdl=%x comp_status-status=0x%x " "error subcode 1=0x%x error subcode 2=0x%x.\n",
@@ -1616,10 +1611,9 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req, pkt)->error_subcode_2)); res =DID_ERROR <<16 ; bsg_reply->reply_payload_rcv_len =0 ; - fw_sts_ptr = ((uint8_t *)scsi_req (bsg_job->req)->sense) + -sizeof (struct fc_bsg_reply ); -memcpy ( fw_sts_ptr, fw_status,sizeof (fw_status)); } +memcpy (bsg_job->reply +sizeof (struct fc_bsg_reply ), + fw_status,sizeof (fw_status));ql_dump_buffer (ql_dbg_user + ql_dbg_buffer, vha,0x5056 , (uint8_t *)pkt,sizeof (*pkt)); }
drivers/scsi/qla2xxx/qla_mr.c +1 -2
@@ -2222,8 +2222,7 @@ qlafx00_ioctl_iosb_entry(scsi_qla_host_t *vha, struct req_que *req,memcpy (fstatus.reserved_3, pkt->reserved_2,20 *sizeof (uint8_t )); - fw_sts_ptr = ((uint8_t *)scsi_req (bsg_job->req)->sense) + -sizeof (struct fc_bsg_reply ); + fw_sts_ptr = bsg_job->reply +sizeof (struct fc_bsg_reply );memcpy (fw_sts_ptr, (uint8_t *)&fstatus,sizeof (struct qla_mt_iocb_rsp_fx00 ));
drivers/staging/comedi/drivers/adv_pci1760.c +1 -1
@@ -68,7 +68,7 @@#define PCI1760_CMD_CLR_IMB2 0x00/* Clears IMB2 */ #define PCI1760_CMD_SET_DO 0x01/* Set output state */ #define PCI1760_CMD_GET_DO 0x02/* Read output status */ -#define PCI1760_CMD_GET_STATUS 0x03/* Read current status */ +#define PCI1760_CMD_GET_STATUS 0x07/* Read current status */ #define PCI1760_CMD_GET_FW_VER 0x0e/* Read firware version */ #define PCI1760_CMD_GET_HW_VER 0x0f/* Read hardware version */ #define PCI1760_CMD_SET_PWM_HI (x) (0x10 + (x) * 2)/* Set "hi" period */
drivers/usb/gadget/function/f_fs.c +7 -0
@@ -274,6 +274,9 @@ static int __ffs_ep0_queue_wait(struct ffs_data *ffs, char *data, size_t len)struct usb_request *req = ffs->ep0req;int ret; +if (!req) +return -EINVAL ; + req->zero = len <le16_to_cpu (ffs->ev.setup.wLength);spin_unlock_irq (&ffs->ev.waitq.lock);
@@ -1797,10 +1800,14 @@ static void functionfs_unbind(struct ffs_data *ffs)ENTER ();if (!WARN_ON (!ffs->gadget)) { +/* dequeue before freeing ep0req */ +usb_ep_dequeue (ffs->gadget->ep0, ffs->ep0req); +mutex_lock (&ffs->mutex);usb_ep_free_request (ffs->gadget->ep0, ffs->ep0req); ffs->ep0req =NULL ; ffs->gadget =NULL ;clear_bit (FFS_FL_BOUND , &ffs->flags); +mutex_unlock (&ffs->mutex);ffs_data_put (ffs); } }
drivers/usb/host/xhci-plat.c +1 -1
@@ -252,7 +252,7 @@ static int xhci_plat_probe(struct platform_device *pdev) *priv = *priv_match; } -device_wakeup_enable (hcd->self.controller); +device_set_wakeup_capable (&pdev->dev, true); xhci->clk = clk; xhci->main_hcd = hcd;
drivers/w1/w1.c +5 -1
@@ -1136,6 +1136,8 @@ int w1_process(void *data)/* remainder if it woke up early */ unsigned long jremain =0 ; +atomic_inc (&dev->refcnt); +for (;;) {if (!jremain && dev->search_count) {
@@ -1163,8 +1165,10 @@ int w1_process(void *data)*/ mutex_unlock (&dev->list_mutex); -if (kthread_should_stop ()) +if (kthread_should_stop ()) { +__set_current_state (TASK_RUNNING );break ; + }/* Only sleep when the search is active. */ if (dev->search_count) {
drivers/w1/w1_int.c +2 -3
@@ -60,10 +60,9 @@ static struct w1_master *w1_alloc_dev(u32 id, int slave_count, int slave_ttl, dev->search_count = w1_search_count; dev->enable_pullup = w1_enable_pullup; -/* 1 for w1_process to decrement -* 1 for __w1_remove_master_device to decrement +/* For __w1_remove_master_device to decrement */ -atomic_set (&dev->refcnt,2 ); +atomic_set (&dev->refcnt,1 );INIT_LIST_HEAD (&dev->slist);INIT_LIST_HEAD (&dev->async_list);
fs/affs/file.c +1 -1
@@ -878,7 +878,7 @@ affs_truncate(struct inode *inode)if (inode->i_size >AFFS_I (inode)->mmu_private) {struct address_space *mapping = inode->i_mapping;struct page *page; -void *fsdata; +void *fsdata =NULL ;loff_t isize = inode->i_size;int res;
fs/proc/proc_sysctl.c +33 -0
@@ -13,6 +13,7 @@#include <linux/namei.h> #include <linux/mm.h> #include <linux/module.h> +#include <linux/kmemleak.h> #include "internal.h" static const struct dentry_operations proc_sys_dentry_operations;
@@ -1370,6 +1371,38 @@ struct ctl_table_header *register_sysctl(const char *path, struct ctl_table *tab }EXPORT_SYMBOL (register_sysctl); +/** +* __register_sysctl_init() - register sysctl table to path +* @path: path name for sysctl base +* @table: This is the sysctl table that needs to be registered to the path +* @table_name: The name of sysctl table, only used for log printing when +* registration fails +* +* The sysctl interface is used by userspace to query or modify at runtime +* a predefined value set on a variable. These variables however have default +* values pre-set. Code which depends on these variables will always work even +* if register_sysctl() fails. If register_sysctl() fails you'd just loose the +* ability to query or modify the sysctls dynamically at run time. Chances of +* register_sysctl() failing on init are extremely low, and so for both reasons +* this function does not return any error as it is used by initialization code. +* +* Context: Can only be called after your respective sysctl base path has been +* registered. So for instance, most base directories are registered early on +* init before init levels are processed through proc_sys_init() and +* sysctl_init(). +*/ +void __init __register_sysctl_init (const char *path,struct ctl_table *table, +const char *table_name) +{ +struct ctl_table_header *hdr =register_sysctl (path, table); + +if (unlikely (!hdr)) { +pr_err ("failed when register_sysctl %s to %s\n" , table_name, path); +return ; + } +kmemleak_not_leak (hdr); +} +static char *append_path (const char *path,char *pos,const char *name) {int namelen;
fs/reiserfs/super.c +0 -6
@@ -1443,7 +1443,6 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)unsigned long safe_mask =0 ;unsigned int commit_max_age = (unsigned int )-1 ;struct reiserfs_journal *journal =SB_JOURNAL (s); -char *new_opts;int err;char *qf_names[REISERFS_MAXQUOTAS ];unsigned int qfmt =0 ;
@@ -1451,10 +1450,6 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)int i;#endif - new_opts =kstrdup (arg,GFP_KERNEL ); -if (arg && !new_opts) -return -ENOMEM ; -sync_filesystem (s);reiserfs_write_lock (s);
@@ -1605,7 +1600,6 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg) out_err_unlock:reiserfs_write_unlock (s); out_err: -kfree (new_opts);return err; }
include/linux/kernel.h +1 -0
@@ -293,6 +293,7 @@ extern long (*panic_blink)(int state); __printf(1, 2)void panic (const char *fmt, ...)__noreturn __cold ;void nmi_panic (struct pt_regs *regs,const char *msg); +void check_panic_on_warn (const char *origin);extern void oops_enter (void );extern void oops_exit (void );void print_oops_end_marker (void );
include/linux/sched/task.h +1 -0
@@ -36,6 +36,7 @@ extern int sched_fork(unsigned long clone_flags, struct task_struct *p);extern void sched_dead (struct task_struct *p);void __noreturn do_task_dead (void ); +void __noreturn make_task_dead (int signr);extern void proc_caches_init (void );
include/linux/sysctl.h +3 -0
@@ -198,6 +198,9 @@ struct ctl_table_header *register_sysctl_paths(const struct ctl_path *path,void unregister_sysctl_table (struct ctl_table_header * table);extern int sysctl_init (void ); +extern void __register_sysctl_init (const char *path,struct ctl_table *table, +const char *table_name); +#define register_sysctl_init (path, table) __register_sysctl_init(path, table, #table)extern struct ctl_table sysctl_mount_point[];
kernel/exit.c +72 -0
90 lines not on this page · raw message
kernel/module.c +21 -5
@@ -3451,7 +3451,8 @@ static bool finished_loading(const char *name)sched_annotate_sleep ();mutex_lock (&module_mutex); mod =find_module_all (name,strlen (name), true); - ret = !mod || mod->state ==MODULE_STATE_LIVE ; + ret = !mod || mod->state ==MODULE_STATE_LIVE + || mod->state ==MODULE_STATE_GOING ;mutex_unlock (&module_mutex);return ret;
@@ -3603,20 +3604,35 @@ static int add_unformed_module(struct module *mod) mod->state =MODULE_STATE_UNFORMED ; -again:mutex_lock (&module_mutex); old =find_module_all (mod->name,strlen (mod->name), true);if (old !=NULL ) { -if (old->state !=MODULE_STATE_LIVE ) { +if (old->state ==MODULE_STATE_COMING + || old->state ==MODULE_STATE_UNFORMED ) {/* Wait in case it fails to load. */ mutex_unlock (&module_mutex); err =wait_event_interruptible (module_wq,finished_loading (mod->name));if (err) goto out_unlocked; - goto again; + +/* The module might have gone in the meantime. */ +mutex_lock (&module_mutex); + old =find_module_all (mod->name,strlen (mod->name), + true); } - err = -EEXIST ; + +/* +* We are here only when the same module was being loaded. Do +* not try to load it again right now. It prevents long delays +* caused by serialized module load failures. It might happen +* when more devices of the same type trigger load of +* a particular module. +*/ +if (old && old->state ==MODULE_STATE_LIVE ) + err = -EEXIST ; +else + err = -EBUSY ; goto out; }mod_update_bounds (mod);
kernel/panic.c +65 -10
111 lines not on this page · raw message
kernel/sched/core.c +1 -2
@@ -3185,8 +3185,7 @@ static noinline void __schedule_bug(struct task_struct *prev)print_ip_sym (preempt_disable_ip);pr_cont ("\n" ); } -if (panic_on_warn) -panic ("scheduling while atomic\n" ); +check_panic_on_warn ("scheduling while atomic" );dump_stack ();add_taint (TAINT_WARN ,LOCKDEP_STILL_OK );
kernel/trace/trace.c +2 -0
@@ -8487,6 +8487,8 @@ void __init early_trace_init(void)static_key_enable (&tracepoint_printk_key.key); }tracer_alloc_buffers (); + +init_events (); }void __init trace_init (void )
kernel/trace/trace.h +1 -0
@@ -1531,6 +1531,7 @@ trace_find_event_field(struct trace_event_call *call, char *name);extern void trace_event_enable_cmd_record (bool enable);extern void trace_event_enable_tgid_record (bool enable); +extern int init_events (void );extern int event_trace_add_tracer (struct dentry *parent,struct trace_array *tr);extern int event_trace_del_tracer (struct trace_array *tr);
kernel/trace/trace_output.c +1 -2
@@ -1394,7 +1394,7 @@ static struct trace_event *events[] __initdata = { NULL }; -__init static int init_events (void ) +__init int init_events (void ) {struct trace_event *event;int i, ret;
@@ -1412,4 +1412,3 @@ __init static int init_events(void)return 0 ; } -early_initcall (init_events);
mm/kasan/report.c +1 -2
@@ -172,8 +172,7 @@ static void kasan_end_report(unsigned long *flags)pr_err ("==================================================================\n" );add_taint (TAINT_BAD_PAGE ,LOCKDEP_NOW_UNRELIABLE );spin_unlock_irqrestore (&report_lock, *flags); -if (panic_on_warn) -panic ("panic_on_warn set ...\n" ); +check_panic_on_warn ("KASAN" );kasan_enable_current (); }
mm/util.c +4 -2
@@ -400,7 +400,8 @@ EXPORT_SYMBOL(vm_mmap);* __GFP_RETRY_MAYFAIL is supported, and it should be used only if kmalloc is * preferable to the vmalloc fallback, due to visible performance drawbacks. * -* Any use of gfp flags outside of GFP_KERNEL should be consulted with mm people. +* Please note that any use of gfp flags outside of GFP_KERNEL is careful to not +* fall back to vmalloc. */ void *kvmalloc_node (size_t size,gfp_t flags,int node) {
@@ -411,7 +412,8 @@ void *kvmalloc_node(size_t size, gfp_t flags, int node)* vmalloc uses GFP_KERNEL for some internal allocations (e.g page tables) * so the given set of flags has to be compatible. */ -WARN_ON_ONCE ((flags &GFP_KERNEL ) !=GFP_KERNEL ); +if ((flags &GFP_KERNEL ) !=GFP_KERNEL ) +return kmalloc_node (size, flags, node);/* * We want to attempt a large physically contiguous block first because
net/bluetooth/hci_core.c +1 -0
@@ -1479,6 +1479,7 @@ static int hci_dev_do_open(struct hci_dev *hdev) hdev->flush (hdev);if (hdev->sent_cmd) { +cancel_delayed_work_sync (&hdev->cmd_timer);kfree_skb (hdev->sent_cmd); hdev->sent_cmd =NULL ; }
net/ipv6/ip6_gre.c +7 -5
@@ -771,14 +771,16 @@ static void ip6gre_tnl_link_config(struct ip6_tnl *t, int set_mtu) t_hlen;if (set_mtu) { - dev->mtu = rt->dst.dev->mtu - t_hlen; +int mtu = rt->dst.dev->mtu - t_hlen; +if (!(t->parms.flags &IP6_TNL_F_IGN_ENCAP_LIMIT )) - dev->mtu -=8 ; + mtu -=8 ;if (dev->type ==ARPHRD_ETHER ) - dev->mtu -=ETH_HLEN ; + mtu -=ETH_HLEN ; -if (dev->mtu <IPV6_MIN_MTU ) - dev->mtu =IPV6_MIN_MTU ; +if (mtu <IPV6_MIN_MTU ) + mtu =IPV6_MIN_MTU ; +WRITE_ONCE (dev->mtu, mtu); } }ip6_rt_put (rt);
net/ipv6/ip6_tunnel.c +6 -4
@@ -1431,6 +1431,7 @@ static void ip6_tnl_link_config(struct ip6_tnl *t)struct __ip6_tnl_parm *p = &t->parms;struct flowi6 *fl6 = &t->fl.u.ip6;int t_hlen; +int mtu;memcpy (dev->dev_addr, &p->laddr,sizeof (struct in6_addr ));memcpy (dev->broadcast, &p->raddr,sizeof (struct in6_addr ));
@@ -1473,12 +1474,13 @@ static void ip6_tnl_link_config(struct ip6_tnl *t) dev->hard_header_len = rt->dst.dev->hard_header_len + t_hlen; - dev->mtu = rt->dst.dev->mtu - t_hlen; + mtu = rt->dst.dev->mtu - t_hlen;if (!(t->parms.flags &IP6_TNL_F_IGN_ENCAP_LIMIT )) - dev->mtu -=8 ; + mtu -=8 ; -if (dev->mtu <IPV6_MIN_MTU ) - dev->mtu =IPV6_MIN_MTU ; +if (mtu <IPV6_MIN_MTU ) + mtu =IPV6_MIN_MTU ; +WRITE_ONCE (dev->mtu, mtu); }ip6_rt_put (rt); }
net/ipv6/sit.c +5 -3
@@ -1068,10 +1068,12 @@ static void ipip6_tunnel_bind_dev(struct net_device *dev)if (tdev && !netif_is_l3_master (tdev)) {int t_hlen = tunnel->hlen +sizeof (struct iphdr ); +int mtu; - dev->mtu = tdev->mtu - t_hlen; -if (dev->mtu <IPV6_MIN_MTU ) - dev->mtu =IPV6_MIN_MTU ; + mtu = tdev->mtu - t_hlen; +if (mtu <IPV6_MIN_MTU ) + mtu =IPV6_MIN_MTU ; +WRITE_ONCE (dev->mtu, mtu); } }
net/netfilter/nf_conntrack_proto_sctp.c +16 -9
@@ -343,22 +343,29 @@ static int sctp_packet(struct nf_conn *ct, for_each_sctp_chunk (skb, sch, _sch, offset, dataoff, count) {/* Special cases of Verification tag check (Sec 8.5.1) */ if (sch->type ==SCTP_CID_INIT ) { -/* Sec 8.5.1 (A) */ +/* (A) vtag MUST be zero */ if (sh->vtag !=0 ) goto out_unlock; }else if (sch->type ==SCTP_CID_ABORT ) { -/* Sec 8.5.1 (B) */ -if (sh->vtag != ct->proto.sctp.vtag[dir] && - sh->vtag != ct->proto.sctp.vtag[!dir]) +/* (B) vtag MUST match own vtag if T flag is unset OR +* MUST match peer's vtag if T flag is set +*/ +if ((!(sch->flags &SCTP_CHUNK_FLAG_T ) && + sh->vtag != ct->proto.sctp.vtag[dir]) || + ((sch->flags &SCTP_CHUNK_FLAG_T ) && + sh->vtag != ct->proto.sctp.vtag[!dir])) goto out_unlock; }else if (sch->type ==SCTP_CID_SHUTDOWN_COMPLETE ) { -/* Sec 8.5.1 (C) */ -if (sh->vtag != ct->proto.sctp.vtag[dir] && - sh->vtag != ct->proto.sctp.vtag[!dir] && - sch->flags &SCTP_CHUNK_FLAG_T ) +/* (C) vtag MUST match own vtag if T flag is unset OR +* MUST match peer's vtag if T flag is set +*/ +if ((!(sch->flags &SCTP_CHUNK_FLAG_T ) && + sh->vtag != ct->proto.sctp.vtag[dir]) || + ((sch->flags &SCTP_CHUNK_FLAG_T ) && + sh->vtag != ct->proto.sctp.vtag[!dir])) goto out_unlock; }else if (sch->type ==SCTP_CID_COOKIE_ECHO ) { -/* Sec 8.5.1 (D) */ +/* (D) vtag must be same as init_vtag as found in INIT_ACK */ if (sh->vtag != ct->proto.sctp.vtag[dir]) goto out_unlock; } else if (sch->type == SCTP_CID_HEARTBEAT ||
net/netlink/af_netlink.c +19 -12
@@ -1061,9 +1061,11 @@ static int netlink_connect(struct socket *sock, struct sockaddr *addr,return -EINVAL ;if (addr->sa_family ==AF_UNSPEC ) { - sk->sk_state =NETLINK_UNCONNECTED ; - nlk->dst_portid =0 ; - nlk->dst_group =0 ; +/* paired with READ_ONCE() in netlink_getsockbyportid() */ +WRITE_ONCE (sk->sk_state,NETLINK_UNCONNECTED ); +/* dst_portid and dst_group can be read locklessly */ +WRITE_ONCE (nlk->dst_portid,0 ); +WRITE_ONCE (nlk->dst_group,0 );return 0 ; }if (addr->sa_family !=AF_NETLINK )
@@ -1084,9 +1086,11 @@ static int netlink_connect(struct socket *sock, struct sockaddr *addr, err =netlink_autobind (sock);if (err ==0 ) { - sk->sk_state =NETLINK_CONNECTED ; - nlk->dst_portid = nladdr->nl_pid; - nlk->dst_group =ffs (nladdr->nl_groups); +/* paired with READ_ONCE() in netlink_getsockbyportid() */ +WRITE_ONCE (sk->sk_state,NETLINK_CONNECTED ); +/* dst_portid and dst_group can be read locklessly */ +WRITE_ONCE (nlk->dst_portid, nladdr->nl_pid); +WRITE_ONCE (nlk->dst_group,ffs (nladdr->nl_groups)); }return err;
@@ -1104,8 +1108,9 @@ static int netlink_getname(struct socket *sock, struct sockaddr *addr, *addr_len =sizeof (*nladdr);if (peer) { - nladdr->nl_pid = nlk->dst_portid; - nladdr->nl_groups =netlink_group_mask (nlk->dst_group); +/* Paired with WRITE_ONCE() in netlink_connect() */ + nladdr->nl_pid =READ_ONCE (nlk->dst_portid); + nladdr->nl_groups =netlink_group_mask (READ_ONCE (nlk->dst_group)); }else { nladdr->nl_pid = nlk->portid;netlink_lock_table ();
@@ -1134,8 +1139,9 @@ static struct sock *netlink_getsockbyportid(struct sock *ssk, u32 portid)/* Don't bother queuing skb if kernel socket has no input function */ nlk =nlk_sk (sock); -if (sock->sk_state ==NETLINK_CONNECTED && - nlk->dst_portid !=nlk_sk (ssk)->portid) { +/* dst_portid and sk_state can be changed in netlink_connect() */ +if (READ_ONCE (sock->sk_state) ==NETLINK_CONNECTED && +READ_ONCE (nlk->dst_portid) !=nlk_sk (ssk)->portid) {sock_put (sock);return ERR_PTR (-ECONNREFUSED ); }
@@ -1847,8 +1853,9 @@ static int netlink_sendmsg(struct socket *sock, struct msghdr *msg, size_t len) goto out; netlink_skb_flags |=NETLINK_SKB_DST ; }else { - dst_portid = nlk->dst_portid; - dst_group = nlk->dst_group; +/* Paired with WRITE_ONCE() in netlink_connect() */ + dst_portid =READ_ONCE (nlk->dst_portid); + dst_group =READ_ONCE (nlk->dst_group); }/* Paired with WRITE_ONCE() in netlink_insert() */
net/netrom/nr_timer.c +1 -0
@@ -125,6 +125,7 @@ static void nr_heartbeat_expiry(unsigned long param)is accepted() it isn't 'dead' so doesn't get removed. */ if (sock_flag (sk,SOCK_DESTROY ) || (sk->sk_state ==TCP_LISTEN &&sock_flag (sk,SOCK_DEAD ))) { +sock_hold (sk);bh_unlock_sock (sk);nr_destroy_socket (sk); goto out;
net/nfc/llcp_core.c +1 -0
@@ -171,6 +171,7 @@ static void local_cleanup(struct nfc_llcp_local *local)cancel_work_sync (&local->rx_work);cancel_work_sync (&local->timeout_work);kfree_skb (local->rx_pending); + local->rx_pending =NULL ;del_timer_sync (&local->sdreq_timer);cancel_work_sync (&local->sdreq_timeout_work);nfc_llcp_free_sdp_tlv_list (&local->pending_sdreqs);
net/sctp/bind_addr.c +6 -0
@@ -88,6 +88,12 @@ int sctp_bind_addr_copy(struct net *net, struct sctp_bind_addr *dest, } } +/* If somehow no addresses were found that can be used with this +* scope, it's an error. +*/ +if (list_empty (&dest->address_list)) + error = -ENETUNREACH ; + out:if (error)sctp_bind_addr_clean (dest);
security/tomoyo/Makefile +1 -1
@@ -10,7 +10,7 @@ endef quiet_cmd_policy = POLICY $@ cmd_policy = ($(call do_policy,profile); $(call do_policy,exception_policy); $(call do_policy,domain_policy); $(call do_policy,manager); $(call do_policy,stat)) >$@ -$(obj)/builtin-policy.h: $(wildcard $(obj)/policy/*.conf $(src)/policy/*.conf.default) FORCE +$(obj)/builtin-policy.h: $(wildcard $(obj)/policy/*.conf $(srctree)/$(src)/policy/*.conf.default) FORCE $(call if_changed,policy) $(obj)/common.o: $(obj)/builtin-policy.h
tools/objtool/check.c +2 -1
@@ -159,6 +159,7 @@ static int __dead_end_function(struct objtool_file *file, struct symbol *func,"panic" ,"do_exit" ,"do_task_dead" , +"make_task_dead" ,"__module_put_and_exit" ,"complete_and_exit" , "kvm_spurious_fault",
@@ -166,7 +167,7 @@ static int __dead_end_function(struct objtool_file *file, struct symbol *func,"lbug_with_loc" ,"fortify_panic" ,"machine_real_restart" , - "rewind_stack_do_exit", + "rewind_stack_and_make_dead", };if (func->bind ==STB_WEAK )