[linux] 04/04: Fix/ignore/revert (as appropriate) ABI changes in 3.16.37 and 3.16.39

debian-kernel at lists.debian.org debian-kernel at lists.debian.org
Sat Dec 10 04:39:43 UTC 2016


This is an automated email from the git hooks/post-receive script.

benh pushed a commit to branch jessie
in repository linux.

commit c3b1123b7f2a6647f0f537f0e0251b9fa4c9bc5d
Author: Ben Hutchings <ben at decadent.org.uk>
Date:   Sat Dec 10 04:39:08 2016 +0000

    Fix/ignore/revert (as appropriate) ABI changes in 3.16.37 and 3.16.39
---
 debian/changelog                                   |  15 ++-
 debian/config/defines                              |   6 +-
 .../debian/fs-fix-abi-change-in-3.16.39.patch      | 126 ++++++++++++++++++
 .../debian/i8042-revert-abi-break-in-3.16.39.patch | 147 +++++++++++++++++++++
 .../debian/mips-fix-abi-change-in-3.16.37.patch    |  85 ++++++++++++
 .../net-sched-fix-abi-change-in-3.16.37.patch      |  35 +++++
 ...efine-at_vector_size_arch-for-arch_dlinfo.patch |  30 +++++
 ...lock-fix-bdi-vs-gendisk-lifetime-mismatch.patch |  75 +++++++++++
 ...efine-at_vector_size_arch-for-arch_dlinfo.patch |  30 +++++
 .../debian/scsi-fix-abi-change-in-3.16.37.patch    |  30 +++++
 .../uaccess-avoid-abi-change-in-3.16.39.patch      |  21 +++
 .../debian/ubi-avoid-abi-change-in-3.16.37.patch   |  24 ++++
 debian/patches/series                              |  10 ++
 13 files changed, 632 insertions(+), 2 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 480f998..856c06e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -323,7 +323,6 @@ linux (3.16.39-1) UNRELEASED; urgency=medium
     - sysv, ipc: fix security-layer leaking
     - ALSA: hda: Fix krealloc() with __GFP_ZERO usage
     - block: fix use-after-free in seq file
-    - block: fix bdi vs gendisk lifetime mismatch
     - mac80211: fix purging multicast PS buffer queue
     - SUNRPC: allow for upcalls for same uid but different gss service
     - USB: serial: fix memleak in driver-registration error path
@@ -473,6 +472,20 @@ linux (3.16.39-1) UNRELEASED; urgency=medium
   * Revert "ecryptfs: forbid opening files without mmap handler", redundant
     with upstream fixes
   * fs: Move procfs/ecryptfs stacking check into ecryptfs, to avoid ABI change
