4.9.161-stable review
Subsystems (5)
Greg Kroah-Hartman
maintainercover 4.9.161-stable review
This is the start of the stable review cycle for the 4.9.161 release. There are 63 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:06 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.9.161-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.9.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.9.161-rc1
Masahiro Yamada <[email protected]>
kbuild: consolidate Clang compiler flags
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
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"
Nick Desaulniers <[email protected]>
mm/zsmalloc.c: fix -Wunneeded-internal-declaration warning
Matthias Kaehlcke <[email protected]>
mm/zsmalloc.c: change stat type parameter to int
Will Deacon <[email protected]>
irqchip/gic-v3: Convert arm64 GIC accessors to {read,write}_sysreg_s
Masahiro Yamada <[email protected]>
kbuild: add -no-integrated-as Clang option unconditionally
Stefan Agner <[email protected]>
kbuild: set no-integrated-as before incl. arch Makefile
Sodagudi Prasad <[email protected]>
kbuild: clang: disable unused variable warnings only when constant
Nick Desaulniers <[email protected]>
kbuild: clang: remove crufty HOSTCFLAGS
David Lin <[email protected]>
kbuild: clang: fix build failures with sparse check
Masahiro Yamada <[email protected]>
kbuild: move cc-option and cc-disable-warning after incl. arch Makefile
Ville Syrjälä <[email protected]>
drm/i915: Fix enum pipe vs. enum transcoder for the PCH transcoder
Matthias Kaehlcke <[email protected]>
drm/i915: Consistently use enum pipe for PCH transcoders
Matthias Kaehlcke <[email protected]>
x86/boot: Disable the address-of-packed-member compiler warning
Matthias Kaehlcke <[email protected]>
tracing: Use cpumask_available() to check if cpumask variable may be used
Matthias Kaehlcke <[email protected]>
netpoll: Fix device name check in netpoll_setup()
Matthias Kaehlcke <[email protected]>
clocksource: Use GENMASK_ULL in definition of CLOCKSOURCE_MASK
Matthias Kaehlcke <[email protected]>
hpet: Make cmd parameter of hpet_ioctl_common() unsigned
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
Saeed Mahameed <[email protected]>
net/mlx4_en: Force CHECKSUM_NONE for short ethernet frames
Xin Long <[email protected]>
sctp: call gso_reset_checksum when computing checksum in sctp_gso_segment
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()
Kal Conley <[email protected]>
net/packet: fix 4gb buffer limit due to overflow check
Eric Dumazet <[email protected]>
batman-adv: fix uninit-value in batadv_interface_tx()
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
Michael Weiser <[email protected]>
net: ethernet: stmmac: change dma descriptors to __le32
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
Kangjie Lu <[email protected]>
leds: lp5523: fix a missing check of return value of lp55xx_read
Colin Ian King <[email protected]>
atm: he: fix sign-extension overflow on large shift
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
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
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
Kangjie Lu <[email protected]>
mfd: mc13xxx: Fix a missing check of a register-read failure
Charles Keepax <[email protected]>
mfd: wm5110: Add missing ASRC rate register
Jonathan Marek <[email protected]>
mfd: qcom_rpm: write fw_version to CTRL_REG
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
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
-------------
Diffstat:
Makefile | 60 +++++++-------- arch/arc/include/asm/cache.h | 11 +++ arch/arc/kernel/head.S | 14 +++- arch/arc/kernel/setup.c | 87 +++++++++++++++------- arch/arm64/include/asm/arch_gicv3.h | 47 +++++------- arch/mips/configs/ath79_defconfig | 1 + arch/mips/jazz/jazzdma.c | 5 +- arch/parisc/kernel/ptrace.c | 29 ++++++-- arch/x86/boot/compressed/Makefile | 1 + drivers/atm/he.c | 2 +- drivers/char/hpet.c | 2 +- drivers/gpu/drm/i915/i915_irq.c | 10 +-- drivers/gpu/drm/i915/intel_display.c | 14 ++-- drivers/gpu/drm/i915/intel_drv.h | 4 +- drivers/gpu/drm/i915/intel_fifo_underrun.c | 24 +++--- 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/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/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 + .../ethernet/mellanox/mlxsw/spectrum_switchdev.c | 12 +-- drivers/net/ethernet/qlogic/qed/qed_ll2.c | 4 + drivers/net/ethernet/stmicro/stmmac/chain_mode.c | 55 +++++++------- drivers/net/ethernet/stmicro/stmmac/descs.h | 20 ++--- drivers/net/ethernet/stmicro/stmmac/descs_com.h | 48 ++++++------ drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c | 62 +++++++-------- drivers/net/ethernet/stmicro/stmmac/enh_desc.c | 55 +++++++------- drivers/net/ethernet/stmicro/stmmac/norm_desc.c | 48 ++++++------ drivers/net/ethernet/stmicro/stmmac/ring_mode.c | 39 +++++----- drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 51 +++++++------ drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c | 10 +++ 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/qla4xxx/ql4_os.c | 2 + fs/ceph/snap.c | 3 +- fs/proc/base.c | 4 - include/keys/user-type.h | 2 +- include/linux/clocksource.h | 2 +- include/linux/sched/sysctl.h | 6 +- kernel/trace/trace.c | 5 +- mm/mempolicy.c | 6 +- mm/zsmalloc.c | 11 ++- net/batman-adv/soft-interface.c | 2 + net/bridge/br_multicast.c | 9 +-- net/ceph/messenger.c | 15 ++-- net/core/netpoll.c | 2 +- net/ipv6/sit.c | 3 +- net/mac80211/mesh_pathtbl.c | 17 +++-- net/netfilter/nf_tables_api.c | 3 + net/packet/af_packet.c | 2 +- net/sctp/offload.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 +- 68 files changed, 528 insertions(+), 433 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/63 mac80211: Free mpath object when rhashtable insertion fails
4.9-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
@@ -449,17 +449,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; }
@@ -489,6 +487,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 2/63 libceph: handle an empty authorize reply
In reply to Greg Kroah-Hartman4.9-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
@@ -2042,6 +2042,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
@@ -2051,8 +2053,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;
@@ -2062,10 +2063,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 3/63 ceph: avoid repeatedly adding inode to mdsc->snap_flush_list
In reply to Greg Kroah-Hartman4.9-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
@@ -609,7 +609,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 4/63 numa: change get_mempolicy() to use nr_node_ids instead of MAX_NUMNODES
In reply to Greg Kroah-Hartman4.9-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
@@ -1327,7 +1327,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 )
@@ -1488,7 +1488,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);
@@ -1517,7 +1517,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 5/63 proc, oom: do not report alien mms when setting oom_score_adj
In reply to Greg Kroah-Hartman4.9-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
@@ -1134,10 +1134,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 6/63 KEYS: allow reaching the keys quotas exactly
In reply to Greg Kroah-Hartman4.9-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
@@ -264,8 +264,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 7/63 mfd: ti_am335x_tscadc: Use PLATFORM_DEVID_AUTO while registering mfd cells
In reply to Greg Kroah-Hartman4.9-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
@@ -264,8 +264,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 8/63 mfd: twl-core: Fix section annotations on {,un}protect_pm_master
In reply to Greg Kroah-Hartman4.9-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 9/63 mfd: db8500-prcmu: Fix some section annotations
In reply to Greg Kroah-Hartman4.9-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
@@ -2588,7 +2588,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 :
@@ -2736,7 +2736,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 10/63 mfd: mt6397: Do not call irq_domain_remove if PMIC unsupported
In reply to Greg Kroah-Hartman4.9-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
@@ -306,8 +306,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 11/63 mfd: ab8500-core: Return zero in get_register_interruptible()
In reply to Greg Kroah-Hartman4.9-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
@@ -257,7 +257,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 12/63 mfd: qcom_rpm: write fw_version to CTRL_REG
In reply to Greg Kroah-Hartman4.9-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 13/63 mfd: wm5110: Add missing ASRC rate register
In reply to Greg Kroah-Hartman4.9-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 14/63 mfd: mc13xxx: Fix a missing check of a register-read failure
In reply to Greg Kroah-Hartman4.9-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 15/63 qed: Fix qed_ll2_post_rx_buffer_notify_fw() by adding a write memory barrier
In reply to Greg Kroah-Hartman4.9-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
@@ -1013,6 +1013,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 16/63 net: hns: Fix use after free identified by SLUB debug
In reply to Greg Kroah-Hartman4.9-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
@@ -149,12 +149,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 void hns_ae_ring_enable_all (struct hnae_handle *handle,int val)
Signature · 1 line
2.19.1
Greg Kroah-Hartman
maintainerPATCH 17/63 MIPS: ath79: Enable OF serial ports in the default config
In reply to Greg Kroah-Hartman4.9-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
@@ -74,6 +74,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 18/63 scsi: qla4xxx: check return code of qla4xxx_copy_from_fwddb_param
In reply to Greg Kroah-Hartman4.9-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
@@ -7245,6 +7245,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 19/63 scsi: isci: initialize shost fully before calling scsi_add_host()
In reply to Greg Kroah-Hartman4.9-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
@@ -595,6 +595,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;
@@ -682,13 +689,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 20/63 MIPS: jazz: fix 64bit build
In reply to Greg Kroah-Hartman4.9-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
@@ -71,14 +71,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 21/63 net: stmmac: Fix PCI module removal leak
In reply to Greg Kroah-Hartman4.9-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
@@ -231,7 +231,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 22/63 isdn: i4l: isdn_tty: Fix some concurrency double-free bugs
In reply to Greg Kroah-Hartman4.9-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
@@ -1455,15 +1455,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 23/63 atm: he: fix sign-extension overflow on large shift
In reply to Greg Kroah-Hartman4.9-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 24/63 leds: lp5523: fix a missing check of return value of lp55xx_read
In reply to Greg Kroah-Hartman4.9-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 25/63 mlxsw: spectrum_switchdev: Do not treat static FDB entries as sticky
In reply to Greg Kroah-Hartman4.9-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
@@ -794,7 +794,7 @@ static int mlxsw_sp_port_vlans_add(struct mlxsw_sp_port *mlxsw_sp_port,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)
@@ -806,7 +806,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;
@@ -817,8 +817,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)
@@ -837,7 +836,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,
@@ -845,7 +845,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 26/63 net/mlx5e: Fix wrong (zero) TX drop counter indication for representor
In reply to Greg Kroah-Hartman4.9-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
@@ -91,6 +91,7 @@ static void mlx5e_update_sw_rep_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 27/63 isdn: avm: Fix string plus integer warning from Clang
In reply to Greg Kroah-Hartman4.9-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 28/63 net: ethernet: stmmac: change dma descriptors to __le32
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Weiser <[email protected]>
commit f8be0d78be6e7f199116a5e644ee20ff0ce413f7 upstream.
The stmmac driver does not take into account the processor may be big endian when writing the DMA descriptors. This causes the ethernet interface not to be initialised correctly when running a big-endian kernel. Change the descriptors for DMA to use __le32 and ensure they are suitably swapped before writing. Tested successfully on the Cubieboard2.
--- drivers/net/ethernet/stmicro/stmmac/chain_mode.c | 55 +++++++++--------- drivers/net/ethernet/stmicro/stmmac/descs.h | 20 +++--- drivers/net/ethernet/stmicro/stmmac/descs_com.h | 48 ++++++++-------- drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c | 62 ++++++++++----------- drivers/net/ethernet/stmicro/stmmac/enh_desc.c | 55 +++++++++--------- drivers/net/ethernet/stmicro/stmmac/norm_desc.c | 48 ++++++++-------- drivers/net/ethernet/stmicro/stmmac/ring_mode.c | 39 +++++++------ drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 51 ++++++++--------- 8 files changed, 196 insertions(+), 182 deletions(-)
drivers/net/ethernet/stmicro/stmmac/chain_mode.c +29 -26
@@ -34,7 +34,7 @@ static int stmmac_jumbo_frm(void *p, strunsigned int entry = priv->cur_tx;struct dma_desc *desc = priv->dma_tx + entry;unsigned int nopaged_len =skb_headlen (skb); -unsigned int bmax; +unsigned int bmax, des2;unsigned int i =1 , len;if (priv->plat->enh_desc)
@@ -44,11 +44,12 @@ static int stmmac_jumbo_frm(void *p, str len = nopaged_len - bmax; - desc->des2 =dma_map_single (priv->device, skb->data, - bmax,DMA_TO_DEVICE ); -if (dma_mapping_error (priv->device, desc->des2)) + des2 =dma_map_single (priv->device, skb->data, + bmax,DMA_TO_DEVICE ); + desc->des2 =cpu_to_le32 (des2); +if (dma_mapping_error (priv->device, des2))return -1 ; - priv->tx_skbuff_dma[entry].buf = desc->des2; + priv->tx_skbuff_dma[entry].buf = des2; priv->tx_skbuff_dma[entry].len = bmax;/* do not close the descriptor and do not set own bit */ priv->hw->desc->prepare_tx_desc(desc, 1, bmax, csum, STMMAC_CHAIN_MODE,
@@ -60,12 +61,13 @@ static int stmmac_jumbo_frm(void *p, str desc = priv->dma_tx + entry;if (len > bmax) { - desc->des2 =dma_map_single (priv->device, - (skb->data + bmax * i), - bmax,DMA_TO_DEVICE ); -if (dma_mapping_error (priv->device, desc->des2)) + des2 =dma_map_single (priv->device, + (skb->data + bmax * i), + bmax,DMA_TO_DEVICE ); + desc->des2 =cpu_to_le32 (des2); +if (dma_mapping_error (priv->device, des2))return -1 ; - priv->tx_skbuff_dma[entry].buf = desc->des2; + priv->tx_skbuff_dma[entry].buf = des2; priv->tx_skbuff_dma[entry].len = bmax; priv->hw->desc->prepare_tx_desc(desc, 0, bmax, csum, STMMAC_CHAIN_MODE, 1,
@@ -73,12 +75,13 @@ static int stmmac_jumbo_frm(void *p, str len -= bmax; i++; }else { - desc->des2 =dma_map_single (priv->device, - (skb->data + bmax * i), len, -DMA_TO_DEVICE ); -if (dma_mapping_error (priv->device, desc->des2)) + des2 =dma_map_single (priv->device, + (skb->data + bmax * i), len, +DMA_TO_DEVICE ); + desc->des2 =cpu_to_le32 (des2); +if (dma_mapping_error (priv->device, des2))return -1 ; - priv->tx_skbuff_dma[entry].buf = desc->des2; + priv->tx_skbuff_dma[entry].buf = des2; priv->tx_skbuff_dma[entry].len = len;/* last descriptor can be set now */ priv->hw->desc->prepare_tx_desc(desc, 0, len, csum,
@@ -119,19 +122,19 @@ static void stmmac_init_dma_chain(void *struct dma_extended_desc *p = (struct dma_extended_desc *)des;for (i =0 ; i < (size -1 ); i++) { dma_phy +=sizeof (struct dma_extended_desc ); - p->basic.des3 = (unsigned int )dma_phy; + p->basic.des3 =cpu_to_le32 ((unsigned int )dma_phy); p++; } - p->basic.des3 = (unsigned int )phy_addr; + p->basic.des3 =cpu_to_le32 ((unsigned int )phy_addr); }else {struct dma_desc *p = (struct dma_desc *)des;for (i =0 ; i < (size -1 ); i++) { dma_phy +=sizeof (struct dma_desc ); - p->des3 = (unsigned int )dma_phy; + p->des3 =cpu_to_le32 ((unsigned int )dma_phy); p++; } - p->des3 = (unsigned int )phy_addr; + p->des3 =cpu_to_le32 ((unsigned int )phy_addr); } }
@@ -144,10 +147,10 @@ static void stmmac_refill_desc3(void *pr* 1588-2002 time stamping is enabled, hence reinitialize it * to keep explicit chaining in the descriptor. */ - p->des3 = (unsigned int )(priv->dma_rx_phy + - (((priv->dirty_rx) +1 ) % -DMA_RX_SIZE ) * -sizeof (struct dma_desc )); + p->des3 =cpu_to_le32 ((unsigned int )(priv->dma_rx_phy + + (((priv->dirty_rx) +1 ) % +DMA_RX_SIZE ) * +sizeof (struct dma_desc ))); }static void stmmac_clean_desc3 (void *priv_ptr,struct dma_desc *p)
@@ -161,9 +164,9 @@ static void stmmac_clean_desc3(void *pri* 1588-2002 time stamping is enabled, hence reinitialize it * to keep explicit chaining in the descriptor. */ - p->des3 = (unsigned int )((priv->dma_tx_phy + - ((priv->dirty_tx +1 ) %DMA_TX_SIZE )) - *sizeof (struct dma_desc )); + p->des3 =cpu_to_le32 ((unsigned int )((priv->dma_tx_phy + + ((priv->dirty_tx +1 ) %DMA_TX_SIZE )) + *sizeof (struct dma_desc ))); }const struct stmmac_mode_ops chain_mode_ops = {
drivers/net/ethernet/stmicro/stmmac/descs.h +10 -10
@@ -87,7 +87,7 @@#define TDES0_ERROR_SUMMARY BIT(15)#define TDES0_IP_HEADER_ERROR BIT(16)#define TDES0_TIME_STAMP_STATUS BIT(17) -#define TDES0_OWN BIT(31) +#define TDES0_OWN ((u32)BIT(31))/* silence sparse */ /* TDES1 */ #define TDES1_BUFFER1_SIZE_MASK GENMASK(10, 0)#define TDES1_BUFFER2_SIZE_MASK GENMASK(21, 11)
@@ -130,7 +130,7 @@#define ETDES0_FIRST_SEGMENT BIT(28)#define ETDES0_LAST_SEGMENT BIT(29)#define ETDES0_INTERRUPT BIT(30) -#define ETDES0_OWN BIT(31) +#define ETDES0_OWN ((u32)BIT(31))/* silence sparse */ /* TDES1 */ #define ETDES1_BUFFER1_SIZE_MASK GENMASK(12, 0)#define ETDES1_BUFFER2_SIZE_MASK GENMASK(28, 16)
@@ -170,19 +170,19 @@/* Basic descriptor structure for normal and alternate descriptors */ struct dma_desc { -unsigned int des0; -unsigned int des1; -unsigned int des2; -unsigned int des3; +__le32 des0; +__le32 des1; +__le32 des2; +__le32 des3; };/* Extended descriptor structure (e.g. >= databook 3.50a) */ struct dma_extended_desc {struct dma_desc basic;/* Basic descriptors */ -unsigned int des4;/* Extended Status */ -unsigned int des5;/* Reserved */ -unsigned int des6;/* Tx/Rx Timestamp Low */ -unsigned int des7;/* Tx/Rx Timestamp High */ +__le32 des4;/* Extended Status */ +__le32 des5;/* Reserved */ +__le32 des6;/* Tx/Rx Timestamp Low */ +__le32 des7;/* Tx/Rx Timestamp High */ };/* Transmit checksum insertion control */
drivers/net/ethernet/stmicro/stmmac/descs_com.h +26 -22
115 lines not on this page · raw message
drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c +32 -30
180 lines not on this page · raw message
drivers/net/ethernet/stmicro/stmmac/enh_desc.c +28 -27
164 lines not on this page · raw message
drivers/net/ethernet/stmicro/stmmac/norm_desc.c +25 -23
155 lines not on this page · raw message
drivers/net/ethernet/stmicro/stmmac/ring_mode.c +21 -18
@@ -34,7 +34,7 @@ static int stmmac_jumbo_frm(void *p, strunsigned int entry = priv->cur_tx;struct dma_desc *desc;unsigned int nopaged_len =skb_headlen (skb); -unsigned int bmax, len; +unsigned int bmax, len, des2;if (priv->extend_desc) desc = (struct dma_desc *)(priv->dma_etx + entry);
@@ -50,16 +50,17 @@ static int stmmac_jumbo_frm(void *p, strif (nopaged_len > BUF_SIZE_8KiB) { - desc->des2 =dma_map_single (priv->device, skb->data, - bmax,DMA_TO_DEVICE ); -if (dma_mapping_error (priv->device, desc->des2)) + des2 =dma_map_single (priv->device, skb->data, bmax, +DMA_TO_DEVICE ); + desc->des2 =cpu_to_le32 (des2); +if (dma_mapping_error (priv->device, des2))return -1 ; - priv->tx_skbuff_dma[entry].buf = desc->des2; + priv->tx_skbuff_dma[entry].buf = des2; priv->tx_skbuff_dma[entry].len = bmax; priv->tx_skbuff_dma[entry].is_jumbo = true; - desc->des3 = desc->des2 + BUF_SIZE_4KiB; + desc->des3 =cpu_to_le32 (des2 + BUF_SIZE_4KiB); priv->hw->desc->prepare_tx_desc (desc,1 , bmax, csum,STMMAC_RING_MODE ,0 , false); priv->tx_skbuff[entry] =NULL ;
@@ -70,26 +71,28 @@ static int stmmac_jumbo_frm(void *p, strelse desc = priv->dma_tx + entry; - desc->des2 =dma_map_single (priv->device, skb->data + bmax, - len,DMA_TO_DEVICE ); -if (dma_mapping_error (priv->device, desc->des2)) + des2 =dma_map_single (priv->device, skb->data + bmax, len, +DMA_TO_DEVICE ); + desc->des2 =cpu_to_le32 (des2); +if (dma_mapping_error (priv->device, des2))return -1 ; - priv->tx_skbuff_dma[entry].buf = desc->des2; + priv->tx_skbuff_dma[entry].buf = des2; priv->tx_skbuff_dma[entry].len = len; priv->tx_skbuff_dma[entry].is_jumbo = true; - desc->des3 = desc->des2 + BUF_SIZE_4KiB; + desc->des3 =cpu_to_le32 (des2 + BUF_SIZE_4KiB); priv->hw->desc->prepare_tx_desc (desc,0 , len, csum,STMMAC_RING_MODE ,1 , true); }else { - desc->des2 =dma_map_single (priv->device, skb->data, - nopaged_len,DMA_TO_DEVICE ); -if (dma_mapping_error (priv->device, desc->des2)) + des2 =dma_map_single (priv->device, skb->data, + nopaged_len,DMA_TO_DEVICE ); + desc->des2 =cpu_to_le32 (des2); +if (dma_mapping_error (priv->device, des2))return -1 ; - priv->tx_skbuff_dma[entry].buf = desc->des2; + priv->tx_skbuff_dma[entry].buf = des2; priv->tx_skbuff_dma[entry].len = nopaged_len; priv->tx_skbuff_dma[entry].is_jumbo = true; - desc->des3 = desc->des2 + BUF_SIZE_4KiB; + desc->des3 =cpu_to_le32 (des2 + BUF_SIZE_4KiB); priv->hw->desc->prepare_tx_desc (desc,1 , nopaged_len, csum,STMMAC_RING_MODE ,0 , true); }
@@ -115,13 +118,13 @@ static void stmmac_refill_desc3(void *pr/* Fill DES3 in case of RING mode */ if (priv->dma_buf_sz >= BUF_SIZE_8KiB) - p->des3 = p->des2 + BUF_SIZE_8KiB; + p->des3 =cpu_to_le32 (le32_to_cpu (p->des2) + BUF_SIZE_8KiB); }/* In ring mode we need to fill the desc3 because it is used as buffer */ static void stmmac_init_desc3 (struct dma_desc *p) { - p->des3 = p->des2 + BUF_SIZE_8KiB; + p->des3 =cpu_to_le32 (le32_to_cpu (p->des2) + BUF_SIZE_8KiB); }static void stmmac_clean_desc3 (void *priv_ptr,struct dma_desc *p)
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +25 -26
111 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 29/63 RDMA/srp: Rework SCSI device reset handling
In reply to Greg Kroah-Hartman4.9-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
@@ -2639,7 +2639,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" );
@@ -2651,15 +2650,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 30/63 KEYS: user: Align the payload buffer
In reply to Greg Kroah-Hartman4.9-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 31/63 KEYS: always initialize keyring_index_key::desc_len
In reply to Greg Kroah-Hartman4.9-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
@@ -652,9 +652,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. */
@@ -912,6 +909,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
@@ -186,8 +186,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 =current_cred (), .match_data.cmp = lookup_user_key_possessed, .match_data.raw_data = key,
security/keys/request_key.c +1 -0
@@ -544,6 +544,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
@@ -254,7 +254,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 32/63 batman-adv: fix uninit-value in batadv_interface_tx()
In reply to Greg Kroah-Hartman4.9-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
@@ -217,6 +217,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 33/63 net/packet: fix 4gb buffer limit due to overflow check
In reply to Greg Kroah-Hartman4.9-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
@@ -4316,7 +4316,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 34/63 team: avoid complex list operations in team_nl_cmd_options_set()
In reply to Greg Kroah-Hartman4.9-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)
@@ -2466,7 +2455,6 @@ static int team_nl_cmd_options_set(strucint err =0 ;int i;struct nlattr *nl_option; -LIST_HEAD (opt_inst_list);rtnl_lock ();
@@ -2486,6 +2474,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 ;
@@ -2589,23 +2578,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 35/63 sit: check if IPv6 enabled before calling ip6_err_gen_icmpv6_unreach()
In reply to Greg Kroah-Hartman4.9-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 36/63 sctp: call gso_reset_checksum when computing checksum in sctp_gso_segment
In reply to Greg Kroah-Hartman4.9-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
@@ -35,6 +35,7 @@static __le32 sctp_gso_make_checksum (struct sk_buff *skb) { skb->ip_summed =CHECKSUM_NONE ; +gso_reset_checksum (skb, ~0 );return sctp_compute_cksum (skb,skb_transport_offset (skb)); }
Greg Kroah-Hartman
maintainerPATCH 37/63 net/mlx4_en: Force CHECKSUM_NONE for short ethernet frames
In reply to Greg Kroah-Hartman4.9-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
@@ -777,13 +777,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) &&
@@ -945,6 +959,11 @@ xdp_drop: }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 38/63 parisc: Fix ptrace syscall number modification
In reply to Greg Kroah-Hartman4.9-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
@@ -311,15 +311,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. */
@@ -343,7 +357,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 39/63 ARCv2: Enable unaligned access in early ASM code
In reply to Greg Kroah-Hartman4.9-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 40/63 ARC: U-boot: check arguments paranoidly
In reply to Greg Kroah-Hartman4.9-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 41/63 ARC: define ARCH_SLAB_MINALIGN = 8
In reply to Greg Kroah-Hartman4.9-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
@@ -49,6 +49,17 @@#define ARCH_DMA_MINALIGN L1_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 42/63 hpet: Make cmd parameter of hpet_ioctl_common() unsigned
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit 5cd5e6ad0ede862432e1e766bfe02a9ad447533e upstream.
The value passed by the two callers of the function is unsigned anyway.
Making the parameter unsigned fixes the following warning when building with clang:
drivers/char/hpet.c:588:7: error: overflow converting case value to switch condition type (2149083139 to 18446744071563667459) [-Werror,-Wswitch]
case HPET_INFO:
^
include/uapi/linux/hpet.h:18:19: note: expanded from macro 'HPET_INFO'
^
include/uapi/asm-generic/ioctl.h:77:28: note: expanded from macro '_IOR'
^
include/uapi/asm-generic/ioctl.h:66:2: note: expanded from macro '_IOC'
(((dir) << _IOC_DIRSHIFT) | \--- drivers/char/hpet.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/char/hpet.c +1 -1
@@ -574,7 +574,7 @@ static inline unsigned long hpet_time_di }static int -hpet_ioctl_common (struct hpet_dev *devp,int cmd,unsigned long arg, +hpet_ioctl_common (struct hpet_dev *devp,unsigned int cmd,unsigned long arg,struct hpet_info *info) {struct hpet_timer __iomem *timer;
Greg Kroah-Hartman
maintainerPATCH 43/63 clocksource: Use GENMASK_ULL in definition of CLOCKSOURCE_MASK
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit 0773cea37470f8e080c510fe720fc356cf35df3a upstream
Besides reusing existing code this removes the special case handling for 64-bit masks, which causes clang to raise a shift count overflow warning due to https://bugs.llvm.org//show_bug.cgi?id=10030.
[nc: cycle_t wasn't eliminated until commit a5a1d1c2914b ("clocksource:
Use a plain u64 instead of cycle_t") in v4.10]
--- include/linux/clocksource.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/linux/clocksource.h +1 -1
@@ -117,7 +117,7 @@ struct clocksource {#define CLOCK_SOURCE_RESELECT 0x100/* simplify initialization of mask field */ -#define CLOCKSOURCE_MASK (bits) (cycle_t)((bits) < 64 ? ((1ULL<<(bits))-1) : -1) +#define CLOCKSOURCE_MASK (bits) GENMASK_ULL((bits) - 1, 0)static inline u32 clocksource_freq2mult (u32 freq,u32 shift_constant,u64 from) {
Greg Kroah-Hartman
maintainerPATCH 44/63 netpoll: Fix device name check in netpoll_setup()
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit 0c3a8f8b8fabff4f3ad2dd7b95ae0e90cdd1aebb upstream.
Apparently netpoll_setup() assumes that netpoll.dev_name is a pointer when checking if the device name is set:
if (np->dev_name) {
...
However the field is a character array, therefore the condition always yields true. Check instead whether the first byte of the array has a non-zero value.
--- net/core/netpoll.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/core/netpoll.c +1 -1
@@ -666,7 +666,7 @@ int netpoll_setup(struct netpoll *np)int err;rtnl_lock (); -if (np->dev_name) { +if (np->dev_name[0 ]) {struct net *net = current->nsproxy->net_ns; ndev =__dev_get_by_name (net, np->dev_name); }
Greg Kroah-Hartman
maintainerPATCH 45/63 tracing: Use cpumask_available() to check if cpumask variable may be used
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit 4dbbe2d8e95c351157f292ece067f985c30c7b53 upstream.
This fixes the following clang warning:
kernel/trace/trace.c:3231:12: warning: address of array 'iter->started'
will always evaluate to 'true' [-Wpointer-bool-conversion]
if (iter->started)
--- kernel/trace/trace.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
kernel/trace/trace.c +3 -2
@@ -3022,13 +3022,14 @@ static void test_cpu_buff_start(struct tif (!(iter->iter_flags &TRACE_FILE_ANNOTATE ))return ; -if (iter->started &&cpumask_test_cpu (iter->cpu, iter->started)) +if (cpumask_available (iter->started) && +cpumask_test_cpu (iter->cpu, iter->started))return ;if (per_cpu_ptr (iter->trace_buffer->data, iter->cpu)->skipped_entries)return ; -if (iter->started) +if (cpumask_available (iter->started))cpumask_set_cpu (iter->cpu, iter->started);/* Don't print started cpu buffer for the first entry of the trace */
Greg Kroah-Hartman
maintainerPATCH 46/63 x86/boot: Disable the address-of-packed-member compiler warning
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit 20c6c189045539d29f4854d92b7ea9c329e1edfc upstream.
The clang warning 'address-of-packed-member' is disabled for the general kernel code, also disable it for the x86 boot code.
This suppresses a bunch of warnings like this when building with clang:
./arch/x86/include/asm/processor.h:535:30: warning: taking address of
packed member 'sp0' of class or structure 'x86_hw_tss' may result in an unaligned pointer value [-Waddress-of-packed-member]
return this_cpu_read_stable(cpu_tss.x86_tss.sp0);
^~~~~~~~~~~~~~~~~~~
./arch/x86/include/asm/percpu.h:391:59: note: expanded from macro
'this_cpu_read_stable'
#define this_cpu_read_stable(var) percpu_stable_op("mov", var)
^~~
./arch/x86/include/asm/percpu.h:228:16: note: expanded from macro
'percpu_stable_op'
: "p" (&(var)));
^~~--- arch/x86/boot/compressed/Makefile | 1 + 1 file changed, 1 insertion(+)
arch/x86/boot/compressed/Makefile +1 -0
@@ -34,6 +34,7 @@ KBUILD_CFLAGS += $(cflags-y) KBUILD_CFLAGS += -mno-mmx -mno-sse KBUILD_CFLAGS += $(call cc-option,-ffreestanding) KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector) +KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member) KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__ GCOV_PROFILE := n
Greg Kroah-Hartman
maintainerPATCH 47/63 drm/i915: Consistently use enum pipe for PCH transcoders
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit a21960339c8c107eae99d68c85e6355189b22192 upstream.
The current code uses in some instances enum transcoder for PCH transcoders and enum pipe in others. This is error prone and clang raises warnings like this:
drivers/gpu/drm/i915/intel_dp.c:3546:51: warning: implicit conversion
from enumeration type 'enum pipe' to different enumeration type 'enum transcoder' [-Wenum-conversion]
intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, false);
Consistently use the type enum pipe for PCH transcoders.
--- drivers/gpu/drm/i915/i915_irq.c | 10 +++++----- drivers/gpu/drm/i915/intel_display.c | 14 +++++++------- drivers/gpu/drm/i915/intel_drv.h | 4 ++-- drivers/gpu/drm/i915/intel_fifo_underrun.c | 4 ++-- 4 files changed, 16 insertions(+), 16 deletions(-)
drivers/gpu/drm/i915/i915_irq.c +5 -5
@@ -1985,10 +1985,10 @@ static void ibx_irq_handler(struct drm_iDRM_DEBUG_DRIVER ("PCH transcoder CRC error interrupt\n" );if (pch_iir &SDE_TRANSA_FIFO_UNDER ) -intel_pch_fifo_underrun_irq_handler (dev_priv,TRANSCODER_A ); +intel_pch_fifo_underrun_irq_handler (dev_priv,PIPE_A );if (pch_iir &SDE_TRANSB_FIFO_UNDER ) -intel_pch_fifo_underrun_irq_handler (dev_priv,TRANSCODER_B ); +intel_pch_fifo_underrun_irq_handler (dev_priv,PIPE_B ); }static void ivb_err_int_handler (struct drm_i915_private *dev_priv)
@@ -2022,13 +2022,13 @@ static void cpt_serr_int_handler(structDRM_ERROR ("PCH poison interrupt\n" );if (serr_int &SERR_INT_TRANS_A_FIFO_UNDERRUN ) -intel_pch_fifo_underrun_irq_handler (dev_priv,TRANSCODER_A ); +intel_pch_fifo_underrun_irq_handler (dev_priv,PIPE_A );if (serr_int &SERR_INT_TRANS_B_FIFO_UNDERRUN ) -intel_pch_fifo_underrun_irq_handler (dev_priv,TRANSCODER_B ); +intel_pch_fifo_underrun_irq_handler (dev_priv,PIPE_B );if (serr_int &SERR_INT_TRANS_C_FIFO_UNDERRUN ) -intel_pch_fifo_underrun_irq_handler (dev_priv,TRANSCODER_C ); +intel_pch_fifo_underrun_irq_handler (dev_priv,PIPE_C );I915_WRITE (SERR_INT , serr_int); }
drivers/gpu/drm/i915/intel_display.c +7 -7
@@ -1849,7 +1849,7 @@ static void lpt_enable_pch_transcoder(st/* FDI must be feeding us bits for PCH ports */ assert_fdi_tx_enabled (dev_priv, (enum pipe ) cpu_transcoder); -assert_fdi_rx_enabled (dev_priv,TRANSCODER_A ); +assert_fdi_rx_enabled (dev_priv,PIPE_A );/* Workaround: set timing override bit. */ val =I915_READ (TRANS_CHICKEN2 (PIPE_A ));
@@ -1950,7 +1950,7 @@ static void intel_enable_pipe(struct intassert_sprites_disabled (dev_priv, pipe);if (HAS_PCH_LPT (dev_priv)) - pch_transcoder =TRANSCODER_A ; + pch_transcoder =PIPE_A ;else pch_transcoder = pipe;
@@ -4636,7 +4636,7 @@ static void lpt_pch_enable(struct drm_crstruct intel_crtc *intel_crtc =to_intel_crtc (crtc);enum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder; -assert_pch_transcoder_disabled (dev_priv,TRANSCODER_A ); +assert_pch_transcoder_disabled (dev_priv,PIPE_A );lpt_program_iclkip (crtc);
@@ -5410,7 +5410,7 @@ static void haswell_crtc_enable(struct ireturn ;if (intel_crtc->config->has_pch_encoder) -intel_set_pch_fifo_underrun_reporting (dev_priv,TRANSCODER_A , +intel_set_pch_fifo_underrun_reporting (dev_priv,PIPE_A , false);intel_encoders_pre_pll_enable (crtc, pipe_config, old_state);
@@ -5498,7 +5498,7 @@ static void haswell_crtc_enable(struct iintel_wait_for_vblank (dev, pipe);intel_wait_for_vblank (dev, pipe);intel_set_cpu_fifo_underrun_reporting (dev_priv, pipe, true); -intel_set_pch_fifo_underrun_reporting (dev_priv,TRANSCODER_A , +intel_set_pch_fifo_underrun_reporting (dev_priv,PIPE_A , true); }
@@ -5597,7 +5597,7 @@ static void haswell_crtc_disable(structenum transcoder cpu_transcoder = intel_crtc->config->cpu_transcoder;if (intel_crtc->config->has_pch_encoder) -intel_set_pch_fifo_underrun_reporting (dev_priv,TRANSCODER_A , +intel_set_pch_fifo_underrun_reporting (dev_priv,PIPE_A , false);intel_encoders_disable (crtc, old_crtc_state, old_state);
@@ -5626,7 +5626,7 @@ static void haswell_crtc_disable(structintel_encoders_post_disable (crtc, old_crtc_state, old_state);if (old_crtc_state->has_pch_encoder) -intel_set_pch_fifo_underrun_reporting (dev_priv,TRANSCODER_A , +intel_set_pch_fifo_underrun_reporting (dev_priv,PIPE_A , true); }
drivers/gpu/drm/i915/intel_drv.h +2 -2
@@ -1095,12 +1095,12 @@ static inline unsigned int intel_num_plabool intel_set_cpu_fifo_underrun_reporting (struct drm_i915_private *dev_priv,enum pipe pipe,bool enable);bool intel_set_pch_fifo_underrun_reporting (struct drm_i915_private *dev_priv, -enum transcoder pch_transcoder, +enum pipe pch_transcoder,bool enable);void intel_cpu_fifo_underrun_irq_handler (struct drm_i915_private *dev_priv,enum pipe pipe);void intel_pch_fifo_underrun_irq_handler (struct drm_i915_private *dev_priv, -enum transcoder pch_transcoder); +enum pipe pch_transcoder);void intel_check_cpu_fifo_underruns (struct drm_i915_private *dev_priv);void intel_check_pch_fifo_underruns (struct drm_i915_private *dev_priv);
drivers/gpu/drm/i915/intel_fifo_underrun.c +2 -2
@@ -311,7 +311,7 @@ bool intel_set_cpu_fifo_underrun_reporti* Returns the previous state of underrun reporting. */ bool intel_set_pch_fifo_underrun_reporting (struct drm_i915_private *dev_priv, -enum transcoder pch_transcoder, +enum pipe pch_transcoder,bool enable) {struct drm_crtc *crtc = dev_priv->pipe_to_crtc_mapping[pch_transcoder];
@@ -384,7 +384,7 @@ void intel_cpu_fifo_underrun_irq_handler* interrupt to avoid an irq storm. */ void intel_pch_fifo_underrun_irq_handler (struct drm_i915_private *dev_priv, -enum transcoder pch_transcoder) +enum pipe pch_transcoder) {if (intel_set_pch_fifo_underrun_reporting (dev_priv, pch_transcoder, false))
Greg Kroah-Hartman
maintainerPATCH 48/63 drm/i915: Fix enum pipe vs. enum transcoder for the PCH transcoder
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: "Ville Syrjälä" <[email protected]>
commit 41c32e5da3ff3922490341a988b2a3ae46d0b6a8 upstream.
Use enum pipe for PCH transcoders also in the FIFO underrun code.
Fixes the following new sparse warnings:
intel_fifo_underrun.c:340:49: warning: mixing different enum types
intel_fifo_underrun.c:340:49: int enum pipe versus
intel_fifo_underrun.c:340:49: int enum transcoder
intel_fifo_underrun.c:344:49: warning: mixing different enum types
intel_fifo_underrun.c:344:49: int enum pipe versus
intel_fifo_underrun.c:344:49: int enum transcoder
intel_fifo_underrun.c:397:57: warning: mixing different enum types
intel_fifo_underrun.c:397:57: int enum pipe versus
intel_fifo_underrun.c:397:57: int enum transcoder
intel_fifo_underrun.c:398:17: warning: mixing different enum types
intel_fifo_underrun.c:398:17: int enum pipe versus
intel_fifo_underrun.c:398:17: int enum transcoder
--- drivers/gpu/drm/i915/intel_fifo_underrun.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)
drivers/gpu/drm/i915/intel_fifo_underrun.c +10 -10
@@ -185,11 +185,11 @@ static void broadwell_set_fifo_underrun_ }static void ibx_set_fifo_underrun_reporting (struct drm_device *dev, -enum transcoder pch_transcoder, +enum pipe pch_transcoder,bool enable) {struct drm_i915_private *dev_priv =to_i915 (dev); -uint32_t bit = (pch_transcoder ==TRANSCODER_A ) ? +uint32_t bit = (pch_transcoder ==PIPE_A ) ?SDE_TRANSA_FIFO_UNDER :SDE_TRANSB_FIFO_UNDER ;if (enable)
@@ -201,7 +201,7 @@ static void ibx_set_fifo_underrun_reportstatic void cpt_check_pch_fifo_underruns (struct intel_crtc *crtc) {struct drm_i915_private *dev_priv =to_i915 (crtc->base.dev); -enum transcoder pch_transcoder = (enum transcoder ) crtc->pipe; +enum pipe pch_transcoder = crtc->pipe;uint32_t serr_int =I915_READ (SERR_INT );assert_spin_locked (&dev_priv->irq_lock);
@@ -212,12 +212,12 @@ static void cpt_check_pch_fifo_underrunsI915_WRITE (SERR_INT ,SERR_INT_TRANS_FIFO_UNDERRUN (pch_transcoder));POSTING_READ (SERR_INT ); -DRM_ERROR ("pch fifo underrun on pch transcoder %s\n" , -transcoder_name (pch_transcoder)); +DRM_ERROR ("pch fifo underrun on pch transcoder %c\n" , +pipe_name (pch_transcoder)); }static void cpt_set_fifo_underrun_reporting (struct drm_device *dev, -enum transcoder pch_transcoder, +enum pipe pch_transcoder,bool enable,bool old) {struct drm_i915_private *dev_priv =to_i915 (dev);
@@ -235,8 +235,8 @@ static void cpt_set_fifo_underrun_reportif (old &&I915_READ (SERR_INT ) &SERR_INT_TRANS_FIFO_UNDERRUN (pch_transcoder)) { -DRM_ERROR ("uncleared pch fifo underrun on pch transcoder %s\n" , -transcoder_name (pch_transcoder)); +DRM_ERROR ("uncleared pch fifo underrun on pch transcoder %c\n" , +pipe_name (pch_transcoder)); } } }
@@ -388,8 +388,8 @@ void intel_pch_fifo_underrun_irq_handler {if (intel_set_pch_fifo_underrun_reporting (dev_priv, pch_transcoder, false)) -DRM_ERROR ("PCH transcoder %s FIFO underrun\n" , -transcoder_name (pch_transcoder)); +DRM_ERROR ("PCH transcoder %c FIFO underrun\n" , +pipe_name (pch_transcoder)); }/**
Greg Kroah-Hartman
maintainerPATCH 49/63 kbuild: move cc-option and cc-disable-warning after incl. arch Makefile
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masahiro Yamada <[email protected]>
commit cfe17c9bbe6a673fdafdab179c32b355ed447f66 upstream.
Geert reported commit ae6b289a3789 ("kbuild: Set KBUILD_CFLAGS before incl. arch Makefile") broke cross-compilation using a cross-compiler that supports less compiler options than the host compiler.
For example,
cc1: error: unrecognized command line option "-Wno-unused-but-set-variable"
This problem happens on architectures that setup CROSS_COMPILE in their arch/*/Makefile.
Move the cc-option and cc-disable-warning back to the original position, but keep the Clang target options untouched.
--- Makefile | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-)
Makefile +23 -20
@@ -521,26 +521,6 @@ CLANG_GCC_TC := -gcc-toolchain $(GCC_TOO endif KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX) KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX) -KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,) -KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable) -KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier) -KBUILD_CFLAGS += $(call cc-disable-warning, gnu) -KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member) -# Quiet clang warning: comparison of unsigned expression < 0 is always false -KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare) -# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the -# source of a reference will be _MergedGlobals and not on of the whitelisted names. -# See modpost pattern 2 -KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,) -KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior) -KBUILD_CFLAGS += $(call cc-option, -no-integrated-as) -KBUILD_AFLAGS += $(call cc-option, -no-integrated-as) -else - -# These warnings generated too much noise in a regular build. -# Use make W=1 to enable them (see scripts/Makefile.build) -KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable) -KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable) endif
@@ -739,6 +719,29 @@ ifdef CONFIG_CC_STACKPROTECTOR endif KBUILD_CFLAGS += $(stackp-flag) +ifeq ($(cc-name),clang) +KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,) +KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable) +KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier) +KBUILD_CFLAGS += $(call cc-disable-warning, gnu) +KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member) +# Quiet clang warning: comparison of unsigned expression < 0 is always false +KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare) +# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the +# source of a reference will be _MergedGlobals and not on of the whitelisted names. +# See modpost pattern 2 +KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,) +KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior) +KBUILD_CFLAGS += $(call cc-option, -no-integrated-as) +KBUILD_AFLAGS += $(call cc-option, -no-integrated-as) +else + +# These warnings generated too much noise in a regular build. +# Use make W=1 to enable them (see scripts/Makefile.extrawarn) +KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable) +KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable) +endif + ifdef CONFIG_FRAME_POINTER KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls else
Greg Kroah-Hartman
maintainerPATCH 50/63 kbuild: clang: fix build failures with sparse check
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Lin <[email protected]>
commit bb3f38c3c5b759163e09b9152629cc789731de47 upstream.
We should avoid using the space character when passing arguments to clang, because static code analysis check tool such as sparse may misinterpret the arguments followed by spaces as build targets hence cause the build to fail.
--- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Makefile +2 -2
@@ -511,13 +511,13 @@ endif ifeq ($(cc-name),clang) ifneq ($(CROSS_COMPILE),) -CLANG_TARGET := -target $(notdir $(CROSS_COMPILE:%-=%)) +CLANG_TARGET := --target=$(notdir $(CROSS_COMPILE:%-=%)) GCC_TOOLCHAIN_DIR := $(dir $(shell which $(LD))) CLANG_PREFIX := --prefix=$(GCC_TOOLCHAIN_DIR) GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..) endif ifneq ($(GCC_TOOLCHAIN),) -CLANG_GCC_TC := -gcc-toolchain $(GCC_TOOLCHAIN) +CLANG_GCC_TC := --gcc-toolchain=$(GCC_TOOLCHAIN) endif KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX) KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX)
Greg Kroah-Hartman
maintainerPATCH 51/63 kbuild: clang: remove crufty HOSTCFLAGS
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nick Desaulniers <[email protected]>
commit df16aaac26e92e97ab7234d3f93c953466adc4b5 upstream.
When compiling with make CC=clang HOSTCC=clang, I was seeing warnings that clang did not recognize -fno-delete-null-pointer-checks for HOSTCC targets. These were added in commit 61163efae020 ("kbuild: LLVMLinux:
Add Kbuild support for building kernel with Clang").
Clang does not support -fno-delete-null-pointer-checks, so adding it to HOSTCFLAGS if HOSTCC is clang does not make sense.
It's not clear why the other warnings were disabled, and just for HOSTCFLAGS, but I can remove them, add -Werror to HOSTCFLAGS and compile with clang just fine.
--- Makefile | 5 ----- 1 file changed, 5 deletions(-)
Makefile +0 -5
@@ -306,11 +306,6 @@ HOSTCXX = g++ HOSTCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89 HOSTCXXFLAGS = -O2 -ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1) -HOSTCFLAGS += -Wno-unused-value -Wno-unused-parameter \ - -Wno-missing-field-initializers -fno-delete-null-pointer-checks -endif - # Decide whether to build built-in, modular, or both. # Normally, just do built-in.
Greg Kroah-Hartman
maintainerPATCH 52/63 kbuild: clang: disable unused variable warnings only when constant
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sodagudi Prasad <[email protected]>
commit 0a5f41767444cc3b4fc5573921ab914b4f78baaa upstream.
Currently, GCC disables -Wunused-const-variable, but not -Wunused-variable, so warns unused variables if they are non-constant.
While, Clang does not warn unused variables at all regardless of the const qualifier because -Wno-unused-const-variable is implied by the stronger option -Wno-unused-variable.
Disable -Wunused-const-variable instead of -Wunused-variable so that GCC and Clang work in the same way.
--- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
Makefile +1 -2
@@ -716,7 +716,6 @@ KBUILD_CFLAGS += $(stackp-flag) ifeq ($(cc-name),clang) KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,) -KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable) KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier) KBUILD_CFLAGS += $(call cc-disable-warning, gnu) KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
@@ -734,9 +733,9 @@ else # These warnings generated too much noise in a regular build. # Use make W=1 to enable them (see scripts/Makefile.extrawarn) KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable) -KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable) endif +KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable) ifdef CONFIG_FRAME_POINTER KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls else
Greg Kroah-Hartman
maintainerPATCH 53/63 kbuild: set no-integrated-as before incl. arch Makefile
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stefan Agner <[email protected]>
commit 0f0e8de334c54c38818a4a5390a39aa09deff5bf upstream.
In order to make sure compiler flag detection for ARM works correctly the no-integrated-as flags need to be set before including the arch specific Makefile.
--- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Makefile +2 -2
@@ -516,6 +516,8 @@ CLANG_GCC_TC := --gcc-toolchain=$(GCC_TO endif KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX) KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX) +KBUILD_CFLAGS += $(call cc-option, -no-integrated-as) +KBUILD_AFLAGS += $(call cc-option, -no-integrated-as) endif
@@ -726,8 +728,6 @@ KBUILD_CFLAGS += $(call cc-disable-warni # See modpost pattern 2 KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,) KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior) -KBUILD_CFLAGS += $(call cc-option, -no-integrated-as) -KBUILD_AFLAGS += $(call cc-option, -no-integrated-as) else # These warnings generated too much noise in a regular build.
Greg Kroah-Hartman
maintainerPATCH 54/63 kbuild: add -no-integrated-as Clang option unconditionally
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masahiro Yamada <[email protected]>
commit dbe27a002ef8573168cb64e181458ea23a74e2b6 upstream.
We are still a way off the Clang's integrated assembler support for the kernel. Hence, -no-integrated-as is mandatory to build the kernel with Clang. If you had an ancient version of Clang that does not recognize this option, you would not be able to compile the kernel anyway.
--- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Makefile +2 -2
@@ -516,8 +516,8 @@ CLANG_GCC_TC := --gcc-toolchain=$(GCC_TO endif KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX) KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX) -KBUILD_CFLAGS += $(call cc-option, -no-integrated-as) -KBUILD_AFLAGS += $(call cc-option, -no-integrated-as) +KBUILD_CFLAGS += -no-integrated-as +KBUILD_AFLAGS += -no-integrated-as endif
Greg Kroah-Hartman
maintainerPATCH 55/63 irqchip/gic-v3: Convert arm64 GIC accessors to {read,write}_sysreg_s
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Will Deacon <[email protected]>
commit d44ffa5ae70a15a15190aa9ffa6f6acdeae1d25c upstream.
The GIC system registers are accessed using open-coded wrappers around the mrs_s/msr_s asm macros.
This patch moves the code over to the {read,wrote}_sysreg_s accessors instead, reducing the amount of explicit asm blocks in the arch headers.
[nc: Also fix gic_write_bpr1, which was incidentally fixed in
0e9884fe63c6 ("arm64: sysreg: subsume GICv3 sysreg definitions")]--- arch/arm64/include/asm/arch_gicv3.h | 47 +++++++++++++----------------------- 1 file changed, 18 insertions(+), 29 deletions(-)
arch/arm64/include/asm/arch_gicv3.h +18 -29
@@ -80,18 +80,8 @@#include <linux/stringify.h> #include <asm/barrier.h> -#define read_gicreg (r) \ - ({ \ - u64 reg; \ - asm volatile("mrs_s %0, " __stringify(r) : "=r" (reg)); \ - reg; \ - }) - -#define write_gicreg (v,r) \ - do { \ - u64 __val = (v); \ - asm volatile("msr_s " __stringify(r) ", %0" : : "r" (__val));\ - } while (0) +#define read_gicreg read_sysreg_s +#define write_gicreg write_sysreg_s/* * Low-level accessors
@@ -102,13 +92,13 @@static inline void gic_write_eoir (u32 irq) { - asm volatile("msr_s " __stringify(ICC_EOIR1_EL1) ", %0" : : "r" ((u64)irq)); +write_sysreg_s (irq,ICC_EOIR1_EL1 );isb (); }static inline void gic_write_dir (u32 irq) { - asm volatile("msr_s " __stringify(ICC_DIR_EL1) ", %0" : : "r" ((u64)irq)); +write_sysreg_s (irq,ICC_DIR_EL1 );isb (); }
@@ -116,7 +106,7 @@ static inline u64 gic_read_iar_common(vo {u64 irqstat; - asm volatile("mrs_s %0, " __stringify(ICC_IAR1_EL1) : "=r" (irqstat)); + irqstat =read_sysreg_s (ICC_IAR1_EL1 );dsb (sy);return irqstat; }
@@ -134,10 +124,12 @@ static inline u64 gic_read_iar_cavium_th asmvolatile ("nop;nop;nop;nop\n\t" -"nop;nop;nop;nop\n\t" - "mrs_s %0, " __stringify(ICC_IAR1_EL1) "\n\t" - "nop;nop;nop;nop" - : "=r" (irqstat)); +"nop;nop;nop;nop" ); + + irqstat =read_sysreg_s (ICC_IAR1_EL1 ); + + asmvolatile ( +"nop;nop;nop;nop" );mb ();return irqstat;
@@ -145,43 +137,40 @@ static inline u64 gic_read_iar_cavium_thstatic inline void gic_write_pmr (u32 val) { - asm volatile("msr_s " __stringify(ICC_PMR_EL1) ", %0" : : "r" ((u64)val)); +write_sysreg_s (val,ICC_PMR_EL1 ); }static inline void gic_write_ctlr (u32 val) { - asm volatile("msr_s " __stringify(ICC_CTLR_EL1) ", %0" : : "r" ((u64)val)); +write_sysreg_s (val,ICC_CTLR_EL1 );isb (); }static inline void gic_write_grpen1 (u32 val) { - asm volatile("msr_s " __stringify(ICC_GRPEN1_EL1) ", %0" : : "r" ((u64)val)); +write_sysreg_s (val,ICC_GRPEN1_EL1 );isb (); }static inline void gic_write_sgi1r (u64 val) { - asm volatile("msr_s " __stringify(ICC_SGI1R_EL1) ", %0" : : "r" (val)); +write_sysreg_s (val,ICC_SGI1R_EL1 ); }static inline u32 gic_read_sre (void ) { -u64 val; - - asm volatile("mrs_s %0, " __stringify(ICC_SRE_EL1) : "=r" (val)); -return val; +return read_sysreg_s (ICC_SRE_EL1 ); }static inline void gic_write_sre (u32 val) { - asm volatile("msr_s " __stringify(ICC_SRE_EL1) ", %0" : : "r" ((u64)val)); +write_sysreg_s (val,ICC_SRE_EL1 );isb (); }static inline void gic_write_bpr1 (u32 val) { - asm volatile("msr_s " __stringify(ICC_BPR1_EL1) ", %0" : : "r" (val)); +write_sysreg_s (val,ICC_BPR1_EL1 ); }#define gic_read_typer (c) readq_relaxed(c)
Greg Kroah-Hartman
maintainerPATCH 56/63 mm/zsmalloc.c: change stat type parameter to int
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthias Kaehlcke <[email protected]>
commit 3eb95feac113d8ebad5b7b5189a65efcbd95a749 upstream.
zs_stat_inc/dec/get() uses enum zs_stat_type for the stat type, however some callers pass an enum fullness_group value. Change the type to int to reflect the actual use of the functions and get rid of 'enum-conversion' warnings
--- mm/zsmalloc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
mm/zsmalloc.c +6 -3
@@ -558,20 +558,23 @@ static int get_size_class_index(int sizereturn min (zs_size_classes -1 , idx); } +/* type can be of enum type zs_stat_type or fullness_group */ static inline void zs_stat_inc (struct size_class *class, -enum zs_stat_type type,unsigned long cnt) +int type,unsigned long cnt) { class->stats.objs[type] += cnt; } +/* type can be of enum type zs_stat_type or fullness_group */ static inline void zs_stat_dec (struct size_class *class, -enum zs_stat_type type,unsigned long cnt) +int type,unsigned long cnt) { class->stats.objs[type] -= cnt; } +/* type can be of enum type zs_stat_type or fullness_group */ static inline unsigned long zs_stat_get (struct size_class *class, -enum zs_stat_type type) +int type) {return class->stats.objs[type]; }
Greg Kroah-Hartman
maintainerPATCH 57/63 mm/zsmalloc.c: fix -Wunneeded-internal-declaration warning
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nick Desaulniers <[email protected]>
commit 3457f4147675108aa83f9f33c136f06bb9f8518f upstream.
is_first_page() is only called from the macro VM_BUG_ON_PAGE() which is only compiled in as a runtime check when CONFIG_DEBUG_VM is set, otherwise is checked at compile time and not actually compiled in.
Fixes the following warning, found with Clang:
mm/zsmalloc.c:472:12: warning: function 'is_first_page' is not needed and will not be emitted [-Wunneeded-internal-declaration] static int is_first_page(struct page *page)
^
--- mm/zsmalloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
mm/zsmalloc.c +1 -1
@@ -473,7 +473,7 @@ static bool is_zspage_isolated(struct zsreturn zspage->isolated; } -static int is_first_page (struct page *page) +static __maybe_unused int is_first_page (struct page *page) {return PagePrivate (page); }
Greg Kroah-Hartman
maintainerPATCH 58/63 Revert "bridge: do not add port to router list when receives query with source 0.0.0.0"
In reply to Greg Kroah-Hartman4.9-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
@@ -1287,14 +1287,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 59/63 netfilter: nf_tables: fix flush after rule deletion in the same batch
In reply to Greg Kroah-Hartman4.9-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
@@ -263,6 +263,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 60/63 pinctrl: max77620: Use define directive for max77620_pinconf_param values
In reply to Greg Kroah-Hartman4.9-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 61/63 phy: tegra: remove redundant self assignment of map
In reply to Greg Kroah-Hartman4.9-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 62/63 sched/sysctl: Fix attributes of some extern declarations
In reply to Greg Kroah-Hartman4.9-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
@@ -33,9 +33,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;extern unsigned int sysctl_sched_shares_window; int sched_proc_update_handler(struct ctl_table *table, int write,
Greg Kroah-Hartman
maintainerPATCH 63/63 kbuild: consolidate Clang compiler flags
In reply to Greg Kroah-Hartman4.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masahiro Yamada <[email protected]>
commit 238bcbc4e07fad2fff99c5b157d0c37ccd4d093c upstream.
Collect basic Clang options such as --target, --prefix, --gcc-toolchain, -no-integrated-as into a single variable CLANG_FLAGS so that it can be easily reused in other parts of Makefile.
--- Makefile | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)
Makefile +6 -7
@@ -506,18 +506,17 @@ endif ifeq ($(cc-name),clang) ifneq ($(CROSS_COMPILE),) -CLANG_TARGET := --target=$(notdir $(CROSS_COMPILE:%-=%)) +CLANG_FLAGS := --target=$(notdir $(CROSS_COMPILE:%-=%)) GCC_TOOLCHAIN_DIR := $(dir $(shell which $(LD))) -CLANG_PREFIX := --prefix=$(GCC_TOOLCHAIN_DIR) +CLANG_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR) GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..) endif ifneq ($(GCC_TOOLCHAIN),) -CLANG_GCC_TC := --gcc-toolchain=$(GCC_TOOLCHAIN) +CLANG_FLAGS += --gcc-toolchain=$(GCC_TOOLCHAIN) endif -KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX) -KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX) -KBUILD_CFLAGS += -no-integrated-as -KBUILD_AFLAGS += -no-integrated-as +CLANG_FLAGS += -no-integrated-as +KBUILD_CFLAGS += $(CLANG_FLAGS) +KBUILD_AFLAGS += $(CLANG_FLAGS) endif
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.161 release. There are 63 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:06 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.9.161-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.9.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.9.161-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-4.9.y
git commit: 0c0f9f653c9f49d59a856ae2c38b0bb115c16282
git describe: v4.9.160-64-g0c0f9f653c9f
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-4.9-oe/build/v4.9.160-64-g0c0f9f653c9f
No regressions (compared to build v4.9.160)
No fixes (compared to build v4.9.160)
Ran 22394 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
* spectre-meltdown-checker-test
* ltp-dio-tests
* ltp-timers-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.9.161 release. There are 63 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:06 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.9.161-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.9.y
and the diffstat can be found below.thanks,
greg k-h
All tests are passing for Tegra ...
Test results for stable-v4.9:
8 builds: 8 pass, 0 fail
16 boots: 16 pass, 0 fail
14 tests: 14 pass, 0 failLinux version: 4.9.161-rc1-gdc5e600
Boards tested: tegra124-jetson-tk1, tegra20-ventana,
tegra210-p2371-2180, tegra30-cardhu-a04
Cheers
Jon
Signature · 1 line
nvpublic
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.161 release. There are 63 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:06 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.9.161-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.9.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.9.161 release. There are 63 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:06 UTC 2019. Anything received after that time might be too late.
Build results:
total: 172 pass: 170 fail: 2
Failed builds:
powerpc:defconfig
powerpc:ppc6xx_defconfig
Qemu test results:
total: 315 pass: 315 fail: 0
Same build error as with v4.4.y, plus:
arch/powerpc/platforms/pseries/hotplug-memory.c: In function ‘dlpar_memory’:arch/powerpc/platforms/pseries/hotplug-memory.c:782:9: error:
‘rc’ may be used uninitialized in this function
which I completely fail to understand. It doesn't seeem to affect any other kernel version, and it looks like it is another compiler bug. I'll see if I can find out how to avoid it (other than reverting to an older version of gcc). Not a concern for now.
Guenter
Quoted 19 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.9.161 release. There are 63 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:06 UTC 2019. Anything received after that time might be too late.
Build results:
total: 172 pass: 170 fail: 2Failed builds:
powerpc:defconfig
powerpc:ppc6xx_defconfig
Qemu test results:total: 315 pass: 315 fail: 0Same build error as with v4.4.y, plus:
Quoted 9 lines
arch/powerpc/platforms/pseries/hotplug-memory.c: In function ‘dlpar_memory’:arch/powerpc/platforms/pseries/hotplug-memory.c:782:9: error:
‘rc’ may be used uninitialized in this functionwhich I completely fail to understand. It doesn't seeem to affect any other kernel version, and it looks like it is another compiler bug. I'll see if I can find out how to avoid it (other than reverting to an older version of gcc). Not a concern for now.
The problem seems to be related to dependencies. It is addressed upstream with commit 2b800f7c0c6c ("powerpc/cell: Drop select of MEMORY_HOTPLUG"). After this patch is applied, MEMORY_HOTPLUG is no longer enabled with powerpc:defconfig, and the problem is no longer seen.
Copying Michael to see if there is any concern about having this patch applied to v4.9.y.
Guenter