Linux 6.1.169
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.169 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.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/arm64/boot/dts/hisilicon/hi3798cv200-poplar.dts | 2 arch/arm64/boot/dts/hisilicon/hi3798cv200.dtsi | 1 arch/mips/include/asm/cpu-features.h | 1 arch/mips/include/asm/cpu-info.h | 2 arch/mips/include/asm/mipsregs.h | 2 arch/mips/kernel/cpu-probe.c | 13 arch/mips/kernel/cpu-r3k-probe.c | 2 arch/mips/mm/tlb-r4k.c | 285 +++++++++++++---- arch/x86/include/asm/msr-index.h | 3 arch/x86/kernel/cpu/amd.c | 3 drivers/acpi/acpica/acevents.h | 6 drivers/acpi/acpica/evregion.c | 12 drivers/acpi/acpica/evxfregn.c | 64 --- drivers/acpi/ec.c | 14 drivers/acpi/internal.h | 1 drivers/acpi/scan.c | 2 drivers/edac/edac_mc.c | 6 drivers/gpu/drm/i915/gt/intel_engine_heartbeat.c | 26 + drivers/gpu/drm/scheduler/sched_entity.c | 1 drivers/input/misc/uinput.c | 35 +- drivers/media/usb/uvc/uvc_driver.c | 88 +++-- drivers/media/usb/uvc/uvcvideo.h | 2 drivers/mmc/host/vub300.c | 2 drivers/net/ethernet/altera/altera_tse_main.c | 1 drivers/net/ethernet/mellanox/mlx5/core/main.c | 1 drivers/net/ethernet/qualcomm/qca_uart.c | 2 drivers/net/ethernet/stmicro/stmmac/chain_mode.c | 11 drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c | 2 drivers/net/wireless/ralink/rt2x00/rt2x00usb.c | 2 drivers/nfc/pn533/uart.c | 11 drivers/pci/pci-driver.c | 8 drivers/pci/pci.c | 10 drivers/pci/pci.h | 1 drivers/usb/gadget/function/f_hid.c | 11 drivers/usb/gadget/function/u_ether.c | 8 include/acpi/acpixf.h | 5 include/net/netfilter/nf_conntrack_timeout.h | 1 lib/crypto/chacha.c | 4 net/batman-adv/bridge_loop_avoidance.c | 27 + net/batman-adv/translation-table.c | 9 net/ipv6/seg6_iptunnel.c | 41 +- net/mptcp/pm_netlink.c | 24 - net/mptcp/protocol.c | 2 net/mptcp/protocol.h | 1 net/mptcp/subflow.c | 15 net/netfilter/nft_ct.c | 2 net/netfilter/nft_set_pipapo.c | 20 - net/rfkill/core.c | 84 +++-- net/rxrpc/af_rxrpc.c | 6 net/rxrpc/key.c | 2 net/rxrpc/server_key.c | 3 net/tipc/group.c | 6 net/tls/tls_sw.c | 10 net/xfrm/xfrm_user.c | 3 security/apparmor/apparmorfs.c | 228 ++++++++----- security/apparmor/include/label.h | 16 security/apparmor/include/lib.h | 12 security/apparmor/include/match.h | 1 security/apparmor/include/policy.h | 13 security/apparmor/include/policy_ns.h | 2 security/apparmor/include/policy_unpack.h | 75 ++-- security/apparmor/label.c | 12 security/apparmor/match.c | 58 ++- security/apparmor/policy.c | 82 ++++ security/apparmor/policy_ns.c | 2 security/apparmor/policy_unpack.c | 58 ++- 67 files changed, 982 insertions(+), 485 deletions(-)
Andrea Mayer (1):
seg6: separate dst_cache for input and output paths in seg6 lwtunnel
Bo Liu (1):
rfkill: Use sysfs_emit() to instead of sprintf()
Borislav Petkov (AMD) (2):
EDAC/mc: Fix error path ordering in edac_mc_alloc() x86/CPU: Fix FPDSS on Zen1
David Carlier (1):
net: altera-tse: fix skb leak on DMA mapping error in tse_start_xmit()
David Howells (1):
rxrpc: Fix key/keyring checks in setsockopt(RXRPC_SECURITY_KEY/KEYRING)
Dmitry Torokhov (1):
Input: uinput - take event lock when submitting FF request "event"
Eric Biggers (1):
lib/crypto: chacha: Zeroize permuted_state before it leaves scope
Florian Westphal (1):
netfilter: nft_set_pipapo: do not rely on ZERO_SIZE_PTR
Greg Kroah-Hartman (3):
xfrm_user: fix info leak in build_report()
net: rfkill: prevent unlimited numbers of rfkill events from being created Linux 6.1.169
Haoze Xie (1):
batman-adv: hold claim backbone gateways by reference
Jiayuan Chen (1):
mptcp: fix slab-use-after-free in __inet_lookup_established
Johan Hovold (2):
wifi: rt2x00usb: fix devres lifetime
mmc: vub300: fix NULL-deref on disconnect
Johannes Berg (2):
rfkill: sync before userspace visibility/changes
net: rfkill: reduce data->mtx scope in rfkill_fop_open
John Johansen (6):
apparmor: fix: limit the number of levels of policy namespaces
apparmor: Fix double free of ns_name in aa_replace_profiles()
apparmor: fix unprivileged local user can do privileged policy management
apparmor: fix differential encoding verification
apparmor: fix race on rawdata dereference
apparmor: fix race between freeing data and fs accessing it
Kuen-Han Tsai (1):
usb: gadget: u_ether: Fix race between gether_disconnect and eth_stop
Lin.Cao (1):
drm/scheduler: signal scheduled fence when kill job
Luxiao Xu (1):
rxrpc: fix reference count leak in rxrpc_server_keyring()
Maciej W. Rozycki (3):
MIPS: Always record SEGBITS in cpu_data.vmbits
MIPS: mm: Suppress TLB uniquification on EHINV hardware
MIPS: mm: Rewrite TLB uniquification for the hidden bit feature
Manivannan Sadhasivam (1):
Revert "PCI: Enable ACS after configuring IOMMU for OF platforms"
Massimiliano Pellizzer (5):
apparmor: validate DFA start states are in bounds in unpack_pdb
apparmor: fix memory leak in verify_header
apparmor: replace recursive profile removal with iterative approach
apparmor: fix side-effect bug in match_char() macro usage
apparmor: fix missing bounds check on DEFAULT table in verify_dfa()
Matthieu Baerts (NGI0) (1):
Revert "mptcp: add needs_id for netlink appending addr"
Michael Guralnik (1):
net/mlx5: Update the list of the PCI supported devices
Michael Zimmermann (1):
usb: gadget: f_hid: move list and spinlock inits from bind to alloc
Mikhail Gavrilov (1):
Input: uinput - fix circular locking dependency with ff-core
Muhammad Alifa Ramdhan (1):
net/tls: fix use-after-free in -EBUSY error path of tls_do_encryption
Oleh Konko (1):
tipc: fix bc_ackers underflow on duplicate GRP_ACK_MSG
Pengpeng Hou (2):
nfc: pn533: allocate rx skb before consuming bytes
net: qualcomm: qca_uart: report the consumed byte on RX skb allocation failure
Rafael J. Wysocki (3):
Revert "ACPI: EC: Evaluate orphan _REG under EC device"
ACPICA: Add a depth argument to acpi_execute_reg_methods()
ACPI: EC: Evaluate _REG outside the EC scope more carefully
Ricardo Ribalda (1):
media: uvcvideo: Use heuristic to find stream entity
Ruide Cao (1):
batman-adv: reject oversized global TT response buffers
Sebastian Brzezinka (1):
drm/i915/gt: fix refcount underflow in intel_engine_park_heartbeat
Shawn Guo (2):
arm64: dts: hisilicon: poplar: Correct PCIe reset GPIO polarity
arm64: dts: hisilicon: hi3798cv200: Add missing dma-ranges
Thadeu Lima de Souza Cascardo (1):
media: uvcvideo: Mark invalid entities with id UVC_INVALID_ENTITY_ID
Thomas Fourier (1):
wifi: brcmsmac: Fix dma_free_coherent() size
Tuan Do (1):
netfilter: nft_ct: fix use-after-free in timeout object destroy
Tyllis Xu (1):
net: stmmac: fix integer underflow in chain mode
Yasuaki Torimaru (1):
xfrm: clear trailing padding in build_polexpire()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 168 +SUBLEVEL = 169 EXTRAVERSION = NAME = Curry Ramen
arch/arm64/boot/dts/hisilicon/hi3798cv200-poplar.dts +1 -1
@@ -179,7 +179,7 @@ &ohci { }; &pcie { - reset-gpios = <&gpio4 4 GPIO_ACTIVE_HIGH>; + reset-gpios = <&gpio4 4 GPIO_ACTIVE_LOW>; vpcie-supply = <®_pcie>; status = "okay"; };
arch/arm64/boot/dts/hisilicon/hi3798cv200.dtsi +1 -0
@@ -81,6 +81,7 @@ soc: soc@f0000000 { #address-cells = <1>; #size-cells = <1>; ranges = <0x0 0x0 0xf0000000 0x10000000>; + dma-ranges = <0x0 0x0 0x0 0x40000000>; crg: clock-reset-controller@8a22000 { compatible = "hisilicon,hi3798cv200-crg", "syscon", "simple-mfd";
arch/mips/include/asm/cpu-features.h +0 -1
@@ -484,7 +484,6 @@# endif # ifndef cpu_vmbits# define cpu_vmbits cpu_data[0].vmbits -# define __NEED_VMBITS_PROBE# endif #endif
arch/mips/include/asm/cpu-info.h +0 -2
@@ -80,9 +80,7 @@ struct cpuinfo_mips {int srsets;/* Shadow register sets */ int package;/* physical package number */ unsigned int globalnumber; -#ifdef CONFIG_64BIT int vmbits;/* Virtual memory size in bits */ -#endif void *data;/* Additional data */ unsigned int watch_reg_count;/* Number that exist */ unsigned int watch_reg_use_cnt;/* Usable by ptrace */
arch/mips/include/asm/mipsregs.h +2 -0
@@ -1714,6 +1714,8 @@ do { \#define read_c0_entryhi () __read_ulong_c0_register($10, 0)#define write_c0_entryhi (val) __write_ulong_c0_register($10, 0, val) +#define read_c0_entryhi_64 () __read_64bit_c0_register($10, 0) +#define write_c0_entryhi_64 (val) __write_64bit_c0_register($10, 0, val)#define read_c0_guestctl1 () __read_32bit_c0_register($10, 4)#define write_c0_guestctl1 (val) __write_32bit_c0_register($10, 4, val)
arch/mips/kernel/cpu-probe.c +8 -5
@@ -208,11 +208,14 @@ static inline void set_elf_base_platform(const char *plat)static inline void cpu_probe_vmbits (struct cpuinfo_mips *c) { -#ifdef __NEED_VMBITS_PROBE -write_c0_entryhi (0x3fffffffffffe000ULL ); -back_to_back_c0_hazard (); - c->vmbits =fls64 (read_c0_entryhi () &0x3fffffffffffe000ULL ); -#endif +int vmbits =31 ; + +if (cpu_has_64bits) { +write_c0_entryhi_64 (0x3fffffffffffe000ULL ); +back_to_back_c0_hazard (); + vmbits =fls64 (read_c0_entryhi_64 () &0x3fffffffffffe000ULL ); + } + c->vmbits = vmbits; }static void set_isa (struct cpuinfo_mips *c,unsigned int isa)
arch/mips/kernel/cpu-r3k-probe.c +2 -0
@@ -138,6 +138,8 @@ void cpu_probe(void)else cpu_set_nofpu_opts (c); + c->vmbits =31 ; +reserve_exception_space (0 ,0x400 ); }
arch/mips/mm/tlb-r4k.c +230 -55
336 lines not on this page · raw message
arch/x86/include/asm/msr-index.h +3 -0
@@ -580,6 +580,9 @@#define MSR_AMD64_DC_CFG 0xc0011022#define MSR_AMD64_TW_CFG 0xc0011023 +#define MSR_AMD64_FP_CFG 0xc0011028 +#define MSR_AMD64_FP_CFG_ZEN1_DENORM_FIX_BIT 9 +#define MSR_AMD64_DE_CFG 0xc0011029#define MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT 1#define MSR_AMD64_DE_CFG_LFENCE_SERIALIZE BIT_ULL(MSR_AMD64_DE_CFG_LFENCE_SERIALIZE_BIT)
arch/x86/kernel/cpu/amd.c +3 -0
@@ -1051,6 +1051,9 @@ static void init_amd_zn(struct cpuinfo_x86 *c)if (c->x86 ==0x19 && !cpu_has (c,X86_FEATURE_BTC_NO ))set_cpu_cap (c,X86_FEATURE_BTC_NO ); } + +pr_notice_once ("AMD Zen1 FPDSS bug detected, enabling mitigation.\n" ); +msr_set_bit (MSR_AMD64_FP_CFG ,MSR_AMD64_FP_CFG_ZEN1_DENORM_FIX_BIT ); }static bool cpu_has_zenbleed_microcode (void )
drivers/acpi/acpica/acevents.h +1 -5
@@ -188,13 +188,9 @@ acpi_ev_detach_region(union acpi_operand_object *region_obj, u8 acpi_ns_is_locked);void -acpi_ev_execute_reg_methods (struct acpi_namespace_node *node, +acpi_ev_execute_reg_methods (struct acpi_namespace_node *node,u32 max_depth,acpi_adr_space_type space_id,u32 function); -void -acpi_ev_execute_orphan_reg_method (struct acpi_namespace_node *node, -acpi_adr_space_type space_id); -acpi_status acpi_ev_execute_reg_method (union acpi_operand_object *region_obj,u32 function);
drivers/acpi/acpica/evregion.c +9 -3
@@ -20,6 +20,10 @@ extern u8 acpi_gbl_default_address_spaces[];/* Local prototypes */ +static void +acpi_ev_execute_orphan_reg_method (struct acpi_namespace_node *device_node, +acpi_adr_space_type space_id); +static acpi_status acpi_ev_reg_run (acpi_handle obj_handle,u32 level,void *context,void **return_value);
@@ -61,6 +65,7 @@ acpi_status acpi_ev_initialize_op_regions(void) acpi_gbl_default_address_spaces [i])) {acpi_ev_execute_reg_methods (acpi_gbl_root_node, +ACPI_UINT32_MAX , acpi_gbl_default_address_spaces [i],ACPI_REG_CONNECT ); }
@@ -661,6 +666,7 @@ acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function)* FUNCTION: acpi_ev_execute_reg_methods * * PARAMETERS: node - Namespace node for the device +* max_depth - Depth to which search for _REG * space_id - The address space ID * function - Passed to _REG: On (1) or Off (0) *
@@ -672,7 +678,7 @@ acpi_ev_execute_reg_method(union acpi_operand_object *region_obj, u32 function)******************************************************************************/ void -acpi_ev_execute_reg_methods (struct acpi_namespace_node *node, +acpi_ev_execute_reg_methods (struct acpi_namespace_node *node,u32 max_depth,acpi_adr_space_type space_id,u32 function) {struct acpi_reg_walk_info info;
@@ -706,7 +712,7 @@ acpi_ev_execute_reg_methods(struct acpi_namespace_node *node,* regions and _REG methods. (i.e. handlers must be installed for all * regions of this Space ID before we can run any _REG methods) */ - (void )acpi_ns_walk_namespace (ACPI_TYPE_ANY , node,ACPI_UINT32_MAX , + (void )acpi_ns_walk_namespace (ACPI_TYPE_ANY , node, max_depth,ACPI_NS_WALK_UNLOCK , acpi_ev_reg_run,NULL , &info,NULL );
@@ -807,7 +813,7 @@ acpi_ev_reg_run(acpi_handle obj_handle,* ******************************************************************************/ -void +static void acpi_ev_execute_orphan_reg_method (struct acpi_namespace_node *device_node,acpi_adr_space_type space_id) {
drivers/acpi/acpica/evxfregn.c +7 -57
91 lines not on this page · raw message
drivers/acpi/ec.c +9 -5
@@ -1512,12 +1512,13 @@ static bool install_gpio_irq_event_handler(struct acpi_ec *ec)static int ec_install_handlers (struct acpi_ec *ec,struct acpi_device *device,bool call_reg) { -acpi_handle scope_handle = ec == first_ec ?ACPI_ROOT_OBJECT : ec->handle;acpi_status status;acpi_ec_start (ec, false);if (!test_bit (EC_FLAGS_EC_HANDLER_INSTALLED , &ec->flags)) { +acpi_handle scope_handle = ec == first_ec ?ACPI_ROOT_OBJECT : ec->handle; +acpi_ec_enter_noirq (ec); status = acpi_install_address_space_handler_no_reg(scope_handle, ACPI_ADR_SPACE_EC,
@@ -1531,10 +1532,7 @@ static int ec_install_handlers(struct acpi_ec *ec, struct acpi_device *device, }if (call_reg && !test_bit (EC_FLAGS_EC_REG_CALLED , &ec->flags)) { -acpi_execute_reg_methods (scope_handle,ACPI_ADR_SPACE_EC ); -if (scope_handle != ec->handle) -acpi_execute_orphan_reg_method (ec->handle,ACPI_ADR_SPACE_EC ); - +acpi_execute_reg_methods (ec->handle,ACPI_UINT32_MAX ,ACPI_ADR_SPACE_EC );set_bit (EC_FLAGS_EC_REG_CALLED , &ec->flags); }
@@ -1752,6 +1750,12 @@ static int acpi_ec_remove(struct acpi_device *device)return 0 ; } +void acpi_ec_register_opregions (struct acpi_device *adev) +{ +if (first_ec && first_ec->handle != adev->handle) +acpi_execute_reg_methods (adev->handle,1 ,ACPI_ADR_SPACE_EC ); +} +static acpi_status ec_parse_io_ports (struct acpi_resource *resource,void *context) {
drivers/acpi/internal.h +1 -0
@@ -210,6 +210,7 @@ int acpi_ec_add_query_handler(struct acpi_ec *ec, u8 query_bit, acpi_handle handle, acpi_ec_query_func func, void *data);void acpi_ec_remove_query_handler (struct acpi_ec *ec,u8 query_bit); +void acpi_ec_register_opregions (struct acpi_device *adev);#ifdef CONFIG_PM_SLEEP void acpi_ec_flush_work (void );
drivers/acpi/scan.c +2 -0
@@ -2198,6 +2198,8 @@ static int acpi_bus_attach(struct acpi_device *device, void *first_pass)if (device->handler) goto ok; +acpi_ec_register_opregions (device); +if (!device->flags.initialized) { device->flags.power_manageable = device->power.states[ACPI_STATE_D0 ].flags.valid;
drivers/edac/edac_mc.c +3 -3
@@ -369,13 +369,13 @@ struct mem_ctl_info *edac_mc_alloc(unsigned int mc_num,if (!mci->layers) goto error; + mci->dev.release = mci_release; +device_initialize (&mci->dev); + mci->pvt_info =kzalloc (sz_pvt,GFP_KERNEL );if (!mci->pvt_info) goto error; - mci->dev.release = mci_release; -device_initialize (&mci->dev); -/* setup index and various internal pointers */ mci->mc_idx = mc_num; mci->tot_dimms = tot_dimms;
drivers/gpu/drm/i915/gt/intel_engine_heartbeat.c +18 -8
@@ -116,10 +116,12 @@ static void heartbeat(struct work_struct *wrk)/* Just in case everything has gone horribly wrong, give it a kick */ intel_engine_flush_submission (engine); - rq = engine->heartbeat.systole; -if (rq &&i915_request_completed (rq)) { -i915_request_put (rq); - engine->heartbeat.systole =NULL ; + rq =xchg (&engine->heartbeat.systole,NULL ); +if (rq) { +if (i915_request_completed (rq)) +i915_request_put (rq); +else + engine->heartbeat.systole = rq; }if (!intel_engine_pm_get_if_awake (engine))
@@ -200,8 +202,11 @@ static void heartbeat(struct work_struct *wrk) unlock:mutex_unlock (&ce->timeline->mutex); out: -if (!engine->i915->params.enable_hangcheck || !next_heartbeat (engine)) -i915_request_put (fetch_and_zero (&engine->heartbeat.systole)); +if (!engine->i915->params.enable_hangcheck || !next_heartbeat (engine)) { + rq =xchg (&engine->heartbeat.systole,NULL ); +if (rq) +i915_request_put (rq); + }intel_engine_pm_put (engine); }
@@ -215,8 +220,13 @@ void intel_engine_unpark_heartbeat(struct intel_engine_cs *engine)void intel_engine_park_heartbeat (struct intel_engine_cs *engine) { -if (cancel_delayed_work (&engine->heartbeat.work)) -i915_request_put (fetch_and_zero (&engine->heartbeat.systole)); +if (cancel_delayed_work (&engine->heartbeat.work)) { +struct i915_request *rq; + + rq =xchg (&engine->heartbeat.systole,NULL ); +if (rq) +i915_request_put (rq); + } }void intel_gt_unpark_heartbeats (struct intel_gt *gt)
drivers/gpu/drm/scheduler/sched_entity.c +1 -0
@@ -196,6 +196,7 @@ static void drm_sched_entity_kill_jobs_work(struct work_struct *wrk) {struct drm_sched_job *job =container_of (wrk,typeof (*job), work); +drm_sched_fence_scheduled (job->s_fence);drm_sched_fence_finished (job->s_fence);WARN_ON (job->s_fence->parent); job->sched->ops->free_job (job);
drivers/input/misc/uinput.c +28 -7
@@ -25,8 +25,10 @@#include <linux/module.h> #include <linux/init.h> #include <linux/fs.h> +#include <linux/lockdep.h> #include <linux/miscdevice.h> #include <linux/overflow.h> +#include <linux/spinlock.h> #include <linux/input/mt.h> #include "../input-compat.h"
@@ -56,6 +58,7 @@ struct uinput_device {struct input_dev *dev;struct mutex mutex;enum uinput_state state; +spinlock_t state_lock;wait_queue_head_t waitq;unsigned char ready;unsigned char head;
@@ -74,6 +77,8 @@ static int uinput_dev_event(struct input_dev *dev,struct uinput_device *udev =input_get_drvdata (dev);struct timespec64 ts; +lockdep_assert_held (&dev->event_lock); +ktime_get_ts64 (&ts); udev->buff[udev->head] = (struct input_event ) {
@@ -145,27 +150,26 @@ static void uinput_request_release_slot(struct uinput_device *udev,static int uinput_request_send (struct uinput_device *udev,struct uinput_request *request) { -int retval; +unsigned long flags; +int retval =0 ; - retval =mutex_lock_interruptible (&udev->mutex); -if (retval) -return retval; +spin_lock (&udev->state_lock);if (udev->state !=UIST_CREATED ) { retval = -ENODEV ; goto out; } -init_completion (&request->done); -/* * Tell our userspace application about this new request * by queueing an input event. */ +spin_lock_irqsave (&udev->dev->event_lock, flags);uinput_dev_event (udev->dev,EV_UINPUT , request->code, request->id); +spin_unlock_irqrestore (&udev->dev->event_lock, flags); out: -mutex_unlock (&udev->mutex); +spin_unlock (&udev->state_lock);return retval; }
@@ -174,6 +178,13 @@ static int uinput_request_submit(struct uinput_device *udev, {int retval; +/* +* Initialize completion before allocating the request slot. +* Once the slot is allocated, uinput_flush_requests() may +* complete it at any time, so it must be initialized first. +*/ +init_completion (&request->done); + retval =uinput_request_reserve_slot (udev, request);if (retval)return retval;
@@ -288,7 +299,14 @@ static void uinput_destroy_device(struct uinput_device *udev)struct input_dev *dev = udev->dev;enum uinput_state old_state = udev->state; +/* +* Update state under state_lock so that concurrent +* uinput_request_send() sees the state change before we +* flush pending requests and tear down the device. +*/ +spin_lock (&udev->state_lock); udev->state =UIST_NEW_DEVICE ; +spin_unlock (&udev->state_lock);if (dev) { name = dev->name;
@@ -365,7 +383,9 @@ static int uinput_create_device(struct uinput_device *udev)if (error) goto fail2; +spin_lock (&udev->state_lock); udev->state =UIST_CREATED ; +spin_unlock (&udev->state_lock);return 0 ;
@@ -383,6 +403,7 @@ static int uinput_open(struct inode *inode, struct file *file)return -ENOMEM ;mutex_init (&newdev->mutex); +spin_lock_init (&newdev->state_lock);spin_lock_init (&newdev->requests_lock);init_waitqueue_head (&newdev->requests_waitq);init_waitqueue_head (&newdev->waitq);
drivers/media/usb/uvc/uvc_driver.c +60 -28
166 lines not on this page · raw message
drivers/media/usb/uvc/uvcvideo.h +2 -0
@@ -41,6 +41,8 @@#define UVC_EXT_GPIO_UNIT 0x7ffe#define UVC_EXT_GPIO_UNIT_ID 0x100 +#define UVC_INVALID_ENTITY_ID 0xffff +/* ------------------------------------------------------------------------ * Driver specific constants. */
drivers/mmc/host/vub300.c +1 -1
@@ -2371,8 +2371,8 @@ static void vub300_disconnect(struct usb_interface *interface)usb_set_intfdata (interface,NULL );/* prevent more I/O from starting */ vub300->interface =NULL ; -kref_put (&vub300->kref, vub300_delete);mmc_remove_host (mmc); +kref_put (&vub300->kref, vub300_delete);pr_info ("USB vub300 remote SDIO host controller[%d]" " now disconnected" , ifnum);return ;
drivers/net/ethernet/altera/altera_tse_main.c +1 -0
@@ -572,6 +572,7 @@ static netdev_tx_t tse_start_xmit(struct sk_buff *skb, struct net_device *dev) DMA_TO_DEVICE);if (dma_mapping_error (priv->device, dma_addr)) {netdev_err (priv->dev,"%s: DMA mapping error\n" , __func__); +dev_kfree_skb_any (skb); ret =NETDEV_TX_OK ; goto out; }
drivers/net/ethernet/mellanox/mlx5/core/main.c +1 -0
@@ -2043,6 +2043,7 @@ static const struct pci_device_id mlx5_core_pci_table[] = { { PCI_VDEVICE(MELLANOX, 0x1023) }, /* ConnectX-8 */ { PCI_VDEVICE(MELLANOX, 0x1025) }, /* ConnectX-9 */ { PCI_VDEVICE(MELLANOX, 0x1027) }, /* ConnectX-10 */ + { PCI_VDEVICE(MELLANOX, 0x2101) }, /* ConnectX-10 NVLink-C2C */ { PCI_VDEVICE(MELLANOX, 0xa2d2) }, /* BlueField integrated ConnectX-5 network controller */ { PCI_VDEVICE(MELLANOX, 0xa2d3), MLX5_PCI_DEV_IS_VF}, /* BlueField integrated ConnectX-5 network controller VF */ { PCI_VDEVICE(MELLANOX, 0xa2d6) }, /* BlueField-2 integrated ConnectX-6 Dx network controller */
drivers/net/ethernet/qualcomm/qca_uart.c +1 -1
@@ -115,7 +115,7 @@ qca_tty_receive(struct serdev_device *serdev, const unsigned char *data,if (!qca->rx_skb) {netdev_dbg (netdev,"recv: out of RX resources\n" ); n_stats->rx_errors++; -return i; +return i +1 ; } } }
drivers/net/ethernet/stmicro/stmmac/chain_mode.c +6 -5
@@ -20,7 +20,7 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,unsigned int nopaged_len =skb_headlen (skb);struct stmmac_priv *priv = tx_q->priv_data;unsigned int entry = tx_q->cur_tx; -unsigned int bmax, des2; +unsigned int bmax, buf_len, des2;unsigned int i =1 , len;struct dma_desc *desc;
@@ -31,17 +31,18 @@ static int jumbo_frm(struct stmmac_tx_queue *tx_q, struct sk_buff *skb,else bmax = BUF_SIZE_2KiB; - len = nopaged_len - bmax; + buf_len = min_t(unsigned int, nopaged_len, bmax); + len = nopaged_len - buf_len; des2 =dma_map_single (priv->device, skb->data, - bmax,DMA_TO_DEVICE ); + buf_len,DMA_TO_DEVICE ); desc->des2 =cpu_to_le32 (des2);if (dma_mapping_error (priv->device, des2))return -1 ; tx_q->tx_skbuff_dma[entry].buf = des2; - tx_q->tx_skbuff_dma[entry].len = bmax; + tx_q->tx_skbuff_dma[entry].len = buf_len;/* do not close the descriptor and do not set own bit */ -stmmac_prepare_tx_desc (priv, desc,1 , bmax, csum,STMMAC_CHAIN_MODE , +stmmac_prepare_tx_desc (priv, desc,1 , buf_len, csum,STMMAC_CHAIN_MODE ,0 , false, skb->len);while (len !=0 ) {
drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c +1 -1
@@ -483,7 +483,7 @@ static void *dma_ringalloc(struct dma_info *di, u32 boundary, uint size,if (((desc_strtaddr + size -1 ) & boundary) != (desc_strtaddr & boundary)) { *alignbits =dma_align_sizetobits (size); -dma_free_coherent (di->dmadev, size, va, *descpa); +dma_free_coherent (di->dmadev, *alloced, va, *descpa); va =dma_alloc_consistent (di, size, *alignbits, alloced, descpa); }
drivers/net/wireless/ralink/rt2x00/rt2x00usb.c +1 -1
@@ -830,7 +830,7 @@ int rt2x00usb_probe(struct usb_interface *usb_intf,if (retval) goto exit_free_device; - rt2x00dev->anchor =devm_kmalloc (&usb_dev->dev, + rt2x00dev->anchor =devm_kmalloc (&usb_intf->dev,sizeof (struct usb_anchor ),GFP_KERNEL );if (!rt2x00dev->anchor) {
drivers/nfc/pn533/uart.c +8 -3
@@ -211,6 +211,13 @@ static int pn532_receive_buf(struct serdev_device *serdev,del_timer (&dev->cmd_timeout);for (i =0 ; i < count; i++) { +if (!dev->recv_skb) { + dev->recv_skb =alloc_skb (PN532_UART_SKB_BUFF_LEN , +GFP_KERNEL ); +if (!dev->recv_skb) +return i; + } +if (unlikely (!skb_tailroom (dev->recv_skb)))skb_trim (dev->recv_skb,0 );
@@ -219,9 +226,7 @@ static int pn532_receive_buf(struct serdev_device *serdev,continue ;pn533_recv_frame (dev->priv, dev->recv_skb,0 ); - dev->recv_skb =alloc_skb (PN532_UART_SKB_BUFF_LEN ,GFP_KERNEL ); -if (!dev->recv_skb) -return 0 ; + dev->recv_skb =NULL ; }return i;
drivers/pci/pci-driver.c +0 -8
@@ -1667,14 +1667,6 @@ static int pci_dma_configure(struct device *dev) ret =acpi_dma_configure (dev,acpi_get_dma_attr (adev)); } -/* -* Attempt to enable ACS regardless of capability because some Root -* Ports (e.g. those quirked with *_intel_pch_acs_*) do not have -* the standard ACS capability but still support ACS via those -* quirks. -*/ -pci_enable_acs (to_pci_dev (dev)); -pci_put_host_bridge_device (bridge);if (!ret && !driver->driver_managed_dma) {
drivers/pci/pci.c +9 -1
@@ -1040,7 +1040,7 @@ static void pci_std_enable_acs(struct pci_dev *dev)* pci_enable_acs - enable ACS if hardware support it * @dev: the PCI device */ -void pci_enable_acs (struct pci_dev *dev) +static void pci_enable_acs (struct pci_dev *dev) {if (!pci_acs_enable) goto disable_acs_redir;
@@ -3777,6 +3777,14 @@ bool pci_acs_path_enabled(struct pci_dev *start,void pci_acs_init (struct pci_dev *dev) { dev->acs_cap =pci_find_ext_capability (dev,PCI_EXT_CAP_ID_ACS ); + +/* +* Attempt to enable ACS regardless of capability because some Root +* Ports (e.g. those quirked with *_intel_pch_acs_*) do not have +* the standard ACS capability but still support ACS via those +* quirks. +*/ +pci_enable_acs (dev); }/**
drivers/pci/pci.h +0 -1
@@ -526,7 +526,6 @@ static inline resource_size_t pci_resource_alignment(struct pci_dev *dev, }void pci_acs_init (struct pci_dev *dev); -void pci_enable_acs (struct pci_dev *dev);#ifdef CONFIG_PCI_QUIRKS int pci_dev_specific_acs_enabled (struct pci_dev *dev,u16 acs_flags);int pci_dev_specific_enable_acs (struct pci_dev *dev);
drivers/usb/gadget/function/f_hid.c +6 -5
@@ -996,13 +996,8 @@ static int hidg_bind(struct usb_configuration *c, struct usb_function *f)if (status) goto fail; -spin_lock_init (&hidg->write_spinlock); hidg->write_pending =1 ; hidg->req =NULL ; -spin_lock_init (&hidg->read_spinlock); -init_waitqueue_head (&hidg->write_queue); -init_waitqueue_head (&hidg->read_queue); -INIT_LIST_HEAD (&hidg->completed_out_req);/* create char device */ cdev_init (&hidg->cdev, &f_hidg_fops);
@@ -1272,6 +1267,12 @@ static struct usb_function *hidg_alloc(struct usb_function_instance *fi)mutex_lock (&opts->lock); ++opts->refcnt; +spin_lock_init (&hidg->write_spinlock); +spin_lock_init (&hidg->read_spinlock); +init_waitqueue_head (&hidg->write_queue); +init_waitqueue_head (&hidg->read_queue); +INIT_LIST_HEAD (&hidg->completed_out_req); +device_initialize (&hidg->dev); hidg->dev.release = hidg_release; hidg->dev.class = hidg_class;
drivers/usb/gadget/function/u_ether.c +4 -4
@@ -1175,6 +1175,10 @@ void gether_disconnect(struct gether *link)DBG (dev,"%s\n" , __func__); +spin_lock (&dev->lock); + dev->port_usb =NULL ; +spin_unlock (&dev->lock); +netif_stop_queue (dev->net);netif_carrier_off (dev->net);
@@ -1212,10 +1216,6 @@ void gether_disconnect(struct gether *link) dev->header_len =0 ; dev->unwrap =NULL ; dev->wrap =NULL ; - -spin_lock (&dev->lock); - dev->port_usb =NULL ; -spin_unlock (&dev->lock); }EXPORT_SYMBOL_GPL (gether_disconnect);
include/acpi/acpixf.h +1 -4
@@ -666,12 +666,9 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status void *context)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_execute_reg_methods(acpi_handle device, + u32 nax_depth, acpi_adr_space_type space_id)) -ACPI_EXTERNAL_RETURN_STATUS(acpi_status - acpi_execute_orphan_reg_method(acpi_handle device, - acpi_adr_space_type - space_id)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_remove_address_space_handler(acpi_handle device,
include/net/netfilter/nf_conntrack_timeout.h +1 -0
@@ -14,6 +14,7 @@struct nf_ct_timeout {__u16 l3num;const struct nf_conntrack_l4proto *l4proto; +struct rcu_head rcu;char data[]; };
lib/crypto/chacha.c +4 -0
@@ -86,6 +86,8 @@ void chacha_block_generic(u32 *state, u8 *stream, int nrounds)put_unaligned_le32 (x[i] + state[i], &stream[i *sizeof (u32)]); state[12 ]++; + +memzero_explicit (x,sizeof (x)); }EXPORT_SYMBOL (chacha_block_generic);
@@ -110,5 +112,7 @@ void hchacha_block_generic(const u32 *state, u32 *stream, int nrounds)memcpy (&stream[0 ], &x[0 ],16 );memcpy (&stream[4 ], &x[12 ],16 ); + +memzero_explicit (x,sizeof (x)); }EXPORT_SYMBOL (hchacha_block_generic);
net/batman-adv/bridge_loop_avoidance.c +18 -9
@@ -2132,6 +2132,7 @@ batadv_bla_claim_dump_entry(struct sk_buff *msg, u32 portid, struct batadv_bla_claim *claim) {const u8 *primary_addr = primary_if->net_dev->dev_addr; +struct batadv_bla_backbone_gw *backbone_gw;u16 backbone_crc;bool is_own;void *hdr;
@@ -2147,32 +2148,35 @@ batadv_bla_claim_dump_entry(struct sk_buff *msg, u32 portid,genl_dump_check_consistent (cb, hdr); - is_own =batadv_compare_eth (claim->backbone_gw->orig, - primary_addr); + backbone_gw =batadv_bla_claim_get_backbone_gw (claim); + + is_own =batadv_compare_eth (backbone_gw->orig, primary_addr); -spin_lock_bh (&claim->backbone_gw->crc_lock); - backbone_crc = claim->backbone_gw->crc; -spin_unlock_bh (&claim->backbone_gw->crc_lock); +spin_lock_bh (&backbone_gw->crc_lock); + backbone_crc = backbone_gw->crc; +spin_unlock_bh (&backbone_gw->crc_lock);if (is_own)if (nla_put_flag (msg,BATADV_ATTR_BLA_OWN )) {genlmsg_cancel (msg, hdr); - goto out; + goto put_backbone_gw; }if (nla_put (msg,BATADV_ATTR_BLA_ADDRESS ,ETH_ALEN , claim->addr) ||nla_put_u16 (msg,BATADV_ATTR_BLA_VID , claim->vid) ||nla_put (msg,BATADV_ATTR_BLA_BACKBONE ,ETH_ALEN , - claim->backbone_gw->orig) || + backbone_gw->orig) ||nla_put_u16 (msg,BATADV_ATTR_BLA_CRC , backbone_crc)) {genlmsg_cancel (msg, hdr); - goto out; + goto put_backbone_gw; }genlmsg_end (msg, hdr); ret =0 ; +put_backbone_gw: +batadv_backbone_gw_put (backbone_gw); out:return ret; }
@@ -2468,6 +2472,7 @@ int batadv_bla_backbone_dump(struct sk_buff *msg, struct netlink_callback *cb)bool batadv_bla_check_claim (struct batadv_priv *bat_priv,u8 *addr,unsigned short vid) { +struct batadv_bla_backbone_gw *backbone_gw;struct batadv_bla_claim search_claim;struct batadv_bla_claim *claim =NULL ;struct batadv_hard_iface *primary_if =NULL ;
@@ -2490,9 +2495,13 @@ bool batadv_bla_check_claim(struct batadv_priv *bat_priv,* return false. */ if (claim) { -if (!batadv_compare_eth (claim->backbone_gw->orig, + backbone_gw =batadv_bla_claim_get_backbone_gw (claim); + +if (!batadv_compare_eth (backbone_gw->orig, primary_if->net_dev->dev_addr)) ret = false; + +batadv_backbone_gw_put (backbone_gw);batadv_claim_put (claim); }
net/batman-adv/translation-table.c +7 -2
@@ -844,8 +844,8 @@ batadv_tt_prepare_tvlv_global_data(struct batadv_orig_node *orig_node, {u16 num_vlan =0 ;u16 num_entries =0 ; -u16 change_offset; -u16 tvlv_len; +u16 tvlv_len =0 ; +unsigned int change_offset;struct batadv_tvlv_tt_vlan_data *tt_vlan;struct batadv_orig_node_vlan *vlan;u8 *tt_change_ptr;
@@ -863,6 +863,11 @@ batadv_tt_prepare_tvlv_global_data(struct batadv_orig_node *orig_node,if (*tt_len <0 ) *tt_len =batadv_tt_len (num_entries); +if (change_offset >U16_MAX || *tt_len >U16_MAX - change_offset) { + *tt_len =0 ; + goto out; + } + tvlv_len = *tt_len; tvlv_len += change_offset;
net/ipv6/seg6_iptunnel.c +28 -13
87 lines not on this page · raw message
net/mptcp/pm_netlink.c +5 -19
@@ -1080,7 +1080,7 @@ static void __mptcp_pm_release_addr_entry(struct mptcp_pm_addr_entry *entry)static int mptcp_pm_nl_append_new_local_addr (struct pm_nl_pernet *pernet,struct mptcp_pm_addr_entry *entry, -bool needs_id,bool replace) +bool replace) {struct mptcp_pm_addr_entry *cur, *del_entry =NULL ;unsigned int addr_max;
@@ -1133,7 +1133,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_nl_pernet *pernet, } } -if (!entry->addr.id && needs_id) { +if (!entry->addr.id) { find_next: entry->addr.id = find_next_zero_bit(pernet->id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1,
@@ -1144,7 +1144,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_nl_pernet *pernet, } } -if (!entry->addr.id && needs_id) +if (!entry->addr.id) goto out;__set_bit (entry->addr.id, pernet->id_bitmap);
@@ -1271,7 +1271,7 @@ int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_info *skc entry->ifindex =0 ; entry->flags =MPTCP_PM_ADDR_FLAG_IMPLICIT ; entry->lsk =NULL ; - ret =mptcp_pm_nl_append_new_local_addr (pernet, entry, true, false); + ret =mptcp_pm_nl_append_new_local_addr (pernet, entry, false);if (ret <0 )kfree (entry);
@@ -1513,18 +1513,6 @@ static int mptcp_nl_add_subflow_or_signal_addr(struct net *net,return 0 ; } -static bool mptcp_pm_has_addr_attr_id (const struct nlattr *attr, -struct genl_info *info) -{ -struct nlattr *tb[MPTCP_PM_ADDR_ATTR_MAX +1 ]; - -if (!nla_parse_nested_deprecated (tb,MPTCP_PM_ADDR_ATTR_MAX , attr, - mptcp_pm_addr_policy, info->extack) && - tb[MPTCP_PM_ADDR_ATTR_ID ]) -return true; -return false; -} -static int mptcp_nl_cmd_add_addr (struct sk_buff *skb,struct genl_info *info) {struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR ];
@@ -1566,9 +1554,7 @@ static int mptcp_nl_cmd_add_addr(struct sk_buff *skb, struct genl_info *info) goto out_free; } } - ret =mptcp_pm_nl_append_new_local_addr (pernet, entry, - !mptcp_pm_has_addr_attr_id (attr, info), - true); + ret =mptcp_pm_nl_append_new_local_addr (pernet, entry, true);if (ret <0 ) {GENL_SET_ERR_MSG (info,"too many addresses or duplicate one" ); goto out_free;
net/mptcp/protocol.c +2 -0
@@ -4264,6 +4264,8 @@ int __init mptcp_proto_v6_init(void) {int err; +mptcp_subflow_v6_init (); + mptcp_v6_prot = mptcp_prot;strcpy (mptcp_v6_prot.name,"MPTCPv6" ); mptcp_v6_prot.slab =NULL ;
net/mptcp/protocol.h +1 -0
@@ -677,6 +677,7 @@ static inline void mptcp_subflow_tcp_fallback(struct sock *sk,void __init mptcp_proto_init (void );#if IS_ENABLED (CONFIG_MPTCP_IPV6 )int __init mptcp_proto_v6_init (void ); +void __init mptcp_subflow_v6_init (void );#endif struct sock *mptcp_sk_clone_init(const struct sock *sk,
net/mptcp/subflow.c +9 -6
@@ -1993,7 +1993,15 @@ void __init mptcp_subflow_init(void) tcp_prot_override.psock_update_sk_prot =NULL ;#endif +mptcp_diag_subflow_init (&subflow_ulp_ops); + +if (tcp_register_ulp (&subflow_ulp_ops) !=0 ) +panic ("MPTCP: failed to register subflows to ULP\n" ); +} +#if IS_ENABLED (CONFIG_MPTCP_IPV6 ) +void __init mptcp_subflow_v6_init (void ) +{/* In struct mptcp_subflow_request_sock, we assume the TCP request sock * structures for v4 and v6 have the same size. It should not changed in * the future but better to make sure to be warned if it is no longer
@@ -2032,10 +2040,5 @@ void __init mptcp_subflow_init(void)/* Disable sockmap processing for subflows */ tcpv6_prot_override.psock_update_sk_prot =NULL ; #endif -#endif - -mptcp_diag_subflow_init (&subflow_ulp_ops); - -if (tcp_register_ulp (&subflow_ulp_ops) !=0 ) -panic ("MPTCP: failed to register subflows to ULP\n" ); } +#endif
net/netfilter/nft_ct.c +1 -1
@@ -985,7 +985,7 @@ static void nft_ct_timeout_obj_destroy(const struct nft_ctx *ctx,nf_queue_nf_hook_drop (ctx->net);nf_ct_untimeout (ctx->net, timeout);nf_ct_netns_put (ctx->net, ctx->family); -kfree (priv->timeout); +kfree_rcu (priv->timeout, rcu); } static int nft_ct_timeout_obj_dump(struct sk_buff *skb,
net/netfilter/nft_set_pipapo.c +14 -6
@@ -525,6 +525,8 @@ static struct nft_pipapo_elem *pipapo_get(const struct net *net,int i; m = priv->clone; +if (m->bsize_max ==0 ) +return ret; res_map =kmalloc_array (m->bsize_max,sizeof (*res_map),GFP_ATOMIC );if (!res_map) {
@@ -1395,14 +1397,20 @@ static struct nft_pipapo_match *pipapo_clone(struct nft_pipapo_match *old) src->bsize *sizeof (*dst->lt) * src->groups * NFT_PIPAPO_BUCKETS(src->bb)); -if (src->rules > (INT_MAX /sizeof (*src->mt))) - goto out_mt; +if (src->rules >0 ) { +if (src->rules > (INT_MAX /sizeof (*src->mt))) + goto out_mt; + + dst->mt =kvmalloc_array (src->rules,sizeof (*src->mt), +GFP_KERNEL ); +if (!dst->mt) + goto out_mt; - dst->mt =kvmalloc (src->rules *sizeof (*src->mt),GFP_KERNEL_ACCOUNT ); -if (!dst->mt) - goto out_mt; +memcpy (dst->mt, src->mt, src->rules *sizeof (*src->mt)); + }else { + dst->mt =NULL ; + } -memcpy (dst->mt, src->mt, src->rules *sizeof (*src->mt)); src++; dst++; }
net/rfkill/core.c +58 -26
226 lines not on this page · raw message
net/rxrpc/af_rxrpc.c +0 -6
@@ -615,9 +615,6 @@ static int rxrpc_setsockopt(struct socket *sock, int level, int optname, goto success;case RXRPC_SECURITY_KEY : - ret = -EINVAL ; -if (rx->key) - goto error; ret = -EISCONN ;if (rx->sk.sk_state !=RXRPC_UNBOUND ) goto error;
@@ -625,9 +622,6 @@ static int rxrpc_setsockopt(struct socket *sock, int level, int optname, goto error;case RXRPC_SECURITY_KEYRING : - ret = -EINVAL ; -if (rx->key) - goto error; ret = -EISCONN ;if (rx->sk.sk_state !=RXRPC_UNBOUND ) goto error;
net/rxrpc/key.c +1 -1
@@ -452,7 +452,7 @@ int rxrpc_request_key(struct rxrpc_sock *rx, sockptr_t optval, int optlen)_enter ("" ); -if (optlen <=0 || optlen >PAGE_SIZE -1 || rx->securities) +if (optlen <=0 || optlen >PAGE_SIZE -1 || rx->key)return -EINVAL ; description =memdup_sockptr_nul (optval, optlen);
net/rxrpc/server_key.c +3 -0
@@ -125,6 +125,9 @@ int rxrpc_server_keyring(struct rxrpc_sock *rx, sockptr_t optval, int optlen)_enter ("" ); +if (rx->securities) +return -EINVAL ; +if (optlen <=0 || optlen >PAGE_SIZE -1 )return -EINVAL ;
net/tipc/group.c +5 -1
@@ -746,6 +746,7 @@ void tipc_group_proto_rcv(struct tipc_group *grp, bool *usr_wakeup,u32 port =msg_origport (hdr);struct tipc_member *m, *pm;u16 remitted, in_flight; +u16 acked;if (!grp)return ;
@@ -798,7 +799,10 @@ void tipc_group_proto_rcv(struct tipc_group *grp, bool *usr_wakeup,case GRP_ACK_MSG :if (!m)return ; - m->bc_acked =msg_grp_bc_acked (hdr); + acked =msg_grp_bc_acked (hdr); +if (less_eq (acked, m->bc_acked)) +return ; + m->bc_acked = acked;if (--grp->bc_ackers)return ;list_del_init (&m->small_win);
net/tls/tls_sw.c +10 -0
@@ -585,6 +585,16 @@ static int tls_do_encryption(struct sock *sk,if (rc == -EBUSY ) { rc =tls_encrypt_async_wait (ctx); rc = rc ?: -EINPROGRESS ; +/* +* The async callback tls_encrypt_done() has already +* decremented encrypt_pending and restored the sge on +* both success and error. Skip the synchronous cleanup +* below on error, just remove the record and return. +*/ +if (rc != -EINPROGRESS ) { +list_del (&rec->list); +return rc; + } }if (!rc || rc != -EINPROGRESS ) {atomic_dec (&ctx->encrypt_pending);
net/xfrm/xfrm_user.c +3 -0
@@ -3524,6 +3524,8 @@ static int build_polexpire(struct sk_buff *skb, struct xfrm_policy *xp,return err; } upe->hard = !!hard; +/* clear the padding bytes */ +memset_after (upe,0 , hard);nlmsg_end (skb, nlh);return 0 ;
@@ -3679,6 +3681,7 @@ static int build_report(struct sk_buff *skb, u8 proto,return -EMSGSIZE ; ur =nlmsg_data (nlh); +memset (ur,0 ,sizeof (*ur)); ur->proto = proto;memcpy (&ur->sel, sel,sizeof (ur->sel));
security/apparmor/apparmorfs.c +137 -91
515 lines not on this page · raw message
security/apparmor/include/label.h +8 -8
@@ -101,7 +101,7 @@ enum label_flags {struct aa_label ;struct aa_proxy { -struct kref count; +struct aa_common_ref count;struct aa_label __rcu *label; };
@@ -121,7 +121,7 @@ struct label_it {* @ent: set of profiles for label, actual size determined by @size */ struct aa_label { -struct kref count; +struct aa_common_ref count;struct rb_node node;struct rcu_head rcu;struct aa_proxy *proxy;
@@ -372,7 +372,7 @@ int aa_label_match(struct aa_profile *profile, struct aa_label *label,*/ static inline struct aa_label *__aa_get_label (struct aa_label *l) { -if (l &&kref_get_unless_zero (&l->count)) +if (l &&kref_get_unless_zero (&l->count.count))return l;return NULL ;
@@ -381,7 +381,7 @@ static inline struct aa_label *__aa_get_label(struct aa_label *l)static inline struct aa_label *aa_get_label (struct aa_label *l) {if (l) -kref_get (&(l->count)); +kref_get (&(l->count.count));return l; }
@@ -401,7 +401,7 @@ static inline struct aa_label *aa_get_label_rcu(struct aa_label __rcu **l)rcu_read_lock ();do { c =rcu_dereference (*l); - }while (c && !kref_get_unless_zero (&c->count)); + }while (c && !kref_get_unless_zero (&c->count.count));rcu_read_unlock ();return c;
@@ -441,7 +441,7 @@ static inline struct aa_label *aa_get_newest_label(struct aa_label *l)static inline void aa_put_label (struct aa_label *l) {if (l) -kref_put (&l->count, aa_label_kref); +kref_put (&l->count.count, aa_label_kref); }
@@ -451,7 +451,7 @@ void aa_proxy_kref(struct kref *kref);static inline struct aa_proxy *aa_get_proxy (struct aa_proxy *proxy) {if (proxy) -kref_get (&(proxy->count)); +kref_get (&(proxy->count.count));return proxy; }
@@ -459,7 +459,7 @@ static inline struct aa_proxy *aa_get_proxy(struct aa_proxy *proxy)static inline void aa_put_proxy (struct aa_proxy *proxy) {if (proxy) -kref_put (&proxy->count, aa_proxy_kref); +kref_put (&proxy->count.count, aa_proxy_kref); }void __aa_proxy_redirect (struct aa_label *orig,struct aa_label *new);
security/apparmor/include/lib.h +12 -0
@@ -69,6 +69,18 @@ void aa_info_message(const char *str);/* Security blob offsets */ extern struct lsm_blob_sizes apparmor_blob_sizes; +enum reftype { +REF_NS , +REF_PROXY , +REF_RAWDATA , +}; + +/* common reference count used by data the shows up in aafs */ +struct aa_common_ref { +struct kref count; +enum reftype reftype; +}; +/** * aa_strneq - compare null terminated @str to a non null terminated substring * @str: a null terminated string
security/apparmor/include/match.h +1 -0
@@ -190,6 +190,7 @@ static inline void aa_put_dfa(struct aa_dfa *dfa)#define MATCH_FLAG_DIFF_ENCODE 0x80000000#define MARK_DIFF_ENCODE 0x40000000#define MATCH_FLAG_OOB_TRANSITION 0x20000000 +#define MARK_DIFF_ENCODE_VERIFIED 0x10000000#define MATCH_FLAGS_MASK 0xff000000#define MATCH_FLAGS_VALID (MATCH_FLAG_DIFF_ENCODE | MATCH_FLAG_OOB_TRANSITION)#define MATCH_FLAGS_INVALID (MATCH_FLAGS_MASK & ~MATCH_FLAGS_VALID)
security/apparmor/include/policy.h +7 -6
@@ -247,7 +247,7 @@ static inline unsigned int PROFILE_MEDIATES_AF(struct aa_profile *profile,static inline struct aa_profile *aa_get_profile (struct aa_profile *p) {if (p) -kref_get (&(p->label.count)); +kref_get (&(p->label.count.count));return p; }
@@ -261,7 +261,7 @@ static inline struct aa_profile *aa_get_profile(struct aa_profile *p)*/ static inline struct aa_profile *aa_get_profile_not0 (struct aa_profile *p) { -if (p &&kref_get_unless_zero (&p->label.count)) +if (p &&kref_get_unless_zero (&p->label.count.count))return p;return NULL ;
@@ -281,7 +281,7 @@ static inline struct aa_profile *aa_get_profile_rcu(struct aa_profile __rcu **p)rcu_read_lock ();do { c =rcu_dereference (*p); - }while (c && !kref_get_unless_zero (&c->label.count)); + }while (c && !kref_get_unless_zero (&c->label.count.count));rcu_read_unlock ();return c;
@@ -294,7 +294,7 @@ static inline struct aa_profile *aa_get_profile_rcu(struct aa_profile __rcu **p)static inline void aa_put_profile (struct aa_profile *p) {if (p) -kref_put (&p->label.count, aa_label_kref); +kref_put (&p->label.count.count, aa_label_kref); }static inline int AUDIT_MODE (struct aa_profile *profile)
@@ -307,8 +307,9 @@ static inline int AUDIT_MODE(struct aa_profile *profile)bool aa_policy_view_capable (struct aa_label *label,struct aa_ns *ns);bool aa_policy_admin_capable (struct aa_label *label,struct aa_ns *ns); -int aa_may_manage_policy (struct aa_label *label,struct aa_ns *ns, -u32 mask); +int aa_may_manage_policy (const struct cred *subj_cred, +struct aa_label *label,struct aa_ns *ns, +const struct cred *ocred,u32 mask);bool aa_current_policy_view_capable (struct aa_ns *ns);bool aa_current_policy_admin_capable (struct aa_ns *ns);
security/apparmor/include/policy_ns.h +2 -0
@@ -18,6 +18,8 @@#include "label.h" #include "policy.h" +/* Match max depth of user namespaces */ +#define MAX_NS_DEPTH 32/* struct aa_ns_acct - accounting of profiles in namespace * @max_size: maximum space allowed for all profiles in namespace
security/apparmor/include/policy_unpack.h +45 -30
112 lines not on this page · raw message
security/apparmor/label.c +8 -4
@@ -52,7 +52,8 @@ static void free_proxy(struct aa_proxy *proxy)void aa_proxy_kref (struct kref *kref) { - struct aa_proxy *proxy = container_of(kref, struct aa_proxy, count); + struct aa_proxy *proxy = container_of(kref, struct aa_proxy, + count.count);free_proxy (proxy); }
@@ -63,7 +64,8 @@ struct aa_proxy *aa_alloc_proxy(struct aa_label *label, gfp_t gfp) new =kzalloc (sizeof (struct aa_proxy ), gfp);if (new) { -kref_init (&new->count); +kref_init (&new->count.count); + new->count.reftype =REF_PROXY ;rcu_assign_pointer (new->label,aa_get_label (label)); }return new;
@@ -369,7 +371,8 @@ static void label_free_rcu(struct rcu_head *head)void aa_label_kref (struct kref *kref) { - struct aa_label *label = container_of(kref, struct aa_label, count); + struct aa_label *label = container_of(kref, struct aa_label, + count.count);struct aa_ns *ns =labels_ns (label);if (!ns) {
@@ -406,7 +409,8 @@ bool aa_label_init(struct aa_label *label, int size, gfp_t gfp) label->size = size;/* doesn't include null */ label->vec[size] =NULL ;/* null terminate */ -kref_init (&label->count); +kref_init (&label->count.count); + label->count.reftype =REF_NS ;/* for aafs purposes */ RB_CLEAR_NODE (&label->node);return true;
security/apparmor/match.c +42 -16
93 lines not on this page · raw message
security/apparmor/policy.c +71 -11
154 lines not on this page · raw message
security/apparmor/policy_ns.c +2 -0
@@ -262,6 +262,8 @@ static struct aa_ns *__aa_create_ns(struct aa_ns *parent, const char *name,AA_BUG (!name);AA_BUG (!mutex_is_locked (&parent->lock)); +if (parent->level >MAX_NS_DEPTH ) +return ERR_PTR (-ENOSPC ); ns =alloc_ns (parent->base.hname, name);if (!ns)return ERR_PTR (-ENOMEM );
security/apparmor/policy_unpack.c +45 -13
111 lines not on this page · raw message