Release linux (4.7.5-1).

-----BEGIN PGP SIGNATURE-----
 
 iQIcBAABCgAGBQJX6HXOAAoJEOe/yOyVhhEJA68QAJSLxpMHBbl9474Q/SPonncf
 S7NXiYZQuo7STq0uHUVxtOTpVKRc/7y793tdtpI3Ec6nZqilS+4uKq1QNAh7kj6n
 JwilTLkfbjRS4+VqEEHJtVfK/bjijEep943W+uv3foMXPzbJulgRNrf54nUOFA2n
 WY1ZfL6Dp+tvys49UrK+3lsuY/ZCLzpck3m0rScGYgalfnZo00ttPto29YZjVXrp
 7RZset950hvEvL7cD7GXi2pqoEcvV3AISOABgKU0U6VitS1E8wJHW1pDZvHgZDKO
 55lAdyyEsAE96J1RzKwPjyHTKDmr1v6AiqNxwviLndwoLflYHUbsZBx0H9pRE0Gi
 45IDQELGFToJ/4dDNijk3oyOsQaV06f0gYv+FqGnN33IWxrlz9oQ3PSWB6qA9dr5
 vBGG1tzoYFdManBwZvH5smD25Ckc3TK2UzMqJA1BIjRpCoajxfmZWcgfPH8Z9gwJ
 5giCQkEKCbbwAXmRwVCYDFp5t0DlnyiY0/IizunHUxFapl9B6SNRFPhJVbUCNV07
 /yzsRU+TcNnV1oGQE9+uWTIelUQmc5cvMiaIlW7fifrqPAKCCnk2imYI1Tx1jsVl
 VqLo1Jalt+iZGKsEt6I3ST6LX1k/QFkz7BmJ4Yz+NdwwN6/Jq5rufFxLWGdIYPdI
 N4PnNBVMK0ooLqbaatRO
 =PYYu
 -----END PGP SIGNATURE-----

Merge tag 'debian/4.7.5-1'

Drop ABI maintenance patches.
This commit is contained in:
Ben Hutchings 2016-09-26 02:16:41 +01:00
commit b2480a3dfe
5 changed files with 371 additions and 7 deletions

146
debian/changelog vendored
View File