+  * [mips*] Fix ABI change in 3.16.37
+  * net/sched: Fix ABI change in 3.16.37
+  * SCSI: Fix ABI change in 3.16.37
+  * ubi: Avoid ABI change in 3.16.37
+  * i8042: Revert ABI break in 3.16.39
+  * fs: Fix ABI change in 3.16.39
+  * can: Ignore ABI change in 3.16.39
+  * [mips*] uaccess: Avoid ABI change in 3.16.39
+  * [arm64] Revert "arm64: Define AT_VECTOR_SIZE_ARCH for ARCH_DLINFO" to
+    avoid ABI change
+  * [s390x] Revert "s390: Define AT_VECTOR_SIZE_ARCH for ARCH_DLINFO" to
+    avoid ABI change
+  * Revert "block: fix bdi vs gendisk lifetime mismatch" to avoid ABI change
+  * fsnotify: Ignore ABI change in 3.16.39
 
   [ Julien Cristau ]
   * hwrng: Add chaoskey driver, backported from 4.8 (Closes: #839616)
diff --git a/debian/config/defines b/debian/config/defines
index 7f4e234..b46fa04 100644
--- a/debian/config/defines
+++ b/debian/config/defines
@@ -6,7 +6,8 @@ ignore-changes:
  module:drivers/md/dm-snapshot
  module:drivers/misc/mei/*
  module:drivers/mtd/spi-nor/spi-nor
- module:drivers/net/ethernet/broadcom/bnx2x/bnx2x
+ module:drivers/net/can/can-dev
+ module:drivers/net/ethernet/**
  module:drivers/net/wireless/**
  module:drivers/scsi/qla2xxx/qla2xxx
  module:drivers/target/iscsi/iscsi_target_mod
@@ -59,6 +60,9 @@ ignore-changes:
  zpci_disable_device
  zpci_enable_device
  zpci_stop_device
+# Private to *notify
+ fsnotify_*_group
+ fsnotify_*_mark
 
 [base]
 arches:
diff --git a/debian/patches/debian/fs-fix-abi-change-in-3.16.39.patch b/debian/patches/debian/fs-fix-abi-change-in-3.16.39.patch
new file mode 100644
index 0000000..b755bcb
--- /dev/null
+++ b/debian/patches/debian/fs-fix-abi-change-in-3.16.39.patch
@@ -0,0 +1,126 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Tue, 29 Nov 2016 02:10:21 +0000
+Subject: fs: Fix ABI change in 3.16.39
+Forwarded: not-needed
+
+In order to fix CVE-2015-1350, inode_change_ok() had to be changed
+to take a dentry pointer as passed down from inode_setattr(), and
+it was renamed to setattr_prepare().
+
+Add inode_change_ok() back, along with a hack to pass the dentry
+down via struct attr when there isn't a file pointer there.  In 3.16
+there don't appear to be any cases where both the file pointer is
+provided and the dentry pointer is needed.  (In upstream there is -
+truncate operations set both ATTR_FILE and ATTR_KILL_PRIV.)  WARN
+and return an error if that does happen.  
+
+---
+--- a/include/linux/fs.h
++++ b/include/linux/fs.h
+@@ -223,6 +223,7 @@ typedef void (dio_iodone_t)(struct kiocb
+ #define ATTR_KILL_PRIV	(1 << 14)
+ #define ATTR_OPEN	(1 << 15) /* Truncating from open(O_TRUNC) */
+ #define ATTR_TIMES_SET	(1 << 16)
++#define ATTR_DENTRY	(1 << 18) /* ia_file is actually a dentry */
+ 
+ /*
+  * This is the Inode Attributes structure, used for notify_change().  It
+@@ -2649,6 +2650,7 @@ extern int buffer_migrate_page(struct ad
+ #define buffer_migrate_page NULL
+ #endif
+ 
++extern int inode_change_ok(const struct inode *, struct iattr *);
+ extern int setattr_prepare(struct dentry *, struct iattr *);
+ extern int inode_newsize_ok(const struct inode *, loff_t offset);
+ extern void setattr_copy(struct inode *inode, const struct iattr *attr);
+--- a/fs/attr.c
++++ b/fs/attr.c
+@@ -16,6 +16,9 @@
+ #include <linux/evm.h>
+ #include <linux/ima.h>
+ 
++static int __setattr_prepare(struct dentry *dentry, const struct inode *inode,
++			     struct iattr *attr);
++
+ /**
+  * setattr_prepare - check if attribute changes to a dentry are allowed
+  * @dentry:	dentry to check
+@@ -32,7 +35,35 @@
+  */
+ int setattr_prepare(struct dentry *dentry, struct iattr *attr)
+ {
+-	struct inode *inode = d_inode(dentry);
++	return __setattr_prepare(dentry, d_inode(dentry), attr);
++}
++EXPORT_SYMBOL(setattr_prepare);
++
++/* Backward-compatible version of setattr_prepare() */
++int inode_change_ok(const struct inode *inode, struct iattr *attr)
++{
++	struct dentry *dentry;
++
++	/*
++	 * If ia_file holds a dentry and it matches the inode then
++	 * pass it down.  Otherwise, pass NULL.  The dentry is only
++	 * needed if ATTR_KILL_PRIV is set in ia_flags.
++	 */
++	if ((attr->ia_valid & (ATTR_FILE | ATTR_DENTRY)) == ATTR_DENTRY) {
++		dentry = (struct dentry *)attr->ia_file;
++		if (d_inode(dentry) != inode)
++			dentry = NULL;
++	} else {
++		dentry = NULL;
++	}
++
++	return __setattr_prepare(dentry, inode, attr);
++}
++EXPORT_SYMBOL(inode_change_ok);
++
++static int __setattr_prepare(struct dentry *dentry, const struct inode *inode,
++			     struct iattr *attr)
++{
+ 	unsigned int ia_valid = attr->ia_valid;
+ 
+ 	/*
+@@ -85,6 +116,9 @@ kill_priv:
+ 	if (ia_valid & ATTR_KILL_PRIV) {
+ 		int error;
+ 
++		if (WARN_ON_ONCE(!dentry))
++			return -EIO;
++
+ 		error = security_inode_killpriv(dentry);
+ 		if (error)
+ 			return error;
+@@ -92,7 +126,6 @@ kill_priv:
+ 
+ 	return 0;
+ }
+-EXPORT_SYMBOL(setattr_prepare);
+ 
+ /**
+  * inode_newsize_ok - may this inode be truncated to a given size
+@@ -273,11 +306,23 @@ int notify_change(struct dentry * dentry
+ 	if (error)
+ 		return error;
+ 
++	/* Smuggle the dentry through to inode_change_ok() */
++	if (!(attr->ia_valid & ATTR_FILE)) {
++		attr->ia_file = (struct file *)dentry;
++		attr->ia_valid |= ATTR_DENTRY;
++	}
++
+ 	if (inode->i_op->setattr)
+ 		error = inode->i_op->setattr(dentry, attr);
+ 	else
+ 		error = simple_setattr(dentry, attr);
+ 
++	if (attr->ia_valid & ATTR_DENTRY) {
++		if (!(attr->ia_valid & ATTR_FILE))
++			attr->ia_file = NULL;
++		attr->ia_valid &= ~ATTR_DENTRY;
++	}
++
+ 	if (!error) {
+ 		fsnotify_change(dentry, ia_valid);
+ 		ima_inode_post_setattr(dentry);
diff --git a/debian/patches/debian/i8042-revert-abi-break-in-3.16.39.patch b/debian/patches/debian/i8042-revert-abi-break-in-3.16.39.patch
new file mode 100644
index 0000000..19c48f9
--- /dev/null
+++ b/debian/patches/debian/i8042-revert-abi-break-in-3.16.39.patch
@@ -0,0 +1,147 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Fri, 09 Sep 2016 02:13:06 +0100
+Subject: i8042: Revert ABI break in 3.16.39
+Forwarded: not-needed
+
+Revert "Input: i8042 - set up shared ps2_cmd_mutex for AUX ports" and
+"Input: i8042 - break load dependency between atkbd/psmouse and i8042"
+to avoid an ABI break.
+
+CONFIG_SERIO_I8042=m is absurd on x86 so this didn't really deserve a
+stable update.
+
+---
+--- a/drivers/input/serio/i8042.c
++++ b/drivers/input/serio/i8042.c
+@@ -1230,7 +1230,6 @@ static int __init i8042_create_kbd_port(
+ 	serio->start		= i8042_start;
+ 	serio->stop		= i8042_stop;
+ 	serio->close		= i8042_port_close;
+-	serio->ps2_cmd_mutex	= &i8042_mutex;
+ 	serio->port_data	= port;
+ 	serio->dev.parent	= &i8042_platform_device->dev;
+ 	strlcpy(serio->name, "i8042 KBD port", sizeof(serio->name));
+@@ -1258,7 +1257,6 @@ static int __init i8042_create_aux_port(
+ 	serio->write		= i8042_aux_write;
+ 	serio->start		= i8042_start;
+ 	serio->stop		= i8042_stop;
+-	serio->ps2_cmd_mutex	= &i8042_mutex;
+ 	serio->port_data	= port;
+ 	serio->dev.parent	= &i8042_platform_device->dev;
+ 	if (idx < 0) {
+@@ -1325,6 +1323,21 @@ static void i8042_unregister_ports(void)
+ 	}
+ }
+ 
++/*
++ * Checks whether port belongs to i8042 controller.
++ */
++bool i8042_check_port_owner(const struct serio *port)
++{
++	int i;
++
++	for (i = 0; i < I8042_NUM_PORTS; i++)
++		if (i8042_ports[i].serio == port)
++			return true;
++
++	return false;
++}
++EXPORT_SYMBOL(i8042_check_port_owner);
++
+ static void i8042_free_irqs(void)
+ {
+ 	if (i8042_aux_irq_registered)
+--- a/drivers/input/serio/libps2.c
++++ b/drivers/input/serio/libps2.c
+@@ -56,17 +56,19 @@ EXPORT_SYMBOL(ps2_sendbyte);
+ 
+ void ps2_begin_command(struct ps2dev *ps2dev)
+ {
+-	struct mutex *m = ps2dev->serio->ps2_cmd_mutex ?: &ps2dev->cmd_mutex;
++	mutex_lock(&ps2dev->cmd_mutex);
+ 
+-	mutex_lock(m);
++	if (i8042_check_port_owner(ps2dev->serio))
++		i8042_lock_chip();
+ }
+ EXPORT_SYMBOL(ps2_begin_command);
+ 
+ void ps2_end_command(struct ps2dev *ps2dev)
+ {
+-	struct mutex *m = ps2dev->serio->ps2_cmd_mutex ?: &ps2dev->cmd_mutex;
++	if (i8042_check_port_owner(ps2dev->serio))
++		i8042_unlock_chip();
+ 
+-	mutex_unlock(m);
++	mutex_unlock(&ps2dev->cmd_mutex);
+ }
+ EXPORT_SYMBOL(ps2_end_command);
+ 
+--- a/include/linux/i8042.h
++++ b/include/linux/i8042.h
+@@ -62,6 +62,7 @@ struct serio;
+ void i8042_lock_chip(void);
+ void i8042_unlock_chip(void);
+ int i8042_command(unsigned char *param, int command);
++bool i8042_check_port_owner(const struct serio *);
+ int i8042_install_filter(bool (*filter)(unsigned char data, unsigned char str,
+ 					struct serio *serio));
+ int i8042_remove_filter(bool (*filter)(unsigned char data, unsigned char str,
+@@ -82,6 +83,11 @@ static inline int i8042_command(unsigned
+ 	return -ENODEV;
+ }
+ 
++static inline bool i8042_check_port_owner(const struct serio *serio)
++{
++	return false;
++}
++
+ static inline int i8042_install_filter(bool (*filter)(unsigned char data, unsigned char str,
+ 					struct serio *serio))
+ {
+--- a/include/linux/serio.h
++++ b/include/linux/serio.h
+@@ -29,8 +29,7 @@ struct serio {
+ 
+ 	struct serio_device_id id;
+ 
+-	/* Protects critical sections from port's interrupt handler */
+-	spinlock_t lock;
++	spinlock_t lock;		/* protects critical sections from port's interrupt handler */
+ 
+ 	int (*write)(struct serio *, unsigned char);
+ 	int (*open)(struct serio *);
+@@ -39,29 +38,16 @@ struct serio {
+ 	void (*stop)(struct serio *);
+ 
+ 	struct serio *parent;
+-	/* Entry in parent->children list */
+-	struct list_head child_node;
++	struct list_head child_node;	/* Entry in parent->children list */
+ 	struct list_head children;
+-	/* Level of nesting in serio hierarchy */
+-	unsigned int depth;
++	unsigned int depth;		/* level of nesting in serio hierarchy */
+ 
+-	/*
+-	 * serio->drv is accessed from interrupt handlers; when modifying
+-	 * caller should acquire serio->drv_mutex and serio->lock.
+-	 */
+-	struct serio_driver *drv;
+-	/* Protects serio->drv so attributes can pin current driver */
+-	struct mutex drv_mutex;
++	struct serio_driver *drv;	/* accessed from interrupt, must be protected by serio->lock and serio->sem */
++	struct mutex drv_mutex;		/* protects serio->drv so attributes can pin driver */
+ 
+ 	struct device dev;
+ 
+ 	struct list_head node;
+-
+-	/*
+-	 * For use by PS/2 layer when several ports share hardware and
+-	 * may get indigestion when exposed to concurrent access (i8042).
+-	 */
+-	struct mutex *ps2_cmd_mutex;
+ };
+ #define to_serio_port(d)	container_of(d, struct serio, dev)
+ 
diff --git a/debian/patches/debian/mips-fix-abi-change-in-3.16.37.patch b/debian/patches/debian/mips-fix-abi-change-in-3.16.37.patch
new file mode 100644
index 0000000..29f5cab
--- /dev/null
+++ b/debian/patches/debian/mips-fix-abi-change-in-3.16.37.patch
@@ -0,0 +1,85 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Thu, 16 Jun 2016 11:32:49 +0100
+Subject: MIPS: Fix ABI change in 3.16.37
+Forwarded: not-needed
+
+genksyms only looks at the (preprocessed) token stream of a struct
+definition, not the real types, so commit 5daebc477da4 ("MIPS: Fix
+siginfo.h to use strict posix types") results in a different hash
+even though it doesn't change types.
+
+--- a/arch/mips/include/uapi/asm/siginfo.h
++++ b/arch/mips/include/uapi/asm/siginfo.h
+@@ -37,6 +37,8 @@ struct siginfo;
+ 
+ #include <asm-generic/siginfo.h>
+ 
++#ifndef __GENKSYMS__
++
+ typedef struct siginfo {
+ 	int si_signo;
+ 	int si_code;
+@@ -109,6 +111,63 @@ typedef struct siginfo {
+ 	} _sifields;
+ } siginfo_t;
+ 
++#else /* __GENKSYMS__ */
++
++/* Definition using the 'wrong' type names, to keep genksyms happy */
++typedef struct siginfo {
++	int si_signo;
++	int si_code;
++	int si_errno;
++	int __pad0[SI_MAX_SIZE / sizeof(int) - SI_PAD_SIZE - 3];
++	union {
++		int _pad[SI_PAD_SIZE];
++		struct {
++			pid_t _pid;
++			__ARCH_SI_UID_T _uid;
++		} _kill;
++		struct {
++			timer_t _tid;
++			int _overrun;
++			char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
++			sigval_t _sigval;
++			int _sys_private;
++		} _timer;
++		struct {
++			pid_t _pid;
++			__ARCH_SI_UID_T _uid;
++			sigval_t _sigval;
++		} _rt;
++		struct {
++			pid_t _pid;
++			__ARCH_SI_UID_T _uid;
++			int _status;
++			clock_t _utime;
++			clock_t _stime;
++		} _sigchld;
++		struct {
++			pid_t _pid;
++			clock_t _utime;
++			int _status;
++			clock_t _stime;
++		} _irix_sigchld;
++		struct {
++			void __user *_addr;
++			short _addr_lsb;
++		} _sigfault;
++		struct {
++			__ARCH_SI_BAND_T _band;
++			int _fd;
++		} _sigpoll;
++		struct {
++			void __user *_call_addr;
++			int _syscall;
++			unsigned int _arch;
++		} _sigsys;
++	} _sifields;
++} siginfo_t;
++
++#endif /* __GENKSYMS__ */
++
+ /*
+  * si_code values
+  * Again these have been chosen to be IRIX compatible.
diff --git a/debian/patches/debian/net-sched-fix-abi-change-in-3.16.37.patch b/debian/patches/debian/net-sched-fix-abi-change-in-3.16.37.patch
new file mode 100644
index 0000000..abe953e
--- /dev/null
+++ b/debian/patches/debian/net-sched-fix-abi-change-in-3.16.37.patch
@@ -0,0 +1,35 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Mon, 23 May 2016 01:25:47 +0100
+Subject: net/sched: Fix ABI change in 3.16.37
+Forwarded: not-needed
+
+Restore the function qdisc_tree_decrease_qlen(), removed in 3.16.37.
+It can now be a trivial wrapper for its replacement,
+qdisc_tree_reduce_backlog().
+
+---
+--- a/include/net/sch_generic.h
++++ b/include/net/sch_generic.h
+@@ -370,6 +370,7 @@ void qdisc_reset(struct Qdisc *qdisc);
+ void qdisc_destroy(struct Qdisc *qdisc);
+ void qdisc_tree_reduce_backlog(struct Qdisc *qdisc, unsigned int n,
+ 			       unsigned int len);
++void qdisc_tree_decrease_qlen(struct Qdisc *qdisc, unsigned int n);
+ struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue,
+ 			  const struct Qdisc_ops *ops);
+ struct Qdisc *qdisc_create_dflt(struct netdev_queue *dev_queue,
+--- a/net/sched/sch_api.c
++++ b/net/sched/sch_api.c
+@@ -770,6 +770,12 @@ void qdisc_tree_reduce_backlog(struct Qd
+ }
+ EXPORT_SYMBOL(qdisc_tree_reduce_backlog);
+ 
++void qdisc_tree_decrease_qlen(struct Qdisc *sch, unsigned int n)
++{
++	qdisc_tree_reduce_backlog(sch, n, 0);
++}
++EXPORT_SYMBOL(qdisc_tree_decrease_qlen);
++
+ static void notify_and_destroy(struct net *net, struct sk_buff *skb,
+ 			       struct nlmsghdr *n, u32 clid,
+ 			       struct Qdisc *old, struct Qdisc *new)
diff --git a/debian/patches/debian/revert-arm64-define-at_vector_size_arch-for-arch_dlinfo.patch b/debian/patches/debian/revert-arm64-define-at_vector_size_arch-for-arch_dlinfo.patch
new file mode 100644
index 0000000..33ccaf3
--- /dev/null
+++ b/debian/patches/debian/revert-arm64-define-at_vector_size_arch-for-arch_dlinfo.patch
@@ -0,0 +1,30 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Mon, 19 Sep 2016 18:07:24 +0100
+Subject: Revert "arm64: Define AT_VECTOR_SIZE_ARCH for ARCH_DLINFO"
+Forwarded: not-needed
+
+This reverts commit a7408eca94745c441acb1c6b55ebeb08b735bf1f which
+was commit 3146bc64d12377a74dbda12b96ea32da3774ae07 upstream.
+The bug doesn't cause a real problem yet and the fix changes
+struct mm_struct which breaks the module ABI.
+
+---
+--- a/arch/arm64/include/asm/elf.h
++++ b/arch/arm64/include/asm/elf.h
+@@ -137,7 +137,6 @@ extern unsigned long randomize_et_dyn(un
+ 
+ #define SET_PERSONALITY(ex)		clear_thread_flag(TIF_32BIT);
+ 
+-/* update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes */
+ #define ARCH_DLINFO							\
+ do {									\
+ 	NEW_AUX_ENT(AT_SYSINFO_EHDR,					\
+--- a/arch/arm64/include/uapi/asm/auxvec.h
++++ b/arch/arm64/include/uapi/asm/auxvec.h
+@@ -19,6 +19,4 @@
+ /* vDSO location */
+ #define AT_SYSINFO_EHDR	33
+ 
+-#define AT_VECTOR_SIZE_ARCH 1 /* entries in ARCH_DLINFO */
+-
+ #endif
diff --git a/debian/patches/debian/revert-block-fix-bdi-vs-gendisk-lifetime-mismatch.patch b/debian/patches/debian/revert-block-fix-bdi-vs-gendisk-lifetime-mismatch.patch
new file mode 100644
index 0000000..71cd5c9
--- /dev/null
+++ b/debian/patches/debian/revert-block-fix-bdi-vs-gendisk-lifetime-mismatch.patch
@@ -0,0 +1,75 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Fri, 09 Dec 2016 22:29:06 +0000
+Subject: Revert "block: fix bdi vs gendisk lifetime mismatch"
+Forwarded: not-needed
+
+This reverts commit dae435005a0a398dde9a421e222c379bbad0c643 which
+was commit df08c32ce3be5be138c1dbfcba203314a3a7cd6f upstream.
+The bug doesn't cause a major problem and the fix changes struct
+backing_dev_info which breaks the module ABI.
+
+---
+--- a/block/genhd.c
++++ b/block/genhd.c
+@@ -611,7 +611,7 @@ void add_disk(struct gendisk *disk)
+ 
+ 	/* Register BDI before referencing it from bdev */
+ 	bdi = &disk->queue->backing_dev_info;
+-	bdi_register_owner(bdi, disk_to_dev(disk));
++	bdi_register_dev(bdi, disk_devt(disk));
+ 
+ 	blk_register_region(disk_devt(disk), disk->minors, NULL,
+ 			    exact_match, exact_lock, disk);
+--- a/include/linux/backing-dev.h
++++ b/include/linux/backing-dev.h
+@@ -100,7 +100,6 @@ struct backing_dev_info {
+ 	struct list_head work_list;
+ 
+ 	struct device *dev;
+-	struct device *owner;
+ 
+ 	struct timer_list laptop_mode_wb_timer;
+ 
+@@ -117,7 +116,6 @@ __printf(3, 4)
+ int bdi_register(struct backing_dev_info *bdi, struct device *parent,
+ 		const char *fmt, ...);
+ int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev);
+-int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner);
+ void bdi_unregister(struct backing_dev_info *bdi);
+ int __must_check bdi_setup_and_register(struct backing_dev_info *, char *, unsigned int);
+ void bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages,
+--- a/mm/backing-dev.c
++++ b/mm/backing-dev.c
+@@ -350,20 +350,6 @@ int bdi_register_dev(struct backing_dev_
+ }
+ EXPORT_SYMBOL(bdi_register_dev);
+ 
+-int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner)
+-{
+-	int rc;
+-
+-	rc = bdi_register(bdi, NULL, "%u:%u", MAJOR(owner->devt),
+-			MINOR(owner->devt));
+-	if (rc)
+-		return rc;
+-	bdi->owner = owner;
+-	get_device(owner);
+-	return 0;
+-}
+-EXPORT_SYMBOL(bdi_register_owner);
+-
+ /*
+  * Remove bdi from the global list and shutdown any threads we have running
+  */
+@@ -432,11 +418,6 @@ void bdi_unregister(struct backing_dev_i
+ 
+ 		device_unregister(dev);
+ 	}
+-
+-	if (bdi->owner) {
+-		put_device(bdi->owner);
+-		bdi->owner = NULL;
+-	}
+ }
+ EXPORT_SYMBOL(bdi_unregister);
+ 
diff --git a/debian/patches/debian/revert-s390-define-at_vector_size_arch-for-arch_dlinfo.patch b/debian/patches/debian/revert-s390-define-at_vector_size_arch-for-arch_dlinfo.patch
new file mode 100644
index 0000000..e6c2d0a
--- /dev/null
+++ b/debian/patches/debian/revert-s390-define-at_vector_size_arch-for-arch_dlinfo.patch
@@ -0,0 +1,30 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Mon, 19 Sep 2016 18:07:24 +0100
+Subject: Revert "s390: Define AT_VECTOR_SIZE_ARCH for ARCH_DLINFO"
+Forwarded: not-needed
+
+This reverts commit 9693336d43ac21155438cd084f02cfaa94ecaddf which
+was commit 68c5cf5a6091c2c3fabccfd42ca844d730ec24c6 upstream.
+The bug doesn't cause a real problem yet and the fix changes
+struct mm_struct which breaks the module ABI.
+
+---
+--- a/arch/s390/include/asm/elf.h
++++ b/arch/s390/include/asm/elf.h
+@@ -210,7 +210,6 @@ do {								\
+ 
+ #define STACK_RND_MASK	0x7ffUL
+ 
+-/* update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT entries changes */
+ #define ARCH_DLINFO							    \
+ do {									    \
+ 	if (vdso_enabled)						    \
+--- a/arch/s390/include/uapi/asm/auxvec.h
++++ b/arch/s390/include/uapi/asm/auxvec.h
+@@ -3,6 +3,4 @@
+ 
+ #define AT_SYSINFO_EHDR		33
+ 
+-#define AT_VECTOR_SIZE_ARCH 1 /* entries in ARCH_DLINFO */
+-
+ #endif
diff --git a/debian/patches/debian/scsi-fix-abi-change-in-3.16.37.patch b/debian/patches/debian/scsi-fix-abi-change-in-3.16.37.patch
new file mode 100644
index 0000000..2348599
--- /dev/null
+++ b/debian/patches/debian/scsi-fix-abi-change-in-3.16.37.patch
@@ -0,0 +1,30 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Fri, 09 Dec 2016 22:50:13 +0000
+Subject: SCSI: Fix ABI change in 3.16.37
+Forwarded: not-needed
+
+Commit f05795d3d771 ("scsi: Add intermediate STARGET_REMOVE state to
+scsi_target_state") added an enumerator to enum scsi_target_state,
+and renumbered the existing STARGET_DEL.
+
+The target state doesn't appear to be checked anywhere outside of the
+SCSI core, but just in case it is swap STARGET_REMOVE and
+STARGET_DEL to maintain the value of the latter.
+
+Hide the change from genksyms.
+
+---
+--- a/include/scsi/scsi_device.h
++++ b/include/scsi/scsi_device.h
+@@ -264,8 +264,10 @@ struct scsi_dh_data {
+ enum scsi_target_state {
+ 	STARGET_CREATED = 1,
+ 	STARGET_RUNNING,
+-	STARGET_REMOVE,
+ 	STARGET_DEL,
++#ifndef __GENKSYMS__
++	STARGET_REMOVE,
++#endif
+ };
+ 
+ /*
diff --git a/debian/patches/debian/uaccess-avoid-abi-change-in-3.16.39.patch b/debian/patches/debian/uaccess-avoid-abi-change-in-3.16.39.patch
new file mode 100644
index 0000000..fb5d82c
--- /dev/null
+++ b/debian/patches/debian/uaccess-avoid-abi-change-in-3.16.39.patch
@@ -0,0 +1,21 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Sun, 25 Sep 2016 01:36:13 +0100
+Subject: uaccess: Avoid ABI change in 3.16.39
+Forwarded: not-needed
+
+Hide the new #include's from genksyms.  I'm not sure whether they'll
+change symbol versions but it's a possibility.
+
+---
+--- a/arch/mips/include/asm/uaccess.h
++++ b/arch/mips/include/asm/uaccess.h
+@@ -14,7 +14,9 @@
+ #include <linux/kernel.h>
+ #include <linux/errno.h>
+ #include <linux/thread_info.h>
++#ifndef __GENKSYMS__
+ #include <linux/string.h>
++#endif
+ #include <asm/asm-eva.h>
+ 
+ /*
diff --git a/debian/patches/debian/ubi-avoid-abi-change-in-3.16.37.patch b/debian/patches/debian/ubi-avoid-abi-change-in-3.16.37.patch
new file mode 100644
index 0000000..4f2e69c
--- /dev/null
+++ b/debian/patches/debian/ubi-avoid-abi-change-in-3.16.37.patch
@@ -0,0 +1,24 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Sat, 10 Dec 2016 04:34:55 +0000
+Subject: ubi: Avoid ABI change in 3.16.37
+Forwarded: not-needed
+
+struct ubi_device was changed by commit ec4dac52d2b5 ("UBI: Fix static
+volume checks when Fastmap is used").  It is referred to indirectly
+from struct ubi_volume, but its definition is private to ubi and is
+not included by any other module.  So hide the new field from
+genksyms; don't even bother to reorder it.
+
+---
+--- a/drivers/mtd/ubi/ubi.h
++++ b/drivers/mtd/ubi/ubi.h
+@@ -532,7 +532,9 @@ struct ubi_device {
+ 	void *fm_buf;
+ 	size_t fm_size;
+ 	struct work_struct fm_work;
++#ifndef __GENKSYMS__
+ 	int fast_attach;
++#endif
+ 
+ 	/* Wear-leveling sub-system's stuff */
+ 	struct rb_root used;
diff --git a/debian/patches/series b/debian/patches/series
index ed0b8db..78e96df 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -696,3 +696,13 @@ debian/fs-fix-abi-change-for-aufs-f_setfl-fix.patch
 debian/migrate-fix-abi-change-in-3.16.36.patch
 debian/sched-fix-abi-change-in-3.16.36.patch
 debian/fs-move-procfs-ecryptfs-stacking-check-into-ecryptfs.patch
+debian/mips-fix-abi-change-in-3.16.37.patch
+debian/net-sched-fix-abi-change-in-3.16.37.patch
+debian/scsi-fix-abi-change-in-3.16.37.patch
+debian/ubi-avoid-abi-change-in-3.16.37.patch
+debian/i8042-revert-abi-break-in-3.16.39.patch
+debian/fs-fix-abi-change-in-3.16.39.patch
+debian/uaccess-avoid-abi-change-in-3.16.39.patch
+debian/revert-arm64-define-at_vector_size_arch-for-arch_dlinfo.patch
+debian/revert-s390-define-at_vector_size_arch-for-arch_dlinfo.patch
+debian/revert-block-fix-bdi-vs-gendisk-lifetime-mismatch.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/linux.git



More information about the Kernel-svn-changes mailing list