Linux 5.15.170
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.170 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts | 2 arch/arm64/Makefile | 2 arch/arm64/include/asm/uprobes.h | 12 arch/arm64/kernel/probes/uprobes.c | 4 arch/s390/include/asm/perf_event.h | 1 arch/s390/kvm/gaccess.c | 162 +++++++----- arch/s390/kvm/gaccess.h | 14 - arch/x86/kernel/cpu/resctrl/ctrlmondata.c | 23 + arch/x86/kvm/svm/nested.c | 6 block/bfq-iosched.c | 37 +- drivers/acpi/button.c | 11 drivers/acpi/resource.c | 7 drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 15 - drivers/gpu/drm/msm/disp/msm_disp_snapshot_util.c | 19 - drivers/gpu/drm/msm/dsi/dsi_host.c | 2 drivers/gpu/drm/vboxvideo/hgsmi_base.c | 10 drivers/gpu/drm/vboxvideo/vboxvideo.h | 4 drivers/infiniband/hw/bnxt_re/qplib_fp.h | 2 drivers/infiniband/hw/bnxt_re/qplib_rcfw.c | 2 drivers/infiniband/hw/bnxt_re/qplib_res.c | 21 - drivers/infiniband/hw/cxgb4/cm.c | 9 drivers/infiniband/hw/irdma/cm.c | 2 drivers/net/dsa/mv88e6xxx/port.c | 1 drivers/net/ethernet/aeroflex/greth.c | 3 drivers/net/ethernet/broadcom/bcmsysport.c | 1 drivers/net/ethernet/emulex/benet/be_main.c | 10 drivers/net/ethernet/i825xx/sun3_82586.c | 1 drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c | 4 drivers/net/ethernet/realtek/r8169_main.c | 4 drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 2 drivers/net/hyperv/netvsc_drv.c | 30 ++ drivers/net/macsec.c | 18 - drivers/net/phy/dp83822.c | 4 drivers/net/plip/plip.c | 2 drivers/net/usb/usbnet.c | 4 drivers/net/wwan/wwan_core.c | 2 drivers/platform/x86/dell/dell-wmi-base.c | 9 drivers/platform/x86/dell/dell-wmi-sysman/sysman.c | 1 drivers/target/target_core_device.c | 2 drivers/target/target_core_user.c | 2 drivers/tty/serial/serial_core.c | 16 - drivers/usb/dwc3/core.c | 19 + drivers/usb/dwc3/core.h | 3 drivers/usb/gadget/composite.c | 40 +++ drivers/usb/host/xhci-caps.h | 85 ++++++ drivers/usb/host/xhci-port.h | 176 +++++++++++++ drivers/usb/host/xhci.h | 262 -------------------- drivers/usb/typec/class.c | 3 fs/btrfs/block-group.c | 2 fs/cifs/smb2pdu.c | 9 fs/exec.c | 21 - fs/jfs/jfs_dmap.c | 2 fs/nilfs2/page.c | 6 fs/open.c | 2 fs/udf/inode.c | 9 include/linux/usb/composite.h | 6 include/linux/usb/gadget.h | 1 include/net/genetlink.h | 3 include/net/xfrm.h | 28 +- include/uapi/linux/bpf.h | 13 kernel/bpf/devmap.c | 11 kernel/time/posix-clock.c | 6 kernel/trace/bpf_trace.c | 2 kernel/trace/trace_probe.c | 2 net/bluetooth/bnep/core.c | 3 net/core/filter.c | 8 net/ipv4/devinet.c | 35 +- net/ipv4/inet_connection_sock.c | 21 + net/ipv4/xfrm4_policy.c | 40 +-- net/ipv6/xfrm6_policy.c | 31 +- net/l2tp/l2tp_netlink.c | 4 net/netfilter/xt_NFLOG.c | 2 net/netfilter/xt_TRACE.c | 1 net/netfilter/xt_mark.c | 2 net/netlink/genetlink.c | 28 +- net/sched/sch_taprio.c | 3 net/smc/smc_pnet.c | 2 net/wireless/nl80211.c | 8 net/xfrm/xfrm_device.c | 11 net/xfrm/xfrm_policy.c | 50 ++- net/xfrm/xfrm_user.c | 10 security/selinux/selinuxfs.c | 27 +- sound/firewire/amdtp-stream.c | 3 sound/pci/hda/patch_cs8409.c | 5 sound/pci/hda/patch_realtek.c | 48 ++- sound/soc/codecs/lpass-rx-macro.c | 2 sound/soc/fsl/fsl_sai.c | 5 sound/soc/fsl/fsl_sai.h | 1 sound/soc/qcom/lpass-cpu.c | 2 sound/soc/qcom/sm8250.c | 1 91 files changed, 905 insertions(+), 644 deletions(-)
Aleksa Sarai (1):
openat2: explicitly return -E2BIG for (usize > PAGE_SIZE)
Alexander Zubkov (1):
RDMA/irdma: Fix misspelling of "accept*"
Alexey Klimov (2):
ASoC: codecs: lpass-rx-macro: add missing CDC_RX_BCL_VBAT_RF_PROC2 to default regs values
ASoC: qcom: sm8250: add qrb4210-rb2-sndcard compatible string
Andrey Shumilin (1):
ALSA: firewire-lib: Avoid division by zero in apply_constraint_to_size()
Anumula Murali Mohan Reddy (1):
RDMA/cxgb4: Fix RDMA_CM_EVENT_UNREACHABLE error for iWARP
Armin Wolf (1):
platform/x86: dell-wmi: Ignore suspend notifications
Bhargava Chenna Marreddy (1):
RDMA/bnxt_re: Fix a bug while setting up Level-2 PBL pages
Christian Heusel (1):
ACPI: resource: Add LG 16T90SP to irq1_level_low_skip_override[]
Colin Ian King (1):
octeontx2-af: Fix potential integer overflows on integer shifts
Crag Wang (1):
platform/x86: dell-sysman: add support for alienware products
Dave Kleikamp (1):
jfs: Fix sanity check in dbMount
Dmitry Antipov (1):
net: sched: fix use-after-free in taprio_change()
Douglas Anderson (2):
drm/msm: Avoid NULL dereference in msm_disp_state_print_regs() drm/msm: Allocate memory for disp snapshot with kvzalloc()
Elson Roy Serrao (1):
usb: gadget: Add function wakeup support
Eric Dumazet (1):
genetlink: hold RCU in genlmsg_mcast()
Eyal Birger (2):
xfrm: extract dst lookup parameters into a struct
xfrm: respect ip protocols rules criteria when performing dst lookups
Florian Kauer (1):
bpf: devmap: provide rxq after redirect
Florian Klink (1):
ARM: dts: bcm2837-rpi-cm3-io3: Fix HDMI hpd-gpio pin
Frank Li (1):
XHCI: Separate PORT and CAPs macros into dedicated file
Gianfranco Trad (1):
udf: fix uninit-value use in udf_get_fileshortad
Greg Kroah-Hartman (1):
Linux 5.15.170
Haiyang Zhang (1):
hv_netvsc: Fix VF namespace also in synthetic NIC NETDEV_REGISTER event
Hans de Goede (1):
drm/vboxvideo: Replace fake VLA at end of vbva_mouse_pointer_shape with real VLA
Heiko Carstens (1):
s390: Initialize psw mask in perf_arch_fetch_caller_regs()
Heiner Kallweit (1):
r8169: avoid unsolicited interrupts
Jakub Boehm (1):
net: plip: fix break; causing plip to never transmit
Janis Schoetterl-Glausch (3):
KVM: s390: gaccess: Refactor gpa and length calculation
KVM: s390: gaccess: Refactor access address range check
KVM: s390: gaccess: Cleanup access to guest pages
Jinjie Ruan (1):
posix-clock: posix-clock: Fix unbalanced locking in pc_clock_settime()
Jiri Olsa (1):
bpf,perf: Fix perf_event_detach_bpf_prog error handling
Jiri Slaby (SUSE) (1):
serial: protect uart_port_dtr_rts() in uart_shutdown() too
Jonathan Marek (1):
drm/msm/dsi: fix 32-bit signed integer extension in pclk_rate calculation
José Relvas (1):
ALSA: hda/realtek: Add subwoofer quirk for Acer Predator G9-593
Kailang Yang (1):
ALSA: hda/realtek: Update default depop procedure
Kalesh AP (2):
RDMA/bnxt_re: Add a check for memory allocation RDMA/bnxt_re: Return more meaningful error
Kuniyuki Iwashima (1):
tcp/dccp: Don't use timer_pending() in reqsk_queue_unlink().
Leo Yan (1):
tracing: Consider the NULL character when validating the event length
Li RongQing (1):
net/smc: Fix searching in list of known pnetids in smc_pnet_add_pnetid
Lin Ma (1):
net: wwan: fix global oob in wwan_rtnl_policy
Mario Limonciello (1):
drm/amd: Guard against bad data for ATIF ACPI method
Mark Rutland (2):
arm64: probes: Fix uprobes for big-endian kernels
arm64: Force position-independent veneers
Martin Kletzander (1):
x86/resctrl: Avoid overflow in MB settings in bw_validate()
Mateusz Guzik (1):
exec: don't WARN for racy path_noexec check
Michel Alex (1):
net: phy: dp83822: Fix reset pin definitions
Murad Masimov (1):
ALSA: hda/cs8409: Fix possible NULL dereference
Naohiro Aota (1):
btrfs: zoned: fix zone unusable accounting for freed reserved extent
Nico Boehr (1):
KVM: s390: gaccess: Check if guest address is in memslot
Oliver Neukum (2):
net: usb: usbnet: fix race in probe failure
net: usb: usbnet: fix name regression
Pablo Neira Ayuso (1):
netfilter: xtables: fix typo causing some targets not to load on IPv6
Paul Moore (1):
selinux: improve error checking in sel_write_load()
Paulo Alcantara (1):
smb: client: fix OOBs when building SMB2_IOCTL request
Peter Rashleigh (1):
net: dsa: mv88e6xxx: Fix error when setting port policy on mv88e6393x
Petr Vaganov (1):
xfrm: fix one more kernel-infoleak in algo dumping
Roger Quadros (1):
usb: dwc3: core: Fix system suspend on TI AM62 platforms
Ryusuke Konishi (1):
nilfs2: fix kernel bug due to missing clearing of buffer delay flag
Sabrina Dubroca (2):
macsec: don't increment counters for an unrelated SA
xfrm: validate new SA's prefixlen using SA family when sel.family is unset
Saravanan Vajravel (1):
RDMA/bnxt_re: Fix incorrect AVID type in WQE structure
Sean Christopherson (1):
KVM: nSVM: Ignore nCR3[4:0] when loading PDPTEs from memory
Shengjiu Wang (1):
ASoC: fsl_sai: Enable 'FIFO continue on error' FCONT bit
Shubham Panwar (1):
ACPI: button: Add DMI quirk for Samsung Galaxy Book2 to fix initial lid detection issue
Thadeu Lima de Souza Cascardo (1):
usb: typec: altmode should keep reference to parent
Toke Høiland-Jørgensen (1):
bpf: Make sure internal and UAPI bpf_redirect flags don't overlap
Wang Hai (6):
net: ethernet: aeroflex: fix potential memory leak in greth_start_xmit_gbit()
net: xilinx: axienet: fix potential memory leak in axienet_start_xmit()
net: systemport: fix potential memory leak in bcm_sysport_xmit()
scsi: target: core: Fix null-ptr-deref in target_alloc_device() net/sun3_82586: fix potential memory leak in sun3_82586_send_packet()
be2net: fix potential memory leak in be_xmit()
Xin Long (1):
ipv4: give an IPv4 dev to blackhole_netdev
Ye Bin (1):
Bluetooth: bnep: fix wild-memory-access in proto_unregister
Yu Kuai (1):
block, bfq: fix procress reference leakage for bfqq in merge chain
Zichen Xie (1):
ASoC: qcom: Fix NULL Dereference in asoc_qcom_lpass_cpu_platform_probe()
junhua huang (2):
arm64:uprobe fix the uprobe SWBP_INSN in big-endian arm64/uprobes: change the uprobe_opcode_t typedef to fix the sparse warning
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 169 +SUBLEVEL = 170 EXTRAVERSION = NAME = Trick or Treat
arch/arm/boot/dts/bcm2837-rpi-cm3-io3.dts +1 -1
@@ -77,7 +77,7 @@ &gpio { }; &hdmi { - hpd-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>; + hpd-gpios = <&expgpio 0 GPIO_ACTIVE_LOW>; power-domains = <&power RPI_POWER_DOMAIN_HDMI>; status = "okay"; };
arch/arm64/Makefile +1 -1
@@ -10,7 +10,7 @@ # # Copyright (C) 1995-2001 by Russell King -LDFLAGS_vmlinux :=--no-undefined -X +LDFLAGS_vmlinux :=--no-undefined -X --pic-veneer ifeq ($(CONFIG_RELOCATABLE), y) # Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
arch/arm64/include/asm/uprobes.h +5 -7
@@ -10,21 +10,19 @@#include <asm/insn.h> #include <asm/probes.h> -#define MAX_UINSN_BYTES AARCH64_INSN_SIZE - -#define UPROBE_SWBP_INSN BRK64_OPCODE_UPROBES +#define UPROBE_SWBP_INSN cpu_to_le32(BRK64_OPCODE_UPROBES)#define UPROBE_SWBP_INSN_SIZE AARCH64_INSN_SIZE -#define UPROBE_XOL_SLOT_BYTES MAX_UINSN_BYTES +#define UPROBE_XOL_SLOT_BYTES AARCH64_INSN_SIZE -typedef u32 uprobe_opcode_t ; +typedef __le32 uprobe_opcode_t ;struct arch_uprobe_task { };struct arch_uprobe {union { -u8 insn[MAX_UINSN_BYTES ]; -u8 ixol[MAX_UINSN_BYTES ]; +__le32 insn; +__le32 ixol; };struct arch_probe_insn api;bool simulate;
arch/arm64/kernel/probes/uprobes.c +2 -2
@@ -42,7 +42,7 @@ int arch_uprobe_analyze_insn(struct arch_uprobe *auprobe, struct mm_struct *mm,else if (!IS_ALIGNED (addr,AARCH64_INSN_SIZE ))return -EINVAL ; - insn = *(probe_opcode_t *)(&auprobe->insn[0 ]); + insn =le32_to_cpu (auprobe->insn);switch (arm_probe_decode_insn (insn, &auprobe->api)) {case INSN_REJECTED :
@@ -108,7 +108,7 @@ bool arch_uprobe_skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs)if (!auprobe->simulate)return false; - insn = *(probe_opcode_t *)(&auprobe->insn[0 ]); + insn =le32_to_cpu (auprobe->insn); addr =instruction_pointer (regs);if (auprobe->api.handler)
arch/s390/include/asm/perf_event.h +1 -0
@@ -75,6 +75,7 @@ struct perf_sf_sde_regs {#define SAMPLE_FREQ_MODE (hwc) (SAMPL_FLAGS(hwc) & PERF_CPUM_SF_FREQ_MODE)#define perf_arch_fetch_caller_regs (regs, __ip) do { \ + (regs)->psw.mask = 0; \ (regs)->psw.addr = (__ip); \ (regs)->gprs[15] = (unsigned long)__builtin_frame_address(0) - \ offsetof(struct stack_frame, back_chain); \
arch/s390/kvm/gaccess.c +96 -66
240 lines not on this page · raw message
arch/s390/kvm/gaccess.h +8 -6
@@ -344,11 +344,12 @@ int read_guest_abs(struct kvm_vcpu *vcpu, unsigned long gpa, void *data,* @len: number of bytes to copy * * Copy @len bytes from @data (kernel space) to @gra (guest real address). -* It is up to the caller to ensure that the entire guest memory range is -* valid memory before calling this function. * Guest low address and key protection are not checked. * -* Returns zero on success or -EFAULT on error. +* Returns zero on success, -EFAULT when copying from @data failed, or +* PGM_ADRESSING in case @gra is outside a memslot. In this case, pgm check info +* is also stored to allow injecting into the guest (if applicable) using +* kvm_s390_inject_prog_cond(). * * If an error occurs data may have been copied partially to guest memory. */
@@ -367,11 +368,12 @@ int write_guest_real(struct kvm_vcpu *vcpu, unsigned long gra, void *data,* @len: number of bytes to copy * * Copy @len bytes from @gra (guest real address) to @data (kernel space). -* It is up to the caller to ensure that the entire guest memory range is -* valid memory before calling this function. * Guest key protection is not checked. * -* Returns zero on success or -EFAULT on error. +* Returns zero on success, -EFAULT when copying to @data failed, or +* PGM_ADRESSING in case @gra is outside a memslot. In this case, pgm check info +* is also stored to allow injecting into the guest (if applicable) using +* kvm_s390_inject_prog_cond(). * * If an error occurs data may have been copied partially to kernel space. */
arch/x86/kernel/cpu/resctrl/ctrlmondata.c +14 -9
@@ -27,10 +27,10 @@* hardware. The allocated bandwidth percentage is rounded to the next * control step available on the hardware. */ -static bool bw_validate (char *buf,unsigned long *data,struct rdt_resource *r) +static bool bw_validate (char *buf,u32 *data,struct rdt_resource *r) { -unsigned long bw;int ret; +u32 bw;/* * Only linear delay values is supported for current Intel SKUs.
@@ -40,16 +40,21 @@ static bool bw_validate(char *buf, unsigned long *data, struct rdt_resource *r)return false; } - ret =kstrtoul (buf,10 , &bw); + ret =kstrtou32 (buf,10 , &bw);if (ret) { -rdt_last_cmd_printf ("Non-decimal digit in MB value %s\n" , buf); +rdt_last_cmd_printf ("Invalid MB value %s\n" , buf);return false; } -if ((bw < r->membw.min_bw || bw > r->default_ctrl) && - !is_mba_sc (r)) { -rdt_last_cmd_printf ("MB value %ld out of range [%d,%d]\n" , bw, - r->membw.min_bw, r->default_ctrl); +/* Nothing else to do if software controller is enabled. */ +if (is_mba_sc (r)) { + *data = bw; +return true; + } + +if (bw < r->membw.min_bw || bw > r->default_ctrl) { +rdt_last_cmd_printf ("MB value %u out of range [%d,%d]\n" , + bw, r->membw.min_bw, r->default_ctrl);return false; }
@@ -62,7 +67,7 @@ int parse_bw(struct rdt_parse_data *data, struct resctrl_schema *s, {struct resctrl_staged_config *cfg;struct rdt_resource *r = s->res; -unsigned long bw_val; +u32 bw_val; cfg = &d->staged_config[s->conf_type];if (cfg->have_new_ctrl) {
arch/x86/kvm/svm/nested.c +5 -1
@@ -77,8 +77,12 @@ static u64 nested_svm_get_tdp_pdptr(struct kvm_vcpu *vcpu, int index)u64 pdpte;int ret; +/* +* Note, nCR3 is "assumed" to be 32-byte aligned, i.e. the CPU ignores +* nCR3[4:0] when loading PDPTEs from memory. +*/ ret =kvm_vcpu_read_guest_page (vcpu,gpa_to_gfn (cr3), &pdpte, -offset_in_page (cr3) + index *8 ,8 ); + (cr3 &GENMASK (11 ,5 )) + index *8 ,8 );if (ret)return 0 ;return pdpte;
block/bfq-iosched.c +17 -20
@@ -2981,10 +2981,12 @@ void bfq_release_process_ref(struct bfq_data *bfqd, struct bfq_queue *bfqq)bfq_put_queue (bfqq); } -static void -bfq_merge_bfqqs (struct bfq_data *bfqd,struct bfq_io_cq *bic, -struct bfq_queue *bfqq,struct bfq_queue *new_bfqq) +static struct bfq_queue *bfq_merge_bfqqs (struct bfq_data *bfqd, +struct bfq_io_cq *bic, +struct bfq_queue *bfqq) { +struct bfq_queue *new_bfqq = bfqq->new_bfqq; +bfq_log_bfqq (bfqd, bfqq,"merging with queue %lu" , (unsigned long )new_bfqq->pid);/* Save weight raising and idle window of the merged queues */
@@ -3078,6 +3080,8 @@ bfq_merge_bfqqs(struct bfq_data *bfqd, struct bfq_io_cq *bic,bfq_reassign_last_bfqq (bfqq, new_bfqq);bfq_release_process_ref (bfqd, bfqq); + +return new_bfqq; } static bool bfq_allow_bio_merge(struct request_queue *q, struct request *rq,
@@ -3113,14 +3117,8 @@ static bool bfq_allow_bio_merge(struct request_queue *q, struct request *rq,* fulfilled, i.e., bic can be redirected to new_bfqq * and bfqq can be put. */ -bfq_merge_bfqqs (bfqd, bfqd->bio_bic, bfqq, - new_bfqq); -/* -* If we get here, bio will be queued into new_queue, -* so use new_bfqq to decide whether bio and rq can be -* merged. -*/ - bfqq = new_bfqq; +while (bfqq != new_bfqq) + bfqq =bfq_merge_bfqqs (bfqd, bfqd->bio_bic, bfqq);/* * Change also bqfd->bio_bfqq, as
@@ -5482,9 +5480,7 @@ bfq_do_early_stable_merge(struct bfq_data *bfqd, struct bfq_queue *bfqq,* state before killing it. */ bfqq->bic = bic; -bfq_merge_bfqqs (bfqd, bic, bfqq, new_bfqq); - -return new_bfqq; +return bfq_merge_bfqqs (bfqd, bic, bfqq); }/*
@@ -5916,6 +5912,7 @@ static bool __bfq_insert_request(struct bfq_data *bfqd, struct request *rq)bool waiting, idle_timer_disabled = false;if (new_bfqq) { +struct bfq_queue *old_bfqq = bfqq;/* * Release the request's reference to the old bfqq * and make sure one is taken to the shared queue.
@@ -5931,18 +5928,18 @@ static bool __bfq_insert_request(struct bfq_data *bfqd, struct request *rq)* then complete the merge and redirect it to * new_bfqq. */ -if (bic_to_bfqq (RQ_BIC (rq),1 ) == bfqq) -bfq_merge_bfqqs (bfqd,RQ_BIC (rq), - bfqq, new_bfqq); +if (bic_to_bfqq (RQ_BIC (rq),1 ) == bfqq) { +while (bfqq != new_bfqq) + bfqq =bfq_merge_bfqqs (bfqd,RQ_BIC (rq), bfqq); + } -bfq_clear_bfqq_just_created (bfqq); +bfq_clear_bfqq_just_created (old_bfqq);/* * rq is about to be enqueued into new_bfqq, * release rq reference on bfqq */ -bfq_put_queue (bfqq); +bfq_put_queue (old_bfqq); rq->elv.priv[1 ] = new_bfqq; - bfqq = new_bfqq; }bfq_update_io_thinktime (bfqd, bfqq);
drivers/acpi/button.c +11 -0
@@ -130,6 +130,17 @@ static const struct dmi_system_id dmi_lid_quirks[] = { }, .driver_data = (void *)(long)ACPI_BUTTON_LID_INIT_OPEN, }, + { + /* + * Samsung galaxybook2 ,initial _LID device notification returns + * lid closed. + */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), + DMI_MATCH(DMI_PRODUCT_NAME, "750XED"), + }, + .driver_data = (void *)(long)ACPI_BUTTON_LID_INIT_OPEN, + }, {} };
drivers/acpi/resource.c +7 -0
@@ -505,6 +505,13 @@ static const struct dmi_system_id tongfang_gm_rg[] = { DMI_MATCH(DMI_BOARD_NAME, "GMxRGxx"), }, }, + { + /* LG Electronics 16T90SP */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LG Electronics"), + DMI_MATCH(DMI_BOARD_NAME, "16T90SP"), + }, + }, { } };
drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c +12 -3
@@ -108,6 +108,7 @@ static union acpi_object *amdgpu_atif_call(struct amdgpu_atif *atif, struct acpi_buffer *params) {acpi_status status; +union acpi_object *obj;union acpi_object atif_arg_elements[2 ];struct acpi_object_list atif_arg;struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER ,NULL };
@@ -130,16 +131,24 @@ static union acpi_object *amdgpu_atif_call(struct amdgpu_atif *atif, status =acpi_evaluate_object (atif->handle,NULL , &atif_arg, &buffer); + obj = (union acpi_object *)buffer.pointer; -/* Fail only if calling the method fails and ATIF is supported */ +/* Fail if calling the method fails and ATIF is supported */ if (ACPI_FAILURE (status) && status !=AE_NOT_FOUND ) {DRM_DEBUG_DRIVER ("failed to evaluate ATIF got %s\n" ,acpi_format_exception (status)); -kfree (buffer.pointer); +kfree (obj);return NULL ; } -return buffer.pointer; +if (obj->type !=ACPI_TYPE_BUFFER ) { +DRM_DEBUG_DRIVER ("bad object returned from ATIF: %d\n" , + obj->type); +kfree (obj); +return NULL ; + } + +return obj; }/**
drivers/gpu/drm/msm/disp/msm_disp_snapshot_util.c +10 -9
@@ -24,7 +24,7 @@ static void msm_disp_state_dump_regs(u32 **reg, u32 aligned_len, void __iomem *b end_addr = base_addr + aligned_len;if (!(*reg)) - *reg =kzalloc (len_padded,GFP_KERNEL ); + *reg =kvzalloc (len_padded,GFP_KERNEL );if (*reg) dump_addr = *reg;
@@ -46,20 +46,21 @@ static void msm_disp_state_dump_regs(u32 **reg, u32 aligned_len, void __iomem *b } } -static void msm_disp_state_print_regs (u32 **reg,u32 len,void __iomem *base_addr, -struct drm_printer *p) +static void msm_disp_state_print_regs (const u32 *dump_addr,u32 len, +void __iomem *base_addr,struct drm_printer *p) {int i; -u32 *dump_addr =NULL ;void __iomem *addr;u32 num_rows; +if (!dump_addr) { +drm_printf (p,"Registers not stored\n" ); +return ; + } + addr = base_addr; num_rows = len /REG_DUMP_ALIGN ; -if (*reg) - dump_addr = *reg; -for (i =0 ; i < num_rows; i++) { drm_printf(p, "0x%lx : %08x %08x %08x %08x\n", (unsigned long)(addr - base_addr),
@@ -86,7 +87,7 @@ void msm_disp_state_print(struct msm_disp_state *state, struct drm_printer *p)list_for_each_entry_safe (block, tmp, &state->blocks, node) {drm_printf (p,"====================%s================\n" , block->name); -msm_disp_state_print_regs (&block->state, block->size, block->base_addr, p); +msm_disp_state_print_regs (block->state, block->size, block->base_addr, p); }drm_printf (p,"===================dpu drm state================\n" );
@@ -154,7 +155,7 @@ void msm_disp_state_free(void *data)list_for_each_entry_safe (block, tmp, &disp_state->blocks, node) {list_del (&block->node); -kfree (block->state); +kvfree (block->state);kfree (block); }
drivers/gpu/drm/msm/dsi/dsi_host.c +1 -1
@@ -678,7 +678,7 @@ static unsigned long dsi_get_pclk_rate(struct msm_dsi_host *msm_host, bool is_bostruct drm_display_mode *mode = msm_host->mode;unsigned long pclk_rate; - pclk_rate = mode->clock *1000 ; + pclk_rate = mode->clock *1000u ;/* * For bonded DSI mode, the current DRM mode has the complete width of the
drivers/gpu/drm/vboxvideo/hgsmi_base.c +9 -1
@@ -139,7 +139,15 @@ int hgsmi_update_pointer_shape(struct gen_pool *ctx, u32 flags, flags |=VBOX_MOUSE_POINTER_VISIBLE ; } - p =hgsmi_buffer_alloc (ctx,sizeof (*p) + pixel_len,HGSMI_CH_VBVA , +/* +* The 4 extra bytes come from switching struct vbva_mouse_pointer_shape +* from having a 4 bytes fixed array at the end to using a proper VLA +* at the end. These 4 extra bytes were not subtracted from sizeof(*p) +* before the switch to the VLA, so this way the behavior is unchanged. +* Chances are these 4 extra bytes are not necessary but they are kept +* to avoid regressions. +*/ + p =hgsmi_buffer_alloc (ctx,sizeof (*p) + pixel_len +4 ,HGSMI_CH_VBVA ,VBVA_MOUSE_POINTER_SHAPE );if (!p)return -ENOMEM ;
drivers/gpu/drm/vboxvideo/vboxvideo.h +1 -3
@@ -351,10 +351,8 @@ struct vbva_mouse_pointer_shape {* Bytes in the gap between the AND and the XOR mask are undefined. * XOR mask scanlines have no gap between them and size of XOR mask is: * xor_len = width * 4 * height. -* -* Preallocate 4 bytes for accessing actual data as p->data. */ -u8 data[4 ]; +u8 data[]; } __packed;/* pointer is visible */
drivers/infiniband/hw/bnxt_re/qplib_fp.h +1 -1
@@ -169,7 +169,7 @@ struct bnxt_qplib_swqe { };u32 q_key;u32 dst_qp; -u16 avid; +u32 avid; } send;/* Send Raw Ethernet and QP1 */
drivers/infiniband/hw/bnxt_re/qplib_rcfw.c +1 -1
@@ -249,7 +249,7 @@ int bnxt_qplib_rcfw_send_message(struct bnxt_qplib_rcfw *rcfw,/* failed with status */ dev_err (&rcfw->pdev->dev,"cmdq[%#x]=%#x status %#x\n" , cookie, opcode, evnt->status); - rc = -EFAULT ; + rc = -EIO ; }return rc;
drivers/infiniband/hw/bnxt_re/qplib_res.c +5 -16
@@ -243,6 +243,8 @@ int bnxt_qplib_alloc_init_hwq(struct bnxt_qplib_hwq *hwq, sginfo.pgsize = npde * pg_size; sginfo.npages =1 ; rc =__alloc_pbl (res, &hwq->pbl[PBL_LVL_0 ], &sginfo); +if (rc) + goto fail;/* Alloc PBL pages */ sginfo.npages = npbl;
@@ -254,22 +256,9 @@ int bnxt_qplib_alloc_init_hwq(struct bnxt_qplib_hwq *hwq, dst_virt_ptr = (dma_addr_t **)hwq->pbl[PBL_LVL_0 ].pg_arr; src_phys_ptr = hwq->pbl[PBL_LVL_1 ].pg_map_arr; -if (hwq_attr->type ==HWQ_TYPE_MR ) { -/* For MR it is expected that we supply only 1 contigous -* page i.e only 1 entry in the PDL that will contain -* all the PBLs for the user supplied memory region -*/ -for (i =0 ; i < hwq->pbl[PBL_LVL_1 ].pg_count; - i++) - dst_virt_ptr[0 ][i] = src_phys_ptr[i] | - flag; - }else { -for (i =0 ; i < hwq->pbl[PBL_LVL_1 ].pg_count; - i++) - dst_virt_ptr[PTR_PG (i)][PTR_IDX (i)] = - src_phys_ptr[i] | -PTU_PDE_VALID ; - } +for (i =0 ; i < hwq->pbl[PBL_LVL_1 ].pg_count; i++) + dst_virt_ptr[0 ][i] = src_phys_ptr[i] | flag; +/* Alloc or init PTEs */ rc =__alloc_pbl (res, &hwq->pbl[PBL_LVL_2 ], hwq_attr->sginfo);
drivers/infiniband/hw/cxgb4/cm.c +4 -5
@@ -2086,7 +2086,7 @@ static int import_ep(struct c4iw_ep *ep, int iptype, __u8 *peer_ip, err = -ENOMEM ;if (n->dev->flags &IFF_LOOPBACK ) {if (iptype ==4 ) - pdev =ip_dev_find (&init_net, *(__be32 *)peer_ip); + pdev =__ip_dev_find (&init_net, *(__be32 *)peer_ip, false);else if (IS_ENABLED (CONFIG_IPV6 ))for_each_netdev (&init_net, pdev) { if (ipv6_chk_addr(&init_net,
@@ -2101,12 +2101,12 @@ static int import_ep(struct c4iw_ep *ep, int iptype, __u8 *peer_ip, err = -ENODEV ; goto out; } +if (is_vlan_dev (pdev)) + pdev =vlan_dev_real_dev (pdev); ep->l2t =cxgb4_l2t_get (cdev->rdev.lldi.l2t, n, pdev,rt_tos2priority (tos)); -if (!ep->l2t) { -dev_put (pdev); +if (!ep->l2t) goto out; - } ep->mtu = pdev->mtu; ep->tx_chan =cxgb4_port_chan (pdev); ep->smac_idx = ((struct port_info *)netdev_priv (pdev))->smt_idx;
@@ -2119,7 +2119,6 @@ static int import_ep(struct c4iw_ep *ep, int iptype, __u8 *peer_ip, ep->rss_qid = cdev->rdev.lldi.rxq_ids[cxgb4_port_idx (pdev) * step];set_tcp_window (ep, (struct port_info *)netdev_priv (pdev)); -dev_put (pdev); }else { pdev =get_real_dev (n->dev); ep->l2t = cxgb4_l2t_get(cdev->rdev.lldi.l2t,
drivers/infiniband/hw/irdma/cm.c +1 -1
@@ -3582,7 +3582,7 @@ void irdma_free_lsmm_rsrc(struct irdma_qp *iwqp)/** * irdma_accept - registered call for connection to be accepted * @cm_id: cm information for passive connection -* @conn_param: accpet parameters +* @conn_param: accept parameters */ int irdma_accept (struct iw_cm_id *cm_id,struct iw_cm_conn_param *conn_param) {
drivers/net/dsa/mv88e6xxx/port.c +1 -0
@@ -1699,6 +1699,7 @@ int mv88e6393x_port_set_policy(struct mv88e6xxx_chip *chip, int port, ptr = shift /8 ; shift %=8 ; mask >>= ptr *8 ; + ptr <<=8 ; err =mv88e6393x_port_policy_read (chip, port, ptr, ®);if (err)
drivers/net/ethernet/aeroflex/greth.c +2 -1
@@ -484,7 +484,7 @@ greth_start_xmit_gbit(struct sk_buff *skb, struct net_device *dev)if (unlikely (skb->len >MAX_FRAME_SIZE )) { dev->stats.tx_errors++; - goto out; + goto len_error; }/* Save skb pointer. */
@@ -575,6 +575,7 @@ greth_start_xmit_gbit(struct sk_buff *skb, struct net_device *dev) map_error:if (net_ratelimit ())dev_warn (greth->dev,"Could not create TX DMA mapping\n" ); +len_error:dev_kfree_skb (skb); out:return err;
drivers/net/ethernet/broadcom/bcmsysport.c +1 -0
@@ -1348,6 +1348,7 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb,netif_err (priv, tx_err, dev,"DMA map failed at %p (len=%d)\n" , skb->data, skb_len); ret =NETDEV_TX_OK ; +dev_kfree_skb_any (skb); goto out; }
drivers/net/ethernet/emulex/benet/be_main.c +5 -5
@@ -1382,10 +1382,8 @@ static netdev_tx_t be_xmit(struct sk_buff *skb, struct net_device *netdev)be_get_wrb_params_from_skb (adapter, skb, &wrb_params); wrb_cnt =be_xmit_enqueue (adapter, txo, skb, &wrb_params); -if (unlikely (!wrb_cnt)) { -dev_kfree_skb_any (skb); - goto drop; - } +if (unlikely (!wrb_cnt)) + goto drop_skb;/* if os2bmc is enabled and if the pkt is destined to bmc, * enqueue the pkt a 2nd time with mgmt bit set.
@@ -1394,7 +1392,7 @@ static netdev_tx_t be_xmit(struct sk_buff *skb, struct net_device *netdev)BE_WRB_F_SET (wrb_params.features,OS2BMC ,1 ); wrb_cnt =be_xmit_enqueue (adapter, txo, skb, &wrb_params);if (unlikely (!wrb_cnt)) - goto drop; + goto drop_skb;else skb_get (skb); }
@@ -1408,6 +1406,8 @@ static netdev_tx_t be_xmit(struct sk_buff *skb, struct net_device *netdev)be_xmit_flush (adapter, txo);return NETDEV_TX_OK ; +drop_skb: +dev_kfree_skb_any (skb); drop:tx_stats (txo)->tx_drv_drops++;/* Flush the already enqueued tx requests */
drivers/net/ethernet/i825xx/sun3_82586.c +1 -0
@@ -1012,6 +1012,7 @@ sun3_82586_send_packet(struct sk_buff *skb, struct net_device *dev)if (skb->len >XMIT_BUFF_SIZE ) {printk ("%s: Sorry, max. framelength is %d bytes. The length of your frame is %d bytes.\n" ,dev->name,XMIT_BUFF_SIZE ,skb->len); +dev_kfree_skb (skb);return NETDEV_TX_OK ; }
drivers/net/ethernet/marvell/octeontx2/af/rvu_nix.c +2 -2
@@ -2239,7 +2239,7 @@ static int nix_smq_flush(struct rvu *rvu, int blkaddr, NIX_AF_TL3_TL2X_LINKX_CFG(tl2_tl3_link_schq, link));if (!(cfg &BIT_ULL (12 )))continue ; - bmap |= (1 << i); + bmap |=BIT_ULL (i); cfg &= ~BIT_ULL (12 );rvu_write64 (rvu, blkaddr,NIX_AF_TL3_TL2X_LINKX_CFG (tl2_tl3_link_schq, link), cfg);
@@ -2260,7 +2260,7 @@ static int nix_smq_flush(struct rvu *rvu, int blkaddr,/* Set NIX_AF_TL3_TL2_LINKX_CFG[ENA] for the TL3/TL2 queue */ for (i =0 ; i < (rvu->hw->cgx_links + rvu->hw->lbk_links); i++) { -if (!(bmap & (1 << i))) +if (!(bmap &BIT_ULL (i)))continue ; cfg =rvu_read64 (rvu, blkaddr,NIX_AF_TL3_TL2X_LINKX_CFG (tl2_tl3_link_schq, link));
drivers/net/ethernet/realtek/r8169_main.c +3 -1
@@ -4627,7 +4627,9 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)if ((status &0xffff ) ==0xffff || !(status & tp->irq_mask))return IRQ_NONE ; -if (unlikely (status & SYSErr)) { +/* At least RTL8168fp may unexpectedly set the SYSErr bit */ +if (unlikely (status & SYSErr && + tp->mac_version <=RTL_GIGA_MAC_VER_06 )) {rtl8169_pcierr_interrupt (tp->dev); goto out; }
drivers/net/ethernet/xilinx/xilinx_axienet_main.c +2 -0
@@ -868,6 +868,7 @@ axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev)if (net_ratelimit ())netdev_err (ndev,"TX DMA mapping error\n" ); ndev->stats.tx_dropped++; +dev_kfree_skb_any (skb);return NETDEV_TX_OK ; }desc_set_phys_addr (lp, phys, cur_p);
@@ -888,6 +889,7 @@ axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev) ndev->stats.tx_dropped++;axienet_free_tx_chain (lp, orig_tail_ptr, ii +1 , true,NULL ,0 ); +dev_kfree_skb_any (skb);return NETDEV_TX_OK ; }desc_set_phys_addr (lp, phys, cur_p);
drivers/net/hyperv/netvsc_drv.c +30 -0
@@ -2813,6 +2813,31 @@ static struct hv_driver netvsc_drv = { }, }; +/* Set VF's namespace same as the synthetic NIC */ +static void netvsc_event_set_vf_ns (struct net_device *ndev) +{ +struct net_device_context *ndev_ctx =netdev_priv (ndev); +struct net_device *vf_netdev; +int ret; + + vf_netdev =rtnl_dereference (ndev_ctx->vf_netdev); +if (!vf_netdev) +return ; + +if (!net_eq (dev_net (ndev),dev_net (vf_netdev))) { + ret =dev_change_net_namespace (vf_netdev,dev_net (ndev), +"eth%d" ); +if (ret) +netdev_err (vf_netdev, +"Cannot move to same namespace as %s: %d\n" , + ndev->name, ret); +else +netdev_info (vf_netdev, +"Moved VF to namespace with: %s\n" , + ndev->name); + } +} +/* * On Hyper-V, every VF interface is matched with a corresponding * synthetic interface. The synthetic interface is presented first
@@ -2825,6 +2850,11 @@ static int netvsc_netdev_event(struct notifier_block *this,struct net_device *event_dev =netdev_notifier_info_to_dev (ptr);int ret =0 ; +if (event_dev->netdev_ops == &device_ops && event ==NETDEV_REGISTER ) { +netvsc_event_set_vf_ns (event_dev); +return NOTIFY_DONE ; + } + ret =check_dev_is_matching_vf (event_dev);if (ret !=0 )return NOTIFY_DONE ;
drivers/net/macsec.c +0 -18
@@ -160,19 +160,6 @@ static struct macsec_rx_sa *macsec_rxsa_get(struct macsec_rx_sa __rcu *ptr)return sa; } -static struct macsec_rx_sa *macsec_active_rxsa_get (struct macsec_rx_sc *rx_sc) -{ -struct macsec_rx_sa *sa =NULL ; -int an; - -for (an =0 ; an <MACSEC_NUM_AN ; an++) { - sa =macsec_rxsa_get (rx_sc->sa[an]); -if (sa) -break ; - } -return sa; -} -static void free_rx_sc_rcu (struct rcu_head *head) { struct macsec_rx_sc *rx_sc = container_of(head, struct macsec_rx_sc, rcu_head);
@@ -1192,15 +1179,12 @@ static rx_handler_result_t macsec_handle_frame(struct sk_buff **pskb)/* If validateFrames is Strict or the C bit in the * SecTAG is set, discard */ -struct macsec_rx_sa *active_rx_sa =macsec_active_rxsa_get (rx_sc);if (hdr->tci_an &MACSEC_TCI_C || secy->validate_frames ==MACSEC_VALIDATE_STRICT ) {u64_stats_update_begin (&rxsc_stats->syncp); rxsc_stats->stats.InPktsNotUsingSA++;u64_stats_update_end (&rxsc_stats->syncp);DEV_STATS_INC (secy->netdev, rx_errors); -if (active_rx_sa) -this_cpu_inc (active_rx_sa->stats->InPktsNotUsingSA); goto drop_nosa; }
@@ -1210,8 +1194,6 @@ static rx_handler_result_t macsec_handle_frame(struct sk_buff **pskb)u64_stats_update_begin (&rxsc_stats->syncp); rxsc_stats->stats.InPktsUnusedSA++;u64_stats_update_end (&rxsc_stats->syncp); -if (active_rx_sa) -this_cpu_inc (active_rx_sa->stats->InPktsUnusedSA); goto deliver; }
drivers/net/phy/dp83822.c +2 -2
@@ -40,8 +40,8 @@/* Control Register 2 bits */ #define DP83822_FX_ENABLE BIT(14) -#define DP83822_HW_RESET BIT(15) -#define DP83822_SW_RESET BIT(14) +#define DP83822_SW_RESET BIT(15) +#define DP83822_DIG_RESTART BIT(14)/* PHY STS bits */ #define DP83822_PHYSTS_DUPLEX BIT(2)
drivers/net/plip/plip.c +1 -1
@@ -811,7 +811,7 @@ plip_send_packet(struct net_device *dev, struct net_local *nl,return HS_TIMEOUT ; } } -break ; + fallthrough;case PLIP_PK_LENGTH_LSB : if (plip_send(nibble_timeout, dev,
drivers/net/usb/usbnet.c +3 -1
@@ -1769,7 +1769,8 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)// can rename the link if it knows better. if ((dev->driver_info->flags &FLAG_ETHER ) !=0 && ((dev->driver_info->flags &FLAG_POINTTOPOINT ) ==0 || - (net->dev_addr [0 ] &0x02 ) ==0 )) +/* somebody touched it*/ + !is_zero_ether_addr (net->dev_addr)))strscpy (net->name,"eth%d" ,sizeof (net->name));/* WLAN devices should always be named "wlan%d" */ if ((dev->driver_info->flags &FLAG_WLAN ) !=0 )
@@ -1872,6 +1873,7 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod)* may trigger an error resubmitting itself and, worse, * schedule a timer. So we kill it all just in case. */ +usbnet_mark_going_away (dev);cancel_work_sync (&dev->kevent);del_timer_sync (&dev->delay);free_percpu (net->tstats);
drivers/net/wwan/wwan_core.c +1 -1
@@ -927,7 +927,7 @@ static const struct nla_policy wwan_rtnl_policy[IFLA_WWAN_MAX + 1] = {static struct rtnl_link_ops wwan_rtnl_link_ops__read_mostly = { .kind ="wwan" , - .maxtype = __IFLA_WWAN_MAX, + .maxtype =IFLA_WWAN_MAX , .alloc = wwan_rtnl_alloc, .validate = wwan_rtnl_validate, .newlink = wwan_rtnl_newlink,
drivers/platform/x86/dell/dell-wmi-base.c +9 -0
@@ -263,6 +263,15 @@ static const struct key_entry dell_wmi_keymap_type_0010[] = {/*Speaker Mute*/ { KE_KEY, 0x109, { KEY_MUTE} }, +/* S2Idle screen off */ + { KE_IGNORE, 0x120, { KEY_RESERVED }}, + +/* Leaving S4 or S2Idle suspend */ + { KE_IGNORE, 0x130, { KEY_RESERVED }}, + +/* Entering S2Idle suspend */ + { KE_IGNORE, 0x140, { KEY_RESERVED }}, +/* Mic mute */ { KE_KEY, 0x150, { KEY_MICMUTE } },
drivers/platform/x86/dell/dell-wmi-sysman/sysman.c +1 -0
@@ -524,6 +524,7 @@ static int __init sysman_init(void)int ret =0 ;if (!dmi_find_device (DMI_DEV_TYPE_OEM_STRING ,"Dell System" ,NULL ) && + !dmi_find_device (DMI_DEV_TYPE_OEM_STRING ,"Alienware" ,NULL ) && !dmi_find_device (DMI_DEV_TYPE_OEM_STRING ,"www.dell.com" ,NULL )) {pr_err ("Unable to run on non-Dell system\n" );return -ENODEV ;
drivers/target/target_core_device.c +1 -1
@@ -724,7 +724,7 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name) dev->queues =kcalloc (nr_cpu_ids,sizeof (*dev->queues),GFP_KERNEL );if (!dev->queues) { - dev->transport->free_device (dev); + hba->backend->ops->free_device (dev);return NULL ; }
drivers/target/target_core_user.c +1 -1
@@ -2129,7 +2129,7 @@ static int tcmu_netlink_event_send(struct tcmu_dev *udev, } ret =genlmsg_multicast_allns (&tcmu_genl_family, skb,0 , -TCMU_MCGRP_CONFIG ,GFP_KERNEL ); +TCMU_MCGRP_CONFIG );/* Wait during an add as the listener may not be up yet */ if (ret == 0 ||
drivers/tty/serial/serial_core.c +9 -7
@@ -286,14 +286,16 @@ static void uart_shutdown(struct tty_struct *tty, struct uart_state *state)/* * Turn off DTR and RTS early. */ -if (uport &&uart_console (uport) && tty) { - uport->cons->cflag = tty->termios.c_cflag; - uport->cons->ispeed = tty->termios.c_ispeed; - uport->cons->ospeed = tty->termios.c_ospeed; - } +if (uport) { +if (uart_console (uport) && tty) { + uport->cons->cflag = tty->termios.c_cflag; + uport->cons->ispeed = tty->termios.c_ispeed; + uport->cons->ospeed = tty->termios.c_ospeed; + } -if (!tty ||C_HUPCL (tty)) -uart_port_dtr_rts (uport,0 ); +if (!tty ||C_HUPCL (tty)) +uart_port_dtr_rts (uport,0 ); + }uart_port_shutdown (port); }
drivers/usb/dwc3/core.c +19 -0
@@ -1796,6 +1796,11 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg) {u32 reg; + dwc->susphy_state = (dwc3_readl (dwc->regs,DWC3_GUSB2PHYCFG (0 )) & +DWC3_GUSB2PHYCFG_SUSPHY ) || + (dwc3_readl (dwc->regs,DWC3_GUSB3PIPECTL (0 )) & +DWC3_GUSB3PIPECTL_SUSPHY ); +switch (dwc->current_dr_role) {case DWC3_GCTL_PRTCAP_DEVICE :if (pm_runtime_suspended (dwc->dev))
@@ -1843,6 +1848,15 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg)break ; } +if (!PMSG_IS_AUTO (msg)) { +/* +* TI AM62 platform requires SUSPHY to be +* enabled for system suspend to work. +*/ +if (!dwc->susphy_state) +dwc3_enable_susphy (dwc, true); + } +return 0 ; }
@@ -1905,6 +1919,11 @@ static int dwc3_resume_common(struct dwc3 *dwc, pm_message_t msg)break ; } +if (!PMSG_IS_AUTO (msg)) { +/* restore SUSPHY state to that before system suspend. */ +dwc3_enable_susphy (dwc, dwc->susphy_state); + } +return 0 ; }
drivers/usb/dwc3/core.h +3 -0
@@ -1085,6 +1085,8 @@ struct dwc3_scratchpad_array {* @dis_metastability_quirk: set to disable metastability quirk. * @dis_split_quirk: set to disable split boundary. * @suspended: set to track suspend event due to U3/L2. +* @susphy_state: state of DWC3_GUSB2PHYCFG_SUSPHY + DWC3_GUSB3PIPECTL_SUSPHY +* before PM suspend. * @imod_interval: set the interrupt moderation interval in 250ns * increments or 0 to disable. * @max_cfg_eps: current max number of IN eps used across all USB configs.
@@ -1300,6 +1302,7 @@ struct dwc3 { unsigned dis_split_quirk:1; unsigned async_callbacks:1; unsigned suspended:1; + unsigned susphy_state:1;u16 imod_interval;
drivers/usb/gadget/composite.c +40 -0
@@ -477,6 +477,46 @@ int usb_interface_id(struct usb_configuration *config, }EXPORT_SYMBOL_GPL (usb_interface_id); +/** +* usb_func_wakeup - sends function wake notification to the host. +* @func: function that sends the remote wakeup notification. +* +* Applicable to devices operating at enhanced superspeed when usb +* functions are put in function suspend state and armed for function +* remote wakeup. On completion, function wake notification is sent. If +* the device is in low power state it tries to bring the device to active +* state before sending the wake notification. Since it is a synchronous +* call, caller must take care of not calling it in interrupt context. +* For devices operating at lower speeds returns negative errno. +* +* Returns zero on success, else negative errno. +*/ +int usb_func_wakeup (struct usb_function *func) +{ +struct usb_gadget *gadget = func->config->cdev->gadget; +int id; + +if (!gadget->ops->func_wakeup) +return -EOPNOTSUPP ; + +if (!func->func_wakeup_armed) { +ERROR (func->config->cdev,"not armed for func remote wakeup\n" ); +return -EINVAL ; + } + +for (id =0 ; id <MAX_CONFIG_INTERFACES ; id++) +if (func->config->interface[id] == func) +break ; + +if (id ==MAX_CONFIG_INTERFACES ) { +ERROR (func->config->cdev,"Invalid function\n" ); +return -EINVAL ; + } + +return gadget->ops->func_wakeup (gadget, id); +} +EXPORT_SYMBOL_GPL (usb_func_wakeup); +static u8 encode_bMaxPower (enum usb_device_speed speed,struct usb_configuration *c) {
drivers/usb/host/xhci-caps.h new file +85 -0
85 lines not on this page · raw message
drivers/usb/host/xhci-port.h new file +176 -0
176 lines not on this page · raw message
drivers/usb/host/xhci.h +3 -259
280 lines not on this page · raw message
drivers/usb/typec/class.c +3 -0
@@ -501,6 +501,7 @@ static void typec_altmode_release(struct device *dev)typec_altmode_put_partner (alt);altmode_id_remove (alt->adev.dev.parent, alt->id); +put_device (alt->adev.dev.parent);kfree (alt); }
@@ -550,6 +551,8 @@ typec_register_altmode(struct device *parent, alt->adev.dev.type = &typec_altmode_dev_type;dev_set_name (&alt->adev.dev,"%s.%u" ,dev_name (parent), id); +get_device (alt->adev.dev.parent); +/* Link partners and plugs with the ports */ if (!is_port)typec_altmode_set_partner (alt);
fs/btrfs/block-group.c +2 -0
@@ -3386,6 +3386,8 @@ void btrfs_free_reserved_bytes(struct btrfs_block_group *cache,spin_lock (&cache->lock);if (cache->ro) space_info->bytes_readonly += num_bytes; +else if (btrfs_is_zoned (cache->fs_info)) + space_info->bytes_zone_unusable += num_bytes; cache->reserved -= num_bytes; space_info->bytes_reserved -= num_bytes; space_info->max_extent_size =0 ;
fs/cifs/smb2pdu.c +9 -0
@@ -3028,6 +3028,15 @@ SMB2_ioctl_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server,return rc;if (indatalen) { +unsigned int len; + +if (WARN_ON_ONCE (smb3_encryption_required (tcon) && + (check_add_overflow (total_len -1 , +ALIGN (indatalen,8 ), &len) || + len >MAX_CIFS_SMALL_BUFFER_SIZE ))) { +cifs_small_buf_release (req); +return -EIO ; + }/* * indatalen is usually small at a couple of bytes max, so * just allocate through generic pool
fs/exec.c +9 -12
@@ -142,13 +142,11 @@ SYSCALL_DEFINE1(uselib, const char __user *, library) goto out;/* -* may_open() has already checked for this, so it should be -* impossible to trip now. But we need to be extra cautious -* and check again at the very end too. +* Check do_open_execat() for an explanation. */ error = -EACCES ; -if (WARN_ON_ONCE (!S_ISREG (file_inode (file)->i_mode) || -path_noexec (&file->f_path))) +if (WARN_ON_ONCE (!S_ISREG (file_inode (file)->i_mode)) || +path_noexec (&file->f_path)) goto exit;fsnotify_open (file);
@@ -919,16 +917,16 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags) file =do_filp_open (fd, name, &open_exec_flags);if (IS_ERR (file)) - goto out; +return file;/* -* may_open() has already checked for this, so it should be -* impossible to trip now. But we need to be extra cautious -* and check again at the very end too. +* In the past the regular type check was here. It moved to may_open() in +* 633fb6ac3980 ("exec: move S_ISREG() check earlier"). Since then it is +* an invariant that all non-regular files error out before we get here. */ err = -EACCES ; -if (WARN_ON_ONCE (!S_ISREG (file_inode (file)->i_mode) || -path_noexec (&file->f_path))) +if (WARN_ON_ONCE (!S_ISREG (file_inode (file)->i_mode)) || +path_noexec (&file->f_path)) goto exit; err =deny_write_access (file);
@@ -938,7 +936,6 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags)if (name->name[0 ] !='\0' )fsnotify_open (file); -out:return file; exit:
fs/jfs/jfs_dmap.c +1 -1
@@ -187,7 +187,7 @@ int dbMount(struct inode *ipbmap) } bmp->db_numag =le32_to_cpu (dbmp_le->dn_numag); -if (!bmp->db_numag || bmp->db_numag >=MAXAG ) { +if (!bmp->db_numag || bmp->db_numag >MAXAG ) { err = -EINVAL ; goto err_release_metapage; }
fs/nilfs2/page.c +4 -2
@@ -77,7 +77,8 @@ void nilfs_forget_buffer(struct buffer_head *bh)const unsigned long clear_bits = (BIT (BH_Uptodate) |BIT (BH_Dirty) |BIT (BH_Mapped) |BIT (BH_Async_Write) |BIT (BH_NILFS_Volatile) | -BIT (BH_NILFS_Checked) |BIT (BH_NILFS_Redirected)); +BIT (BH_NILFS_Checked) |BIT (BH_NILFS_Redirected) | +BIT (BH_Delay));lock_buffer (bh);set_mask_bits (&bh->b_state, clear_bits,0 );
@@ -409,7 +410,8 @@ void nilfs_clear_dirty_page(struct page *page, bool silent)const unsigned long clear_bits = (BIT (BH_Uptodate) |BIT (BH_Dirty) |BIT (BH_Mapped) |BIT (BH_Async_Write) |BIT (BH_NILFS_Volatile) | -BIT (BH_NILFS_Checked) |BIT (BH_NILFS_Redirected)); +BIT (BH_NILFS_Checked) |BIT (BH_NILFS_Redirected) | +BIT (BH_Delay)); bh = head =page_buffers (page); do {
fs/open.c +2 -0
@@ -1296,6 +1296,8 @@ SYSCALL_DEFINE4(openat2, int, dfd, const char __user *, filename,if (unlikely (usize <OPEN_HOW_SIZE_VER0 ))return -EINVAL ; +if (unlikely (usize >PAGE_SIZE )) +return -E2BIG ; err =copy_struct_from_user (&tmp,sizeof (tmp), how, usize);if (err)
fs/udf/inode.c +6 -3
@@ -2100,12 +2100,15 @@ int8_t udf_current_aext(struct inode *inode, struct extent_position *epos, alen =udf_file_entry_alloc_offset (inode) + iinfo->i_lenAlloc; }else { +struct allocExtDesc *header = + (struct allocExtDesc *)epos->bh->b_data; +if (!epos->offset) epos->offset =sizeof (struct allocExtDesc ); ptr = epos->bh->b_data + epos->offset; - alen =sizeof (struct allocExtDesc ) + -le32_to_cpu (((struct allocExtDesc *)epos->bh->b_data)-> - lengthAllocDescs); +if (check_add_overflow (sizeof (struct allocExtDesc ), +le32_to_cpu (header->lengthAllocDescs), &alen)) +return -1 ; }switch (iinfo->i_alloc_type) {
include/linux/usb/composite.h +6 -0
@@ -163,6 +163,9 @@ struct usb_os_desc_table {* GetStatus() request when the recipient is Interface. * @func_suspend: callback to be called when * SetFeature(FUNCTION_SUSPEND) is reseived +* @func_suspended: Indicates whether the function is in function suspend state. +* @func_wakeup_armed: Indicates whether the function is armed by the host for +* wakeup signaling. * * A single USB function uses one or more interfaces, and should in most * cases support operation at both full and high speeds. Each function is
@@ -233,6 +236,8 @@ struct usb_function {int (*get_status)(struct usb_function *);int (*func_suspend)(struct usb_function *,u8 suspend_opt); +bool func_suspended; +bool func_wakeup_armed;/* private: */ /* internals */ struct list_head list;
@@ -254,6 +259,7 @@ int config_ep_by_speed_and_alt(struct usb_gadget *g, struct usb_function *f,int config_ep_by_speed (struct usb_gadget *g,struct usb_function *f,struct usb_ep *_ep); +int usb_func_wakeup (struct usb_function *func);#define MAX_CONFIG_INTERFACES 16/* arbitrary; max 255 */
include/linux/usb/gadget.h +1 -0
@@ -311,6 +311,7 @@ struct usb_udc;struct usb_gadget_ops {int (*get_frame)(struct usb_gadget *);int (*wakeup)(struct usb_gadget *); +int (*func_wakeup)(struct usb_gadget *gadget,int intf_id);int (*set_remote_wakeup)(struct usb_gadget *,int set);int (*set_selfpowered) (struct usb_gadget *,int is_selfpowered);int (*vbus_session) (struct usb_gadget *,int is_active);
include/net/genetlink.h +1 -2
@@ -336,13 +336,12 @@ static inline int genlmsg_multicast(const struct genl_family *family,* @skb: netlink message as socket buffer * @portid: own netlink portid to avoid sending to yourself * @group: offset of multicast group in groups array -* @flags: allocation flags * * This function must hold the RTNL or rcu_read_lock(). */ int genlmsg_multicast_allns (const struct genl_family *family,struct sk_buff *skb,u32 portid, -unsigned int group,gfp_t flags); +unsigned int group);/** * genlmsg_unicast - unicast a netlink message
include/net/xfrm.h +15 -13
@@ -315,20 +315,25 @@ struct xfrm_if_cb {void xfrm_if_register_cb (const struct xfrm_if_cb *ifcb);void xfrm_if_unregister_cb (void ); +struct xfrm_dst_lookup_params { +struct net *net; +int tos; +int oif; +xfrm_address_t *saddr; +xfrm_address_t *daddr; +u32 mark; +__u8 ipproto; +union flowi_uli uli; +}; +struct net_device ;struct xfrm_type ;struct xfrm_dst ;struct xfrm_policy_afinfo {struct dst_ops *dst_ops; -struct dst_entry *(*dst_lookup)(struct net *net, -int tos,int oif, -const xfrm_address_t *saddr, -const xfrm_address_t *daddr, -u32 mark); -int (*get_saddr)(struct net *net,int oif, -xfrm_address_t *saddr, -xfrm_address_t *daddr, -u32 mark); +struct dst_entry *(*dst_lookup)(const struct xfrm_dst_lookup_params *params); +int (*get_saddr)(xfrm_address_t *saddr, +const struct xfrm_dst_lookup_params *params);int (*fill_dst)(struct xfrm_dst *xdst,struct net_device *dev,const struct flowi *fl);
@@ -1645,10 +1650,7 @@ static inline int xfrm_user_policy(struct sock *sk, int optname, }#endif -struct dst_entry *__xfrm_dst_lookup (struct net *net,int tos,int oif, -const xfrm_address_t *saddr, -const xfrm_address_t *daddr, -int family,u32 mark); +struct dst_entry *__xfrm_dst_lookup (int family,const struct xfrm_dst_lookup_params *params);struct xfrm_policy *xfrm_policy_alloc (struct net *net,gfp_t gfp);
include/uapi/linux/bpf.h +5 -8
@@ -5108,11 +5108,6 @@ enum { BPF_F_MARK_ENFORCE = (1ULL << 6), }; -/* BPF_FUNC_clone_redirect and BPF_FUNC_redirect flags. */ -enum { -BPF_F_INGRESS = (1ULL <<0 ), -}; -/* BPF_FUNC_skb_set_tunnel_key and BPF_FUNC_skb_get_tunnel_key flags. */ enum {BPF_F_TUNINFO_IPV6 = (1ULL <<0 ),
@@ -5251,10 +5246,12 @@ enum { BPF_F_BPRM_SECUREEXEC = (1ULL << 0), }; -/* Flags for bpf_redirect_map helper */ +/* Flags for bpf_redirect and bpf_redirect_map helpers */ enum { -BPF_F_BROADCAST = (1ULL <<3 ), -BPF_F_EXCLUDE_INGRESS = (1ULL <<4 ), +BPF_F_INGRESS = (1ULL <<0 ),/* used for skb path */ +BPF_F_BROADCAST = (1ULL <<3 ),/* used for XDP path */ +BPF_F_EXCLUDE_INGRESS = (1ULL <<4 ),/* used for XDP path */ +#define BPF_F_REDIRECT_FLAGS (BPF_F_INGRESS | BPF_F_BROADCAST | BPF_F_EXCLUDE_INGRESS) };#define __bpf_md_ptr (type, name) \
kernel/bpf/devmap.c +7 -4
@@ -325,9 +325,11 @@ static int dev_map_hash_get_next_key(struct bpf_map *map, void *key,static int dev_map_bpf_prog_run (struct bpf_prog *xdp_prog,struct xdp_frame **frames,int n, -struct net_device *dev) +struct net_device *tx_dev, +struct net_device *rx_dev) { -struct xdp_txq_info txq = { .dev = dev }; +struct xdp_txq_info txq = { .dev = tx_dev }; +struct xdp_rxq_info rxq = { .dev = rx_dev };struct xdp_buff xdp;int i, nframes =0 ;
@@ -338,6 +340,7 @@ static int dev_map_bpf_prog_run(struct bpf_prog *xdp_prog,xdp_convert_frame_to_buff (xdpf, &xdp); xdp.txq = &txq; + xdp.rxq = &rxq; act =bpf_prog_run_xdp (xdp_prog, &xdp);switch (act) {
@@ -352,7 +355,7 @@ static int dev_map_bpf_prog_run(struct bpf_prog *xdp_prog,bpf_warn_invalid_xdp_action (act); fallthrough;case XDP_ABORTED : -trace_xdp_exception (dev, xdp_prog, act); +trace_xdp_exception (tx_dev, xdp_prog, act); fallthrough;case XDP_DROP :xdp_return_frame_rx_napi (xdpf);
@@ -380,7 +383,7 @@ static void bq_xmit_all(struct xdp_dev_bulk_queue *bq, u32 flags) }if (bq->xdp_prog) { - to_send =dev_map_bpf_prog_run (bq->xdp_prog, bq->q, cnt, dev); + to_send =dev_map_bpf_prog_run (bq->xdp_prog, bq->q, cnt, dev, bq->dev_rx);if (!to_send) goto out; }
kernel/time/posix-clock.c +3 -3
@@ -290,6 +290,9 @@ static int pc_clock_settime(clockid_t id, const struct timespec64 *ts)struct posix_clock_desc cd;int err; +if (!timespec64_valid_strict (ts)) +return -EINVAL ; + err =get_clock_desc (id, &cd);if (err)return err;
@@ -299,9 +302,6 @@ static int pc_clock_settime(clockid_t id, const struct timespec64 *ts) goto out; } -if (!timespec64_valid_strict (ts)) -return -EINVAL ; -if (cd.clk->ops.clock_settime) err = cd.clk->ops.clock_settime (cd.clk, ts);else
kernel/trace/bpf_trace.c +0 -2
@@ -1790,8 +1790,6 @@ void perf_event_detach_bpf_prog(struct perf_event *event) old_array =bpf_event_rcu_dereference (event->tp_event->prog_array); ret =bpf_prog_array_copy (old_array, event->prog,NULL ,0 , &new_array); -if (ret == -ENOENT ) - goto unlock;if (ret <0 ) {bpf_prog_array_delete_safe (old_array, event->prog); }else {
kernel/trace/trace_probe.c +1 -1
@@ -261,7 +261,7 @@ int traceprobe_parse_event_name(const char **pevent, const char **pgroup,if (len ==0 ) {trace_probe_log_err (offset,NO_EVENT_NAME );return -EINVAL ; - }else if (len >MAX_EVENT_NAME_LEN ) { + }else if (len >=MAX_EVENT_NAME_LEN ) {trace_probe_log_err (offset,EVENT_TOO_LONG );return -EINVAL ; }
net/bluetooth/bnep/core.c +1 -2
@@ -745,8 +745,7 @@ static int __init bnep_init(void)if (flt[0 ])BT_INFO ("BNEP filters: %s" , flt); -bnep_sock_init (); -return 0 ; +return bnep_sock_init (); } static void __exit bnep_exit(void)
net/core/filter.c +5 -3
@@ -2405,9 +2405,9 @@ static int __bpf_redirect_neigh(struct sk_buff *skb, struct net_device *dev,/* Internal, non-exposed redirect flags. */ enum { -BPF_F_NEIGH = (1ULL <<1 ), -BPF_F_PEER = (1ULL <<2 ), -BPF_F_NEXTHOP = (1ULL <<3 ), +BPF_F_NEIGH = (1ULL <<16 ), +BPF_F_PEER = (1ULL <<17 ), +BPF_F_NEXTHOP = (1ULL <<18 ),#define BPF_F_REDIRECT_INTERNAL (BPF_F_NEIGH | BPF_F_PEER | BPF_F_NEXTHOP) };
@@ -2417,6 +2417,8 @@ BPF_CALL_3(bpf_clone_redirect, struct sk_buff *, skb, u32, ifindex, u64, flags)struct sk_buff *clone;int ret; +BUILD_BUG_ON (BPF_F_REDIRECT_INTERNAL &BPF_F_REDIRECT_FLAGS ); +if (unlikely (flags & (~(BPF_F_INGRESS ) |BPF_F_REDIRECT_INTERNAL )))return -EINVAL ;
net/ipv4/devinet.c +25 -10
@@ -273,17 +273,19 @@ static struct in_device *inetdev_init(struct net_device *dev)/* Account for reference dev->ip_ptr (below) */ refcount_set (&in_dev->refcnt,1 ); - err =devinet_sysctl_register (in_dev); -if (err) { - in_dev->dead =1 ; -neigh_parms_release (&arp_tbl, in_dev->arp_parms); -in_dev_put (in_dev); - in_dev =NULL ; - goto out; +if (dev != blackhole_netdev) { + err =devinet_sysctl_register (in_dev); +if (err) { + in_dev->dead =1 ; +neigh_parms_release (&arp_tbl, in_dev->arp_parms); +in_dev_put (in_dev); + in_dev =NULL ; + goto out; + } +ip_mc_init_dev (in_dev); +if (dev->flags &IFF_UP ) +ip_mc_up (in_dev); } -ip_mc_init_dev (in_dev); -if (dev->flags &IFF_UP ) -ip_mc_up (in_dev);/* we can receive as soon as ip_ptr is set -- do this last */ rcu_assign_pointer (dev->ip_ptr, in_dev);
@@ -328,6 +330,19 @@ static void inetdev_destroy(struct in_device *in_dev)call_rcu (&in_dev->rcu_head, in_dev_rcu_put); } +static int __init inet_blackhole_dev_init (void ) +{ +int err =0 ; + +rtnl_lock (); +if (!inetdev_init (blackhole_netdev)) + err = -ENOMEM ; +rtnl_unlock (); + +return err; +} +late_initcall (inet_blackhole_dev_init); +int inet_addr_onlink (struct in_device *in_dev,__be32 a,__be32 b) {const struct in_ifaddr *ifa;
net/ipv4/inet_connection_sock.c +16 -5
@@ -791,21 +791,31 @@ static bool reqsk_queue_unlink(struct request_sock *req) found =__sk_nulls_del_node_init_rcu (req_to_sk (req));spin_unlock (lock); } -if (timer_pending (&req->rsk_timer) &&del_timer_sync (&req->rsk_timer)) -reqsk_put (req); +return found; } -bool inet_csk_reqsk_queue_drop (struct sock *sk,struct request_sock *req) +static bool __inet_csk_reqsk_queue_drop (struct sock *sk, +struct request_sock *req, +bool from_timer) {bool unlinked =reqsk_queue_unlink (req); +if (!from_timer &&timer_delete_sync (&req->rsk_timer)) +reqsk_put (req); +if (unlinked) {reqsk_queue_removed (&inet_csk (sk)->icsk_accept_queue, req);reqsk_put (req); } +return unlinked; } + +bool inet_csk_reqsk_queue_drop (struct sock *sk,struct request_sock *req) +{ +return __inet_csk_reqsk_queue_drop (sk, req, false); +}EXPORT_SYMBOL (inet_csk_reqsk_queue_drop);void inet_csk_reqsk_queue_drop_and_put (struct sock *sk,struct request_sock *req)
@@ -898,7 +908,7 @@ static void reqsk_timer_handler(struct timer_list *t)if (!inet_ehash_insert (req_to_sk (nreq),req_to_sk (oreq),NULL )) {/* delete timer */ -inet_csk_reqsk_queue_drop (sk_listener, nreq); +__inet_csk_reqsk_queue_drop (sk_listener, nreq, true); goto no_ownership; }
@@ -924,7 +934,8 @@ static void reqsk_timer_handler(struct timer_list *t) } drop: -inet_csk_reqsk_queue_drop_and_put (oreq->rsk_listener, oreq); +__inet_csk_reqsk_queue_drop (sk_listener, oreq, true); +reqsk_put (req); } static bool reqsk_queue_hash_req(struct request_sock *req,
net/ipv4/xfrm4_policy.c +18 -22
@@ -17,47 +17,43 @@#include <net/ip.h> #include <net/l3mdev.h> -static struct dst_entry *__xfrm4_dst_lookup (struct net *net,struct flowi4 *fl4, -int tos,int oif, -const xfrm_address_t *saddr, -const xfrm_address_t *daddr, -u32 mark) +static struct dst_entry *__xfrm4_dst_lookup (struct flowi4 *fl4, +const struct xfrm_dst_lookup_params *params) {struct rtable *rt;memset (fl4,0 ,sizeof (*fl4)); - fl4->daddr = daddr->a4; - fl4->flowi4_tos = tos; - fl4->flowi4_l3mdev =l3mdev_master_ifindex_by_index (net, oif); - fl4->flowi4_mark = mark; -if (saddr) - fl4->saddr = saddr->a4; - - rt =__ip_route_output_key (net, fl4); + fl4->daddr = params->daddr->a4; + fl4->flowi4_tos = params->tos; + fl4->flowi4_l3mdev =l3mdev_master_ifindex_by_index (params->net, + params->oif); + fl4->flowi4_mark = params->mark; +if (params->saddr) + fl4->saddr = params->saddr->a4; + fl4->flowi4_proto = params->ipproto; + fl4->uli = params->uli; + + rt =__ip_route_output_key (params->net, fl4);if (!IS_ERR (rt))return &rt->dst;return ERR_CAST (rt); } -static struct dst_entry *xfrm4_dst_lookup (struct net *net,int tos,int oif, -const xfrm_address_t *saddr, -const xfrm_address_t *daddr, -u32 mark) +static struct dst_entry *xfrm4_dst_lookup (const struct xfrm_dst_lookup_params *params) {struct flowi4 fl4; -return __xfrm4_dst_lookup (net, &fl4, tos, oif, saddr, daddr, mark); +return __xfrm4_dst_lookup (&fl4, params); } -static int xfrm4_get_saddr (struct net *net,int oif, -xfrm_address_t *saddr,xfrm_address_t *daddr, -u32 mark) +static int xfrm4_get_saddr (xfrm_address_t *saddr, +const struct xfrm_dst_lookup_params *params) {struct dst_entry *dst;struct flowi4 fl4; - dst =__xfrm4_dst_lookup (net, &fl4,0 , oif,NULL , daddr, mark); + dst =__xfrm4_dst_lookup (&fl4, params);if (IS_ERR (dst))return -EHOSTUNREACH ;
net/ipv6/xfrm6_policy.c +16 -15
@@ -23,23 +23,24 @@#include <net/ip6_route.h> #include <net/l3mdev.h> -static struct dst_entry *xfrm6_dst_lookup (struct net *net,int tos,int oif, -const xfrm_address_t *saddr, -const xfrm_address_t *daddr, -u32 mark) +static struct dst_entry *xfrm6_dst_lookup (const struct xfrm_dst_lookup_params *params) {struct flowi6 fl6;struct dst_entry *dst;int err;memset (&fl6,0 ,sizeof (fl6)); - fl6.flowi6_l3mdev =l3mdev_master_ifindex_by_index (net, oif); - fl6.flowi6_mark = mark; -memcpy (&fl6.daddr, daddr,sizeof (fl6.daddr)); -if (saddr) -memcpy (&fl6.saddr, saddr,sizeof (fl6.saddr)); + fl6.flowi6_l3mdev =l3mdev_master_ifindex_by_index (params->net, + params->oif); + fl6.flowi6_mark = params->mark; +memcpy (&fl6.daddr, params->daddr,sizeof (fl6.daddr)); +if (params->saddr) +memcpy (&fl6.saddr, params->saddr,sizeof (fl6.saddr)); - dst =ip6_route_output (net,NULL , &fl6); + fl6.flowi4_proto = params->ipproto; + fl6.uli = params->uli; + + dst =ip6_route_output (params->net,NULL , &fl6); err = dst->error;if (dst->error) {
@@ -50,15 +51,14 @@ static struct dst_entry *xfrm6_dst_lookup(struct net *net, int tos, int oif,return dst; } -static int xfrm6_get_saddr (struct net *net,int oif, -xfrm_address_t *saddr,xfrm_address_t *daddr, -u32 mark) +static int xfrm6_get_saddr (xfrm_address_t *saddr, +const struct xfrm_dst_lookup_params *params) {struct dst_entry *dst;struct net_device *dev;struct inet6_dev *idev; - dst =xfrm6_dst_lookup (net,0 , oif,NULL , daddr, mark); + dst =xfrm6_dst_lookup (params);if (IS_ERR (dst))return -EHOSTUNREACH ;
@@ -68,7 +68,8 @@ static int xfrm6_get_saddr(struct net *net, int oif,return -EHOSTUNREACH ; } dev = idev->dev; -ipv6_dev_get_saddr (dev_net (dev), dev, &daddr->in6,0 , &saddr->in6); +ipv6_dev_get_saddr (dev_net (dev), dev, ¶ms->daddr->in6,0 , + &saddr->in6);dst_release (dst);return 0 ; }
net/l2tp/l2tp_netlink.c +2 -2
@@ -115,7 +115,7 @@ static int l2tp_tunnel_notify(struct genl_family *family, NLM_F_ACK, tunnel, cmd);if (ret >=0 ) { - ret =genlmsg_multicast_allns (family, msg,0 ,0 ,GFP_ATOMIC ); + ret =genlmsg_multicast_allns (family, msg,0 ,0 );/* We don't care if no one is listening */ if (ret == -ESRCH ) ret =0 ;
@@ -143,7 +143,7 @@ static int l2tp_session_notify(struct genl_family *family, NLM_F_ACK, session, cmd);if (ret >=0 ) { - ret =genlmsg_multicast_allns (family, msg,0 ,0 ,GFP_ATOMIC ); + ret =genlmsg_multicast_allns (family, msg,0 ,0 );/* We don't care if no one is listening */ if (ret == -ESRCH ) ret =0 ;
net/netfilter/xt_NFLOG.c +1 -1
@@ -79,7 +79,7 @@ static struct xt_target nflog_tg_reg[] __read_mostly = { { .name = "NFLOG", .revision = 0, - .family = NFPROTO_IPV4, + .family = NFPROTO_IPV6, .checkentry = nflog_tg_check, .destroy = nflog_tg_destroy, .target = nflog_tg,
net/netfilter/xt_TRACE.c +1 -0
@@ -49,6 +49,7 @@ static struct xt_target trace_tg_reg[] __read_mostly = { .target = trace_tg, .checkentry = trace_tg_check, .destroy = trace_tg_destroy, + .me = THIS_MODULE, },#endif };
net/netfilter/xt_mark.c +1 -1
@@ -62,7 +62,7 @@ static struct xt_target mark_tg_reg[] __read_mostly = { { .name = "MARK", .revision = 2, - .family = NFPROTO_IPV4, + .family = NFPROTO_IPV6, .target = mark_tg, .targetsize = sizeof(struct xt_mark_tginfo2), .me = THIS_MODULE,
net/netlink/genetlink.c +14 -14
@@ -1089,15 +1089,11 @@ static int genl_ctrl_event(int event, const struct genl_family *family,if (IS_ERR (msg))return PTR_ERR (msg); -if (!family->netnsok) { +if (!family->netnsok)genlmsg_multicast_netns (&genl_ctrl, &init_net, msg,0 ,0 ,GFP_KERNEL ); - }else { -rcu_read_lock (); -genlmsg_multicast_allns (&genl_ctrl, msg,0 , -0 ,GFP_ATOMIC ); -rcu_read_unlock (); - } +else +genlmsg_multicast_allns (&genl_ctrl, msg,0 ,0 );return 0 ; }
@@ -1441,23 +1437,23 @@ static int __init genl_init(void)core_initcall (genl_init); -static int genlmsg_mcast (struct sk_buff *skb,u32 portid,unsigned long group, -gfp_t flags) +static int genlmsg_mcast (struct sk_buff *skb,u32 portid,unsigned long group) {struct sk_buff *tmp;struct net *net, *prev =NULL ;bool delivered = false;int err; +rcu_read_lock ();for_each_net_rcu (net) {if (prev) { - tmp =skb_clone (skb, flags); + tmp =skb_clone (skb,GFP_ATOMIC );if (!tmp) { err = -ENOMEM ; goto error; } err =nlmsg_multicast (prev->genl_sock, tmp, - portid, group, flags); + portid, group,GFP_ATOMIC );if (!err) delivered = true;else if (err != -ESRCH )
@@ -1466,27 +1462,31 @@ static int genlmsg_mcast(struct sk_buff *skb, u32 portid, unsigned long group, prev = net; } + err =nlmsg_multicast (prev->genl_sock, skb, portid, group,GFP_ATOMIC ); + +rcu_read_unlock (); - err =nlmsg_multicast (prev->genl_sock, skb, portid, group, flags);if (!err) delivered = true;else if (err != -ESRCH )return err;return delivered ?0 : -ESRCH ; error: +rcu_read_unlock (); +kfree_skb (skb);return err; }int genlmsg_multicast_allns (const struct genl_family *family,struct sk_buff *skb,u32 portid, -unsigned int group,gfp_t flags) +unsigned int group) {if (WARN_ON_ONCE (group >= family->n_mcgrps))return -EINVAL ; group = family->mcgrp_offset + group; -return genlmsg_mcast (skb, portid, group, flags); +return genlmsg_mcast (skb, portid, group); }EXPORT_SYMBOL (genlmsg_multicast_allns);
net/sched/sch_taprio.c +2 -1
@@ -1612,7 +1612,8 @@ static int taprio_change(struct Qdisc *sch, struct nlattr *opt,taprio_start_sched (sch, start, new_admin); -rcu_assign_pointer (q->admin_sched, new_admin); + admin =rcu_replace_pointer (q->admin_sched, new_admin, +lockdep_rtnl_is_held ());if (admin)call_rcu (&admin->rcu, taprio_free_sched_cb);
net/smc/smc_pnet.c +1 -1
@@ -743,7 +743,7 @@ static int smc_pnet_add_pnetid(struct net *net, u8 *pnetid)write_lock (&sn->pnetids_ndev.lock);list_for_each_entry (pi, &sn->pnetids_ndev.list, list) { -if (smc_pnet_match (pnetid, pe->pnetid)) { +if (smc_pnet_match (pnetid, pi->pnetid)) {refcount_inc (&pi->refcnt);kfree (pe); goto unlock;
net/wireless/nl80211.c +2 -6
@@ -16262,10 +16262,8 @@ void nl80211_common_reg_change_event(enum nl80211_commands cmd_id,genlmsg_end (msg, hdr); -rcu_read_lock ();genlmsg_multicast_allns (&nl80211_fam, msg,0 , -NL80211_MCGRP_REGULATORY ,GFP_ATOMIC ); -rcu_read_unlock (); +NL80211_MCGRP_REGULATORY );return ;
@@ -16779,10 +16777,8 @@ void nl80211_send_beacon_hint_event(struct wiphy *wiphy,genlmsg_end (msg, hdr); -rcu_read_lock ();genlmsg_multicast_allns (&nl80211_fam, msg,0 , -NL80211_MCGRP_REGULATORY ,GFP_ATOMIC ); -rcu_read_unlock (); +NL80211_MCGRP_REGULATORY );return ;
net/xfrm/xfrm_device.c +8 -3
@@ -241,6 +241,8 @@ int xfrm_dev_state_add(struct net *net, struct xfrm_state *x, dev =dev_get_by_index (net, xuo->ifindex);if (!dev) { +struct xfrm_dst_lookup_params params; +if (!(xuo->flags &XFRM_OFFLOAD_INBOUND )) { saddr = &x->props.saddr; daddr = &x->id.daddr;
@@ -249,9 +251,12 @@ int xfrm_dev_state_add(struct net *net, struct xfrm_state *x, daddr = &x->props.saddr; } - dst =__xfrm_dst_lookup (net,0 ,0 , saddr, daddr, - x->props.family, -xfrm_smark_get (0 , x)); +memset (¶ms,0 ,sizeof (params)); + params.net = net; + params.saddr = saddr; + params.daddr = daddr; + params.mark =xfrm_smark_get (0 , x); + dst =__xfrm_dst_lookup (x->props.family, ¶ms);if (IS_ERR (dst))return 0 ;
net/xfrm/xfrm_policy.c +38 -12
92 lines not on this page · raw message
net/xfrm/xfrm_user.c +8 -2
@@ -149,6 +149,7 @@ static int verify_newsa_info(struct xfrm_usersa_info *p, struct nlattr **attrs) {int err; +u16 family = p->sel.family; err = -EINVAL ;switch (p->family) {
@@ -167,7 +168,10 @@ static int verify_newsa_info(struct xfrm_usersa_info *p, goto out; } -switch (p->sel.family) { +if (!family && !(p->flags &XFRM_STATE_AF_UNSPEC )) + family = p->family; + +switch (family) {case AF_UNSPEC :break ;
@@ -887,7 +891,9 @@ static int copy_to_user_auth(struct xfrm_algo_auth *auth, struct sk_buff *skb)if (!nla)return -EMSGSIZE ; ap =nla_data (nla); -memcpy (ap, auth,sizeof (struct xfrm_algo_auth )); +strscpy_pad (ap->alg_name, auth->alg_name,sizeof (ap->alg_name)); + ap->alg_key_len = auth->alg_key_len; + ap->alg_trunc_len = auth->alg_trunc_len;if (redact_secret && auth->alg_key_len)memset (ap->alg_key,0 , (auth->alg_key_len +7 ) /8 );else
security/selinux/selinuxfs.c +14 -13
@@ -619,6 +619,13 @@ static ssize_t sel_write_load(struct file *file, const char __user *buf,ssize_t length;void *data =NULL ; +/* no partial writes */ +if (*ppos) +return -EINVAL ; +/* no empty policies */ +if (!count) +return -EINVAL ; +mutex_lock (&fsi->state->policy_mutex); length = avc_has_perm(&selinux_state,
@@ -627,26 +634,21 @@ static ssize_t sel_write_load(struct file *file, const char __user *buf,if (length) goto out; -/* No partial writes. */ - length = -EINVAL ; -if (*ppos !=0 ) - goto out; - - length = -ENOMEM ; data =vmalloc (count); -if (!data) +if (!data) { + length = -ENOMEM ; goto out; - - length = -EFAULT ; -if (copy_from_user (data, buf, count) !=0 ) + } +if (copy_from_user (data, buf, count) !=0 ) { + length = -EFAULT ; goto out; + } length =security_load_policy (fsi->state, data, count, &load_state);if (length) {pr_warn_ratelimited ("SELinux: failed to load policy\n" ); goto out; } - length =sel_make_policy_nodes (fsi, load_state.policy);if (length) {pr_warn_ratelimited ("SELinux: failed to initialize selinuxfs\n" );
@@ -655,13 +657,12 @@ static ssize_t sel_write_load(struct file *file, const char __user *buf, }selinux_policy_commit (fsi->state, &load_state); - length = count; -audit_log (audit_context (),GFP_KERNEL ,AUDIT_MAC_POLICY_LOAD ,"auid=%u ses=%u lsm=selinux res=1" ,from_kuid (&init_user_ns,audit_get_loginuid (current)),audit_get_sessionid (current)); + out:mutex_unlock (&fsi->state->policy_mutex);vfree (data);
sound/firewire/amdtp-stream.c +3 -0
@@ -172,6 +172,9 @@ static int apply_constraint_to_size(struct snd_pcm_hw_params *params, step =max (step, amdtp_syt_intervals[i]); } +if (step ==0 ) +return -EINVAL ; + t.min =roundup (s->min, step); t.max =rounddown (s->max, step); t.integer =1 ;
sound/pci/hda/patch_cs8409.c +3 -2
@@ -1237,8 +1237,9 @@ void dolphin_fixups(struct hda_codec *codec, const struct hda_fixup *fix, int ac kctrl =snd_hda_gen_add_kctl (&spec->gen,"Line Out Playback Volume" , &cs42l42_dac_volume_mixer);/* Update Line Out kcontrol template */ - kctrl->private_value =HDA_COMPOSE_AMP_VAL_OFS (DOLPHIN_HP_PIN_NID ,3 ,CS8409_CODEC1 , -HDA_OUTPUT ,CS42L42_VOL_DAC ) |HDA_AMP_VAL_MIN_MUTE ; +if (kctrl) + kctrl->private_value =HDA_COMPOSE_AMP_VAL_OFS (DOLPHIN_HP_PIN_NID ,3 ,CS8409_CODEC1 , +HDA_OUTPUT ,CS42L42_VOL_DAC ) |HDA_AMP_VAL_MIN_MUTE ;cs8409_enable_ur (codec,0 );snd_hda_codec_set_name (codec,"CS8409/CS42L42" );break ;
sound/pci/hda/patch_realtek.c +27 -21
87 lines not on this page · raw message
sound/soc/codecs/lpass-rx-macro.c +1 -1
@@ -907,7 +907,7 @@ static const struct reg_default rx_defaults[] = { { CDC_RX_BCL_VBAT_PK_EST2, 0x01 }, { CDC_RX_BCL_VBAT_PK_EST3, 0x40 }, { CDC_RX_BCL_VBAT_RF_PROC1, 0x2A }, - { CDC_RX_BCL_VBAT_RF_PROC1, 0x00 }, + { CDC_RX_BCL_VBAT_RF_PROC2, 0x00 }, { CDC_RX_BCL_VBAT_TAC1, 0x00 }, { CDC_RX_BCL_VBAT_TAC2, 0x18 }, { CDC_RX_BCL_VBAT_TAC3, 0x18 },
sound/soc/fsl/fsl_sai.c +4 -1
@@ -498,6 +498,9 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream, val_cr4 |=FSL_SAI_CR4_FRSZ (slots); +/* Set to avoid channel swap */ + val_cr4 |=FSL_SAI_CR4_FCONT ; +/* Set to output mode to avoid tri-stated data pins */ if (tx) val_cr4 |=FSL_SAI_CR4_CHMOD ;
@@ -523,7 +526,7 @@ static int fsl_sai_hw_params(struct snd_pcm_substream *substream, FSL_SAI_CR3_TRCE((1 << pins) - 1));regmap_update_bits (sai->regmap,FSL_SAI_xCR4 (tx, ofs),FSL_SAI_CR4_SYWD_MASK |FSL_SAI_CR4_FRSZ_MASK | -FSL_SAI_CR4_CHMOD_MASK , +FSL_SAI_CR4_CHMOD_MASK |FSL_SAI_CR4_FCONT_MASK , val_cr4); regmap_update_bits(sai->regmap, FSL_SAI_xCR5(tx, ofs), FSL_SAI_CR5_WNW_MASK | FSL_SAI_CR5_W0W_MASK |
sound/soc/fsl/fsl_sai.h +1 -0
@@ -132,6 +132,7 @@/* SAI Transmit and Receive Configuration 4 Register */ +#define FSL_SAI_CR4_FCONT_MASK BIT(28)#define FSL_SAI_CR4_FCONT BIT(28)#define FSL_SAI_CR4_FCOMB_SHIFT BIT(26)#define FSL_SAI_CR4_FCOMB_SOFT BIT(27)
sound/soc/qcom/lpass-cpu.c +2 -0
@@ -975,6 +975,8 @@ int asoc_qcom_lpass_cpu_platform_probe(struct platform_device *pdev)/* Allocation for i2sctl regmap fields */ drvdata->i2sctl =devm_kzalloc (&pdev->dev,sizeof (struct lpaif_i2sctl ),GFP_KERNEL ); +if (!drvdata->i2sctl) +return -ENOMEM ;/* Initialize bitfields for dai I2SCTL register */ ret = lpass_cpu_init_i2sctl_bitfields(dev, drvdata->i2sctl,
sound/soc/qcom/sm8250.c +1 -0
@@ -211,6 +211,7 @@ static int sm8250_platform_probe(struct platform_device *pdev)static const struct of_device_id snd_sm8250_dt_match[] = { {.compatible ="qcom,sm8250-sndcard" }, + {.compatible ="qcom,qrb4210-rb2-sndcard" }, {.compatible ="qcom,qrb5165-rb5-sndcard" }, {} };