4.14.104-stable review
Subsystems (3)
Greg Kroah-Hartman
maintainercover 4.14.104-stable review
This is the start of the stable review cycle for the 4.14.104 release. There are 71 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Feb 27 19:50:01 UTC 2019. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.104-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.14.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.14.104-rc1
Matthias Kaehlcke <[email protected]>
sched/sysctl: Fix attributes of some extern declarations
Colin Ian King <[email protected]>
phy: tegra: remove redundant self assignment of 'map'
Nathan Chancellor <[email protected]>
pinctrl: max77620: Use define directive for max77620_pinconf_param values
Eli Cooper <[email protected]>
netfilter: ipv6: Don't preserve original oif for loopback address
Pablo Neira Ayuso <[email protected]>
netfilter: nft_compat: use-after-free when deleting targets
Pablo Neira Ayuso <[email protected]>
netfilter: nf_tables: fix flush after rule deletion in the same batch
Hangbin Liu <[email protected]>
Revert "bridge: do not add port to router list when receives query with source 0.0.0.0"
Willem de Bruijn <[email protected]>
net: avoid false positives in untrusted gso validation
Willem de Bruijn <[email protected]>
net: validate untrusted gso packets without csum offload
Chris Wilson <[email protected]>
drm/i915/fbdev: Actually configure untiled displays
Alexey Brodkin <[email protected]>
ARC: define ARCH_SLAB_MINALIGN = 8
Eugeniy Paltsev <[email protected]>
ARC: U-boot: check arguments paranoidly
Eugeniy Paltsev <[email protected]>
ARCv2: Enable unaligned access in early ASM code
Dmitry V. Levin <[email protected]>
parisc: Fix ptrace syscall number modification
Eric Biggers <[email protected]>
KEYS: always initialize keyring_index_key::desc_len
Eric Biggers <[email protected]>
KEYS: user: Align the payload buffer
Bart Van Assche <[email protected]>
RDMA/srp: Rework SCSI device reset handling
Konstantin Khlebnikov <[email protected]>
inet_diag: fix reporting cgroup classid and fallback to priority
Saeed Mahameed <[email protected]>
net/mlx4_en: Force CHECKSUM_NONE for short ethernet frames
Hangbin Liu <[email protected]>
sit: check if IPv6 enabled before calling ip6_err_gen_icmpv6_unreach()
Cong Wang <[email protected]>
team: avoid complex list operations in team_nl_cmd_options_set()
Xin Long <[email protected]>
sctp: call gso_reset_checksum when computing checksum in sctp_gso_segment
Russell King <[email protected]>
net: sfp: do not probe SFP module before we're attached
Kal Conley <[email protected]>
net/packet: fix 4gb buffer limit due to overflow check
Tonghao Zhang <[email protected]>
net/mlx5e: Don't overwrite pedit action when multiple pedit used
Li RongQing <[email protected]>
ipv6: propagate genlmsg_reply return code
Eric Dumazet <[email protected]>
batman-adv: fix uninit-value in batadv_interface_tx()
Nathan Chancellor <[email protected]>
isdn: avm: Fix string plus integer warning from Clang
Tariq Toukan <[email protected]>
net/mlx5e: Fix wrong (zero) TX drop counter indication for representor
Ido Schimmel <[email protected]>
mlxsw: spectrum_switchdev: Do not treat static FDB entries as sticky
Peter Oskolkov <[email protected]>
bpf: bpf_setsockopt: reset sock dst on SO_MARK changes
Kangjie Lu <[email protected]>
leds: lp5523: fix a missing check of return value of lp55xx_read
Cheng-Min Ao <[email protected]>
hwmon: (tmp421) Correct the misspelling of the tmp442 compatible attribute in OF device ID table
Colin Ian King <[email protected]>
atm: he: fix sign-extension overflow on large shift
Julia Lawall <[email protected]>
drm/meson: add missing of_node_put
Talons Lee <[email protected]>
always clear the X2APIC_ENABLE bit for PV guest
Manish Rangankar <[email protected]>
scsi: qedi: Add ep_state for login completion on un-reachable targets
Stanley Chu <[email protected]>
scsi: ufs: Fix system suspend status
Jia-Ju Bai <[email protected]>
isdn: i4l: isdn_tty: Fix some concurrency double-free bugs
Jose Abreu <[email protected]>
net: stmmac: Fix PCI module removal leak
Yuchung Cheng <[email protected]>
bpf: correctly set initial window on active Fast Open sender
Thomas Bogendoerfer <[email protected]>
MIPS: jazz: fix 64bit build
Logan Gunthorpe <[email protected]>
scsi: isci: initialize shost fully before calling scsi_add_host()
YueHaibing <[email protected]>
scsi: qla4xxx: check return code of qla4xxx_copy_from_fwddb_param
Taehee Yoo <[email protected]>
netfilter: nf_tables: fix leaking object reference count
Alban Bedel <[email protected]>
MIPS: ath79: Enable OF serial ports in the default config
Yonglong Liu <[email protected]>
net: hns: Fix use after free identified by SLUB debug
Denis Bolotin <[email protected]>
qed: Fix qed_ll2_post_rx_buffer_notify_fw() by adding a write memory barrier
Denis Bolotin <[email protected]>
qed: Fix qed_chain_set_prod() for PBL chains with non power of 2 page count
YueHaibing <[email protected]>
xen/pvcalls: remove set but not used variable 'intf'
Kangjie Lu <[email protected]>
mfd: mc13xxx: Fix a missing check of a register-read failure
Keerthy <[email protected]>
mfd: tps65218: Use devm_regmap_add_irq_chip and clean up error path in probe()
Charles Keepax <[email protected]>
mfd: wm5110: Add missing ASRC rate register
Jonathan Marek <[email protected]>
mfd: qcom_rpm: write fw_version to CTRL_REG
Dien Pham <[email protected]>
mfd: bd9571mwv: Add volatile register to make DVFS work
Dan Carpenter <[email protected]>
mfd: ab8500-core: Return zero in get_register_interruptible()
Nicolas Boichat <[email protected]>
mfd: mt6397: Do not call irq_domain_remove if PMIC unsupported
Nathan Chancellor <[email protected]>
mfd: db8500-prcmu: Fix some section annotations
Nathan Chancellor <[email protected]>
mfd: twl-core: Fix section annotations on {,un}protect_pm_master
Stefano Stabellini <[email protected]>
pvcalls-back: set -ENOTCONN in pvcalls_conn_back_read
Vignesh R <[email protected]>
mfd: ti_am335x_tscadc: Use PLATFORM_DEVID_AUTO while registering mfd cells
Eric Biggers <[email protected]>
KEYS: allow reaching the keys quotas exactly
Michal Hocko <[email protected]>
proc, oom: do not report alien mms when setting oom_score_adj
Ralph Campbell <[email protected]>
numa: change get_mempolicy() to use nr_node_ids instead of MAX_NUMNODES
Yan, Zheng <[email protected]>
ceph: avoid repeatedly adding inode to mdsc->snap_flush_list
Ilya Dryomov <[email protected]>
libceph: handle an empty authorize reply
Herbert Xu <[email protected]>
mac80211: Free mpath object when rhashtable insertion fails
Rakesh Pillai <[email protected]>
mac80211: Restore vif beacon interval if start ap fails
Paul Burton <[email protected]>
MIPS: eBPF: Always return sign extended 32b values
Quentin Perret <[email protected]>
tracing: Fix number of entries in trace header
Mathieu Desnoyers <[email protected]>
ARM: 8834/1: Fix: kprobes: optimized kprobes illegal instruction
-------------
Diffstat:
Makefile | 4 +- arch/arc/include/asm/cache.h | 11 +++ arch/arc/kernel/head.S | 14 +++- arch/arc/kernel/setup.c | 87 +++++++++++++++------- arch/arm/probes/kprobes/opt-arm.c | 2 +- arch/mips/configs/ath79_defconfig | 1 + arch/mips/jazz/jazzdma.c | 5 +- arch/mips/net/ebpf_jit.c | 9 ++- arch/parisc/kernel/ptrace.c | 29 ++++++-- arch/x86/xen/enlighten_pv.c | 5 +- drivers/atm/he.c | 2 +- drivers/gpu/drm/i915/intel_fbdev.c | 12 +-- drivers/gpu/drm/meson/meson_drv.c | 9 ++- drivers/hwmon/tmp421.c | 2 +- drivers/infiniband/ulp/srp/ib_srp.c | 10 --- drivers/isdn/hardware/avm/b1.c | 2 +- drivers/isdn/i4l/isdn_tty.c | 6 +- drivers/leds/leds-lp5523.c | 4 +- drivers/mfd/ab8500-core.c | 2 +- drivers/mfd/bd9571mwv.c | 1 + drivers/mfd/db8500-prcmu.c | 4 +- drivers/mfd/mc13xxx-core.c | 4 +- drivers/mfd/mt6397-core.c | 3 +- drivers/mfd/qcom_rpm.c | 4 + drivers/mfd/ti_am335x_tscadc.c | 5 +- drivers/mfd/tps65218.c | 24 +----- drivers/mfd/twl-core.c | 4 +- drivers/mfd/wm5110-tables.c | 2 + drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c | 6 +- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 23 +++++- drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 1 + drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 25 ++++--- .../ethernet/mellanox/mlxsw/spectrum_switchdev.c | 12 +-- drivers/net/ethernet/qlogic/qed/qed_ll2.c | 4 + drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | 10 +++ drivers/net/phy/sfp-bus.c | 2 + drivers/net/phy/sfp.c | 30 +++++--- drivers/net/phy/sfp.h | 2 + drivers/net/team/team.c | 27 ++----- drivers/phy/tegra/xusb.c | 2 +- drivers/pinctrl/pinctrl-max77620.c | 14 ++-- drivers/scsi/isci/init.c | 14 ++-- drivers/scsi/qedi/qedi_iscsi.c | 3 + drivers/scsi/qedi/qedi_iscsi.h | 1 + drivers/scsi/qla4xxx/ql4_os.c | 2 + drivers/scsi/ufs/ufshcd.c | 2 + drivers/xen/pvcalls-back.c | 9 +-- fs/ceph/snap.c | 3 +- fs/proc/base.c | 4 - include/keys/user-type.h | 2 +- include/linux/qed/qed_chain.h | 31 ++++++++ include/linux/sched/sysctl.h | 6 +- include/linux/skbuff.h | 2 +- include/linux/virtio_net.h | 19 +++++ include/uapi/linux/inet_diag.h | 16 ++-- kernel/trace/trace.c | 2 + mm/mempolicy.c | 6 +- net/batman-adv/soft-interface.c | 2 + net/bridge/br_multicast.c | 9 +-- net/ceph/messenger.c | 15 ++-- net/core/filter.c | 7 +- net/ipv4/inet_diag.c | 10 ++- net/ipv6/netfilter.c | 4 +- net/ipv6/seg6.c | 4 +- net/ipv6/sit.c | 3 +- net/mac80211/cfg.c | 6 +- net/mac80211/mesh_pathtbl.c | 17 +++-- net/netfilter/nf_tables_api.c | 5 ++ net/netfilter/nft_compat.c | 3 +- net/packet/af_packet.c | 2 +- net/sctp/offload.c | 1 + net/sctp/sctp_diag.c | 1 + security/keys/key.c | 4 +- security/keys/keyring.c | 4 +- security/keys/proc.c | 3 +- security/keys/request_key.c | 1 + security/keys/request_key_auth.c | 2 +- 77 files changed, 417 insertions(+), 233 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/71 ARM: 8834/1: Fix: kprobes: optimized kprobes illegal instruction
4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mathieu Desnoyers <[email protected]>
commit 0ac569bf6a7983c0c5747d6df8db9dc05bc92b6c upstream.
commit e46daee53bb5 ("ARM: 8806/1: kprobes: Fix false positive with FORTIFY_SOURCE") introduced a regression in optimized kprobes. It triggers "invalid instruction" oopses when using kprobes instrumentation through lttng and perf. This commit was introduced in kernel v4.20, and has been backported to stable kernels 4.19 and 4.14.
This crash was also reported by Hongzhi Song on the redhat bugzilla where the patch was originally introduced.
--- arch/arm/probes/kprobes/opt-arm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/probes/kprobes/opt-arm.c +1 -1
@@ -247,7 +247,7 @@ int arch_prepare_optimized_kprobe(struct }/* Copy arch-dep-instance from template. */ -memcpy (code, (unsigned char *)optprobe_template_entry, +memcpy (code, (unsigned long *)&optprobe_template_entry,TMPL_END_IDX *sizeof (kprobe_opcode_t));/* Adjust buffer according to instruction. */
_______________________________________________
linux-arm-kernel mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Greg Kroah-Hartman
maintainerPATCH 2/71 tracing: Fix number of entries in trace header
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Quentin Perret <[email protected]>
commit 9e7382153f80ba45a0bbcd540fb77d4b15f6e966 upstream.
The following commit
441dae8f2f29 ("tracing: Add support for display of tgid in trace output")
removed the call to print_event_info() from print_func_help_header_irq() which results in the ftrace header not reporting the number of entries written in the buffer. As this wasn't the original intent of the patch, re-introduce the call to print_event_info() to restore the orginal behaviour.
--- kernel/trace/trace.c | 2 ++ 1 file changed, 2 insertions(+)
kernel/trace/trace.c +2 -0
@@ -3381,6 +3381,8 @@ static void print_func_help_header_irq(sconst char tgid_space[] =" " ;const char space[] =" " ; +print_event_info (buf, m); +seq_printf (m,"# %s _-----=> irqs-off\n" , tgid ? tgid_space : space); seq_printf(m, "# %s / _----=> need-resched\n",
Greg Kroah-Hartman
maintainerPATCH 3/71 MIPS: eBPF: Always return sign extended 32b values
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Paul Burton <[email protected]>
commit 13443154f6cac61d148471ede6d7f1f6b5ea946a upstream.
The function prototype used to call JITed eBPF code (ie. the type of the struct bpf_prog bpf_func field) returns an unsigned int. The MIPS n64 ABI that MIPS64 kernels target defines that 32 bit integers should always be sign extended when passed in registers as either arguments or return values.
This means that when returning any value which may not already be sign extended (ie. of type REG_64BIT or REG_32BIT_ZERO_EX) we need to perform that sign extension in order to comply with the n64 ABI. Without this we see strange looking test failures from test_bpf.ko, such as:
test_bpf: #65 ALU64_MOV_X:
dst = 4294967295 jited:1 ret -1 != -1 FAIL (1 times)
Although the return value printed matches the expected value, this is only because printf is only examining the least significant 32 bits of the 64 bit register value we returned. The register holding the expected value is sign extended whilst the v0 register was set to a zero extended value by our JITed code, so when compared by a conditional branch instruction the values are not equal.
We already handle this when the return value register is of type REG_32BIT_ZERO_EX, so simply extend this to also cover REG_64BIT.
--- arch/mips/net/ebpf_jit.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
arch/mips/net/ebpf_jit.c +6 -3
@@ -348,12 +348,15 @@ static int build_int_epilogue(struct jitconst struct bpf_prog *prog = ctx->skf;int stack_adjust = ctx->stack_size;int store_offset = stack_adjust -8 ; +enum reg_val_type td;int r0 =MIPS_R_V0 ; -if (dest_reg ==MIPS_R_RA && -get_reg_val_type (ctx, prog->len,BPF_REG_0 ) ==REG_32BIT_ZERO_EX ) +if (dest_reg ==MIPS_R_RA ) {/* Don't let zero extended value escape. */ -emit_instr (ctx, sll, r0, r0,0 ); + td =get_reg_val_type (ctx, prog->len,BPF_REG_0 ); +if (td ==REG_64BIT || td ==REG_32BIT_ZERO_EX ) +emit_instr (ctx, sll, r0, r0,0 ); + }if (ctx->flags &EBPF_SAVE_RA ) {emit_instr (ctx, ld,MIPS_R_RA , store_offset,MIPS_R_SP );
Greg Kroah-Hartman
maintainerPATCH 4/71 mac80211: Restore vif beacon interval if start ap fails
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rakesh Pillai <[email protected]>
commit 83e37e0bdd1470bbe6612250b745ad39b1a7b130 upstream.
The starting of AP interface can fail due to invalid beacon interval, which does not match the minimum gcd requirement set by the wifi driver. In such case, the beacon interval of that interface gets updated with that invalid beacon interval.
The next time that interface is brought up in AP mode, an interface combination check is performed and the beacon interval is taken from the previously set value.
In a case where an invalid beacon interval, i.e. a beacon interval value which does not satisfy the minimum gcd criteria set by the driver, is set, all the subsequent trials to bring that interface in AP mode will fail, even if the subsequent trials have a valid beacon interval.
To avoid this, in case of a failure in bringing up an interface in AP mode due to interface combination error, the interface beacon interval which is stored in bss conf, needs to be restored with the last working value of beacon interval.
Tested on ath10k using WCN3990.
--- net/mac80211/cfg.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
net/mac80211/cfg.c +5 -1
@@ -884,6 +884,7 @@ static int ieee80211_start_ap(struct wipBSS_CHANGED_P2P_PS |BSS_CHANGED_TXPOWER ;int err; +int prev_beacon_int; old =sdata_dereference (sdata->u.ap.beacon, sdata);if (old)
@@ -906,6 +907,7 @@ static int ieee80211_start_ap(struct wip sdata->needed_rx_chains = sdata->local->rx_chains; + prev_beacon_int = sdata->vif.bss_conf.beacon_int; sdata->vif.bss_conf.beacon_int = params->beacon_interval;mutex_lock (&local->mtx);
@@ -914,8 +916,10 @@ static int ieee80211_start_ap(struct wipif (!err)ieee80211_vif_copy_chanctx_to_vlans (sdata, false);mutex_unlock (&local->mtx); -if (err) +if (err) { + sdata->vif.bss_conf.beacon_int = prev_beacon_int;return err; + }/* * Apply control port protocol, this allows us to
Greg Kroah-Hartman
maintainerPATCH 5/71 mac80211: Free mpath object when rhashtable insertion fails
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Herbert Xu <[email protected]>
commit 4ff3a9d14c6c06eaa4e5976c61599ea2bd9e81b2 upstream.
When rhashtable insertion fails the mesh table code doesn't free the now-orphan mesh path object. This patch fixes that.
--- net/mac80211/mesh_pathtbl.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)
net/mac80211/mesh_pathtbl.c +9 -8
@@ -448,17 +448,15 @@ struct mesh_path *mesh_path_add(struct i }while (unlikely (ret == -EEXIST && !mpath)); -if (ret && ret != -EEXIST ) -return ERR_PTR (ret); - -/* At this point either new_mpath was added, or we found a -* matching entry already in the table; in the latter case -* free the unnecessary new entry. -*/ -if (ret == -EEXIST ) { +if (ret) {kfree (new_mpath); + +if (ret != -EEXIST ) +return ERR_PTR (ret); + new_mpath = mpath; } + sdata->u.mesh.mesh_paths_generation++;return new_mpath; }
@@ -488,6 +486,9 @@ int mpp_path_add(struct ieee80211_sub_if &new_mpath->rhash, mesh_rht_params); +if (ret) +kfree (new_mpath); + sdata->u.mesh.mpp_paths_generation++;return ret; }
Greg Kroah-Hartman
maintainerPATCH 6/71 libceph: handle an empty authorize reply
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ilya Dryomov <[email protected]>
commit 0fd3fd0a9bb0b02b6435bb7070e9f7b82a23f068 upstream.
The authorize reply can be empty, for example when the ticket used to build the authorizer is too old and TAG_BADAUTHORIZER is returned from the service. Calling ->verify_authorizer_reply() results in an attempt to decrypt and validate (somewhat) random data in au->buf (most likely the signature block from calc_signature()), which fails and ends up in con_fault_finish() with !con->auth_retry. The ticket isn't invalidated and the connection is retried again and again until a new ticket is obtained from the monitor:
libceph: osd2 192.168.122.1:6809 bad authorize reply
libceph: osd2 192.168.122.1:6809 bad authorize reply
libceph: osd2 192.168.122.1:6809 bad authorize reply
libceph: osd2 192.168.122.1:6809 bad authorize reply
Let TAG_BADAUTHORIZER handler kick in and increment con->auth_retry.
--- net/ceph/messenger.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
net/ceph/messenger.c +9 -6
@@ -2057,6 +2057,8 @@ static int process_connect(struct ceph_cdout ("process_connect on %p tag %d\n" , con, (int )con->in_tag);if (con->auth) { +int len =le32_to_cpu (con->in_reply.authorizer_len); +/* * Any connection that defines ->get_authorizer() * should also define ->add_authorizer_challenge() and
@@ -2066,8 +2068,7 @@ static int process_connect(struct ceph_c*/ if (con->in_reply.tag ==CEPH_MSGR_TAG_CHALLENGE_AUTHORIZER ) { ret = con->ops->add_authorizer_challenge ( - con, con->auth->authorizer_reply_buf, -le32_to_cpu (con->in_reply.authorizer_len)); + con, con->auth->authorizer_reply_buf, len);if (ret <0 )return ret;
@@ -2077,10 +2078,12 @@ static int process_connect(struct ceph_creturn 0 ; } - ret = con->ops->verify_authorizer_reply (con); -if (ret <0 ) { - con->error_msg ="bad authorize reply" ; -return ret; +if (len) { + ret = con->ops->verify_authorizer_reply (con); +if (ret <0 ) { + con->error_msg ="bad authorize reply" ; +return ret; + } } }
Greg Kroah-Hartman
maintainerPATCH 7/71 ceph: avoid repeatedly adding inode to mdsc->snap_flush_list
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yan, Zheng <[email protected]>
commit 04242ff3ac0abbaa4362f97781dac268e6c3541a upstream.
Otherwise, mdsc->snap_flush_list may get corrupted.
--- fs/ceph/snap.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/ceph/snap.c +2 -1
@@ -616,7 +616,8 @@ int __ceph_finish_cap_snap(struct ceph_i capsnap->size);spin_lock (&mdsc->snap_flush_lock); -list_add_tail (&ci->i_snap_flush_item, &mdsc->snap_flush_list); +if (list_empty (&ci->i_snap_flush_item)) +list_add_tail (&ci->i_snap_flush_item, &mdsc->snap_flush_list);spin_unlock (&mdsc->snap_flush_lock);return 1 ;/* caller may want to ceph_flush_snaps */ }
Greg Kroah-Hartman
maintainerPATCH 8/71 numa: change get_mempolicy() to use nr_node_ids instead of MAX_NUMNODES
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ralph Campbell <[email protected]>
commit 050c17f239fd53adb55aa768d4f41bc76c0fe045 upstream.
The system call, get_mempolicy() [1], passes an unsigned long *nodemask pointer and an unsigned long maxnode argument which specifies the length of the user's nodemask array in bits (which is rounded up). The manual page says that if the maxnode value is too small, get_mempolicy will return EINVAL but there is no system call to return this minimum value. To determine this value, some programs search /proc/<pid>/status for a line starting with "Mems_allowed:" and use the number of digits in the mask to determine the minimum value. A recent change to the way this line is formatted [2] causes these programs to compute a value less than MAX_NUMNODES so get_mempolicy() returns EINVAL.
Change get_mempolicy(), the older compat version of get_mempolicy(), and the copy_nodes_to_user() function to use nr_node_ids instead of MAX_NUMNODES, thus preserving the defacto method of computing the minimum size for the nodemask array and the maxnode argument.
[1] http://man7.org/linux/man-pages/man2/get_mempolicy.2.html
[2] https://lore.kernel.org/lkml/[email protected]
--- mm/mempolicy.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
mm/mempolicy.c +3 -3
@@ -1325,7 +1325,7 @@ static int copy_nodes_to_user(unsigned l nodemask_t *nodes) {unsigned long copy =ALIGN (maxnode-1 ,64 ) /8 ; -const int nbytes =BITS_TO_LONGS (MAX_NUMNODES ) *sizeof (long ); +unsigned int nbytes =BITS_TO_LONGS (nr_node_ids) *sizeof (long );if (copy > nbytes) {if (copy >PAGE_SIZE )
@@ -1486,7 +1486,7 @@ SYSCALL_DEFINE5(get_mempolicy, int __useint uninitialized_var (pval );nodemask_t nodes; -if (nmask !=NULL && maxnode <MAX_NUMNODES ) +if (nmask !=NULL && maxnode < nr_node_ids)return -EINVAL ; err =do_get_mempolicy (&pval, &nodes, addr, flags);
@@ -1515,7 +1515,7 @@ COMPAT_SYSCALL_DEFINE5(get_mempolicy, inunsigned long nr_bits, alloc_size;DECLARE_BITMAP (bm,MAX_NUMNODES ); - nr_bits = min_t(unsigned long, maxnode-1, MAX_NUMNODES); + nr_bits = min_t(unsigned long, maxnode-1, nr_node_ids); alloc_size =ALIGN (nr_bits,BITS_PER_LONG ) /8 ;if (nmask)
Greg Kroah-Hartman
maintainerPATCH 9/71 proc, oom: do not report alien mms when setting oom_score_adj
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michal Hocko <[email protected]>
commit b2b469939e93458753cfbf8282ad52636495965e upstream.
Tetsuo has reported that creating a thousands of processes sharing MM without SIGHAND (aka alien threads) and setting /proc/<pid>/oom_score_adj will swamp the kernel log and takes ages [1] to finish. This is especially worrisome that all that printing is done under RCU lock and this can potentially trigger RCU stall or softlockup detector.
The primary reason for the printk was to catch potential users who might depend on the behavior prior to 44a70adec910 ("mm, oom_adj: make sure processes sharing mm have same view of oom_score_adj") but after more than 2 years without a single report I guess it is safe to simply remove the printk altogether.
The next step should be moving oom_score_adj over to the mm struct and remove all the tasks crawling as suggested by [2]
[1] http://lkml.kernel.org/r/[email protected]
[2] http://lkml.kernel.org/r/[email protected]
--- fs/proc/base.c | 4 ---- 1 file changed, 4 deletions(-)
fs/proc/base.c +0 -4
@@ -1108,10 +1108,6 @@ static int __set_oom_adj(struct file *fitask_lock (p);if (!p->vfork_done &&process_shares_mm (p, mm)) { -pr_info ("updating oom_score_adj for %d (%s) from %d to %d because it shares mm with %d (%s). Report if this is unexpected.\n" , -task_pid_nr (p), p->comm, - p->signal->oom_score_adj, oom_adj, -task_pid_nr (task), task->comm); p->signal->oom_score_adj = oom_adj;if (!legacy &&has_capability_noaudit (current,CAP_SYS_RESOURCE )) p->signal->oom_score_adj_min = (short )oom_adj;
Greg Kroah-Hartman
maintainerPATCH 10/71 KEYS: allow reaching the keys quotas exactly
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Biggers <[email protected]>
commit a08bf91ce28ed3ae7b6fef35d843fef8dc8c2cd9 upstream.
If the sysctl 'kernel.keys.maxkeys' is set to some number n, then actually users can only add up to 'n - 1' keys. Likewise for 'kernel.keys.maxbytes' and the root_* versions of these sysctls. But these sysctls are apparently supposed to be *maximums*, as per their names and all documentation I could find -- the keyrings(7) man page, Documentation/security/keys/core.rst, and all the mentions of EDQUOT meaning that the key quota was *exceeded* (as opposed to reached).
Thus, fix the code to allow reaching the quotas exactly.
--- security/keys/key.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
security/keys/key.c +2 -2
@@ -265,8 +265,8 @@ struct key *key_alloc(struct key_type *tspin_lock (&user->lock);if (!(flags &KEY_ALLOC_QUOTA_OVERRUN )) { -if (user->qnkeys +1 >= maxkeys || - user->qnbytes + quotalen >= maxbytes || +if (user->qnkeys +1 > maxkeys || + user->qnbytes + quotalen > maxbytes || user->qnbytes + quotalen < user->qnbytes) goto no_quota; }
Greg Kroah-Hartman
maintainerPATCH 11/71 mfd: ti_am335x_tscadc: Use PLATFORM_DEVID_AUTO while registering mfd cells
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit b40ee006fe6a8a25093434e5d394128c356a48f3 ]
Use PLATFORM_DEVID_AUTO to number mfd cells while registering, so that different instances are uniquely identified. This is required in order to support registering of multiple instances of same ti_am335x_tscadc IP.
--- drivers/mfd/ti_am335x_tscadc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/mfd/ti_am335x_tscadc.c +3 -2
@@ -265,8 +265,9 @@ static int ti_tscadc_probe(struct platform_device *pdev) cell->pdata_size =sizeof (tscadc); } - err =mfd_add_devices (&pdev->dev, pdev->id, tscadc->cells, - tscadc->used_cells,NULL ,0 ,NULL ); + err =mfd_add_devices (&pdev->dev,PLATFORM_DEVID_AUTO , + tscadc->cells, tscadc->used_cells,NULL , +0 ,NULL );if (err <0 ) goto err_disable_clk;
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 12/71 pvcalls-back: set -ENOTCONN in pvcalls_conn_back_read
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit e6587cdbd732eacb4c7ce592ed46f7bbcefb655f ]
When a connection is closing we receive on pvcalls_sk_state_change notification. Instead of setting the connection as closed immediately (-ENOTCONN), let's read one more time from it: pvcalls_conn_back_read will set the connection as closed when necessary.
That way, we avoid races between pvcalls_sk_state_change and pvcalls_back_ioworker.
--- drivers/xen/pvcalls-back.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/xen/pvcalls-back.c +4 -3
@@ -164,9 +164,10 @@ static void pvcalls_conn_back_read(void *opaque)/* write the data, then modify the indexes */ virt_wmb (); -if (ret <0 ) +if (ret <0 ) { +atomic_set (&map->read,0 ); intf->in_error = ret; -else + }else intf->in_prod = prod + ret;/* update the indexes, then notify the other end */ virt_wmb ();
@@ -296,7 +297,7 @@ static void pvcalls_sk_state_change(struct sock *sock)return ; intf = map->ring; - intf->in_error = -ENOTCONN ; +atomic_inc (&map->read);notify_remote_via_irq (map->irq); }
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 13/71 mfd: twl-core: Fix section annotations on {,un}protect_pm_master
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 8838555089f0345b87f4277fe5a8dd647dc65589 ]
When building the kernel with Clang, the following section mismatch warning appears:
WARNING: vmlinux.o(.text+0x3d84a3b): Section mismatch in reference from the function twl_probe() to the function .init.text:unprotect_pm_master()
The function twl_probe() references
the function __init unprotect_pm_master().
This is often because twl_probe lacks a __init
annotation or the annotation of unprotect_pm_master is wrong.
Remove the __init annotation on the *protect_pm_master functions so there is no more mismatch.
--- drivers/mfd/twl-core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/mfd/twl-core.c +2 -2
@@ -979,7 +979,7 @@ add_children(struct twl4030_platform_data *pdata, unsigned irq_base,* letting it generate the right frequencies for USB, MADC, and * other purposes. */ -static inline int __init protect_pm_master (void ) +static inline int protect_pm_master (void ) {int e =0 ;
@@ -988,7 +988,7 @@ static inline int __init protect_pm_master(void)return e; } -static inline int __init unprotect_pm_master (void ) +static inline int unprotect_pm_master (void ) {int e =0 ;
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 14/71 mfd: db8500-prcmu: Fix some section annotations
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit a3888f62fe66429fad3be7f2ba962e1e08c26fd6 ]
When building the kernel with Clang, the following section mismatch warnings appear:
WARNING: vmlinux.o(.text+0x7239cc): Section mismatch in reference from the function db8500_prcmu_probe() to the function .init.text:init_prcm_registers()
The function db8500_prcmu_probe() references
the function __init init_prcm_registers().
This is often because db8500_prcmu_probe lacks a __init annotation or the annotation of init_prcm_registers is wrong.
WARNING: vmlinux.o(.text+0x723e28): Section mismatch in reference from the function db8500_prcmu_probe() to the function .init.text:fw_project_name()
The function db8500_prcmu_probe() references
the function __init fw_project_name().
This is often because db8500_prcmu_probe lacks a __init annotation or the annotation of fw_project_name is wrong.
db8500_prcmu_probe should not be marked as __init so remove the __init annotation from fw_project_name and init_prcm_registers.
--- drivers/mfd/db8500-prcmu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/mfd/db8500-prcmu.c +2 -2
@@ -2584,7 +2584,7 @@ static struct irq_chip prcmu_irq_chip = { .irq_unmask = prcmu_irq_unmask, }; -static __init char *fw_project_name (u32 project) +static char *fw_project_name (u32 project) {switch (project) {case PRCMU_FW_PROJECT_U8500 :
@@ -2732,7 +2732,7 @@ void __init db8500_prcmu_early_init(u32 phy_base, u32 size)INIT_WORK (&mb0_transfer.mask_work, prcmu_mask_work); } -static void __init init_prcm_registers (void ) +static void init_prcm_registers (void ) {u32 val;
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 15/71 mfd: mt6397: Do not call irq_domain_remove if PMIC unsupported
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit a177276aa098aa47a100d51a13eaaef029604b6d ]
If the PMIC ID is unknown, the current code would call irq_domain_remove and panic, as pmic->irq_domain is only initialized by mt6397_irq_init.
Return immediately with an error, if the chip ID is unsupported.
--- drivers/mfd/mt6397-core.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/mfd/mt6397-core.c +1 -2
@@ -309,8 +309,7 @@ static int mt6397_probe(struct platform_device *pdev)default :dev_err (&pdev->dev,"unsupported chip: %d\n" , id); - ret = -ENODEV ; -break ; +return -ENODEV ; }if (ret) {
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 16/71 mfd: ab8500-core: Return zero in get_register_interruptible()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 10628e3ecf544fa2e4e24f8e112d95c37884dc98 ]
This function is supposed to return zero on success or negative error codes on error. Unfortunately, there is a bug so it sometimes returns non-zero, positive numbers on success.
I noticed this bug during review and I can't test it. It does appear that the return is sometimes propogated back to _regmap_read() where all non-zero returns are treated as failure so this may affect run time.
--- drivers/mfd/ab8500-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/mfd/ab8500-core.c +1 -1
@@ -261,7 +261,7 @@ static int get_register_interruptible(struct ab8500 *ab8500, u8 bank,mutex_unlock (&ab8500->lock);dev_vdbg (ab8500->dev,"rd: addr %#x => data %#x\n" , addr, ret); -return ret; +return (ret <0 ) ? ret :0 ; } static int ab8500_get_register(struct device *dev, u8 bank,
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 17/71 mfd: bd9571mwv: Add volatile register to make DVFS work
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit b0aff01e7aa6ad2d6998ef1323843212d1db8b04 ]
Because BD9571MWV_DVFS_MONIVDAC is not defined in the volatile table, the physical register value is not updated by regmap and DVFS doesn't work as expected. Fix it!
--- drivers/mfd/bd9571mwv.c | 1 + 1 file changed, 1 insertion(+)
drivers/mfd/bd9571mwv.c +1 -0
@@ -57,6 +57,7 @@ static const struct regmap_access_table bd9571mwv_writable_table = { };static const struct regmap_range bd9571mwv_volatile_yes_ranges[] = { +regmap_reg_range (BD9571MWV_DVFS_MONIVDAC ,BD9571MWV_DVFS_MONIVDAC ),regmap_reg_range (BD9571MWV_GPIO_IN ,BD9571MWV_GPIO_IN ),regmap_reg_range (BD9571MWV_GPIO_INT ,BD9571MWV_GPIO_INT ),regmap_reg_range (BD9571MWV_INT_INTREQ ,BD9571MWV_INT_INTREQ ),
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 18/71 mfd: qcom_rpm: write fw_version to CTRL_REG
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 504e4175829c44328773b96ad9c538e4783a8d22 ]
This is required as part of the initialization sequence on certain SoCs.
If these registers are not initialized, the hardware can be unresponsive. This fixes the driver on apq8060 (HP TouchPad device).
--- drivers/mfd/qcom_rpm.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/mfd/qcom_rpm.c +4 -0
@@ -638,6 +638,10 @@ static int qcom_rpm_probe(struct platform_device *pdev)return -EFAULT ; } +writel (fw_version[0 ],RPM_CTRL_REG (rpm,0 )); +writel (fw_version[1 ],RPM_CTRL_REG (rpm,1 )); +writel (fw_version[2 ],RPM_CTRL_REG (rpm,2 )); +dev_info (&pdev->dev,"RPM firmware %u.%u.%u\n" , fw_version[0 ], fw_version[1 ], fw_version[2 ]);
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 19/71 mfd: wm5110: Add missing ASRC rate register
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 04c801c18ded421845324255e660147a6f58dcd6 ]
--- drivers/mfd/wm5110-tables.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/mfd/wm5110-tables.c +2 -0
@@ -1618,6 +1618,7 @@ static const struct reg_default wm5110_reg_default[] = { { 0x00000ECD, 0x0000 }, /* R3789 - HPLPF4_2 */ { 0x00000EE0, 0x0000 }, /* R3808 - ASRC_ENABLE */ { 0x00000EE2, 0x0000 }, /* R3810 - ASRC_RATE1 */ + { 0x00000EE3, 0x4000 }, /* R3811 - ASRC_RATE2 */ { 0x00000EF0, 0x0000 }, /* R3824 - ISRC 1 CTRL 1 */ { 0x00000EF1, 0x0000 }, /* R3825 - ISRC 1 CTRL 2 */ { 0x00000EF2, 0x0000 }, /* R3826 - ISRC 1 CTRL 3 */
@@ -2869,6 +2870,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)case ARIZONA_ASRC_ENABLE :case ARIZONA_ASRC_STATUS :case ARIZONA_ASRC_RATE1 : +case ARIZONA_ASRC_RATE2 :case ARIZONA_ISRC_1_CTRL_1 :case ARIZONA_ISRC_1_CTRL_2 :case ARIZONA_ISRC_1_CTRL_3 :
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 20/71 mfd: tps65218: Use devm_regmap_add_irq_chip and clean up error path in probe()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 75d4c5e03c2ae9902ab521024b10291f6fc9515b ]
Use devm_regmap_add_irq_chip and clean up error path in probe and also the remove function.
--- drivers/mfd/tps65218.c | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-)
drivers/mfd/tps65218.c +3 -21
@@ -243,9 +243,9 @@ static int tps65218_probe(struct i2c_client *client,mutex_init (&tps->tps_lock); - ret =regmap_add_irq_chip (tps->regmap, tps->irq, -IRQF_ONESHOT ,0 , &tps65218_irq_chip, - &tps->irq_data); + ret =devm_regmap_add_irq_chip (&client->dev, tps->regmap, tps->irq, +IRQF_ONESHOT ,0 , &tps65218_irq_chip, + &tps->irq_data);if (ret <0 )return ret;
@@ -261,26 +261,9 @@ static int tps65218_probe(struct i2c_client *client,ARRAY_SIZE (tps65218_cells),NULL ,0 , regmap_irq_get_domain(tps->irq_data)); -if (ret <0 ) - goto err_irq; - -return 0 ; - -err_irq: -regmap_del_irq_chip (tps->irq, tps->irq_data); -return ret; } -static int tps65218_remove (struct i2c_client *client) -{ -struct tps65218 *tps =i2c_get_clientdata (client); - -regmap_del_irq_chip (tps->irq, tps->irq_data); - -return 0 ; -} -static const struct i2c_device_id tps65218_id_table[] = { {"tps65218" ,TPS65218 }, { },
@@ -293,7 +276,6 @@ static struct i2c_driver tps65218_driver = { .of_match_table = of_tps65218_match_table, }, .probe = tps65218_probe, - .remove = tps65218_remove, .id_table = tps65218_id_table, };
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 21/71 mfd: mc13xxx: Fix a missing check of a register-read failure
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 9e28989d41c0eab57ec0bb156617a8757406ff8a ]
When mc13xxx_reg_read() fails, "old_adc0" is uninitialized and will contain random value. Further execution uses "old_adc0" even when mc13xxx_reg_read() fails.
The fix checks the return value of mc13xxx_reg_read(), and exits the execution when it fails.
--- drivers/mfd/mc13xxx-core.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/mfd/mc13xxx-core.c +3 -1
@@ -274,7 +274,9 @@ int mc13xxx_adc_do_conversion(struct mc13xxx *mc13xxx, unsigned int mode, mc13xxx->adcflags |=MC13XXX_ADC_WORKING ; -mc13xxx_reg_read (mc13xxx,MC13XXX_ADC0 , &old_adc0); + ret =mc13xxx_reg_read (mc13xxx,MC13XXX_ADC0 , &old_adc0); +if (ret) + goto out; adc0 =MC13XXX_ADC0_ADINC1 |MC13XXX_ADC0_ADINC2 ; adc1 =MC13XXX_ADC1_ADEN |MC13XXX_ADC1_ADTRIGIGN |MC13XXX_ADC1_ASC ;
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 22/71 xen/pvcalls: remove set but not used variable intf
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 1f8ce09b36c41a026a37a24b20efa32000892a64 ]
Fixes gcc '-Wunused-but-set-variable' warning:
drivers/xen/pvcalls-back.c: In function 'pvcalls_sk_state_change':drivers/xen/pvcalls-back.c:286:28: warning:
variable 'intf' set but not used [-Wunused-but-set-variable]
It not used since e6587cdbd732 ("pvcalls-back: set -ENOTCONN in pvcalls_conn_back_read")
--- drivers/xen/pvcalls-back.c | 2 -- 1 file changed, 2 deletions(-)
drivers/xen/pvcalls-back.c +0 -2
@@ -291,12 +291,10 @@ static int pvcalls_back_socket(struct xenbus_device *dev,static void pvcalls_sk_state_change (struct sock *sock) {struct sock_mapping *map = sock->sk_user_data; -struct pvcalls_data_intf *intf;if (map ==NULL )return ; - intf = map->ring;atomic_inc (&map->read);notify_remote_via_irq (map->irq); }
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 23/71 qed: Fix qed_chain_set_prod() for PBL chains with non power of 2 page count
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 2d533a9287f2011632977e87ce2783f4c689c984 ]
In PBL chains with non power of 2 page count, the producer is not at the beginning of the chain when index is 0 after a wrap. Therefore, after the producer index wrap around, page index should be calculated more carefully.
--- include/linux/qed/qed_chain.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+)
include/linux/qed/qed_chain.h +31 -0
@@ -663,6 +663,37 @@ static inline void *qed_chain_get_last_elem(struct qed_chain *p_chain)static inline void qed_chain_set_prod (struct qed_chain *p_chain,u32 prod_idx,void *p_prod_elem) { +if (p_chain->mode ==QED_CHAIN_MODE_PBL ) { +u32 cur_prod, page_mask, page_cnt, page_diff; + + cur_prod =is_chain_u16 (p_chain) ? p_chain->u.chain16.prod_idx : + p_chain->u.chain32.prod_idx; + +/* Assume that number of elements in a page is power of 2 */ + page_mask = ~p_chain->elem_per_page_mask; + +/* Use "cur_prod - 1" and "prod_idx - 1" since producer index +* reaches the first element of next page before the page index +* is incremented. See qed_chain_produce(). +* Index wrap around is not a problem because the difference +* between current and given producer indices is always +* positive and lower than the chain's capacity. +*/ + page_diff = (((cur_prod -1 ) & page_mask) - + ((prod_idx -1 ) & page_mask)) / + p_chain->elem_per_page; + + page_cnt =qed_chain_get_page_cnt (p_chain); +if (is_chain_u16 (p_chain)) + p_chain->pbl.c.u16.prod_page_idx = + (p_chain->pbl.c.u16.prod_page_idx - + page_diff + page_cnt) % page_cnt; +else + p_chain->pbl.c.u32.prod_page_idx = + (p_chain->pbl.c.u32.prod_page_idx - + page_diff + page_cnt) % page_cnt; + } +if (is_chain_u16 (p_chain)) p_chain->u.chain16.prod_idx = (u16 ) prod_idx;else
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 24/71 qed: Fix qed_ll2_post_rx_buffer_notify_fw() by adding a write memory barrier
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 46721c3d9e273aea880e9ff835b0e1271e1cd2fb ]
Make sure chain element is updated before ringing the doorbell.
--- drivers/net/ethernet/qlogic/qed/qed_ll2.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/net/ethernet/qlogic/qed/qed_ll2.c +4 -0
@@ -1487,6 +1487,10 @@ static void qed_ll2_post_rx_buffer_notify_fw(struct qed_hwfn *p_hwfn, cq_prod =qed_chain_get_prod_idx (&p_rx->rcq_chain); rx_prod.bd_prod =cpu_to_le16 (bd_prod); rx_prod.cqe_prod =cpu_to_le16 (cq_prod); + +/* Make sure chain element is updated before ringing the doorbell */ +dma_wmb (); +DIRECT_REG_WR (p_rx->set_prod_addr, *((u32 *)&rx_prod)); }
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 25/71 net: hns: Fix use after free identified by SLUB debug
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit bb989501abcafa0de5f18b0ec0ec459b5b817908 ]
When enable SLUB debug, than remove hns_enet_drv module, SLUB debug will identify a use after free bug:
[134.189505] Unable to handle kernel paging request at virtual address 006b6b6b6b6b6b6b [134.197553] Mem abort info: [134.200381] ESR = 0x96000004 [134.203487] Exception class = DABT (current EL), IL = 32 bits [134.209497] SET = 0, FnV = 0 [134.212596] EA = 0, S1PTW = 0 [134.215777] Data abort info: [134.218701] ISV = 0, ISS = 0x00000004 [134.222596] CM = 0, WnR = 0 [134.225606] [006b6b6b6b6b6b6b] address between user and kernel address ranges [134.232851] Internal error: Oops: 96000004 [#1] SMP [134.237798] CPU: 21 PID: 27834 Comm: rmmod Kdump: loaded Tainted: G OE 4.19.5-1.2.34.aarch64 #1 [134.247856] Hardware name: Huawei TaiShan 2280 /BC11SPCD, BIOS 1.58 10/24/2018 [134.255181] pstate: 20000005 (nzCv daif -PAN -UAO) [134.260044] pc : hns_ae_put_handle+0x38/0x60 [134.264372] lr : hns_ae_put_handle+0x24/0x60 [134.268700] sp : ffff00001be93c50 [134.272054] x29: ffff00001be93c50 x28: ffff802faaec8040 [134.277442] x27: 0000000000000000 x26: 0000000000000000 [134.282830] x25: 0000000056000000 x24: 0000000000000015 [134.288284] x23: ffff0000096fe098 x22: ffff000001050070 [134.293671] x21: ffff801fb3c044a0 x20: ffff80afb75ec098 [134.303287] x19: ffff80afb75ec098 x18: 0000000000000000 [134.312945] x17: 0000000000000000 x16: 0000000000000000 [134.322517] x15: 0000000000000002 x14: 0000000000000000 [134.332030] x13: dead000000000100 x12: ffff7e02bea3c988 [134.341487] x11: ffff80affbee9e68 x10: 0000000000000000 [134.351033] x9 : 6fffff8000008101 x8 : 0000000000000000 [134.360569] x7 : dead000000000100 x6 : ffff000009579748 [134.370059] x5 : 0000000000210d00 x4 : 0000000000000000 [134.379550] x3 : 0000000000000001 x2 : 0000000000000000 [134.388813] x1 : 6b6b6b6b6b6b6b6b x0 : 0000000000000000 [134.397993] Process rmmod (pid: 27834, stack limit = 0x00000000d474b7fd) [134.408498] Call trace: [134.414611] hns_ae_put_handle+0x38/0x60 [134.422208] hnae_put_handle+0xd4/0x108 [134.429563] hns_nic_dev_remove+0x60/0xc0 [hns_enet_drv] [134.438342] platform_drv_remove+0x2c/0x70 [134.445958] device_release_driver_internal+0x174/0x208 [134.454810] driver_detach+0x70/0xd8 [134.461913] bus_remove_driver+0x64/0xe8 [134.469396] driver_unregister+0x34/0x60 [134.476822] platform_driver_unregister+0x20/0x30 [134.485130] hns_nic_dev_driver_exit+0x14/0x6e4 [hns_enet_drv] [134.494634] __arm64_sys_delete_module+0x238/0x290
struct hnae_handle is a member of struct hnae_vf_cb, so when vf_cb is freed, than use hnae_handle will cause use after free panic.
This patch frees vf_cb after hnae_handle used.
--- drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c +2 -4
@@ -147,12 +147,10 @@ static void hns_ae_put_handle(struct hnae_handle *handle)struct hnae_vf_cb *vf_cb =hns_ae_get_vf_cb (handle);int i; - vf_cb->mac_cb =NULL ; - -kfree (vf_cb); -for (i =0 ; i < handle->q_num; i++)hns_ae_get_ring_pair (handle->qs[i])->used_by_vf =0 ; + +kfree (vf_cb); }static int hns_ae_wait_flow_down (struct hnae_handle *handle)
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 26/71 MIPS: ath79: Enable OF serial ports in the default config
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 565dc8a4f55e491935bfb04866068d21784ea9a4 ]
CONFIG_SERIAL_OF_PLATFORM is needed to get a working console on the OF boards, enable it in the default config to get a working setup out of the box.
--- arch/mips/configs/ath79_defconfig | 1 + 1 file changed, 1 insertion(+)
arch/mips/configs/ath79_defconfig +1 -0
@@ -72,6 +72,7 @@ CONFIG_SERIAL_8250_CONSOLE=y # CONFIG_SERIAL_8250_PCI is not set CONFIG_SERIAL_8250_NR_UARTS=1 CONFIG_SERIAL_8250_RUNTIME_UARTS=1 +CONFIG_SERIAL_OF_PLATFORM=y CONFIG_SERIAL_AR933X=y CONFIG_SERIAL_AR933X_CONSOLE=y # CONFIG_HW_RANDOM is not set
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 27/71 netfilter: nf_tables: fix leaking object reference count
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit b91d9036883793122cf6575ca4dfbfbdd201a83d ]
There is no code that decreases the reference count of stateful objects in error path of the nft_add_set_elem(). this causes a leak of reference count of stateful objects.
Test commands:
$nft add table ip filter
$nft add counter ip filter c1
$nft add map ip filter m1 { type ipv4_addr : counter \;} $nft add element ip filter m1 { 1 : c1 }
$nft add element ip filter m1 { 1 : c1 }
$nft delete element ip filter m1 { 1 }
$nft delete counter ip filter c1
Result:
Error: Could not process rule: Device or resource busy delete counter ip filter c1 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
At the second 'nft add element ip filter m1 { 1 : c1 }', the reference count of the 'c1' is increased then it tries to insert into the 'm1'. but the 'm1' already has same element so it returns -EEXIST.
But it doesn't decrease the reference count of the 'c1' in the error path. Due to a leak of the reference count of the 'c1', the 'c1' can't be removed by 'nft delete counter ip filter c1'.
--- net/netfilter/nf_tables_api.c | 2 ++ 1 file changed, 2 insertions(+)
net/netfilter/nf_tables_api.c +2 -0
@@ -4046,6 +4046,8 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set, err5:kfree (trans); err4: +if (obj) + obj->use--;kfree (elem.priv); err3:if (nla[NFTA_SET_ELEM_DATA ] !=NULL )
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 28/71 scsi: qla4xxx: check return code of qla4xxx_copy_from_fwddb_param
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 72b4a0465f995175a2e22cf4a636bf781f1f28a7 ]
The return code should be check while qla4xxx_copy_from_fwddb_param fails.
--- drivers/scsi/qla4xxx/ql4_os.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/scsi/qla4xxx/ql4_os.c +2 -0
@@ -7241,6 +7241,8 @@ static int qla4xxx_sysfs_ddb_tgt_create(struct scsi_qla_host *ha, rc =qla4xxx_copy_from_fwddb_param (fnode_sess, fnode_conn, fw_ddb_entry); +if (rc) + goto free_sess;ql4_printk (KERN_INFO , ha,"%s: sysfs entry %s created\n" , __func__, fnode_sess->dev.kobj.name);
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 29/71 scsi: isci: initialize shost fully before calling scsi_add_host()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit cc29a1b0a3f2597ce887d339222fa85b9307706d ]
scsi_mq_setup_tags(), which is called by scsi_add_host(), calculates the command size to allocate based on the prot_capabilities. In the isci driver, scsi_host_set_prot() is called after scsi_add_host() so the command size gets calculated to be smaller than it needs to be. Eventually, scsi_mq_init_request() locates the 'prot_sdb' after the command assuming it was sized correctly and a buffer overrun may occur.
However, seeing blk_mq_alloc_rqs() rounds up to the nearest cache line size, the mistake can go unnoticed.
The bug was noticed after the struct request size was reduced by commit 9d037ad707ed ("block: remove req->timeout_list")
Which likely reduced the allocated space for the request by an entire cache line, enough that the overflow could be hit and it caused a panic, on boot, at:
RIP: 0010:t10_pi_complete+0x77/0x1c0
Call Trace:
<IRQ>
sd_done+0xf5/0x340
scsi_finish_command+0xc3/0x120
blk_done_softirq+0x83/0xb0
__do_softirq+0xa1/0x2e6
irq_exit+0xbc/0xd0
call_function_single_interrupt+0xf/0x20
</IRQ>sd_done() would call scsi_prot_sg_count() which reads the number of entities in 'prot_sdb', but seeing 'prot_sdb' is located after the end of the allocated space it reads a garbage number and erroneously calls t10_pi_complete().
To prevent this, the calls to scsi_host_set_prot() are moved into isci_host_alloc() before the call to scsi_add_host(). Out of caution, also move the similar call to scsi_host_set_guard().
--- drivers/scsi/isci/init.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
drivers/scsi/isci/init.c +7 -7
@@ -591,6 +591,13 @@ static struct isci_host *isci_host_alloc(struct pci_dev *pdev, int id) shost->max_lun = ~0 ; shost->max_cmd_len =MAX_COMMAND_SIZE ; +/* turn on DIF support */ +scsi_host_set_prot (shost, +SHOST_DIF_TYPE1_PROTECTION | +SHOST_DIF_TYPE2_PROTECTION | +SHOST_DIF_TYPE3_PROTECTION ); +scsi_host_set_guard (shost,SHOST_DIX_GUARD_CRC ); + err =scsi_add_host (shost, &pdev->dev);if (err) goto err_shost;
@@ -678,13 +685,6 @@ static int isci_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) goto err_host_alloc; } pci_info->hosts[i] = h; - -/* turn on DIF support */ -scsi_host_set_prot (to_shost (h), -SHOST_DIF_TYPE1_PROTECTION | -SHOST_DIF_TYPE2_PROTECTION | -SHOST_DIF_TYPE3_PROTECTION ); -scsi_host_set_guard (to_shost (h),SHOST_DIX_GUARD_CRC ); } err =isci_setup_interrupts (pdev);
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 30/71 MIPS: jazz: fix 64bit build
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 41af167fbc0032f9d7562854f58114eaa9270336 ]
64bit JAZZ builds failed with
linux-next/arch/mips/jazz/jazzdma.c: In function vdma_init:
/linux-next/arch/mips/jazz/jazzdma.c:77:30: error: implicit declaration
of function `KSEG1ADDR`; did you mean `CKSEG1ADDR`?
[-Werror=implicit-function-declaration]
pgtbl = (VDMA_PGTBL_ENTRY *)KSEG1ADDR(pgtbl);
^~~~~~~~~
CKSEG1ADDR
/linux-next/arch/mips/jazz/jazzdma.c:77:10: error: cast to pointer from
integer of different size [-Werror=int-to-pointer-cast]
pgtbl = (VDMA_PGTBL_ENTRY *)KSEG1ADDR(pgtbl);
^
In file included from /linux-next/arch/mips/include/asm/barrier.h:11:0,
from /linux-next/include/linux/compiler.h:248,
from /linux-next/include/linux/kernel.h:10,
from /linux-next/arch/mips/jazz/jazzdma.c:11:
/linux-next/arch/mips/include/asm/addrspace.h:41:29: error: cast from
pointer to integer of different size [-Werror=pointer-to-int-cast]
#define _ACAST32_ (_ATYPE_)(_ATYPE32_) /* widen if necessary */
^
/linux-next/arch/mips/include/asm/addrspace.h:53:25: note: in
expansion of macro `_ACAST32_`
#define CPHYSADDR(a) ((_ACAST32_(a)) & 0x1fffffff)
^~~~~~~~~
/linux-next/arch/mips/jazz/jazzdma.c:84:44: note: in expansion of
macro `CPHYSADDR`
r4030_write_reg32(JAZZ_R4030_TRSTBL_BASE, CPHYSADDR(pgtbl));Using correct casts and CKSEG1ADDR when dealing with the pgtbl setup fixes this.
--- arch/mips/jazz/jazzdma.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
arch/mips/jazz/jazzdma.c +3 -2
@@ -72,14 +72,15 @@ static int __init vdma_init(void) get_order(VDMA_PGTBL_SIZE));BUG_ON (!pgtbl);dma_cache_wback_inv ((unsigned long )pgtbl,VDMA_PGTBL_SIZE ); - pgtbl = (VDMA_PGTBL_ENTRY *)KSEG1ADDR (pgtbl); + pgtbl = (VDMA_PGTBL_ENTRY *)CKSEG1ADDR ((unsigned long )pgtbl);/* * Clear the R4030 translation table */ vdma_pgtbl_init (); -r4030_write_reg32 (JAZZ_R4030_TRSTBL_BASE ,CPHYSADDR (pgtbl)); +r4030_write_reg32 (JAZZ_R4030_TRSTBL_BASE , +CPHYSADDR ((unsigned long )pgtbl));r4030_write_reg32 (JAZZ_R4030_TRSTBL_LIM ,VDMA_PGTBL_SIZE );r4030_write_reg32 (JAZZ_R4030_TRSTBL_INV ,0 );
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 31/71 bpf: correctly set initial window on active Fast Open sender
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 31aa6503a15ba00182ea6dbbf51afb63bf9e851d ]
The existing BPF TCP initial congestion window (TCP_BPF_IW) does not to work on (active) Fast Open sender. This is because it changes the (initial) window only if data_segs_out is zero -- but data_segs_out is also incremented on SYN-data. This patch fixes the issue by proerly accounting for SYN-data additionally.
--- net/core/filter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/core/filter.c +1 -1
@@ -3128,7 +3128,7 @@ BPF_CALL_5(bpf_setsockopt, struct bpf_sock_ops_kern *, bpf_sock,/* Only some options are supported */ switch (optname) {case TCP_BPF_IW : -if (val <=0 || tp->data_segs_out >0 ) +if (val <=0 || tp->data_segs_out > tp->syn_data) ret = -EINVAL ;else tp->snd_cwnd = val;
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 32/71 net: stmmac: Fix PCI module removal leak
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 6dea7e1881fd86b80da64e476ac398008daed857 ]
Since commit b7d0f08e9129, the enable / disable of PCI device is not managed which will result in IO regions not being automatically unmapped. As regions continue mapped it is currently not possible to remove and then probe again the PCI module of stmmac.
Fix this by manually unmapping regions on remove callback.
Changes from v1:
- Fix build error
--- drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c +10 -0
@@ -299,7 +299,17 @@ static int stmmac_pci_probe(struct pci_dev *pdev,*/ static void stmmac_pci_remove (struct pci_dev *pdev) { +int i; +stmmac_dvr_remove (&pdev->dev); + +for (i =0 ; i <=PCI_STD_RESOURCE_END ; i++) { +if (pci_resource_len (pdev, i) ==0 ) +continue ; +pcim_iounmap_regions (pdev,BIT (i)); +break ; + } +pci_disable_device (pdev); }
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 33/71 isdn: i4l: isdn_tty: Fix some concurrency double-free bugs
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 2ff33d6637393fe9348357285931811b76e1402f ]
The functions isdn_tty_tiocmset() and isdn_tty_set_termios() may be concurrently executed.
isdn_tty_tiocmset
isdn_tty_modem_hup
line 719: kfree(info->dtmf_state);
line 721: kfree(info->silence_state);
line 723: kfree(info->adpcms);
line 725: kfree(info->adpcmr);isdn_tty_set_termios
isdn_tty_modem_hup
line 719: kfree(info->dtmf_state);
line 721: kfree(info->silence_state);
line 723: kfree(info->adpcms);
line 725: kfree(info->adpcmr);Thus, some concurrency double-free bugs may occur.
These possible bugs are found by a static tool written by myself and my manual code review.
To fix these possible bugs, the mutex lock "modem_info_mutex" used in isdn_tty_tiocmset() is added in isdn_tty_set_termios().
--- drivers/isdn/i4l/isdn_tty.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/isdn/i4l/isdn_tty.c +5 -1
@@ -1456,15 +1456,19 @@ isdn_tty_set_termios(struct tty_struct *tty, struct ktermios *old_termios) {modem_info *info = (modem_info *) tty->driver_data; +mutex_lock (&modem_info_mutex);if (!old_termios)isdn_tty_change_speed (info);else {if (tty->termios.c_cflag == old_termios->c_cflag && tty->termios.c_ispeed == old_termios->c_ispeed && - tty->termios.c_ospeed == old_termios->c_ospeed) + tty->termios.c_ospeed == old_termios->c_ospeed) { +mutex_unlock (&modem_info_mutex);return ; + }isdn_tty_change_speed (info); } +mutex_unlock (&modem_info_mutex); }/*
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 34/71 scsi: ufs: Fix system suspend status
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit ce9e7bce43526626f7cffe2e657953997870197e ]
hba->is_sys_suspended is set after successful system suspend but not clear after successful system resume.
According to current behavior, hba->is_sys_suspended will not be set if host is runtime-suspended but not system-suspended. Thus we shall aligh the same policy: clear this flag even if host remains runtime-suspended after ufshcd_system_resume is successfully returned.
Simply fix this flag to correct host status logs.
--- drivers/scsi/ufs/ufshcd.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/scsi/ufs/ufshcd.c +2 -0
@@ -7520,6 +7520,8 @@ int ufshcd_system_resume(struct ufs_hba *hba)trace_ufshcd_system_resume (dev_name (hba->dev), ret,ktime_to_us (ktime_sub (ktime_get (), start)), hba->curr_dev_pwr_mode, hba->uic_link_state); +if (!ret) + hba->is_sys_suspended = false;return ret; }EXPORT_SYMBOL (ufshcd_system_resume);
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 35/71 scsi: qedi: Add ep_state for login completion on un-reachable targets
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 34a2ce887668db9dda4b56e6f155c49ac13f3e54 ]
When the driver finds invalid destination MAC for the first un-reachable target, and before completes the PATH_REQ operation, set new ep_state to OFFLDCONN_NONE so that as part of driver ep_poll mechanism, the upper open-iscsi layer is notified to complete the login process on the first un-reachable target and thus proceed login to other reachable targets.
--- drivers/scsi/qedi/qedi_iscsi.c | 3 +++ drivers/scsi/qedi/qedi_iscsi.h | 1 + 2 files changed, 4 insertions(+)
drivers/scsi/qedi/qedi_iscsi.c +3 -0
@@ -961,6 +961,7 @@ static int qedi_ep_poll(struct iscsi_endpoint *ep, int timeout_ms) qedi_ep = ep->dd_data;if (qedi_ep->state ==EP_STATE_IDLE || + qedi_ep->state ==EP_STATE_OFLDCONN_NONE || qedi_ep->state ==EP_STATE_OFLDCONN_FAILED )return -1 ;
@@ -1043,6 +1044,7 @@ static void qedi_ep_disconnect(struct iscsi_endpoint *ep)switch (qedi_ep->state) {case EP_STATE_OFLDCONN_START : +case EP_STATE_OFLDCONN_NONE : goto ep_release_conn;case EP_STATE_OFLDCONN_FAILED :break ;
@@ -1233,6 +1235,7 @@ static int qedi_set_path(struct Scsi_Host *shost, struct iscsi_path *path_data)if (!is_valid_ether_addr (&path_data->mac_addr[0 ])) {QEDI_NOTICE (&qedi->dbg_ctx,"dst mac NOT VALID\n" ); + qedi_ep->state =EP_STATE_OFLDCONN_NONE ; ret = -EIO ; goto set_path_exit; }
drivers/scsi/qedi/qedi_iscsi.h +1 -0
@@ -59,6 +59,7 @@ enum {EP_STATE_OFLDCONN_FAILED =0x2000 ,EP_STATE_CONNECT_FAILED =0x4000 ,EP_STATE_DISCONN_TIMEDOUT =0x8000 , + EP_STATE_OFLDCONN_NONE = 0x10000, };struct qedi_conn ;
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 36/71 always clear the X2APIC_ENABLE bit for PV guest
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 5268c8f39e0efef81af2aaed160272d9eb507beb ]
Commit e657fcc clears cpu capability bit instead of using fake cpuid value, the EXTD should always be off for PV guest without depending on cpuid value. So remove the cpuid check in xen_read_msr_safe() to always clear the X2APIC_ENABLE bit.
--- arch/x86/xen/enlighten_pv.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
arch/x86/xen/enlighten_pv.c +1 -4
@@ -900,10 +900,7 @@ static u64 xen_read_msr_safe(unsigned int msr, int *err) val =native_read_msr_safe (msr, err);switch (msr) {case MSR_IA32_APICBASE : -#ifdef CONFIG_X86_X2APIC - if (!(cpuid_ecx(1) & (1 << (X86_FEATURE_X2APIC & 31)))) -#endif - val &= ~X2APIC_ENABLE ; + val &= ~X2APIC_ENABLE ;break ; }return val;
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 37/71 drm/meson: add missing of_node_put
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit f672b93e4a0a4947d2e1103ed8780e01e13eadb6 ]
Add an of_node_put when the result of of_graph_get_remote_port_parent is not available.
An of_node_put is also needed when meson_probe_remote completes. This was present at the recursive call, but not in the call from meson_drv_probe.
The semantic match that finds this problem is as follows
(http://coccinelle.lip6.fr):
// <smpl>
@r exists@
local idexpression e;
expression x;
@@
e = of_graph_get_remote_port_parent(...);
... when != x = e
when != true e == NULL
when != of_node_put(e)
when != of_fwnode_handle(e)(
return e;
|
*return ...;
)
// </smpl>
--- drivers/gpu/drm/meson/meson_drv.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
drivers/gpu/drm/meson/meson_drv.c +7 -2
@@ -345,8 +345,10 @@ static int meson_probe_remote(struct platform_device *pdev, remote_node =of_graph_get_remote_port_parent (ep);if (!remote_node || remote_node == parent ||/* Ignore parent endpoint */ - !of_device_is_available (remote_node)) + !of_device_is_available (remote_node)) { +of_node_put (remote_node);continue ; + } count +=meson_probe_remote (pdev, match, remote, remote_node);
@@ -365,10 +367,13 @@ static int meson_drv_probe(struct platform_device *pdev)for_each_endpoint_of_node (np, ep) { remote =of_graph_get_remote_port_parent (ep); -if (!remote || !of_device_is_available (remote)) +if (!remote || !of_device_is_available (remote)) { +of_node_put (remote);continue ; + } count +=meson_probe_remote (pdev, &match, np, remote); +of_node_put (remote); }if (count && !match)
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 38/71 atm: he: fix sign-extension overflow on large shift
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit cb12d72b27a6f41325ae23a11033cf5fedfa1b97 ]
Shifting the 1 by exp by an int can lead to sign-extension overlow when exp is 31 since 1 is an signed int and sign-extending this result to an unsigned long long will set the upper 32 bits. Fix this by shifting an unsigned long.
Detected by cppcheck:
(warning) Shifting signed 32-bit value by 31 bits is undefined behaviour
--- drivers/atm/he.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/atm/he.c +1 -1
@@ -717,7 +717,7 @@ static int he_init_cs_block_rcm(struct he_dev *he_dev)instead of '/ 512', use '>> 9' to prevent a call to divdu3 on x86 platforms */ - rate_cps = (unsigned long long ) (1 << exp) * (man +512 ) >>9 ; + rate_cps = (unsigned long long ) (1UL << exp) * (man +512 ) >>9 ;if (rate_cps <10 ) rate_cps =10 ;/* 2.2.1 minimum payload rate is 10 cps */
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 39/71 hwmon: (tmp421) Correct the misspelling of the tmp442 compatible attribute in OF device ID table
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit f422449b58548a41e98fc97b259a283718e527db ]
Correct a typo in OF device ID table
The last one should be 'ti,tmp442'
--- drivers/hwmon/tmp421.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/hwmon/tmp421.c +1 -1
@@ -88,7 +88,7 @@ static const struct of_device_id tmp421_of_match[] = { .data = (void *)2 }, { - .compatible = "ti,tmp422", + .compatible = "ti,tmp442", .data = (void *)3 }, { },
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 40/71 leds: lp5523: fix a missing check of return value of lp55xx_read
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 248b57015f35c94d4eae2fdd8c6febf5cd703900 ]
When lp55xx_read() fails, "status" is an uninitialized variable and thus may contain random value; using it leads to undefined behaviors.
The fix inserts a check for the return value of lp55xx_read: if it fails, returns with its error code.
--- drivers/leds/leds-lp5523.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/leds/leds-lp5523.c +3 -1
@@ -318,7 +318,9 @@ static int lp5523_init_program_engine(struct lp55xx_chip *chip)/* Let the programs run for couple of ms and check the engine status */ usleep_range (3000 ,6000 ); -lp55xx_read (chip,LP5523_REG_STATUS , &status); + ret =lp55xx_read (chip,LP5523_REG_STATUS , &status); +if (ret) +return ret; status &=LP5523_ENG_STATUS_MASK ;if (status !=LP5523_ENG_STATUS_MASK ) {
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 41/71 bpf: bpf_setsockopt: reset sock dst on SO_MARK changes
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit f4924f24da8c7ef64195096817f3cde324091d97 ]
In sock_setsockopt() (net/core/sock.h), when SO_MARK option is used to change sk_mark, sk_dst_reset(sk) is called. The same should be done in bpf_setsockopt().
--- net/core/filter.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
net/core/filter.c +4 -1
@@ -3102,7 +3102,10 @@ BPF_CALL_5(bpf_setsockopt, struct bpf_sock_ops_kern *, bpf_sock, sk->sk_rcvlowat = val ? :1 ;break ;case SO_MARK : - sk->sk_mark = val; +if (sk->sk_mark != val) { + sk->sk_mark = val; +sk_dst_reset (sk); + }break ;default : ret = -EINVAL ;
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 42/71 mlxsw: spectrum_switchdev: Do not treat static FDB entries as sticky
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 64254a2054611205798e6bde634639bc704573ac ]
The driver currently treats static FDB entries as both static and sticky. This is incorrect and prevents such entries from being roamed to a different port via learning.
Fix this by configuring static entries with ageing disabled and roaming enabled.
In net-next we can add proper support for the newly introduced 'sticky' flag.
--- .../net/ethernet/mellanox/mlxsw/spectrum_switchdev.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c +6 -6
@@ -1086,7 +1086,7 @@ mlxsw_sp_bridge_port_fdb_flush(struct mlxsw_sp *mlxsw_sp,static enum mlxsw_reg_sfd_rec_policy mlxsw_sp_sfd_rec_policy (bool dynamic) {return dynamic ?MLXSW_REG_SFD_REC_POLICY_DYNAMIC_ENTRY_INGRESS : -MLXSW_REG_SFD_REC_POLICY_STATIC_ENTRY ; +MLXSW_REG_SFD_REC_POLICY_DYNAMIC_ENTRY_MLAG ; }static enum mlxsw_reg_sfd_op mlxsw_sp_sfd_op (bool adding)
@@ -1098,7 +1098,7 @@ static enum mlxsw_reg_sfd_op mlxsw_sp_sfd_op(bool adding)static int __mlxsw_sp_port_fdb_uc_op (struct mlxsw_sp *mlxsw_sp,u8 local_port,const char *mac,u16 fid,bool adding,enum mlxsw_reg_sfd_rec_action action, -bool dynamic) +enum mlxsw_reg_sfd_rec_policy policy) {char *sfd_pl;u8 num_rec;
@@ -1109,8 +1109,7 @@ static int __mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp *mlxsw_sp, u8 local_port,return -ENOMEM ;mlxsw_reg_sfd_pack (sfd_pl,mlxsw_sp_sfd_op (adding),0 ); -mlxsw_reg_sfd_uc_pack (sfd_pl,0 ,mlxsw_sp_sfd_rec_policy (dynamic), - mac, fid, action, local_port); +mlxsw_reg_sfd_uc_pack (sfd_pl,0 , policy, mac, fid, action, local_port); num_rec =mlxsw_reg_sfd_num_rec_get (sfd_pl); err =mlxsw_reg_write (mlxsw_sp->core,MLXSW_REG (sfd), sfd_pl);if (err)
@@ -1129,7 +1128,8 @@ static int mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp *mlxsw_sp, u8 local_port, bool dynamic) {return __mlxsw_sp_port_fdb_uc_op (mlxsw_sp, local_port, mac, fid, adding, -MLXSW_REG_SFD_REC_ACTION_NOP , dynamic); +MLXSW_REG_SFD_REC_ACTION_NOP , +mlxsw_sp_sfd_rec_policy (dynamic)); } int mlxsw_sp_rif_fdb_op(struct mlxsw_sp *mlxsw_sp, const char *mac, u16 fid,
@@ -1137,7 +1137,7 @@ int mlxsw_sp_rif_fdb_op(struct mlxsw_sp *mlxsw_sp, const char *mac, u16 fid, {return __mlxsw_sp_port_fdb_uc_op (mlxsw_sp,0 , mac, fid, adding,MLXSW_REG_SFD_REC_ACTION_FORWARD_IP_ROUTER , - false); +MLXSW_REG_SFD_REC_POLICY_STATIC_ENTRY ); } static int mlxsw_sp_port_fdb_uc_lag_op(struct mlxsw_sp *mlxsw_sp, u16 lag_id,
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 43/71 net/mlx5e: Fix wrong (zero) TX drop counter indication for representor
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 7fdc1adc52d3975740547a78c2df329bb207f15d ]
For representors, the TX dropped counter is not folded from the per-ring counters. Fix it.
--- drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c +1 -0
@@ -125,6 +125,7 @@ static void mlx5e_rep_update_sw_counters(struct mlx5e_priv *priv) s->tx_packets += sq_stats->packets; s->tx_bytes += sq_stats->bytes; + s->tx_queue_dropped += sq_stats->dropped; } } }
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 44/71 isdn: avm: Fix string plus integer warning from Clang
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
[ Upstream commit 7afa81c55fca0cad589722cb4bce698b4803b0e1 ]
A recent commit in Clang expanded the -Wstring-plus-int warning, showing some odd behavior in this file.
drivers/isdn/hardware/avm/b1.c:426:30: warning: adding 'int' to a string does not append to the string [-Wstring-plus-int]
cinfo->version[j] = "\0\0" + 1;
~~~~~~~^~~
drivers/isdn/hardware/avm/b1.c:426:30: note: use array indexing to silence this warning
cinfo->version[j] = "\0\0" + 1;
^
& [ ]1 warning generated.
This is equivalent to just "\0". Nick pointed out that it is smarter to use "" instead of "\0" because "" is used elsewhere in the kernel and can be deduplicated at the linking stage.
--- drivers/isdn/hardware/avm/b1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/isdn/hardware/avm/b1.c +1 -1
@@ -423,7 +423,7 @@ void b1_parse_version(avmctrl_info *cinfo)int i, j;for (j =0 ; j <AVM_MAXVERSION ; j++) - cinfo->version[j] ="\0\0" +1 ; + cinfo->version[j] ="" ;for (i =0 , j =0 ; j <AVM_MAXVERSION && i < cinfo->versionlen; j++, i += cinfo->versionbuf[i] +1 )
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 45/71 batman-adv: fix uninit-value in batadv_interface_tx()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
[ Upstream commit 4ffcbfac60642f63ae3d80891f573ba7e94a265c ]
KMSAN reported batadv_interface_tx() was possibly using a garbage value [1]
batadv_get_vid() does have a pskb_may_pull() call but batadv_interface_tx() does not actually make sure this did not fail.
[1]
BUG: KMSAN: uninit-value in batadv_interface_tx+0x908/0x1e40 net/batman-adv/soft-interface.c:231 CPU: 0 PID: 10006 Comm: syz-executor469 Not tainted 4.20.0-rc7+ #5 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Call Trace: __dump_stack lib/dump_stack.c:77 [inline] dump_stack+0x173/0x1d0 lib/dump_stack.c:113 kmsan_report+0x12e/0x2a0 mm/kmsan/kmsan.c:613 __msan_warning+0x82/0xf0 mm/kmsan/kmsan_instr.c:313 batadv_interface_tx+0x908/0x1e40 net/batman-adv/soft-interface.c:231 __netdev_start_xmit include/linux/netdevice.h:4356 [inline] netdev_start_xmit include/linux/netdevice.h:4365 [inline] xmit_one net/core/dev.c:3257 [inline] dev_hard_start_xmit+0x607/0xc40 net/core/dev.c:3273 __dev_queue_xmit+0x2e42/0x3bc0 net/core/dev.c:3843 dev_queue_xmit+0x4b/0x60 net/core/dev.c:3876 packet_snd net/packet/af_packet.c:2928 [inline] packet_sendmsg+0x8306/0x8f30 net/packet/af_packet.c:2953 sock_sendmsg_nosec net/socket.c:621 [inline] sock_sendmsg net/socket.c:631 [inline] __sys_sendto+0x8c4/0xac0 net/socket.c:1788 __do_sys_sendto net/socket.c:1800 [inline] __se_sys_sendto+0x107/0x130 net/socket.c:1796 __x64_sys_sendto+0x6e/0x90 net/socket.c:1796 do_syscall_64+0xbc/0xf0 arch/x86/entry/common.c:291 entry_SYSCALL_64_after_hwframe+0x63/0xe7 RIP: 0033:0x441889 Code: 18 89 d0 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 0f 83 bb 10 fc ff c3 66 2e 0f 1f 84 00 00 00 00 RSP: 002b:00007ffdda6fd468 EFLAGS: 00000216 ORIG_RAX: 000000000000002c RAX: ffffffffffffffda RBX: 0000000000000002 RCX: 0000000000441889 RDX: 000000000000000e RSI: 00000000200000c0 RDI: 0000000000000003 RBP: 0000000000000003 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000216 R12: 00007ffdda6fd4c0 R13: 00007ffdda6fd4b0 R14: 0000000000000000 R15: 0000000000000000
Uninit was created at:
kmsan_save_stack_with_flags mm/kmsan/kmsan.c:204 [inline] kmsan_internal_poison_shadow+0x92/0x150 mm/kmsan/kmsan.c:158 kmsan_kmalloc+0xa6/0x130 mm/kmsan/kmsan_hooks.c:176 kmsan_slab_alloc+0xe/0x10 mm/kmsan/kmsan_hooks.c:185 slab_post_alloc_hook mm/slab.h:446 [inline] slab_alloc_node mm/slub.c:2759 [inline] __kmalloc_node_track_caller+0xe18/0x1030 mm/slub.c:4383 __kmalloc_reserve net/core/skbuff.c:137 [inline] __alloc_skb+0x309/0xa20 net/core/skbuff.c:205 alloc_skb include/linux/skbuff.h:998 [inline] alloc_skb_with_frags+0x1c7/0xac0 net/core/skbuff.c:5220 sock_alloc_send_pskb+0xafd/0x10e0 net/core/sock.c:2083 packet_alloc_skb net/packet/af_packet.c:2781 [inline] packet_snd net/packet/af_packet.c:2872 [inline] packet_sendmsg+0x661a/0x8f30 net/packet/af_packet.c:2953 sock_sendmsg_nosec net/socket.c:621 [inline] sock_sendmsg net/socket.c:631 [inline] __sys_sendto+0x8c4/0xac0 net/socket.c:1788 __do_sys_sendto net/socket.c:1800 [inline] __se_sys_sendto+0x107/0x130 net/socket.c:1796 __x64_sys_sendto+0x6e/0x90 net/socket.c:1796 do_syscall_64+0xbc/0xf0 arch/x86/entry/common.c:291 entry_SYSCALL_64_after_hwframe+0x63/0xe7
--- net/batman-adv/soft-interface.c | 2 ++ 1 file changed, 2 insertions(+)
net/batman-adv/soft-interface.c +2 -0
@@ -219,6 +219,8 @@ static int batadv_interface_tx(struct skswitch (ntohs (ethhdr->h_proto)) {case ETH_P_8021Q : +if (!pskb_may_pull (skb,sizeof (*vhdr))) + goto dropped; vhdr =vlan_eth_hdr (skb);/* drop batman-in-batman packets to prevent loops */
Greg Kroah-Hartman
maintainerPATCH 46/71 ipv6: propagate genlmsg_reply return code
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Li RongQing <[email protected]>
[ Upstream commit d1f20798a119be71746949ba9b2e2ff330fdc038 ]
genlmsg_reply can fail, so propagate its return code
--- net/ipv6/seg6.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
net/ipv6/seg6.c +1 -3
@@ -220,9 +220,7 @@ static int seg6_genl_get_tunsrc(struct srcu_read_unlock ();genlmsg_end (msg, hdr); -genlmsg_reply (msg, info); - -return 0 ; +return genlmsg_reply (msg, info); nla_put_failure:rcu_read_unlock ();
Greg Kroah-Hartman
maintainerPATCH 47/71 net/mlx5e: Dont overwrite pedit action when multiple pedit used
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tonghao Zhang <[email protected]>
[ Upstream commit 218d05ce326f9e1b40a56085431fa1068b43d5d9 ]
In some case, we may use multiple pedit actions to modify packets. The command shown as below: the last pedit action is effective.
$ tc filter add dev netdev_rep parent ffff: protocol ip prio 1 \ flower skip_sw ip_proto icmp dst_ip 3.3.3.3 \ action pedit ex munge ip dst set 192.168.1.100 pipe \ action pedit ex munge eth src set 00:00:00:00:00:01 pipe \ action pedit ex munge eth dst set 00:00:00:00:00:02 pipe \ action csum ip pipe \ action tunnel_key set src_ip 1.1.1.100 dst_ip 1.1.1.200 dst_port 4789 id 100 \ action mirred egress redirect dev vxlan0
To fix it, we add max_mod_hdr_actions to mlx5e_tc_flow_parse_attr struction, max_mod_hdr_actions will store the max pedit action number we support and num_mod_hdr_actions indicates how many pedit action we used, and store all pedit action to mod_hdr_actions.
--- drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 25 ++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-)
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +15 -10
@@ -81,6 +81,7 @@ struct mlx5e_tc_flow_parse_attr {struct ip_tunnel_info tun_info;struct mlx5_flow_spec spec;int num_mod_hdr_actions; +int max_mod_hdr_actions;void *mod_hdr_actions;int mirred_ifindex; };
@@ -1128,9 +1129,9 @@ static struct mlx5_fields fields[] = { OFFLOAD(UDP_DPORT, 2, udp.dest, 0), }; -/* On input attr->num_mod_hdr_actions tells how many HW actions can be parsed at -* max from the SW pedit action. On success, it says how many HW actions were -* actually parsed. +/* On input attr->max_mod_hdr_actions tells how many HW actions can be parsed at +* max from the SW pedit action. On success, attr->num_mod_hdr_actions +* says how many HW actions were actually parsed. */ static int offload_pedit_fields(struct pedit_headers *masks, struct pedit_headers *vals,
@@ -1153,9 +1154,11 @@ static int offload_pedit_fields(struct p add_vals = &vals[TCA_PEDIT_KEY_EX_CMD_ADD ]; action_size =MLX5_UN_SZ_BYTES (set_action_in_add_action_in_auto); - action = parse_attr->mod_hdr_actions; - max_actions = parse_attr->num_mod_hdr_actions; - nactions =0 ; + action = parse_attr->mod_hdr_actions + + parse_attr->num_mod_hdr_actions * action_size; + + max_actions = parse_attr->max_mod_hdr_actions; + nactions = parse_attr->num_mod_hdr_actions;for (i =0 ; i <ARRAY_SIZE (fields); i++) { f = &fields[i];
@@ -1260,7 +1263,7 @@ static int alloc_mod_hdr_actions(structif (!parse_attr->mod_hdr_actions)return -ENOMEM ; - parse_attr->num_mod_hdr_actions = max_actions; + parse_attr->max_mod_hdr_actions = max_actions;return 0 ; }
@@ -1304,9 +1307,11 @@ static int parse_tc_pedit_action(struct goto out_err; } - err =alloc_mod_hdr_actions (priv, a, namespace, parse_attr); -if (err) - goto out_err; +if (!parse_attr->mod_hdr_actions) { + err =alloc_mod_hdr_actions (priv, a, namespace, parse_attr); +if (err) + goto out_err; + } err =offload_pedit_fields (masks, vals, parse_attr);if (err <0 )
Greg Kroah-Hartman
maintainerPATCH 48/71 net/packet: fix 4gb buffer limit due to overflow check
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kal Conley <[email protected]>
[ Upstream commit fc62814d690cf62189854464f4bd07457d5e9e50 ]
When calculating rb->frames_per_block * req->tp_block_nr the result can overflow. Check it for overflow without limiting the total buffer size to UINT_MAX.
This change fixes support for packet ring buffers >= UINT_MAX.
--- net/packet/af_packet.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/packet/af_packet.c +1 -1
@@ -4313,7 +4313,7 @@ static int packet_set_ring(struct sock * rb->frames_per_block = req->tp_block_size / req->tp_frame_size;if (unlikely (rb->frames_per_block ==0 )) goto out; -if (unlikely (req->tp_block_size >UINT_MAX / req->tp_block_nr)) +if (unlikely (rb->frames_per_block >UINT_MAX / req->tp_block_nr)) goto out;if (unlikely ((rb->frames_per_block * req->tp_block_nr) != req->tp_frame_nr))
Greg Kroah-Hartman
maintainerPATCH 49/71 net: sfp: do not probe SFP module before were attached
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Russell King <[email protected]>
[ Upstream commit b5bfc21af5cb3d53f9cee0ef82eaa43762a90f81 ]
When we probe a SFP module, we expect to be able to call the upstream device's module_insert() function so that the upstream link can be configured. However, when the upstream device is delayed, we currently may end up probing the module before the upstream device is available, and lose the module_insert() call.
Avoid this by holding off probing the module until the SFP bus is properly connected to both the SFP socket driver and the upstream driver.
--- drivers/net/phy/sfp-bus.c | 2 ++ drivers/net/phy/sfp.c | 30 +++++++++++++++++++++--------- drivers/net/phy/sfp.h | 2 ++ 3 files changed, 25 insertions(+), 9 deletions(-)
drivers/net/phy/sfp-bus.c +2 -0
@@ -276,6 +276,7 @@ static int sfp_register_bus(struct sfp_breturn ret; } } + bus->socket_ops->attach (bus->sfp);if (bus->started) bus->socket_ops->start (bus->sfp); bus->registered = true;
@@ -289,6 +290,7 @@ static void sfp_unregister_bus(struct sfif (bus->registered) {if (bus->started) bus->socket_ops->stop (bus->sfp); + bus->socket_ops->detach (bus->sfp);if (bus->phydev && ops && ops->disconnect_phy) ops->disconnect_phy (bus->upstream); }
drivers/net/phy/sfp.c +21 -9
@@ -114,6 +114,7 @@ struct sfp {struct gpio_desc *gpio[GPIO_MAX ]; +bool attached;unsigned int state;struct delayed_work poll;struct delayed_work timeout;
@@ -500,7 +501,7 @@ static void sfp_sm_event(struct sfp *sfp*/ switch (sfp->sm_mod_state) {default : -if (event ==SFP_E_INSERT ) { +if (event ==SFP_E_INSERT && sfp->attached) {sfp_module_tx_disable (sfp);sfp_sm_ins_next (sfp,SFP_MOD_PROBE ,T_PROBE_INIT ); }
@@ -628,6 +629,19 @@ static void sfp_sm_event(struct sfp *sfpmutex_unlock (&sfp->sm_mutex); } +static void sfp_attach (struct sfp *sfp) +{ + sfp->attached = true; +if (sfp->state &SFP_F_PRESENT ) +sfp_sm_event (sfp,SFP_E_INSERT ); +} + +static void sfp_detach (struct sfp *sfp) +{ + sfp->attached = false; +sfp_sm_event (sfp,SFP_E_REMOVE ); +} +static void sfp_start (struct sfp *sfp) {sfp_sm_event (sfp,SFP_E_DEV_UP );
@@ -687,6 +701,8 @@ static int sfp_module_eeprom(struct sfp }static const struct sfp_socket_ops sfp_module_ops = { + .attach = sfp_attach, + .detach = sfp_detach, .start = sfp_start, .stop = sfp_stop, .module_info = sfp_module_info,
@@ -829,10 +845,6 @@ static int sfp_probe(struct platform_dev sfp->set_state = sfp_gpio_set_state; } - sfp->sfp_bus =sfp_register_socket (sfp->dev, sfp, &sfp_module_ops); -if (!sfp->sfp_bus) -return -ENOMEM ; -/* Get the initial state, and always signal TX disable, * since the network interface will not be up. */
@@ -843,10 +855,6 @@ static int sfp_probe(struct platform_dev sfp->state |=SFP_F_RATE_SELECT ;sfp_set_state (sfp, sfp->state);sfp_module_tx_disable (sfp); -rtnl_lock (); -if (sfp->state &SFP_F_PRESENT ) -sfp_sm_event (sfp,SFP_E_INSERT ); -rtnl_unlock ();for (i =0 ; i <GPIO_MAX ; i++) {if (gpio_flags[i] !=GPIOD_IN || !sfp->gpio[i])
@@ -879,6 +887,10 @@ static int sfp_remove(struct platform_desfp_unregister_socket (sfp->sfp_bus); + sfp->sfp_bus =sfp_register_socket (sfp->dev, sfp, &sfp_module_ops); +if (!sfp->sfp_bus) +return -ENOMEM ; +return 0 ; }
drivers/net/phy/sfp.h +2 -0
@@ -7,6 +7,8 @@struct sfp ;struct sfp_socket_ops { +void (*attach)(struct sfp *sfp); +void (*detach)(struct sfp *sfp);void (*start)(struct sfp *sfp);void (*stop)(struct sfp *sfp);int (*module_info)(struct sfp *sfp,struct ethtool_modinfo *modinfo);
Greg Kroah-Hartman
maintainerPATCH 50/71 sctp: call gso_reset_checksum when computing checksum in sctp_gso_segment
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xin Long <[email protected]>
[ Upstream commit fc228abc2347e106a44c0e9b29ab70b712c4ca51 ]
Jianlin reported a panic when running sctp gso over gre over vlan device:
[ 84.772930] RIP: 0010:do_csum+0x6d/0x170 [ 84.790605] Call Trace: [ 84.791054] csum_partial+0xd/0x20 [ 84.791657] gre_gso_segment+0x2c3/0x390 [ 84.792364] inet_gso_segment+0x161/0x3e0 [ 84.793071] skb_mac_gso_segment+0xb8/0x120 [ 84.793846] __skb_gso_segment+0x7e/0x180 [ 84.794581] validate_xmit_skb+0x141/0x2e0 [ 84.795297] __dev_queue_xmit+0x258/0x8f0 [ 84.795949] ? eth_header+0x26/0xc0 [ 84.796581] ip_finish_output2+0x196/0x430 [ 84.797295] ? skb_gso_validate_network_len+0x11/0x80 [ 84.798183] ? ip_finish_output+0x169/0x270 [ 84.798875] ip_output+0x6c/0xe0 [ 84.799413] ? ip_append_data.part.50+0xc0/0xc0 [ 84.800145] iptunnel_xmit+0x144/0x1c0 [ 84.800814] ip_tunnel_xmit+0x62d/0x930 [ip_tunnel] [ 84.801699] gre_tap_xmit+0xac/0xf0 [ip_gre] [ 84.802395] dev_hard_start_xmit+0xa5/0x210 [ 84.803086] sch_direct_xmit+0x14f/0x340 [ 84.803733] __dev_queue_xmit+0x799/0x8f0 [ 84.804472] ip_finish_output2+0x2e0/0x430 [ 84.805255] ? skb_gso_validate_network_len+0x11/0x80 [ 84.806154] ip_output+0x6c/0xe0 [ 84.806721] ? ip_append_data.part.50+0xc0/0xc0 [ 84.807516] sctp_packet_transmit+0x716/0xa10 [sctp] [ 84.808337] sctp_outq_flush+0xd7/0x880 [sctp]
It was caused by SKB_GSO_CB(skb)->csum_start not set in sctp_gso_segment. sctp_gso_segment() calls skb_segment() with 'feature | NETIF_F_HW_CSUM', which causes SKB_GSO_CB(skb)->csum_start not to be set in skb_segment().
For TCP/UDP, when feature supports HW_CSUM, CHECKSUM_PARTIAL will be set and gso_reset_checksum will be called to set SKB_GSO_CB(skb)->csum_start.
So SCTP should do the same as TCP/UDP, to call gso_reset_checksum() when computing checksum in sctp_gso_segment.
--- net/sctp/offload.c | 1 + 1 file changed, 1 insertion(+)
net/sctp/offload.c +1 -0
@@ -36,6 +36,7 @@ static __le32 sctp_gso_make_checksum(str { skb->ip_summed =CHECKSUM_NONE ; skb->csum_not_inet =0 ; +gso_reset_checksum (skb, ~0 );return sctp_compute_cksum (skb,skb_transport_offset (skb)); }
Greg Kroah-Hartman
maintainerPATCH 51/71 team: avoid complex list operations in team_nl_cmd_options_set()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cong Wang <[email protected]>
[ Upstream commit 2fdeee2549231b1f989f011bb18191f5660d3745 ]
The current opt_inst_list operations inside team_nl_cmd_options_set() is too complex to track:
LIST_HEAD(opt_inst_list);
nla_for_each_nested(...) {
list_for_each_entry(opt_inst, &team->option_inst_list, list) {
if (__team_option_inst_tmp_find(&opt_inst_list, opt_inst))
continue;
list_add(&opt_inst->tmp_list, &opt_inst_list);
}
}
team_nl_send_event_options_get(team, &opt_inst_list);as while we retrieve 'opt_inst' from team->option_inst_list, it could be added to the local 'opt_inst_list' for multiple times. The __team_option_inst_tmp_find() doesn't work, as the setter team_mode_option_set() still calls team->ops.exit() which uses ->tmp_list too in __team_options_change_check().
Simplify the list operations by moving the 'opt_inst_list' and team_nl_send_event_options_get() into the nla_for_each_nested() loop so that it can be guranteed that we won't insert a same list entry for multiple times. Therefore, __team_option_inst_tmp_find() can be removed too.
--- drivers/net/team/team.c | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-)
drivers/net/team/team.c +5 -22
@@ -261,17 +261,6 @@ static void __team_option_inst_mark_remo } } -static bool __team_option_inst_tmp_find (const struct list_head *opts, -const struct team_option_inst *needle) -{ -struct team_option_inst *opt_inst; - -list_for_each_entry (opt_inst, opts, tmp_list) -if (opt_inst == needle) -return true; -return false; -} -static int __team_options_register (struct team *team,const struct team_option *option,size_t option_count)
@@ -2457,7 +2446,6 @@ static int team_nl_cmd_options_set(strucint err =0 ;int i;struct nlattr *nl_option; -LIST_HEAD (opt_inst_list);rtnl_lock ();
@@ -2477,6 +2465,7 @@ static int team_nl_cmd_options_set(strucstruct nlattr *opt_attrs[TEAM_ATTR_OPTION_MAX +1 ];struct nlattr *attr;struct nlattr *attr_data; +LIST_HEAD (opt_inst_list);enum team_option_type opt_type;int opt_port_ifindex =0 ;/* != 0 for per-port options */ u32 opt_array_index =0 ;
@@ -2581,23 +2570,17 @@ static int team_nl_cmd_options_set(strucif (err) goto team_put; opt_inst->changed = true; - -/* dumb/evil user-space can send us duplicate opt, -* keep only the last one -*/ -if (__team_option_inst_tmp_find (&opt_inst_list, - opt_inst)) -continue ; -list_add (&opt_inst->tmp_list, &opt_inst_list); }if (!opt_found) { err = -ENOENT ; goto team_put; } - } - err =team_nl_send_event_options_get (team, &opt_inst_list); + err =team_nl_send_event_options_get (team, &opt_inst_list); +if (err) +break ; + } team_put:team_nl_team_put (team);
Greg Kroah-Hartman
maintainerPATCH 52/71 sit: check if IPv6 enabled before calling ip6_err_gen_icmpv6_unreach()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hangbin Liu <[email protected]>
[ Upstream commit 173656accaf583698bac3f9e269884ba60d51ef4 ]
If we disabled IPv6 from the kernel command line (ipv6.disable=1), we should not call ip6_err_gen_icmpv6_unreach(). This:
ip link add sit1 type sit local 192.0.2.1 remote 192.0.2.2 ttl 1 ip link set sit1 up
ip addr add 198.51.100.1/24 dev sit1
ping 198.51.100.2
if IPv6 is disabled at boot time, will crash the kernel.
v2: there's no need to use in6_dev_get(), use __in6_dev_get() instead,
as we only need to check that idev exists and we are under rcu_read_lock() (from netif_receive_skb_internal()).
--- net/ipv6/sit.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/ipv6/sit.c +2 -1
@@ -540,7 +540,8 @@ static int ipip6_err(struct sk_buff *skb } err =0 ; -if (!ip6_err_gen_icmpv6_unreach (skb, iph->ihl *4 , type, data_len)) +if (__in6_dev_get (skb->dev) && + !ip6_err_gen_icmpv6_unreach (skb, iph->ihl *4 , type, data_len)) goto out;if (t->parms.iph.daddr ==0 )
Greg Kroah-Hartman
maintainerPATCH 53/71 net/mlx4_en: Force CHECKSUM_NONE for short ethernet frames
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Saeed Mahameed <[email protected]>
[ Upstream commit 29dded89e80e3fff61efb34f07a8a3fba3ea146d ]
When an ethernet frame is padded to meet the minimum ethernet frame size, the padding octets are not covered by the hardware checksum. Fortunately the padding octets are usually zero's, which don't affect checksum. However, it is not guaranteed. For example, switches might choose to make other use of these octets.
This repeatedly causes kernel hardware checksum fault.
Prior to the cited commit below, skb checksum was forced to be CHECKSUM_NONE when padding is detected. After it, we need to keep skb->csum updated. However, fixing up CHECKSUM_COMPLETE requires to verify and parse IP headers, it does not worth the effort as the packets are so small that CHECKSUM_COMPLETE has no significant advantage.
Future work: when reporting checksum complete is not an option for IP non-TCP/UDP packets, we can actually fallback to report checksum unnecessary, by looking at cqe IPOK bit.
--- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-)
drivers/net/ethernet/mellanox/mlx4/en_rx.c +20 -1
@@ -623,13 +623,27 @@ static int get_fixed_ipv6_csum(__wsum hwreturn 0 ; }#endif + +#define short_frame (size) ((size) <= ETH_ZLEN + ETH_FCS_LEN) +static int check_csum (struct mlx4_cqe *cqe,struct sk_buff *skb,void *va,netdev_features_t dev_features) {__wsum hw_checksum =0 ; +void *hdr; -void *hdr = (u8 *)va +sizeof (struct ethhdr ); +/* CQE csum doesn't cover padding octets in short ethernet +* frames. And the pad field is appended prior to calculating +* and appending the FCS field. +* +* Detecting these padded frames requires to verify and parse +* IP headers, so we simply force all those small frames to skip +* checksum complete. +*/ +if (short_frame (skb->len)) +return -EINVAL ; + hdr = (u8 *)va +sizeof (struct ethhdr ); hw_checksum =csum_unfold ((__force __sum16 )cqe->checksum); if (cqe->vlan_my_qpn & cpu_to_be32(MLX4_CQE_CVLAN_PRESENT_MASK) &&
@@ -817,6 +831,11 @@ xdp_drop_no_cnt:skb_record_rx_queue (skb, cq_ring);if (likely (dev->features &NETIF_F_RXCSUM )) { +/* TODO: For IP non TCP/UDP packets when csum complete is +* not an option (not supported or any other reason) we can +* actually check cqe IPOK status bit and report +* CHECKSUM_UNNECESSARY rather than CHECKSUM_NONE +*/ if (cqe->status &cpu_to_be16 (MLX4_CQE_STATUS_TCP |MLX4_CQE_STATUS_UDP )) { if ((cqe->status & cpu_to_be16(MLX4_CQE_STATUS_IPOK)) &&
Greg Kroah-Hartman
maintainerPATCH 54/71 inet_diag: fix reporting cgroup classid and fallback to priority
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Konstantin Khlebnikov <[email protected]>
[ Upstream commit 1ec17dbd90f8b638f41ee650558609c1af63dfa0 ]
Field idiag_ext in struct inet_diag_req_v2 used as bitmap of requested extensions has only 8 bits. Thus extensions starting from DCTCPINFO cannot be requested directly. Some of them included into response unconditionally or hook into some of lower 8 bits.
Extension INET_DIAG_CLASS_ID has not way to request from the beginning.
This patch bundle it with INET_DIAG_TCLASS (ipv6 tos), fixes space reservation, and documents behavior for other extensions.
Also this patch adds fallback to reporting socket priority. This filed is more widely used for traffic classification because ipv4 sockets automatically maps TOS to priority and default qdisc pfifo_fast knows about that. But priority could be changed via setsockopt SO_PRIORITY so INET_DIAG_TOS isn't enough for predicting class.
Also cgroup2 obsoletes net_cls classid (it always zero), but we cannot reuse this field for reporting cgroup2 id because it is 64-bit (ino+gen).
So, after this patch INET_DIAG_CLASS_ID will report socket priority for most common setup when net_cls isn't set and/or cgroup2 in use.
--- include/uapi/linux/inet_diag.h | 16 +++++++++++----- net/ipv4/inet_diag.c | 10 +++++++++- net/sctp/sctp_diag.c | 1 + 3 files changed, 21 insertions(+), 6 deletions(-)
include/uapi/linux/inet_diag.h +11 -5
@@ -135,15 +135,21 @@ enum {INET_DIAG_TCLASS ,INET_DIAG_SKMEMINFO ,INET_DIAG_SHUTDOWN , -INET_DIAG_DCTCPINFO , -INET_DIAG_PROTOCOL ,/* response attribute only */ + +/* +* Next extenstions cannot be requested in struct inet_diag_req_v2: +* its field idiag_ext has only 8 bits. +*/ + +INET_DIAG_DCTCPINFO ,/* request as INET_DIAG_VEGASINFO */ +INET_DIAG_PROTOCOL ,/* response attribute only */ INET_DIAG_SKV6ONLY ,INET_DIAG_LOCALS ,INET_DIAG_PEERS ,INET_DIAG_PAD , -INET_DIAG_MARK , -INET_DIAG_BBRINFO , -INET_DIAG_CLASS_ID , +INET_DIAG_MARK ,/* only with CAP_NET_ADMIN */ +INET_DIAG_BBRINFO ,/* request as INET_DIAG_VEGASINFO */ +INET_DIAG_CLASS_ID ,/* request as INET_DIAG_TCLASS */ INET_DIAG_MD5SIG , __INET_DIAG_MAX, };
net/ipv4/inet_diag.c +9 -1
@@ -109,6 +109,7 @@ static size_t inet_sk_attr_size(struct s +nla_total_size (1 )/* INET_DIAG_TOS */ +nla_total_size (1 )/* INET_DIAG_TCLASS */ +nla_total_size (4 )/* INET_DIAG_MARK */ + +nla_total_size (4 )/* INET_DIAG_CLASS_ID */ +nla_total_size (sizeof (struct inet_diag_meminfo )) +nla_total_size (sizeof (struct inet_diag_msg )) +nla_total_size (SK_MEMINFO_VARS *sizeof (u32))
@@ -288,12 +289,19 @@ int inet_sk_diag_fill(struct sock *sk, s goto errout; } -if (ext & (1 << (INET_DIAG_CLASS_ID -1 ))) { +if (ext & (1 << (INET_DIAG_CLASS_ID -1 )) || + ext & (1 << (INET_DIAG_TCLASS -1 ))) {u32 classid =0 ;#ifdef CONFIG_SOCK_CGROUP_DATA classid =sock_cgroup_classid (&sk->sk_cgrp_data);#endif +/* Fallback to socket priority if class id isn't set. +* Classful qdiscs use it as direct reference to class. +* For cgroup2 classid is always zero. +*/ +if (!classid) + classid = sk->sk_priority;if (nla_put_u32 (skb,INET_DIAG_CLASS_ID , classid)) goto errout;
net/sctp/sctp_diag.c +1 -0
@@ -225,6 +225,7 @@ static size_t inet_assoc_attr_size(struc +nla_total_size (1 )/* INET_DIAG_TOS */ +nla_total_size (1 )/* INET_DIAG_TCLASS */ +nla_total_size (4 )/* INET_DIAG_MARK */ + +nla_total_size (4 )/* INET_DIAG_CLASS_ID */ +nla_total_size (addrlen * asoc->peer.transport_count) +nla_total_size (addrlen * addrcnt) +nla_total_size (sizeof (struct inet_diag_meminfo ))
Greg Kroah-Hartman
maintainerPATCH 55/71 RDMA/srp: Rework SCSI device reset handling
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bart Van Assche <[email protected]>
commit 48396e80fb6526ea5ed267bd84f028bae56d2f9e upstream.
Since .scsi_done() must only be called after scsi_queue_rq() has finished, make sure that the SRP initiator driver does not call .scsi_done() while scsi_queue_rq() is in progress. Although invoking sg_reset -d while I/O is in progress works fine with kernel v4.20 and before, that is not the case with kernel v5.0-rc1. This patch avoids that the following crash is triggered with kernel v5.0-rc1:
BUG: unable to handle kernel NULL pointer dereference at 0000000000000138 CPU: 0 PID: 360 Comm: kworker/0:1H Tainted: G B 5.0.0-rc1-dbg+ #1 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1 04/01/2014 Workqueue: kblockd blk_mq_run_work_fn RIP: 0010:blk_mq_dispatch_rq_list+0x116/0xb10 Call Trace: blk_mq_sched_dispatch_requests+0x2f7/0x300 __blk_mq_run_hw_queue+0xd6/0x180 blk_mq_run_work_fn+0x27/0x30 process_one_work+0x4f1/0xa20 worker_thread+0x67/0x5b0 kthread+0x1cf/0x1f0 ret_from_fork+0x24/0x30
--- drivers/infiniband/ulp/srp/ib_srp.c | 10 ---------- 1 file changed, 10 deletions(-)
drivers/infiniband/ulp/srp/ib_srp.c +0 -10
@@ -2669,7 +2669,6 @@ static int srp_reset_device(struct scsi_ {struct srp_target_port *target =host_to_target (scmnd->device->host);struct srp_rdma_ch *ch; -int i, j;u8 status;shost_printk (KERN_ERR , target->scsi_host,"SRP reset_device called\n" );
@@ -2681,15 +2680,6 @@ static int srp_reset_device(struct scsi_if (status)return FAILED ; -for (i =0 ; i < target->ch_count; i++) { - ch = &target->ch[i]; -for (j =0 ; j < target->req_ring_size; ++j) { -struct srp_request *req = &ch->req_ring[j]; - -srp_finish_req (ch, req, scmnd->device,DID_RESET <<16 ); - } - } -return SUCCESS ; }
Greg Kroah-Hartman
maintainerPATCH 56/71 KEYS: user: Align the payload buffer
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Biggers <[email protected]>
commit cc1780fc42c76c705dd07ea123f1143dc5057630 upstream.
Align the payload of "user" and "logon" keys so that users of the keyrings service can access it as a struct that requires more than 2-byte alignment. fscrypt currently does this which results in the read of fscrypt_key::size being misaligned as it needs 4-byte alignment.
Align to __alignof__(u64) rather than __alignof__(long) since in the future it's conceivable that people would use structs beginning with u64, which on some platforms would require more than 'long' alignment.
--- include/keys/user-type.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/keys/user-type.h +1 -1
@@ -31,7 +31,7 @@struct user_key_payload {struct rcu_head rcu;/* RCU destructor */ unsigned short datalen;/* length of this data */ -char data[0 ];/* actual data */ +char data[0 ]__aligned(__alignof__(u64)) ;/* actual data */ };extern struct key_type key_type_user;
Greg Kroah-Hartman
maintainerPATCH 57/71 KEYS: always initialize keyring_index_key::desc_len
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Biggers <[email protected]>
commit ede0fa98a900e657d1fcd80b50920efc896c1a4c upstream.
syzbot hit the 'BUG_ON(index_key->desc_len == 0);' in __key_link_begin() called from construct_alloc_key() during sys_request_key(), because the length of the key description was never calculated.
The problem is that we rely on ->desc_len being initialized by search_process_keyrings(), specifically by search_nested_keyrings(). But, if the process isn't subscribed to any keyrings that never happens.
Fix it by always initializing keyring_index_key::desc_len as soon as the description is set, like we already do in some places.
The following program reproduces the BUG_ON() when it's run as root and no session keyring has been installed. If it doesn't work, try removing pam_keyinit.so from /etc/pam.d/login and rebooting.
#include <stdlib.h>
#include <unistd.h>
#include <keyutils.h>
int main(void)
{
int id = add_key("keyring", "syz", NULL, 0, KEY_SPEC_USER_KEYRING);
keyctl_setperm(id, KEY_OTH_WRITE);
setreuid(5000, 5000);
request_key("user", "desc", "", id);
}--- security/keys/keyring.c | 4 +--- security/keys/proc.c | 3 +-- security/keys/request_key.c | 1 + security/keys/request_key_auth.c | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-)
security/keys/keyring.c +1 -3
@@ -661,9 +661,6 @@ static bool search_nested_keyrings(strucBUG_ON ((ctx->flags &STATE_CHECKS ) ==0 || (ctx->flags &STATE_CHECKS ) ==STATE_CHECKS ); -if (ctx->index_key.description) - ctx->index_key.desc_len =strlen (ctx->index_key.description); -/* Check to see if this top-level keyring is what we are looking for * and whether it is valid or not. */
@@ -921,6 +918,7 @@ key_ref_t keyring_search(key_ref_t keyristruct keyring_search_context ctx = { .index_key.type = type, .index_key.description = description, + .index_key.desc_len =strlen (description), .cred =current_cred (), .match_data.cmp = key_default_cmp, .match_data.raw_data = description,
security/keys/proc.c +1 -2
@@ -188,8 +188,7 @@ static int proc_keys_show(struct seq_filint rc;struct keyring_search_context ctx = { - .index_key.type = key->type, - .index_key.description = key->description, + .index_key = key->index_key, .cred = m->file->f_cred, .match_data.cmp = lookup_user_key_possessed, .match_data.raw_data = key,
security/keys/request_key.c +1 -0
@@ -545,6 +545,7 @@ struct key *request_key_and_link(structstruct keyring_search_context ctx = { .index_key.type = type, .index_key.description = description, + .index_key.desc_len =strlen (description), .cred =current_cred (), .match_data.cmp = key_default_cmp, .match_data.raw_data = description,
security/keys/request_key_auth.c +1 -1
@@ -246,7 +246,7 @@ struct key *key_get_instantiation_authkestruct key *authkey;key_ref_t authkey_ref; -sprintf (description,"%x" , target_id); + ctx.index_key.desc_len =sprintf (description,"%x" , target_id); authkey_ref =search_process_keyrings (&ctx);
Greg Kroah-Hartman
maintainerPATCH 58/71 parisc: Fix ptrace syscall number modification
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry V. Levin <[email protected]>
commit b7dc5a071ddf69c0350396b203cba32fe5bab510 upstream.
Commit 910cd32e552e ("parisc: Fix and enable seccomp filter support") introduced a regression in ptrace-based syscall tampering: when tracer changes syscall number to -1, the kernel fails to initialize %r28 with -ENOSYS and subsequently fails to return the error code of the failed syscall to userspace.
This erroneous behaviour could be observed with a simple strace syscall fault injection command which is expected to print something like this:
$ strace -a0 -ewrite -einject=write:error=enospc echo hello write(1, "hello\n", 6) = -1 ENOSPC (No space left on device) (INJECTED) write(2, "echo: ", 6) = -1 ENOSPC (No space left on device) (INJECTED) write(2, "write error", 11) = -1 ENOSPC (No space left on device) (INJECTED) write(2, "\n", 1) = -1 ENOSPC (No space left on device) (INJECTED) +++ exited with 1 +++
After commit 910cd32e552ea09caa89cdbe328e468979b030dd it loops printing something like this instead:
write(1, "hello\n", 6../strace: Failed to tamper with process 12345: unexpectedly got no error (return value 0, error 0) ) = 0 (INJECTED)
This bug was found by strace test suite.
--- arch/parisc/kernel/ptrace.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-)
arch/parisc/kernel/ptrace.c +21 -8
@@ -312,15 +312,29 @@ long compat_arch_ptrace(struct task_strulong do_syscall_trace_enter (struct pt_regs *regs) { -if (test_thread_flag (TIF_SYSCALL_TRACE ) && -tracehook_report_syscall_entry (regs)) { +if (test_thread_flag (TIF_SYSCALL_TRACE )) { +int rc =tracehook_report_syscall_entry (regs); +/* -* Tracing decided this syscall should not happen or the -* debugger stored an invalid system call number. Skip -* the system call and the system call restart handling. +* As tracesys_next does not set %r28 to -ENOSYS +* when %r20 is set to -1, initialize it here. */ - regs->gr[20 ] =-1UL ; - goto out; + regs->gr[28 ] = -ENOSYS ; + +if (rc) { +/* +* A nonzero return code from +* tracehook_report_syscall_entry() tells us +* to prevent the syscall execution. Skip +* the syscall call and the syscall restart handling. +* +* Note that the tracer may also just change +* regs->gr[20] to an invalid syscall number, +* that is handled by tracesys_next. +*/ + regs->gr[20 ] =-1UL ; +return -1 ; + } }/* Do the secure computing check after ptrace. */
@@ -344,7 +358,6 @@ long do_syscall_trace_enter(struct pt_re regs->gr[24 ] &0xffffffff , regs->gr[23] & 0xffffffff); -out:/* * Sign extend the syscall number to 64bit since it may have been * modified by a compat ptrace call
Greg Kroah-Hartman
maintainerPATCH 59/71 ARCv2: Enable unaligned access in early ASM code
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eugeniy Paltsev <[email protected]>
commit 252f6e8eae909bc075a1b1e3b9efb095ae4c0b56 upstream.
It is currently done in arc_init_IRQ() which might be too late considering gcc 7.3.1 onwards (GNU 2018.03) generates unaligned memory accesses by default
--- arch/arc/kernel/head.S | 10 ++++++++++ 1 file changed, 10 insertions(+)
arch/arc/kernel/head.S +10 -0
@@ -17,6 +17,7 @@ #include <asm/entry.h> #include <asm/arcregs.h> #include <asm/cache.h> +#include <asm/irqflags.h> .macro CPU_EARLY_SETUP
@@ -47,6 +48,15 @@ sr r5, [ARC_REG_DC_CTRL] 1: + +#ifdef CONFIG_ISA_ARCV2 + ; Unaligned access is disabled at reset, so re-enable early as + ; gcc 7.3.1 (ARC GNU 2018.03) onwards generates unaligned access + ; by default + lr r5, [status32] + bset r5, r5, STATUS_AD_BIT + kflag r5 +#endif .endm .section .init.text, "ax",@progbits
Greg Kroah-Hartman
maintainerPATCH 60/71 ARC: U-boot: check arguments paranoidly
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eugeniy Paltsev <[email protected]>
commit a66f2e57bd566240d8b3884eedf503928fbbe557 upstream.
Handle U-boot arguments paranoidly:
* don't allow to pass unknown tag.
* try to use external device tree blob only if corresponding tag (TAG_DTB) is set.
* don't check uboot_tag if kernel build with no ARC_UBOOT_SUPPORT.
NOTE:
If U-boot args are invalid we skip them and try to use embedded device tree blob. We can't panic on invalid U-boot args as we really pass invalid args due to bug in U-boot code.
This happens if we don't provide external DTB to U-boot and don't set 'bootargs' U-boot environment variable (which is default case at least for HSDK board) In that case we will pass
{r0 = 1 (bootargs in r2); r1 = 0; r2 = 0;} to linux which is invalid.
While I'm at it refactor U-boot arguments handling code.
--- arch/arc/kernel/head.S | 4 +- arch/arc/kernel/setup.c | 89 +++++++++++++++++++++++++++++++++--------------- 2 files changed, 65 insertions(+), 28 deletions(-)
arch/arc/kernel/head.S +2 -2
@@ -103,9 +103,9 @@ ENTRY(stext) #ifdef CONFIG_ARC_UBOOT_SUPPORT ; Uboot - kernel ABI ; r0 = [0] No uboot interaction, [1] cmdline in r2, [2] DTB in r2 - ; r1 = magic number (board identity, unused as of now + ; r1 = magic number (always zero as of now) ; r2 = pointer to uboot provided cmdline or external DTB in mem - ; These are handled later in setup_arch() + ; These are handled later in handle_uboot_args() st r0, [@uboot_tag] st r2, [@uboot_arg] #endif
arch/arc/kernel/setup.c +63 -26
106 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 61/71 ARC: define ARCH_SLAB_MINALIGN = 8
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexey Brodkin <[email protected]>
commit b6835ea77729e7faf4656ca637ba53f42b8ee3fd upstream.
The default value of ARCH_SLAB_MINALIGN in "include/linux/slab.h" is "__alignof__(unsigned long long)" which for ARC unexpectedly turns out to be 4. This is not a compiler bug, but as defined by ARC ABI [1]
Thus slab allocator would allocate a struct which is 32-bit aligned, which is generally OK even if struct has long long members. There was however potetial problem when it had any atomic64_t which use LLOCKD/SCONDD instructions which are required by ISA to take 64-bit addresses. This is the problem we ran into
[ 4.015732] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null) [ 4.167881] Misaligned Access [ 4.172356] Path: /bin/busybox.nosuid [ 4.176004] CPU: 2 PID: 171 Comm: rm Not tainted 4.19.14-yocto-standard #1 [ 4.182851] [ 4.182851] [ECR ]: 0x000d0000 => Check Programmer's Manual [ 4.190061] [EFA ]: 0xbeaec3fc [ 4.190061] [BLINK ]: ext4_delete_entry+0x210/0x234 [ 4.190061] [ERET ]: ext4_delete_entry+0x13e/0x234 [ 4.202985] [STAT32]: 0x80080002 : IE K [ 4.207236] BTA: 0x9009329c SP: 0xbe5b1ec4 FP: 0x00000000 [ 4.212790] LPS: 0x9074b118 LPE: 0x9074b120 LPC: 0x00000000 [ 4.218348] r00: 0x00000040 r01: 0x00000021 r02: 0x00000001 ... ... [ 4.270510] Stack Trace: [ 4.274510] ext4_delete_entry+0x13e/0x234 [ 4.278695] ext4_rmdir+0xe0/0x238 [ 4.282187] vfs_rmdir+0x50/0xf0 [ 4.285492] do_rmdir+0x9e/0x154 [ 4.288802] EV_Trap+0x110/0x114
The fix is to make sure slab allocations are 64-bit aligned.
Do note that atomic64_t is __attribute__((aligned(8)) which means gcc does generate 64-bit aligned references, relative to beginning of container struct. However the issue is if the container itself is not 64-bit aligned, atomic64_t ends up unaligned which is what this patch ensures.
[1] https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/wiki/files/ARCv2_ABI.pdf
--- arch/arc/include/asm/cache.h | 11 +++++++++++ 1 file changed, 11 insertions(+)
arch/arc/include/asm/cache.h +11 -0
@@ -52,6 +52,17 @@#define cache_line_size () SMP_CACHE_BYTES#define ARCH_DMA_MINALIGN SMP_CACHE_BYTES +/* +* Make sure slab-allocated buffers are 64-bit aligned when atomic64_t uses +* ARCv2 64-bit atomics (LLOCKD/SCONDD). This guarantess runtime 64-bit +* alignment for any atomic64_t embedded in buffer. +* Default ARCH_SLAB_MINALIGN is __alignof__(long long) which has a relaxed +* value of 4 (and not 8) in ARC ABI. +*/ +#if defined(CONFIG_ARC_HAS_LL64 ) && defined(CONFIG_ARC_HAS_LLSC ) +#define ARCH_SLAB_MINALIGN 8 +#endif +extern void arc_cache_init (void );extern char *arc_cache_mumbojumbo (int cpu_id,char *buf,int len);extern void read_decode_cache_bcr (void );
Greg Kroah-Hartman
maintainerPATCH 62/71 drm/i915/fbdev: Actually configure untiled displays
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Wilson <[email protected]>
commit d179b88deb3bf6fed4991a31fd6f0f2cad21fab5 upstream.
If we skipped all the connectors that were not part of a tile, we would leave conn_seq=0 and conn_configured=0, convincing ourselves that we had stagnated in our configuration attempts. Avoid this situation by starting conn_seq=ALL_CONNECTORS, and repeating until we find no more connectors to configure.
--- drivers/gpu/drm/i915/intel_fbdev.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
drivers/gpu/drm/i915/intel_fbdev.c +7 -5
@@ -326,8 +326,8 @@ static bool intel_fb_initial_config(stru bool *enabled, int width, int height) { struct drm_i915_private *dev_priv = to_i915(fb_helper->dev); -unsigned long conn_configured, conn_seq, mask;unsigned int count =min (fb_helper->connector_count,BITS_PER_LONG ); +unsigned long conn_configured, conn_seq;int i, j;bool *save_enabled;bool fallback = true, ret = true;
@@ -345,10 +345,9 @@ static bool intel_fb_initial_config(strudrm_modeset_backoff (&ctx);memcpy (save_enabled, enabled, count); - mask =GENMASK (count -1 ,0 ); + conn_seq =GENMASK (count -1 ,0 ); conn_configured =0 ; retry: - conn_seq = conn_configured;for (i =0 ; i < count; i++) {struct drm_fb_helper_connector *fb_conn;struct drm_connector *connector;
@@ -361,7 +360,8 @@ retry:if (conn_configured &BIT (i))continue ; -if (conn_seq ==0 && !connector->has_tile) +/* First pass, only consider tiled connectors */ +if (conn_seq ==GENMASK (count -1 ,0 ) && !connector->has_tile)continue ;if (connector->status == connector_status_connected)
@@ -465,8 +465,10 @@ retry: conn_configured |=BIT (i); } -if ((conn_configured & mask) != mask && conn_configured != conn_seq) +if (conn_configured != conn_seq) {/* repeat until no more are found */ + conn_seq = conn_configured; goto retry; + }/* * If the BIOS didn't enable everything it could, fall back to have the
Greg Kroah-Hartman
maintainerPATCH 63/71 net: validate untrusted gso packets without csum offload
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Willem de Bruijn <[email protected]>
commit d5be7f632bad0f489879eed0ff4b99bd7fe0b74c upstream.
Syzkaller again found a path to a kernel crash through bad gso input. By building an excessively large packet to cause an skb field to wrap.
If VIRTIO_NET_HDR_F_NEEDS_CSUM was set this would have been dropped in skb_partial_csum_set.
GSO packets that do not set checksum offload are suspicious and rare. Most callers of virtio_net_hdr_to_skb already pass them to skb_probe_transport_header.
Move that test forward, change it to detect parse failure and drop packets on failure as those cleary are not one of the legitimate VIRTIO_NET_HDR_GSO types.
--- include/linux/skbuff.h | 2 +- include/linux/virtio_net.h | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-)
include/linux/skbuff.h +1 -1
@@ -2377,7 +2377,7 @@ static inline void skb_probe_transport_hreturn ; else if (skb_flow_dissect_flow_keys(skb, &keys, 0)) skb_set_transport_header(skb, keys.control.thoff); - else + else if (offset_hint >= 0) skb_set_transport_header(skb, offset_hint); }
include/linux/virtio_net.h +9 -0
@@ -57,6 +57,15 @@ static inline int virtio_net_hdr_to_skb(if (!skb_partial_csum_set (skb, start, off))return -EINVAL ; + }else { +/* gso packets without NEEDS_CSUM do not set transport_offset. +* probe and drop if does not match one of the above types. +*/ +if (gso_type) { +skb_probe_transport_header (skb,-1 ); +if (!skb_transport_header_was_set (skb)) +return -EINVAL ; + } }if (hdr->gso_type !=VIRTIO_NET_HDR_GSO_NONE ) {
Greg Kroah-Hartman
maintainerPATCH 64/71 net: avoid false positives in untrusted gso validation
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Willem de Bruijn <[email protected]>
commit 9e8db5913264d3967b93c765a6a9e464d9c473db upstream.
GSO packets with vnet_hdr must conform to a small set of gso_types. The below commit uses flow dissection to drop packets that do not.
But it has false positives when the skb is not fully initialized. Dissection needs skb->protocol and skb->network_header.
Infer skb->protocol from gso_type as the two must agree. SKB_GSO_UDP can use both ipv4 and ipv6, so try both.
Exclude callers for which network header offset is not known.
--- include/linux/virtio_net.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-)
include/linux/virtio_net.h +12 -2
@@ -61,10 +61,20 @@ static inline int virtio_net_hdr_to_skb(/* gso packets without NEEDS_CSUM do not set transport_offset. * probe and drop if does not match one of the above types. */ -if (gso_type) { +if (gso_type && skb->network_header) { +if (!skb->protocol) +virtio_net_hdr_set_proto (skb, hdr); +retry:skb_probe_transport_header (skb,-1 ); -if (!skb_transport_header_was_set (skb)) +if (!skb_transport_header_was_set (skb)) { +/* UFO does not specify ipv4 or 6: try both */ +if (gso_type &SKB_GSO_UDP && + skb->protocol ==htons (ETH_P_IP )) { + skb->protocol =htons (ETH_P_IPV6 ); + goto retry; + }return -EINVAL ; + } } }
Greg Kroah-Hartman
maintainerPATCH 65/71 Revert "bridge: do not add port to router list when receives query with source 0.0.0.0"
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hangbin Liu <[email protected]>
commit 278e2148c07559dd4ad8602f22366d61eb2ee7b7 upstream.
This reverts commit 5a2de63fd1a5 ("bridge: do not add port to router list when receives query with source 0.0.0.0") and commit 0fe5119e267f ("net:
bridge: remove ipv6 zero address check in mcast queries")
The reason is RFC 4541 is not a standard but suggestive. Currently we will elect 0.0.0.0 as Querier if there is no ip address configured on bridge. If we do not add the port which recives query with source 0.0.0.0 to router list, the IGMP reports will not be about to forward to Querier, IGMP data will also not be able to forward to dest.
As Nikolay suggested, revert this change first and add a boolopt api to disable none-zero election in future if needed.
--- net/bridge/br_multicast.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-)
net/bridge/br_multicast.c +1 -8
@@ -1390,14 +1390,7 @@ static void br_multicast_query_received(return ;br_multicast_update_query_timer (br, query, max_delay); - -/* Based on RFC4541, section 2.1.1 IGMP Forwarding Rules, -* the arrival port for IGMP Queries where the source address -* is 0.0.0.0 should not be added to router port list. -*/ -if ((saddr->proto ==htons (ETH_P_IP ) && saddr->u.ip4) || - saddr->proto ==htons (ETH_P_IPV6 )) -br_multicast_mark_router (br, port); +br_multicast_mark_router (br, port); } static int br_ip4_multicast_query(struct net_bridge *br,
Greg Kroah-Hartman
maintainerPATCH 66/71 netfilter: nf_tables: fix flush after rule deletion in the same batch
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pablo Neira Ayuso <[email protected]>
commit 23b7ca4f745f21c2b9cfcb67fdd33733b3ae7e66 upstream.
Flush after rule deletion bogusly hits -ENOENT. Skip rules that have been already from nft_delrule_by_chain() which is always called from the flush path.
--- net/netfilter/nf_tables_api.c | 3 +++ 1 file changed, 3 insertions(+)
net/netfilter/nf_tables_api.c +3 -0
@@ -304,6 +304,9 @@ static int nft_delrule_by_chain(struct nint err;list_for_each_entry (rule, &ctx->chain->rules, list) { +if (!nft_is_active_next (ctx->net, rule)) +continue ; + err =nft_delrule (ctx, rule);if (err <0 )return err;
Greg Kroah-Hartman
maintainerPATCH 67/71 netfilter: nft_compat: use-after-free when deleting targets
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pablo Neira Ayuso <[email protected]>
commit 753c111f655e38bbd52fc01321266633f022ebe2 upstream.
Fetch pointer to module before target object is released.
--- net/netfilter/nft_compat.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/netfilter/nft_compat.c +2 -1
@@ -277,6 +277,7 @@ nft_target_destroy(const struct nft_ctx {struct xt_target *target = expr->ops->data;void *info =nft_expr_priv (expr); +struct module *me = target->me;struct xt_tgdtor_param par; par.net = ctx->net;
@@ -287,7 +288,7 @@ nft_target_destroy(const struct nft_ctx par.target->destroy (&par); if (nft_xt_put(container_of(expr->ops, struct nft_xt, ops))) -module_put (target->me); +module_put (me); }static int nft_target_dump (struct sk_buff *skb,const struct nft_expr *expr)
Greg Kroah-Hartman
maintainerPATCH 68/71 netfilter: ipv6: Dont preserve original oif for loopback address
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eli Cooper <[email protected]>
commit 15df03c661cb362366ecfc3a21820cb934f3e4ca upstream.
Commit 508b09046c0f ("netfilter: ipv6: Preserve link scope traffic original oif") made ip6_route_me_harder() keep the original oif for link-local and multicast packets. However, it also affected packets for the loopback address because it used rt6_need_strict().
REDIRECT rules in the OUTPUT chain rewrite the destination to loopback address; thus its oif should not be preserved. This commit fixes the bug that redirected local packets are being dropped. Actually the packet was not exactly dropped; Instead it was sent out to the original oif rather than lo. When a packet with daddr ::1 is sent to the router, it is effectively dropped.
--- net/ipv6/netfilter.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
net/ipv6/netfilter.c +3 -1
@@ -24,9 +24,11 @@ int ip6_route_me_harder(struct net *net,struct sock *sk =sk_to_full_sk (skb->sk);unsigned int hh_len;struct dst_entry *dst; +int strict = (ipv6_addr_type (&iph->daddr) & + (IPV6_ADDR_MULTICAST |IPV6_ADDR_LINKLOCAL ));struct flowi6 fl6 = { .flowi6_oif = sk && sk->sk_bound_dev_if ? sk->sk_bound_dev_if : -rt6_need_strict (&iph->daddr) ?skb_dst (skb)->dev->ifindex :0 , + strict ?skb_dst (skb)->dev->ifindex :0 , .flowi6_mark = skb->mark, .flowi6_uid =sock_net_uid (net, sk), .daddr = iph->daddr,
Greg Kroah-Hartman
maintainerPATCH 69/71 pinctrl: max77620: Use define directive for max77620_pinconf_param values
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nathan Chancellor <[email protected]>
commit 1f60652dd586d1b3eee7c4602892a97a62fa937a upstream.
Clang warns when one enumerated type is implicitly converted to another:
drivers/pinctrl/pinctrl-max77620.c:56:12: warning: implicit conversion from enumeration type 'enum max77620_pinconf_param' to different enumeration type 'enum pin_config_param' [-Wenum-conversion]
.param = MAX77620_ACTIVE_FPS_SOURCE,
^~~~~~~~~~~~~~~~~~~~~~~~~~It is expected that pinctrl drivers can extend pin_config_param because of the gap between PIN_CONFIG_END and PIN_CONFIG_MAX so this conversion isn't an issue. Most drivers that take advantage of this define the PIN_CONFIG variables as constants, rather than enumerated values. Do the same thing here so that Clang no longer warns.
--- drivers/pinctrl/pinctrl-max77620.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-)
drivers/pinctrl/pinctrl-max77620.c +6 -8
@@ -34,14 +34,12 @@ enum max77620_pin_ppdrv { MAX77620_PIN_PP_DRV, }; -enum max77620_pinconf_param { -MAX77620_ACTIVE_FPS_SOURCE =PIN_CONFIG_END +1 , -MAX77620_ACTIVE_FPS_POWER_ON_SLOTS , -MAX77620_ACTIVE_FPS_POWER_DOWN_SLOTS , -MAX77620_SUSPEND_FPS_SOURCE , -MAX77620_SUSPEND_FPS_POWER_ON_SLOTS , -MAX77620_SUSPEND_FPS_POWER_DOWN_SLOTS , -}; +#define MAX77620_ACTIVE_FPS_SOURCE (PIN_CONFIG_END + 1) +#define MAX77620_ACTIVE_FPS_POWER_ON_SLOTS (PIN_CONFIG_END + 2) +#define MAX77620_ACTIVE_FPS_POWER_DOWN_SLOTS (PIN_CONFIG_END + 3) +#define MAX77620_SUSPEND_FPS_SOURCE (PIN_CONFIG_END + 4) +#define MAX77620_SUSPEND_FPS_POWER_ON_SLOTS (PIN_CONFIG_END + 5) +#define MAX77620_SUSPEND_FPS_POWER_DOWN_SLOTS (PIN_CONFIG_END + 6)struct max77620_pin_function {const char *name;
Greg Kroah-Hartman
maintainerPATCH 70/71 phy: tegra: remove redundant self assignment of map
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Colin Ian King <[email protected]>
commit a0dd6773038f3fd2bd1b4f7ec193887cffc49046 upstream.
The assignment of map to itself is redundant and can be removed. Detected with Coccinelle.
--- drivers/phy/tegra/xusb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/phy/tegra/xusb.c +1 -1
@@ -418,7 +418,7 @@ tegra_xusb_port_find_lane(struct tegra_x {struct tegra_xusb_lane *lane, *match =ERR_PTR (-ENODEV ); -for (map = map; map->type; map++) { +for (; map->type; map++) {if (port->index != map->port)continue ;
Greg Kroah-Hartman
maintainerPATCH 71/71 sched/sysctl: Fix attributes of some extern declarations
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit a9903f04e0a4ea522d959c2f287cdf0ab029e324 upstream.
The definition of sysctl_sched_migration_cost, sysctl_sched_nr_migrate and sysctl_sched_time_avg includes the attribute const_debug. This attribute is not part of the extern declaration of these variables in include/linux/sched/sysctl.h, while it is in kernel/sched/sched.h, and as a result Clang generates warnings like this:
kernel/sched/sched.h:1618:33: warning: section attribute is specified on redeclared variable [-Wsection]
extern const_debug unsigned int sysctl_sched_time_avg;
^ ./include/linux/sched/sysctl.h:42:21: note: previous declaration is here extern unsigned int sysctl_sched_time_avg;
The header only declares the variables when CONFIG_SCHED_DEBUG is defined, therefore it is not necessary to duplicate the definition of const_debug. Instead we can use the attribute __read_mostly, which is the expansion of const_debug when CONFIG_SCHED_DEBUG=y is set.
--- include/linux/sched/sysctl.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
include/linux/sched/sysctl.h +3 -3
@@ -38,9 +38,9 @@ extern unsigned int sysctl_numa_balancinextern unsigned int sysctl_numa_balancing_scan_size;#ifdef CONFIG_SCHED_DEBUG -extern unsigned int sysctl_sched_migration_cost; -extern unsigned int sysctl_sched_nr_migrate; -extern unsigned int sysctl_sched_time_avg; +extern __read_mostly unsigned int sysctl_sched_migration_cost; +extern __read_mostly unsigned int sysctl_sched_nr_migrate; +extern __read_mostly unsigned int sysctl_sched_time_avg; int sched_proc_update_handler(struct ctl_table *table, int write, void __user *buffer, size_t *length,
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.104 release. There are 71 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Feb 27 19:50:01 UTC 2019. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.104-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.14.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
Summary
------------------------------------------------------------------------
kernel: 4.14.104-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-4.14.y
git commit: 470aad464377e6a50dcafe2ad2fe510166d1c4c0
git describe: v4.14.103-72-g470aad464377
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-4.14-oe/build/v4.14.103-72-g470aad464377
No regressions (compared to build v4.14.103)
No fixes (compared to build v4.14.103)
Ran 22568 total tests in the following environments and test suites.
Environments
--------------
- dragonboard-410c - arm64
- hi6220-hikey - arm64
- i386
- juno-r2 - arm64
- qemu_arm
- qemu_arm64
- qemu_i386
- qemu_x86_64
- x15 - arm
- x86_64
Test Suites
-----------
* boot
* install-android-platform-tools-r2600
* kselftest
* libhugetlbfs
* ltp-cap_bounds-tests
* ltp-containers-tests
* ltp-cpuhotplug-tests
* ltp-cve-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-hugetlb-tests
* ltp-io-tests
* ltp-ipc-tests
* ltp-math-tests
* ltp-mm-tests
* ltp-nptl-tests
* ltp-pty-tests
* ltp-sched-tests
* ltp-securebits-tests
* ltp-syscalls-tests
* ltp-timers-tests
* spectre-meltdown-checker-test
* ltp-dio-tests
* ltp-open-posix-tests
* kselftest-vsyscall-mode-native
* kselftest-vsyscall-mode-none
Signature · 2 lines
Linaro LKFT https://lkft.linaro.org
Jon Hunter
maintainerQuoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.104 release. There are 71 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Feb 27 19:50:01 UTC 2019. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.104-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.14.y
and the diffstat can be found below.thanks,
greg k-h
All tests are passing for Tegra ...
Test results for stable-v4.14:
8 builds: 8 pass, 0 fail
16 boots: 16 pass, 0 fail
14 tests: 14 pass, 0 failLinux version: 4.14.104-rc1-g66effcd
Boards tested: tegra124-jetson-tk1, tegra20-ventana,
tegra210-p2371-2180, tegra30-cardhu-a04
Cheers
Jon
Signature · 1 line
nvpublic
stable-rc/linux-4.14.y boot: 105 boots: 0 failed, 39 passed with 66 offline (v4.14.103-72-g470aad464377)
stable-rc/linux-4.14.y boot: 105 boots: 0 failed, 39 passed with 66 offline (v4.14.103-72-g470aad464377)
Full Boot Summary: https://kernelci.org/boot/all/job/stable-rc/branch/linux-4.14.y/kernel/v4.14.103-72-g470aad464377/
Full Build Summary: https://kernelci.org/build/stable-rc/branch/linux-4.14.y/kernel/v4.14.103-72-g470aad464377/
Tree: stable-rc
Branch: linux-4.14.y
Git Describe: v4.14.103-72-g470aad464377
Git Commit: 470aad464377e6a50dcafe2ad2fe510166d1c4c0
Git URL: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Tested: 58 unique boards, 22 SoC families, 12 builds out of 197
Offline Platforms:
arm:
bcm2835_defconfig:
gcc-7
bcm2835-rpi-b: 1 offline lab
exynos_defconfig:
gcc-7
exynos5250-arndale: 1 offline lab
exynos5420-arndale-octa: 1 offline lab
exynos5800-peach-pi: 1 offline lab
imx_v6_v7_defconfig:
gcc-7
imx6dl-wandboard_dual: 1 offline lab
imx6dl-wandboard_solo: 1 offline lab
imx6q-wandboard: 1 offline lab
imx7s-warp: 1 offline lab
vf610-colibri-eval-v3: 1 offline lab
multi_v7_defconfig:
gcc-7
alpine-db: 1 offline lab
am335x-boneblack: 1 offline lab armada-xp-openblocks-ax3-4: 1 offline lab
at91-sama5d4_xplained: 1 offline lab
exynos5250-arndale: 1 offline lab
exynos5420-arndale-octa: 1 offline lab
exynos5800-peach-pi: 1 offline lab
imx6dl-wandboard_dual: 1 offline lab
imx6dl-wandboard_solo: 1 offline lab
imx6q-wandboard: 1 offline lab
imx7s-warp: 1 offline lab
meson8b-odroidc1: 1 offline lab
mt7623n-bananapi-bpi-r2: 1 offline lab
omap3-beagle: 1 offline lab
omap4-panda: 1 offline lab
qcom-apq8064-cm-qs600: 1 offline lab
qcom-apq8064-ifc6410: 1 offline lab socfpga_cyclone5_de0_sockit: 1 offline lab
stih410-b2120: 1 offline lab
sun4i-a10-cubieboard: 1 offline lab
sun5i-r8-chip: 1 offline lab
sun7i-a20-bananapi: 1 offline lab
sun7i-a20-cubietruck: 1 offline lab
tegra124-jetson-tk1: 1 offline lab
tegra20-iris-512: 1 offline lab
tegra30-beaver: 1 offline lab
vf610-colibri-eval-v3: 1 offline lab
zynq-zc702: 1 offline lab
omap2plus_defconfig:
gcc-7
am335x-boneblack: 1 offline lab
omap3-beagle: 1 offline lab
omap4-panda: 1 offline lab
mvebu_v7_defconfig:
gcc-7
armada-xp-openblocks-ax3-4: 1 offline lab
sunxi_defconfig:
gcc-7
sun4i-a10-cubieboard: 1 offline lab
sun5i-r8-chip: 1 offline lab
sun7i-a20-bananapi: 1 offline lab
sun7i-a20-cubietruck: 1 offline lab
sama5_defconfig:
gcc-7
at91-sama5d4_xplained: 1 offline lab
qcom_defconfig:
gcc-7
qcom-apq8064-cm-qs600: 1 offline lab
qcom-apq8064-ifc6410: 1 offline lab
davinci_all_defconfig:
gcc-7
da850-lcdk: 1 offline lab
dm365evm,legacy: 1 offline lab
tegra_defconfig:
gcc-7
tegra124-jetson-tk1: 1 offline lab
tegra20-iris-512: 1 offline lab
tegra30-beaver: 1 offline lab
arm64:
defconfig:
gcc-7
apq8016-sbc: 1 offline lab
juno-r2: 1 offline lab
meson-gxbb-odroidc2: 1 offline lab
meson-gxbb-p200: 1 offline lab
meson-gxl-s905d-p230: 1 offline lab meson-gxl-s905x-khadas-vim: 1 offline lab meson-gxl-s905x-libretech-cc: 1 offline lab meson-gxl-s905x-nexbox-a95x: 1 offline lab
meson-gxl-s905x-p212: 1 offline lab
meson-gxm-nexbox-a1: 1 offline lab
mt7622-rfb1: 1 offline lab
rk3399-firefly: 1 offline lab
sun50i-a64-pine64-plus: 1 offline lab
---
For more info write to <[email protected]>
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.104 release. There are 71 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Feb 27 19:50:01 UTC 2019. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.104-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.14.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.104 release. There are 71 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Feb 27 19:50:01 UTC 2019. Anything received after that time might be too late.
Build results:
total: 172 pass: 171 fail: 1 Failed builds: powerpc:ppc6xx_defconfig Qemu test results: total: 328 pass: 328 fail: 0
Same gcc related problem as reported with v4.4.y and v4.9.y; no concerns.
Guenter