@ -66,6 +66,152 @@ linux (4.8~rc5-1~exp1) experimental; urgency=medium
-- Ben Hutchings <ben@decadent.org.uk> Wed, 07 Sep 2016 21:52:47 +0100
linux (4.7.5-1) unstable; urgency=medium
* New upstream stable update:
https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.7.5
- [armhf] clocksource/drivers/sun4i: Clear interrupts after stopping timer
in probe function
- fscrypto: require write access to mount to set encryption policy
- [arm64] drm/msm: protect against faults from copy_from_user() in submit
ioctl
- bpf: fix method of PTR_TO_PACKET reg id generation
- ipv4: panic in leaf_walk_rcu due to stale node pointer
- vti: flush x-netns xfrm cache when vti interface is removed
- bpf: fix write helpers with regards to non-linear parts
- net/irda: handle iriap_register_lsap() allocation failure
- net/sctp: always initialise sctp_ht_iter::start_fail
- net: ipv6: Do not keep IPv6 addresses when IPv6 is disabled
- tipc: fix NULL pointer dereference in shutdown()
- net/mlx5: Fix pci error recovery flow
- net/mlx5: Added missing check of msg length in verifying its signature
- net/mlx5e: Use correct flow dissector key on flower offloading
- net sched: fix encoding to use real length
- udp: fix poll() issue with zero sized packets
- tcp: properly scale window in tcp_v[46]_reqsk_send_ack()
- sctp: fix overrun in sctp_diag_dump_one()
- tun: fix transmit timestamp support
- [armhf] net: dsa: bcm_sf2: Fix race condition while unmasking interrupts
- Revert "phy: IRQ cannot be shared"
- net: smc91x: fix SMC accesses
- bridge: re-introduce 'fix parsing of MLDv2 reports'
- bonding: Fix bonding crash
- Revert "af_unix: Fix splice-bind deadlock"
- af_unix: split 'u->readlock' into two: 'iolock' and 'bindlock'
- ipv6: release dst in ping_v6_sendmsg
- [arm64] bnxt_en: Fix TX push operation on ARM64.
- ipv6: addrconf: fix dev refcont leak when DAD failed
- tcp: fastopen: avoid negative sk_forward_alloc
- net/mlx5e: Fix parsing of vlan packets when updating lro header
- tcp: cwnd does not increase in TCP YeAH
- [powerpc*] tm: do not use r13 for tabort_syscall
- [powerpc*] powernv : Drop reference added by kset_find_obj()
- [powerpc*] sysdev: cpm: fix gpio save_regs functions
- [powerpc*] mm: Don't alias user region to other regions below PAGE_OFFSET
- [powerpc*] powernv: Fix corrupted PE allocation bitmap on releasing PE
- kernfs: don't depend on d_find_any_alias() when generating notifications
- pNFS/flexfiles: Fix an Oopsable condition when connection to the DS fails
- pNFS: The client must not do I/O to the DS if it's lease has expired
- NFSv4.1: Fix Oopsable condition in server callback races
- NFSv4.x: Fix a refcount leak in nfs_callback_up_net
- nfsd: Close race between nfsd4_release_lockowner and nfsd4_lock
- pNFS: Ensure LAYOUTGET and LAYOUTRETURN are properly serialised
- NFSv4.1: Fix the CREATE_SESSION slot number accounting
- kexec: fix double-free when failing to relocate the purgatory
- mm, mempolicy: task->mempolicy must be NULL before dropping final
reference
- ahci: disable correct irq for dummy ports
- audit: fix exe_file access in audit_exe_compare
- dm flakey: fix reads to be issued if drop_writes configured
- IB/hfi1,IB/qib: Fix qp_stats sleep with rcu read lock held
- IB/uverbs: Fix race between uverbs_close and remove_one
- IB/hfi1: Reset QSFP on every run through channel tuning
- [amd64] mm: fix cache mode of dax pmd mappings
- [x86] paravirt: Do not trace _paravirt_ident_*() functions
- [x86] AMD: Apply erratum 665 on machines without a BIOS fix
- [s390x] KVM: don't use current->thread.fpu.* when accessing registers
- [armhf,arm64] kvm-arm: Unmap shadow pagetables properly
- [x86] kvm: correctly reset dest_map->vector when restoring LAPIC state
- iio: sw-trigger: Fix config group initialization
- [armhf] iio: adc: rockchip_saradc: reset saradc controller before
programming it
- [armhf] iio: adc: ti_am335x_adc: Protect FIFO1 from concurrent access
- [armhf] iio: adc: ti_am335x_adc: Increase timeout value waiting for ADC
sample
- iio:ti-ads1015: fix a wrong pointer definition.
- [x86] iio: accel: bmc150: reset chip at init time
- iio: fix pressure data output unit in hid-sensor-attributes
- iio:core: fix IIO_VAL_FRACTIONAL sign handling
- iio: ensure ret is initialized to zero before entering do loop
- serial: 8250_mid: fix divide error bug if baud rate is 0
- serial: 8250: added acces i/o products quad and octal serial cards
- [armhf,arm64] usb: chipidea: udc: fix NULL ptr dereference in
isr_setup_status_phase
- USB: change bInterval default to 10 ms
- devpts: return NULL pts 'priv' entry for non-devpts nodes
- cpuset: make sure new tasks conform to the current config of the cpuset
- [armhf] dts: rockchip: add reset node for the exist saradc SoCs
- [armhf] imx6: add missing BM_CLPCR_BYP_MMDC_CH0_LPM_HS setting for imx6ul
- [armhf] imx6: add missing BM_CLPCR_BYPASS_PMIC_READY setting for imx6sx
- [armel] kirkwood: ib62x0: fix size of u-boot environment partition
- [armhf] OMAP3: hwmod data: Add sysc information for DSI
- [armel] dts: kirkwood: Fix PCIe label on OpenRD
- [armhf] dts: imx6qdl: Fix SPDIF regression
- [armhf] dts: armada-388-clearfog: number LAN ports properly
- dm log writes: fix check of kthread_run() return value
- dm crypt: fix free of bad values after tfm allocation failure
- dm log writes: move IO accounting earlier to fix error path
- dm crypt: fix error with too large bios
- [armhf] pinctrl: sunxi: fix uart1 CTS/RTS pins at PG on A23/A33
- [armhf] memory: omap-gpmc: allow probe of child nodes to fail
- [arm64] spinlocks: implement smp_mb__before_spinlock() as smp_mb()
- crypto: cryptd - initialize child shash_desc on import
- Btrfs: remove root_log_ctx from ctx list before btrfs_sync_log returns
- fuse: direct-io: don't dirty ITER_BVEC pages
- xhci: fix null pointer dereference in stop command timeout function
- brcmfmac: avoid potential stack overflow in brcmf_cfg80211_start_ap()
- md-cluster: make md-cluster also can work when compiled into kernel
- ath9k: fix using sta->drv_priv before initializing it
- ath9k: bring back direction setting in ath9k_{start_stop}
- [x86] perf/intel: Fix PEBSv3 record drain
- [x86] perf/intel/cqm: Check cqm/mbm enabled state in event init
- [x86] perf/amd: Make HW_CACHE_REFERENCES and HW_CACHE_MISSES measure L2
- [x86] perf/intel/pt: Fix an off-by-one in address filter configuration
- [x86] perf/intel/pt: Fix kernel address filter's offset validation
- [x86] perf/intel/pt: Do validate the size of a kernel address filter
- Revert "wext: Fix 32 bit iwpriv compatibility issue with 64 bit Kernel"
- sched/core: Fix a race between try_to_wake_up() and a woken up task
- ipv6: Don't unset flowi6_proto in ipxip6_tnl_xmit()
- efi: Make for_each_efi_memory_desc_in_map() cope with running on Xen
- efi/libstub: Allocate headspace in efi_get_memory_map()
- efi/libstub: Introduce ExitBootServices helper
- efi/libstub: Use efi_exit_boot_services() in FDT
- [x86] efi: Use efi_exit_boot_services()
- [powerpc,powerpcspe] Fix csum_partial_copy_generic()
- [powerpc,powerpcspe] Fix again csum_partial_copy_generic()
- [x86] drm/i915: Ignore OpRegion panel type except on select machines
- [x86] drm: Only use compat ioctl for addfb2 on X86/IA64
- svcauth_gss: Revert 64c59a3726f2 ("Remove unnecessary allocation")
- genirq: Provide irq_gc_{lock_irqsave,unlock_irqrestore}() helpers
- fix iov_iter_fault_in_readable()
- [x86] fix minor infoleak in get_user_ex()
- [s390x] get_user() should zero on failure
- asm-generic: make get_user() clear the destination on errors
- asm-generic: make copy_from_user() zero the destination properly
- [alpha,hppa,mips*,powerpc,powerpcspe,sh4] make copy_from_user() zero the
destination properly
[ Ben Hutchings ]
* [hppa,mips*,powerpc*] linux-image: Strip debug symbols from vmlinux
(really closes: #837588)
* [hppa] tracing: Re-enable FTRACE
* [powerpc,powerpcspe,ppc64] linux-image: Suppress automatic dbgsym packages
* uaccess,uio: Fix ABI changes in 4.7.5
* ext4: Fix checksum validation for inodes with small i_extra_isize
(Closes: #838544, regression in 4.7.4)
-- Ben Hutchings <ben@decadent.org.uk> Mon, 26 Sep 2016 01:48:21 +0100
linux (4.7.4-2) unstable; urgency=medium
* [arm64] Revert "arm64: Define AT_VECTOR_SIZE_ARCH for ARCH_DLINFO"

View File

@ -569,12 +569,6 @@ CONFIG_ROOT_NFS=y
CONFIG_SGETMASK_SYSCALL=y
CONFIG_SYSFS_SYSCALL=y
##
## file: kernel/trace/Kconfig
##
#. As of 4.7 this has a huge size cost; see #837588
# CONFIG_FTRACE is not set
##
## file: lib/Kconfig.debug
##

View File

@ -0,0 +1,218 @@
From: "Darrick J. Wong" <darrick.wong@oracle.com>
Date: Mon, 19 Sep 2016 22:52:16 -0700
Subject: Re: Trouble mounting metadata_csum ext4 filesystems with v4.7.x after c9274d891869880648c4ee9365df3ecc7ba2e285: not enough inode bytes checksummed?
Origin: https://www.spinics.net/lists/linux-fsdevel/msg101888.html
Bug-Debian: https://bugs.debian.org/838544
[cc Ted and the ext4 list]
On Mon, Sep 19, 2016 at 03:19:03PM +0100, Nix wrote:
> So I ran into spurious metadata corruption warnings in v4.7.2 due to the
> problem fixed by c9274d8. I applied an early version of the fix,
> rebooted, and oh dear root filesystem mount failure with invalid
> checksum errors.
>
> The problem persists in v4.7.4, as seen here in qemu emulation on a raw
> image dd'ed directly from the thing that won't boot, with a couple of
> printk()s:
>
> # mount /dev/vda /new-root/
> [ 8.124692] EXT4-fs (vda): couldn't mount as ext3 due to feature incompatibilities
> [ 8.126977] EXT4-fs (vda): couldn't mount as ext2 due to feature incompatibilities
> [ 9.017980] Inode size 256 > good old size 128; fits in inode: 0
> [ 8.134897] inode 8: provided: 5c50l; calculated: 36e1i
> [ 8.135098] EXT4-fs error (device vda): ext4_iget:4479: inode #8: comm mount: checksum invalid
> [ 8.138992] EXT4-fs (vda): no journal found
> [ 8.165744] UDF-fs: warning (device vda): udf_fill_super: No partition found (2)
> mount: mounting /dev/vda on /new-root/ failed: Invalid argument
>
> I added a bit of printking to show the failure of the journal inode
> checksum to pass muster. e2fsck (from e2fsprogs 1.43.1-14) is quite
> happy with this filesystem. Reverting c9274d8 makes everything happy
> again (well, it does bring the original bug back, which is a rather
> serious one, but other than that...):
>
> [ 9.823032] EXT4-fs (vda): couldn't mount as ext3 due to feature incompatibilities
> [ 9.824647] EXT4-fs (vda): couldn't mount as ext2 due to feature incompatibilities
> [ 9.832593] inode 8: provided: 5c50l; calculated: 5c50i
> [ 9.839253] inode 2: provided: d6ea92e9l; calculated: d6ea92e9i
> [ 9.846947] EXT4-fs (vda): mounted filesystem with ordered data mode. Opts: (null)
>
> So c9274d8 is clearly messing up the calculation of the checksum.
>
> The problem becomes more evident if we add more printk()s to the old
> code, so we can see what region is being checksummed:
>
> # mount /dev/vda /new-root
> [ 6.827297] inode 8: unadjusted csum of 256 bytes with seed a5df92a7: 449a5c50
> [ 6.827596] adjusted csum: 5c50
> [ 6.835993] inode 2: unadjusted csum of 256 bytes with seed 759c6c33: d6ea92e9
> [ 6.836173] adjusted csum: d6ea92e9
> [ 6.844801] EXT4-fs (vda): mounted filesystem with ordered data mode. Opts:
>
> and the new:
>
> [ 11.098013] inode 8: csum of first 124 bytes with seed a5df92a7: f375b663
> [ 11.098205] inode 8: added csum of 2 dummy_csum bytes with seed a5df92a7: 20cfebcb
> [ 11.098420] inode 8: added csum of 2 bytes from offset 126 -- 128 to existing: d79e7432
> [ 11.098646] inode 8: > GOOD_OLD_INODE_SIZE; added csum of 2 bytes from 128 -- 130 to existing: d10936e1
> [ 11.098890] 8: adjusted csum: 36e1
> [ 11.099133] EXT4-fs error (device vda): ext4_iget:4483: inode #8: comm mount: checksum invalid
>
> We are not checksumming enough bytes! We used to checksum the entire
> 256-byte inode: now, we checksum only 130 bytes of it, which isn't even
> enough to cover the 28-byte extra_isize on this filesystem and is more
> or less guaranteed to give the wrong answer. I'd fix the problem, but I
> frankly can't see how the new code is meant to be equivalent to the old
> code in any sense -- most particularly what the stuff around dummy_csum
> is meant to do -- so I thought it better to let the people who wrote it
> fix it :)
Sh*t, I missed this during the review. So your filesystem image (thank
you!) had this to say:
debugfs> stats
Inode size: 256
debugfs> stat <8>
Size of extra inode fields: 0
Basically, a 128-byte inode inside a filesystem that allocated 256 bytes
for each inode. As you point out, the old code would checksum the entire
allocated space, whether or not the inode core used it. Obviously, you
want this since inline extended attributes live in that space:
csum = ext4_chksum(sbi, ei->i_csum_seed, (__u8 *)raw,
EXT4_INODE_SIZE(inode->i_sb));
The new code, on the other hand, carefully checksums around the
i_checksum fields and only bothers to checksum the space between the end
of i_checksum_hi and the end of the allocated space if the inode core is
big enough to store i_checksum_hi. Since we allocated 256 bytes for
each inode, we checksum the first two bytes after byte 128
(EXT4_GOOD_OLD_INODE_SIZE), but then we see that i_extra_size == 0 so we
never bother to checksum anything after that. This is of course wrong
since we no longer checksum the xattr space and we've deviated from the
pre-4.7.4 (documented) on-disk format.
*FORTUNATELY* since the root inode fails the read verifier, the file (in
this case the root dir) can't be modified and therefore nothing has been
corrupted. Especially fortunate for you, the fs won't mount, reducing
the chances that any serious damage has occurred.
I /think/ the fix in this case is to hoist the last ext4_chksum call
out of the EXT4_FITS_IN_INODE blob:
if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
offset = offsetof(struct ext4_inode, i_checksum_hi);
csum = ext4_chksum(sbi, csum, (__u8 *)raw +
EXT4_GOOD_OLD_INODE_SIZE,
offset - EXT4_GOOD_OLD_INODE_SIZE);
if (EXT4_FITS_IN_INODE(raw, ei, i_checksum_hi)) {
csum = ext4_chksum(sbi, csum, (__u8 *)&dummy_csum,
csum_size);
offset += csum_size;
}
csum = ext4_chksum(sbi, csum, (__u8 *)raw + offset,
EXT4_INODE_SIZE(inode->i_sb) - offset);
}
Can you give that a try?
> tune2fs output for this filesystem, particularly the extra_isize and
> inode size fields are likely relevant:
>
> tune2fs 1.43.1 (08-Jun-2016)
> Filesystem volume name: root
> Last mounted on: /
> Filesystem UUID: 6c0f7fa7-d6c2-4054-bff3-3a878460bdc7
> Filesystem magic number: 0xEF53
> Filesystem revision #: 1 (dynamic)
> Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
> Filesystem flags: signed_directory_hash
> Default mount options: (none)
> Filesystem state: clean
> Errors behavior: Continue
> Filesystem OS type: Linux
> Inode count: 65536
> Block count: 262144
> Reserved block count: 13107
> Free blocks: 227009
> Free inodes: 59499
> First block: 0
> Block size: 4096
> Fragment size: 4096
> Group descriptor size: 64
> Reserved GDT blocks: 63
> Blocks per group: 32768
> Fragments per group: 32768
> Inodes per group: 8192
> Inode blocks per group: 512
> RAID stripe width: 16
> Flex block group size: 64
> Filesystem created: Tue May 26 21:28:46 2009
> Last mount time: Sun Sep 18 23:34:41 2016
> Last write time: Mon Sep 19 13:51:59 2016
> Mount count: 0
> Maximum mount count: 36
> Last checked: Mon Sep 19 13:51:59 2016
> Check interval: 15552000 (6 months)
> Next check after: Sat Mar 18 12:51:59 2017
> Lifetime writes: 16 GB
> Reserved blocks uid: 0 (user root)
> Reserved blocks gid: 0 (group root)
> First inode: 11
> Inode size: 256
> Required extra isize: 28
> Desired extra isize: 28
> Journal inode: 8
> Default directory hash: half_md4
> Directory Hash Seed: f1da2da0-057e-4ba0-a021-3d56db5b24ab
> Journal backup: inode blocks
> Checksum type: crc32c
> Checksum: 0x92acf115
>
> This is an old, upgraded fs from before the days of checksums, but even
> so I'm surprised that with a 256-byte inode and no xattrs in use,
> EXT4_FITS_IN_INODE is false. Maybe the extra_isize isn't big enough?
It's zero, so yes. :)
> An lzipped e2image of the problematic filesystem is available from
> <http://www.esperi.org.uk/~nix/temporary/csum-corruption.img.lz>:
> I have verified that the problem recurs with this image.
>
> I can also replicate the problem in literally seconds if you need more
> debugging output.
>
>
> ... The mystery is why this isn't going wrong anywhere else: I have
> metadata_csum working on every fs on a bunch of other ext4-using
> systems, and indeed on every filesystem on this machine as well, as long
> as c9274d8 is not applied. Many of them are similarly upgraded pre-csum
> fses with the same inode size and extra_isize, but they work...
Hard to say, but this bug only affects inodes with 0 < i_extra_size <= 4
i.e. 128 < inode-core-size <= 130. Maybe an old ext3 fs that was
created with 256 bytes per inode but inode-core-size of 128?
Uck. Sorry about this mess.
--D
[bwh: Converted to a patch]
---
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -71,10 +71,9 @@ static __u32 ext4_inode_csum(struct inod
csum = ext4_chksum(sbi, csum, (__u8 *)&dummy_csum,
csum_size);
offset += csum_size;
- csum = ext4_chksum(sbi, csum, (__u8 *)raw + offset,
- EXT4_INODE_SIZE(inode->i_sb) -
- offset);
}
+ csum = ext4_chksum(sbi, csum, (__u8 *)raw + offset,
+ EXT4_INODE_SIZE(inode->i_sb) - offset);
}
return csum;

