Linux 5.10.12
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.12 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 drivers/gpio/gpio-mvebu.c | 25 +- drivers/hid/hid-multitouch.c | 3 drivers/hid/wacom_sys.c | 7 drivers/hid/wacom_wac.h | 2 drivers/infiniband/hw/vmw_pvrdma/pvrdma.h | 14 + drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c | 2 drivers/media/common/videobuf2/videobuf2-v4l2.c | 3 drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c | 7 fs/file.c | 2 fs/io_uring.c | 119 ++++++++---- include/uapi/linux/v4l2-subdev.h | 2 include/uapi/rdma/vmw_pvrdma-abi.h | 7 kernel/exit.c | 2 kernel/futex.c | 219 ++++++++++------------- kernel/locking/rtmutex.c | 3 kernel/locking/rtmutex_common.h | 3 kernel/printk/printk.c | 36 ++- mm/page_alloc.c | 31 +-- mm/slub.c | 4 mm/swapfile.c | 11 - tools/bpf/resolve_btfids/Makefile | 9 tools/build/Makefile | 4 tools/objtool/Makefile | 9 tools/objtool/elf.c | 7 tools/perf/Makefile.perf | 4 tools/power/acpi/Makefile.config | 1 tools/scripts/Makefile.include | 10 + 28 files changed, 291 insertions(+), 257 deletions(-)
Baruch Siach (1):
gpio: mvebu: fix pwm .get_state period calculation
Bryan Tan (1):
RDMA/vmw_pvrdma: Fix network_hdr_type reported in WC
Greg Kroah-Hartman (1):
Linux 5.10.12
Hailong liu (1):
mm/page_alloc: add a missing mm_page_alloc_zone_locked() tracepoint
Hans Verkuil (1):
media: v4l2-subdev.h: BIT() is not available in userspace
Jason Gerecke (1):
HID: wacom: Correct NULL dereference on AES pen proximity
Jean-Philippe Brucker (1):
tools: Factor HOSTCC, HOSTLD, HOSTAR definitions
John Ogness (2):
printk: fix buffer overflow potential for print_text()
printk: fix string termination for record_print_text()
Josh Poimboeuf (1):
objtool: Don't fail on missing symbol table
Kai-Heng Feng (1):
HID: multitouch: Apply MT_QUIRK_CONFIDENCE quirk for multi-input devices
Naushir Patuck (1):
media: Revert "media: videobuf2: Fix length check for single plane dmabuf queueing"
Pavel Begunkov (11):
kernel/io_uring: cancel io_uring before task works
io_uring: inline io_uring_attempt_task_drop()
io_uring: add warn_once for io_uring_flush()
io_uring: stop SQPOLL submit on creator's death
io_uring: fix null-deref in io_disable_sqo_submit
io_uring: do sqo disable on install_fd error
io_uring: fix false positive sqo warning on flush
io_uring: fix uring_flush in exit_files() warning
io_uring: fix skipping disabling sqo on exec
io_uring: dont kill fasync under completion_lock
io_uring: fix sleeping under spin in __io_clean_op
Takashi Iwai (1):
iwlwifi: dbg: Don't touch the tlv data
Thomas Gleixner (7):
futex: Ensure the correct return value from futex_lock_pi()
futex: Replace pointless printk in fixup_owner()
futex: Provide and use pi_state_update_owner()
rtmutex: Remove unused argument from rt_mutex_proxy_unlock()
futex: Use pi_state_update_owner() in put_pi_state()
futex: Simplify fixup_pi_state_owner()
futex: Handle faults correctly for PI futexes
Wang Hai (1):
Revert "mm/slub: fix a memory leak in sysfs_slab_add()"
Zhaoyang Huang (1):
mm: fix a race on nr_swap_pages
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 11 +SUBLEVEL = 12 EXTRAVERSION = NAME = Kleptomaniac Octopus
drivers/gpio/gpio-mvebu.c +10 -15
@@ -660,9 +660,8 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip,spin_lock_irqsave (&mvpwm->lock, flags); - val = (unsigned long long ) -readl_relaxed (mvebu_pwmreg_blink_on_duration (mvpwm)); - val *=NSEC_PER_SEC ; + u =readl_relaxed (mvebu_pwmreg_blink_on_duration (mvpwm)); + val = (unsigned long long ) u *NSEC_PER_SEC ;do_div (val, mvpwm->clk_rate);if (val >UINT_MAX ) state->duty_cycle =UINT_MAX ;
@@ -671,21 +670,17 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip,else state->duty_cycle =1 ; - val = (unsigned long long ) -readl_relaxed (mvebu_pwmreg_blink_off_duration (mvpwm)); + val = (unsigned long long ) u;/* on duration */ +/* period = on + off duration */ + val +=readl_relaxed (mvebu_pwmreg_blink_off_duration (mvpwm)); val *=NSEC_PER_SEC ;do_div (val, mvpwm->clk_rate); -if (val < state->duty_cycle) { +if (val >UINT_MAX ) + state->period =UINT_MAX ; +else if (val) + state->period = val; +else state->period =1 ; - }else { - val -= state->duty_cycle; -if (val >UINT_MAX ) - state->period =UINT_MAX ; -else if (val) - state->period = val; -else - state->period =1 ; - }regmap_read (mvchip->regs,GPIO_BLINK_EN_OFF + mvchip->offset, &u);if (u)
drivers/hid/hid-multitouch.c +2 -1
@@ -758,7 +758,8 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,MT_STORE_FIELD (inrange_state);return 1 ;case HID_DG_CONFIDENCE : -if (cls->name ==MT_CLS_WIN_8 && +if ((cls->name ==MT_CLS_WIN_8 || + cls->name ==MT_CLS_WIN_8_FORCE_MULTI_INPUT ) && (field->application ==HID_DG_TOUCHPAD || field->application ==HID_DG_TOUCHSCREEN )) app->quirks |=MT_QUIRK_CONFIDENCE ;
drivers/hid/wacom_sys.c +4 -3
@@ -147,9 +147,9 @@ static int wacom_wac_pen_serial_enforce(struct hid_device *hdev, }if (flush) -wacom_wac_queue_flush (hdev, &wacom_wac->pen_fifo); +wacom_wac_queue_flush (hdev, wacom_wac->pen_fifo);else if (insert) -wacom_wac_queue_insert (hdev, &wacom_wac->pen_fifo, +wacom_wac_queue_insert (hdev, wacom_wac->pen_fifo, raw_data, report_size);return insert && !flush;
@@ -1280,7 +1280,7 @@ static void wacom_devm_kfifo_release(struct device *dev, void *res)static int wacom_devm_kfifo_alloc (struct wacom *wacom) {struct wacom_wac *wacom_wac = &wacom->wacom_wac; -struct kfifo_rec_ptr_2 *pen_fifo = &wacom_wac->pen_fifo; +struct kfifo_rec_ptr_2 *pen_fifo;int error; pen_fifo = devres_alloc(wacom_devm_kfifo_release,
@@ -1297,6 +1297,7 @@ static int wacom_devm_kfifo_alloc(struct wacom *wacom) }devres_add (&wacom->hdev->dev, pen_fifo); + wacom_wac->pen_fifo = pen_fifo;return 0 ; }
drivers/hid/wacom_wac.h +1 -1
@@ -342,7 +342,7 @@ struct wacom_wac {struct input_dev *pen_input;struct input_dev *touch_input;struct input_dev *pad_input; -struct kfifo_rec_ptr_2 pen_fifo; +struct kfifo_rec_ptr_2 *pen_fifo;int pid;int num_contacts_left;u8 bt_features;
drivers/infiniband/hw/vmw_pvrdma/pvrdma.h +14 -0
@@ -509,6 +509,20 @@ static inline int ib_send_flags_to_pvrdma(int flags)return flags &PVRDMA_MASK (PVRDMA_SEND_FLAGS_MAX ); } +static inline int pvrdma_network_type_to_ib (enum pvrdma_network_type type) +{ +switch (type) { +case PVRDMA_NETWORK_ROCE_V1 : +return RDMA_NETWORK_ROCE_V1 ; +case PVRDMA_NETWORK_IPV4 : +return RDMA_NETWORK_IPV4 ; +case PVRDMA_NETWORK_IPV6 : +return RDMA_NETWORK_IPV6 ; +default : +return RDMA_NETWORK_IPV6 ; + } +} +void pvrdma_qp_cap_to_ib (struct ib_qp_cap *dst,const struct pvrdma_qp_cap *src); void ib_qp_cap_to_pvrdma(struct pvrdma_qp_cap *dst,
drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c +1 -1
@@ -364,7 +364,7 @@ static int pvrdma_poll_one(struct pvrdma_cq *cq, struct pvrdma_qp **cur_qp, wc->dlid_path_bits = cqe->dlid_path_bits; wc->port_num = cqe->port_num; wc->vendor_err = cqe->vendor_err; - wc->network_hdr_type = cqe->network_hdr_type; + wc->network_hdr_type =pvrdma_network_type_to_ib (cqe->network_hdr_type);/* Update shared ring state */ pvrdma_idx_ring_inc (&cq->ring_state->rx.cons_head, cq->ibcq.cqe);
drivers/media/common/videobuf2/videobuf2-v4l2.c +1 -2
@@ -118,8 +118,7 @@ static int __verify_length(struct vb2_buffer *vb, const struct v4l2_buffer *b)return -EINVAL ; } }else { - length = (b->memory ==VB2_MEMORY_USERPTR || - b->memory ==VB2_MEMORY_DMABUF ) + length = (b->memory ==VB2_MEMORY_USERPTR ) ? b->length : vb->planes[0 ].length;if (b->bytesused > length)
drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c +0 -7
@@ -237,13 +237,6 @@ static int iwl_dbg_tlv_alloc_region(struct iwl_trans *trans,if (le32_to_cpu (tlv->length) <sizeof (*reg))return -EINVAL ; -/* For safe using a string from FW make sure we have a -* null terminator -*/ - reg->name[IWL_FW_INI_MAX_NAME -1 ] =0 ; - -IWL_DEBUG_FW (trans,"WRT: parsing region: %s\n" , reg->name); -if (id >=IWL_FW_INI_MAX_REGION_ID ) {IWL_ERR (trans,"WRT: Invalid region id %u\n" , id);return -EINVAL ;
fs/file.c +0 -2
@@ -21,7 +21,6 @@#include <linux/rcupdate.h> #include <linux/close_range.h> #include <net/sock.h> -#include <linux/io_uring.h> unsigned int sysctl_nr_open__read_mostly =1024 *1024 ;unsigned int sysctl_nr_open_min =BITS_PER_LONG ;
@@ -453,7 +452,6 @@ void exit_files(struct task_struct *tsk)struct files_struct * files = tsk->files;if (files) { -io_uring_files_cancel (files);task_lock (tsk); tsk->files =NULL ;task_unlock (tsk);
fs/io_uring.c +84 -35
256 lines not on this page · raw message
include/uapi/linux/v4l2-subdev.h +1 -1
@@ -176,7 +176,7 @@ struct v4l2_subdev_capability { };/* The v4l2 sub-device video device node is registered in read-only mode. */ -#define V4L2_SUBDEV_CAP_RO_SUBDEV BIT(0) +#define V4L2_SUBDEV_CAP_RO_SUBDEV 0x00000001/* Backwards compatibility define --- to be removed */ #define v4l2_subdev_edid v4l2_edid
include/uapi/rdma/vmw_pvrdma-abi.h +7 -0
@@ -133,6 +133,13 @@ enum pvrdma_wc_flags { PVRDMA_WC_FLAGS_MAX = PVRDMA_WC_WITH_NETWORK_HDR_TYPE, }; +enum pvrdma_network_type { +PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_ROCE_V1 =PVRDMA_NETWORK_IB , +PVRDMA_NETWORK_IPV4 , +PVRDMA_NETWORK_IPV6 +}; +struct pvrdma_alloc_ucontext_resp {__u32 qp_tab_size;__u32 reserved;
kernel/exit.c +2 -0
@@ -63,6 +63,7 @@#include <linux/random.h> #include <linux/rcuwait.h> #include <linux/compat.h> +#include <linux/io_uring.h> #include <linux/uaccess.h> #include <asm/unistd.h>
@@ -762,6 +763,7 @@ void __noreturn do_exit(long code)schedule (); } +io_uring_files_cancel (tsk->files);exit_signals (tsk);/* sets PF_EXITING */ /* sync mm's RSS info before statistics gathering */
kernel/futex.c +96 -123
365 lines not on this page · raw message
kernel/locking/rtmutex.c +1 -2
@@ -1716,8 +1716,7 @@ void rt_mutex_init_proxy_locked(struct rt_mutex *lock,* possible because it belongs to the pi_state which is about to be freed * and it is not longer visible to other tasks. */ -void rt_mutex_proxy_unlock (struct rt_mutex *lock, -struct task_struct *proxy_owner) +void rt_mutex_proxy_unlock (struct rt_mutex *lock) {debug_rt_mutex_proxy_unlock (lock);rt_mutex_set_owner (lock,NULL );
kernel/locking/rtmutex_common.h +1 -2
@@ -133,8 +133,7 @@ enum rtmutex_chainwalk {extern struct task_struct *rt_mutex_next_owner (struct rt_mutex *lock);extern void rt_mutex_init_proxy_locked (struct rt_mutex *lock,struct task_struct *proxy_owner); -extern void rt_mutex_proxy_unlock (struct rt_mutex *lock, -struct task_struct *proxy_owner); +extern void rt_mutex_proxy_unlock (struct rt_mutex *lock);extern void rt_mutex_init_waiter (struct rt_mutex_waiter *waiter); extern int __rt_mutex_start_proxy_lock(struct rt_mutex *lock, struct rt_mutex_waiter *waiter,
kernel/printk/printk.c +27 -9
@@ -1338,11 +1338,16 @@ static size_t info_print_prefix(const struct printk_info *info, bool syslog,* done: * * - Add prefix for each line. +* - Drop truncated lines that no longer fit into the buffer. * - Add the trailing newline that has been removed in vprintk_store(). -* - Drop truncated lines that do not longer fit into the buffer. +* - Add a string terminator. +* +* Since the produced string is always terminated, the maximum possible +* return value is @r->text_buf_size - 1; * * Return: The length of the updated/prepared text, including the added -* prefixes and the newline. The dropped line(s) are not counted. +* prefixes and the newline. The terminator is not counted. The dropped +* line(s) are not counted. */ static size_t record_print_text (struct printk_record *r,bool syslog,bool time)
@@ -1385,26 +1390,31 @@ static size_t record_print_text(struct printk_record *r, bool syslog,/* * Truncate the text if there is not enough space to add the -* prefix and a trailing newline. +* prefix and a trailing newline and a terminator. */ -if (len + prefix_len + text_len +1 > buf_size) { +if (len + prefix_len + text_len +1 +1 > buf_size) {/* Drop even the current line if no space. */ -if (len + prefix_len + line_len +1 > buf_size) +if (len + prefix_len + line_len +1 +1 > buf_size)break ; - text_len = buf_size - len - prefix_len -1 ; + text_len = buf_size - len - prefix_len -1 -1 ; truncated = true; }memmove (text + prefix_len, text, text_len);memcpy (text, prefix, prefix_len); +/* +* Increment the prepared length to include the text and +* prefix that were just moved+copied. Also increment for the +* newline at the end of this line. If this is the last line, +* there is no newline, but it will be added immediately below. +*/ len += prefix_len + line_len +1 ; -if (text_len == line_len) {/* -* Add the trailing newline removed in -* vprintk_store(). +* This is the last line. Add the trailing newline +* removed in vprintk_store(). */ text[prefix_len + line_len] ='\n' ;break ;
@@ -1429,6 +1439,14 @@ static size_t record_print_text(struct printk_record *r, bool syslog, text_len -= line_len +1 ; } +/* +* If a buffer was provided, it will be terminated. Space for the +* string terminator is guaranteed to be available. The terminator is +* not counted in the return value. +*/ +if (buf_size >0 ) + r->text_buf[len] =0 ; +return len; }
mm/page_alloc.c +16 -15
@@ -2846,20 +2846,20 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype, {struct page *page; -#ifdef CONFIG_CMA -/* -* Balance movable allocations between regular and CMA areas by -* allocating from CMA when over half of the zone's free memory -* is in the CMA area. -*/ -if (alloc_flags &ALLOC_CMA && -zone_page_state (zone,NR_FREE_CMA_PAGES ) > -zone_page_state (zone,NR_FREE_PAGES ) /2 ) { - page =__rmqueue_cma_fallback (zone, order); -if (page) -return page; +if (IS_ENABLED (CONFIG_CMA )) { +/* +* Balance movable allocations between regular and CMA areas by +* allocating from CMA when over half of the zone's free memory +* is in the CMA area. +*/ +if (alloc_flags &ALLOC_CMA && +zone_page_state (zone,NR_FREE_CMA_PAGES ) > +zone_page_state (zone,NR_FREE_PAGES ) /2 ) { + page =__rmqueue_cma_fallback (zone, order); +if (page) + goto out; + } } -#endif retry: page =__rmqueue_smallest (zone, order, migratetype);if (unlikely (!page)) {
@@ -2870,8 +2870,9 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype, alloc_flags)) goto retry; } - -trace_mm_page_alloc_zone_locked (page, order, migratetype); +out: +if (page) +trace_mm_page_alloc_zone_locked (page, order, migratetype);return page; }
mm/slub.c +1 -3
@@ -5620,10 +5620,8 @@ static int sysfs_slab_add(struct kmem_cache *s) s->kobj.kset = kset; err =kobject_init_and_add (&s->kobj, &slab_ktype,NULL ,"%s" , name); -if (err) { -kobject_put (&s->kobj); +if (err) goto out; - } err =sysfs_create_group (&s->kobj, &slab_attr_group);if (err)
mm/swapfile.c +6 -5
@@ -1045,16 +1045,18 @@ int get_swap_pages(int n_goal, swp_entry_t swp_entries[], int entry_size)/* Only single cluster request supported */ WARN_ON_ONCE (n_goal >1 && size ==SWAPFILE_CLUSTER ); +spin_lock (&swap_avail_lock); + avail_pgs =atomic_long_read (&nr_swap_pages) / size; -if (avail_pgs <=0 ) +if (avail_pgs <=0 ) { +spin_unlock (&swap_avail_lock); goto noswap; + } n_goal =min3 ((long )n_goal, (long )SWAP_BATCH , avail_pgs);atomic_long_sub (n_goal * size, &nr_swap_pages); -spin_lock (&swap_avail_lock); - start_over: node =numa_node_id ();plist_for_each_entry_safe (si, next, &swap_avail_heads[node], avail_lists[node]) {
@@ -1128,14 +1130,13 @@ swp_entry_t get_swap_page_of_type(int type)spin_lock (&si->lock);if (si->flags &SWP_WRITEOK ) { -atomic_long_dec (&nr_swap_pages);/* This is called for allocating swap entry, not cache */ offset =scan_swap_map (si,1 );if (offset) { +atomic_long_dec (&nr_swap_pages);spin_unlock (&si->lock);return swp_entry (type, offset); } -atomic_long_inc (&nr_swap_pages); }spin_unlock (&si->lock); fail:
tools/bpf/resolve_btfids/Makefile +0 -9
@@ -18,15 +18,6 @@ else endif # always use the host compiler -ifneq ($(LLVM),) -HOSTAR ?= llvm-ar -HOSTCC ?= clang -HOSTLD ?= ld.lld -else -HOSTAR ?= ar -HOSTCC ?= gcc -HOSTLD ?= ld -endif AR = $(HOSTAR) CC = $(HOSTCC) LD = $(HOSTLD)
tools/build/Makefile +0 -4
@@ -15,10 +15,6 @@ endef $(call allow-override,CC,$(CROSS_COMPILE)gcc) $(call allow-override,LD,$(CROSS_COMPILE)ld) -HOSTCC ?= gcc -HOSTLD ?= ld -HOSTAR ?= ar - export HOSTCC HOSTLD HOSTAR ifeq ($(V),1)
tools/objtool/Makefile +0 -9
@@ -3,15 +3,6 @@ include ../scripts/Makefile.include include ../scripts/Makefile.arch # always use the host compiler -ifneq ($(LLVM),) -HOSTAR ?= llvm-ar -HOSTCC ?= clang -HOSTLD ?= ld.lld -else -HOSTAR ?= ar -HOSTCC ?= gcc -HOSTLD ?= ld -endif AR = $(HOSTAR) CC = $(HOSTCC) LD = $(HOSTLD)
tools/objtool/elf.c +5 -2
@@ -354,8 +354,11 @@ static int read_symbols(struct elf *elf) symtab =find_section_by_name (elf,".symtab" );if (!symtab) { -WARN ("missing symbol table" ); -return -1 ; +/* +* A missing symbol table is actually possible if it's an empty +* .o file. This can happen for thunk_64.o. +*/ +return 0 ; } symtab_shndx =find_section_by_name (elf,".symtab_shndx" );
tools/perf/Makefile.perf +0 -4
@@ -175,10 +175,6 @@ endef LD += $(EXTRA_LDFLAGS) -HOSTCC ?= gcc -HOSTLD ?= ld -HOSTAR ?= ar - PKG_CONFIG = $(CROSS_COMPILE)pkg-config LLVM_CONFIG ?= llvm-config
tools/power/acpi/Makefile.config +0 -1
@@ -54,7 +54,6 @@ INSTALL_SCRIPT = ${INSTALL_PROGRAM} CROSS = #/usr/i386-linux-uclibc/usr/bin/i386-uclibc- CROSS_COMPILE ?= $(CROSS) LD = $(CC) -HOSTCC = gcc # check if compiler option is supported cc-supports = ${shell if $(CC) ${1} -S -o /dev/null -x c /dev/null > /dev/null 2>&1; then echo "$(1)"; fi;}
tools/scripts/Makefile.include +10 -0
@@ -59,6 +59,16 @@ $(call allow-override,LD,$(CROSS_COMPILE)ld) $(call allow-override,CXX,$(CROSS_COMPILE)g++) $(call allow-override,STRIP,$(CROSS_COMPILE)strip) +ifneq ($(LLVM),) +HOSTAR ?= llvm-ar +HOSTCC ?= clang +HOSTLD ?= ld.lld +else +HOSTAR ?= ar +HOSTCC ?= gcc +HOSTLD ?= ld +endif + ifeq ($(CC_NO_CLANG), 1) EXTRA_WARNINGS += -Wstrict-aliasing=3 endif