View File

@ -60,6 +60,7 @@ bugfix/all/kbuild-use-nostdinc-in-compile-tests.patch
bugfix/all/disable-some-marvell-phys.patch
bugfix/all/fs-add-module_softdep-declarations-for-hard-coded-cr.patch
bugfix/all/kbuild-do-not-use-hyphen-in-exported-variable-name.patch
bugfix/all/ext4-fix-bug-838544.patch
# Miscellaneous features

7
debian/rules.real vendored
View File

@ -202,7 +202,6 @@ ifeq (,$(filter nodoc,$(DEB_BUILD_PROFILES)))
dh_installdocs $(INSTALLDOCS_ARGS)
endif
dh_installchangelogs
dh_strip
dh_compress
dh_fixperms
dh_installdeb
@ -399,7 +398,12 @@ install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR):
dh_testroot
dh_prep
dh_installdirs 'boot'
ifeq ($(IMAGE_FILE),vmlinux)
# This is the unprocessed ELF image, so we need to strip debug symbols
$(CROSS_COMPILE)objcopy --strip-debug '$(DIR)/vmlinux' $(INSTALL_DIR)/$(IMAGE_INSTALL_STEM)-$(REAL_VERSION)
else
install -m644 '$(DIR)/$(IMAGE_FILE)' $(INSTALL_DIR)/$(IMAGE_INSTALL_STEM)-$(REAL_VERSION)
endif
+$(MAKE_SELF) \
install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_dt \
DIR='$(DIR)' PACKAGE_DIR='$(PACKAGE_DIR)' REAL_VERSION='$(REAL_VERSION)'
@ -418,6 +422,7 @@ endif
+$(MAKE_SELF) \
install-image_$(ARCH)_$(FEATURESET)_$(FLAVOUR)_bug \
PACKAGE_DIR='$(PACKAGE_DIR)' PACKAGE_NAME='$(PACKAGE_NAME)' REAL_VERSION='$(REAL_VERSION)'
dh_strip --no-automatic-dbgsym
+$(MAKE_SELF) install-base GENCONTROL_ARGS='-Vkernel:Recommends='"$$( \
if grep -q '^CONFIG_SMP=y' $(DIR)/.config; then \
printf irqbalance,; \