Bump ABI to 2

svn path=/dists/sid/linux/; revision=21569
This commit is contained in:
Ben Hutchings 2014-07-19 18:55:27 +00:00
parent cf12b5d989
commit d117cd8e48
18 changed files with 5 additions and 697 deletions

2
debian/changelog vendored
View File

@ -24,8 +24,8 @@ linux (3.14.12-2) UNRELEASED; urgency=medium
#755223).
[ Ben Hutchings ]
* writeback: Fix ABI change in 3.14.10 (Closes: #754902)
* net/l2tp: don't fall back on UDP [get|set]sockopt (CVE-2014-4943)
* Bump ABI to 2 (Closes: #754902)
-- Ian Campbell <ijc@hellion.org.uk> Sat, 12 Jul 2014 21:12:17 +0100

25
debian/config/defines vendored
View File

@ -1,29 +1,6 @@
[abi]
abiname: 1
abiname: 2
ignore-changes:
# Removed, apparently only needed by rdma_cm
ib_update_cm_av
# Private to the matroxfb modules (why are they even separate modules?!)
DAC1064_global_*
g450_mnp2f
matrox_*
matroxfb_*
# Not used OOT (at least not in open-vm-tools)
vsock_core_init
# Cannot be used OOT
nf_ct_extend_register
# Apparently not used OOT
__ps2_*
__serio_*
i8042_*
ps2_*
serio_*
# Private to the team modules
module:drivers/net/team/team
# Apparently not used OOT
sock_diag_put_filterinfo
# Can't build target modules OOT
module:drivers/target/iscsi/iscsi_target_mod
[base]
arches:

View File

@ -1,33 +0,0 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 29 Jun 2014 02:05:57 +0100
Subject: ALSA: Avoid ABI change for CVE-2014-4652 fix
Forwarded: not-needed
Move the new member snd_card::user_ctl_lock to the end of the structure
and hide it from genksyms. struct snd_card is always allocated by
snd_card_create() in sound/core/init.c and user_ctl_lock is used in
sound/core/control.c, and these are part of the same module so they
are sure to be consistent.
--- a/include/sound/core.h
+++ b/include/sound/core.h
@@ -121,8 +121,6 @@ struct snd_card {
int user_ctl_count; /* count of all user controls */
struct list_head controls; /* all controls for this card */
struct list_head ctl_files; /* active control files */
- struct mutex user_ctl_lock; /* protects user controls against
- concurrent access */
struct snd_info_entry *proc_root; /* root for soundcard specific files */
struct snd_info_entry *proc_id; /* the card id */
@@ -149,6 +147,10 @@ struct snd_card {
struct snd_mixer_oss *mixer_oss;
int mixer_oss_change_count;
#endif
+#ifndef __GENKSYMS__
+ struct mutex user_ctl_lock; /* protects user controls against
+ concurrent access */
+#endif
};
#ifdef CONFIG_PM

View File

@ -1,33 +0,0 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Fri, 11 Jul 2014 17:41:42 +0100
Subject: blkcg: Avoid ABI change in 3.14.12
The type of blkcg_gq::refcnt was changed from int to atomic_t,
and reference counting now requires atomic operations. None
of the in-tree users are modular and this structure isn't exposed
OOT, so we can hide this change.
--- a/block/blk-cgroup.h
+++ b/block/blk-cgroup.h
@@ -18,7 +18,9 @@
#include <linux/seq_file.h>
#include <linux/radix-tree.h>
#include <linux/blkdev.h>
+#ifndef __GENKSYMS__
#include <linux/atomic.h>
+#endif
/* Max limits for throttle policy */
#define THROTL_IOPS_MAX UINT_MAX
@@ -105,7 +107,11 @@ struct blkcg_gq {
struct request_list rl;
/* reference count */
+#ifndef __GENKSYMS__
atomic_t refcnt;
+#else
+ int refcnt;
+#endif
/* is this blkg online? protected by both blkcg and q locks */
bool online;

View File

@ -1,39 +0,0 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Tue, 13 May 2014 18:48:29 +0100
Subject: dm: Avoid ABI change in 3.14.4
Forwarded: not-needed
The dm_bm_flush_and_unlock() function was replaced by dm_bm_flush().
As both callers were changed to call dm_bm_unlock() and then
dm_bm_flush(), restore dm_bm_flush_and_unlock() as a trivial
function that does just that.
--- a/drivers/md/persistent-data/dm-block-manager.c
+++ b/drivers/md/persistent-data/dm-block-manager.c
@@ -604,6 +604,15 @@ int dm_bm_flush(struct dm_block_manager
}
EXPORT_SYMBOL_GPL(dm_bm_flush);
+int dm_bm_flush_and_unlock(struct dm_block_manager *bm,
+ struct dm_block *superblock)
+{
+ dm_bm_unlock(superblock);
+
+ return dm_bm_flush(bm);
+}
+EXPORT_SYMBOL_GPL(dm_bm_flush_and_unlock);
+
void dm_bm_prefetch(struct dm_block_manager *bm, dm_block_t b)
{
dm_bufio_prefetch(bm->bufio, b, 1);
--- a/drivers/md/persistent-data/dm-block-manager.h
+++ b/drivers/md/persistent-data/dm-block-manager.h
@@ -106,6 +106,8 @@ int dm_bm_unlock(struct dm_block *b);
* This method always blocks.
*/
int dm_bm_flush(struct dm_block_manager *bm);
+int dm_bm_flush_and_unlock(struct dm_block_manager *bm,
+ struct dm_block *superblock);
/*
* Request data is prefetched into the cache.

View File

@ -1,25 +0,0 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 15 Jun 2014 21:44:43 +0100
Subject: dmaengine: Avoid ABI change in 3.14.6
Forwarded: not-needed
dmaengine_unmap_data::map_cnt was added to the beginning of the
structure. Move it after bidi_cnt, where there was previously at
least one byte of padding, and hide it from genksyms.
--- a/include/linux/dmaengine.h
+++ b/include/linux/dmaengine.h
@@ -433,10 +433,12 @@ typedef bool (*dma_filter_fn)(struct dma
typedef void (*dma_async_tx_callback)(void *dma_async_param);
struct dmaengine_unmap_data {
- u8 map_cnt;
u8 to_cnt;
u8 from_cnt;
u8 bidi_cnt;
+#ifndef __GENKSYMS__
+ u8 map_cnt;
+#endif
struct device *dev;
struct kref kref;
size_t len;

View File

@ -1,19 +0,0 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 15 Jun 2014 21:41:43 +0100
Subject: drivers/base/platform: Avoid ABI change in 3.14.6
Forwarded: not-needed
Hide the new #include from genksyms.
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -13,7 +13,9 @@
#include <linux/string.h>
#include <linux/platform_device.h>
#include <linux/of_device.h>
+#ifndef __GENKSYMS__
#include <linux/of_irq.h>
+#endif
#include <linux/module.h>
#include <linux/init.h>
#include <linux/dma-mapping.h>

View File

@ -1,32 +0,0 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Mon, 07 Jul 2014 01:09:53 +0100
Subject: irq: Avoid ABI change in 3.14.10
Forwarded: not-needed
Move the new fields to the end of struct irq_desc and hide them from
genksyms. Although struct irq_desc is normally allocated as part of a
static array, access is abstracted through the irq_to_desc() function
so modules don't depend on the size of the structure.
--- a/include/linux/irqdesc.h
+++ b/include/linux/irqdesc.h
@@ -54,8 +54,6 @@ struct irq_desc {
unsigned int irq_count; /* For detecting broken IRQs */
unsigned long last_unhandled; /* Aging timer for unhandled count */
unsigned int irqs_unhandled;
- atomic_t threads_handled;
- int threads_handled_last;
raw_spinlock_t lock;
struct cpumask *percpu_enabled;
#ifdef CONFIG_SMP
@@ -74,6 +72,10 @@ struct irq_desc {
int parent_irq;
struct module *owner;
const char *name;
+#ifndef __GENKSYMS__
+ atomic_t threads_handled;
+ int threads_handled_last;
+#endif
} ____cacheline_internodealigned_in_smp;
#ifndef CONFIG_SPARSE_IRQ

View File

@ -1,32 +0,0 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Tue, 13 May 2014 18:39:19 +0100
Subject: libata: Avoid ABI change in 3.14.4
Forwarded: not-needed
Commit 8a4aeec8d2d6 ("libata/ahci: accommodate tag ordered
controllers") added the ata_port::last_tag field. As this structure
is always allocated in libata (by ata_port_alloc()) and the field is
only used by libata, we can move it to the end and hide it from
genksyms.
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -822,7 +822,6 @@ struct ata_port {
unsigned long qc_allocated;
unsigned int qc_active;
int nr_active_links; /* #links with active qcs */
- unsigned int last_tag; /* track next tag hw expects */
struct ata_link link; /* host default link */
struct ata_link *slave_link; /* see ata_slave_link_init() */
@@ -863,6 +862,10 @@ struct ata_port {
#endif
/* owned by EH */
u8 sector_buf[ATA_SECT_SIZE] ____cacheline_aligned;
+
+#ifndef __GENKSYMS__
+ unsigned int last_tag; /* track next tag hw expects */
+#endif
};
/* The following initializer overrides a method to NULL whether one of

View File

@ -1,261 +0,0 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 01 Jun 2014 20:33:54 +0100
Subject: net: Revert lockdep changes in 3.14.5
Forwarded: not-needed
These changes fixed false lockep warnings, but result in an ABI
change. As lockdep is not enabled in our binary packages, they
don't fix any problem either.
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index 9dde3ea..1831fb7 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -518,11 +518,6 @@ static struct lock_class_key macvlan_netdev_addr_lock_key;
#define MACVLAN_STATE_MASK \
((1<<__LINK_STATE_NOCARRIER) | (1<<__LINK_STATE_DORMANT))
-static int macvlan_get_nest_level(struct net_device *dev)
-{
- return ((struct macvlan_dev *)netdev_priv(dev))->nest_level;
-}
-
static void macvlan_set_lockdep_class_one(struct net_device *dev,
struct netdev_queue *txq,
void *_unused)
@@ -533,9 +528,8 @@ static void macvlan_set_lockdep_class_one(struct net_device *dev,
static void macvlan_set_lockdep_class(struct net_device *dev)
{
- lockdep_set_class_and_subclass(&dev->addr_list_lock,
- &macvlan_netdev_addr_lock_key,
- macvlan_get_nest_level(dev));
+ lockdep_set_class(&dev->addr_list_lock,
+ &macvlan_netdev_addr_lock_key);
netdev_for_each_tx_queue(dev, macvlan_set_lockdep_class_one, NULL);
}
@@ -737,7 +731,6 @@ static const struct net_device_ops macvlan_netdev_ops = {
.ndo_fdb_add = macvlan_fdb_add,
.ndo_fdb_del = macvlan_fdb_del,
.ndo_fdb_dump = ndo_dflt_fdb_dump,
- .ndo_get_lock_subclass = macvlan_get_nest_level,
};
void macvlan_common_setup(struct net_device *dev)
@@ -866,7 +859,6 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
vlan->dev = dev;
vlan->port = port;
vlan->set_features = MACVLAN_FEATURES;
- vlan->nest_level = dev_get_nest_level(lowerdev, netif_is_macvlan) + 1;
vlan->mode = MACVLAN_MODE_VEPA;
if (data && data[IFLA_MACVLAN_MODE])
diff --git a/include/linux/if_macvlan.h b/include/linux/if_macvlan.h
index a9a53b1..7c8b20b 100644
--- a/include/linux/if_macvlan.h
+++ b/include/linux/if_macvlan.h
@@ -56,7 +56,6 @@ struct macvlan_dev {
int numqueues;
netdev_features_t tap_features;
int minor;
- int nest_level;
};
static inline void macvlan_count_rx(const struct macvlan_dev *vlan,
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
index 72ba6f5..bbedfb5 100644
--- a/include/linux/if_vlan.h
+++ b/include/linux/if_vlan.h
@@ -73,7 +73,7 @@ static inline struct vlan_ethhdr *vlan_eth_hdr(const struct sk_buff *skb)
/* found in socket.c */
extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *));
-static inline bool is_vlan_dev(struct net_device *dev)
+static inline int is_vlan_dev(struct net_device *dev)
{
return dev->priv_flags & IFF_802_1Q_VLAN;
}
@@ -158,7 +158,6 @@ struct vlan_dev_priv {
#ifdef CONFIG_NET_POLL_CONTROLLER
struct netpoll *netpoll;
#endif
- unsigned int nest_level;
};
static inline struct vlan_dev_priv *vlan_dev_priv(const struct net_device *dev)
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 911718f..daafd95 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1145,7 +1145,6 @@ struct net_device_ops {
netdev_tx_t (*ndo_dfwd_start_xmit) (struct sk_buff *skb,
struct net_device *dev,
void *priv);
- int (*ndo_get_lock_subclass)(struct net_device *dev);
};
/*
@@ -2862,12 +2861,7 @@ static inline void netif_addr_lock(struct net_device *dev)
static inline void netif_addr_lock_nested(struct net_device *dev)
{
- int subclass = SINGLE_DEPTH_NESTING;
-
- if (dev->netdev_ops->ndo_get_lock_subclass)
- subclass = dev->netdev_ops->ndo_get_lock_subclass(dev);
-
- spin_lock_nested(&dev->addr_list_lock, subclass);
+ spin_lock_nested(&dev->addr_list_lock, SINGLE_DEPTH_NESTING);
}
static inline void netif_addr_lock_bh(struct net_device *dev)
@@ -2994,14 +2988,6 @@ void *netdev_lower_get_next_private_rcu(struct net_device *dev,
priv; \
priv = netdev_lower_get_next_private_rcu(dev, &(iter)))
-void *netdev_lower_get_next(struct net_device *dev,
- struct list_head **iter);
-#define netdev_for_each_lower_dev(dev, ldev, iter) \
- for (iter = &(dev)->adj_list.lower, \
- ldev = netdev_lower_get_next(dev, &(iter)); \
- ldev; \
- ldev = netdev_lower_get_next(dev, &(iter)))
-
void *netdev_adjacent_get_private(struct list_head *adj_list);
void *netdev_lower_get_first_private_rcu(struct net_device *dev);
struct net_device *netdev_master_upper_dev_get(struct net_device *dev);
@@ -3017,8 +3003,6 @@ void netdev_upper_dev_unlink(struct net_device *dev,
void netdev_adjacent_rename_links(struct net_device *dev, char *oldname);
void *netdev_lower_dev_get_private(struct net_device *dev,
struct net_device *lower_dev);
-int dev_get_nest_level(struct net_device *dev,
- bool (*type_check)(struct net_device *dev));
int skb_checksum_help(struct sk_buff *skb);
struct sk_buff *__skb_gso_segment(struct sk_buff *skb,
netdev_features_t features, bool tx_path);
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index 44ebd5c..175273f 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -169,7 +169,6 @@ int register_vlan_dev(struct net_device *dev)
if (err < 0)
goto out_uninit_mvrp;
- vlan->nest_level = dev_get_nest_level(real_dev, is_vlan_dev) + 1;
err = register_netdevice(dev);
if (err < 0)
goto out_uninit_mvrp;
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index cc0d218..27bfe2f 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -524,11 +524,6 @@ static void vlan_dev_set_lockdep_class(struct net_device *dev, int subclass)
netdev_for_each_tx_queue(dev, vlan_dev_set_lockdep_one, &subclass);
}
-static int vlan_dev_get_lock_subclass(struct net_device *dev)
-{
- return vlan_dev_priv(dev)->nest_level;
-}
-
static const struct header_ops vlan_header_ops = {
.create = vlan_dev_hard_header,
.rebuild = vlan_dev_rebuild_header,
@@ -564,7 +559,7 @@ static const struct net_device_ops vlan_netdev_ops;
static int vlan_dev_init(struct net_device *dev)
{
struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
- int i;
+ int subclass = 0, i;
netif_carrier_off(dev);
@@ -613,7 +608,10 @@ static int vlan_dev_init(struct net_device *dev)
SET_NETDEV_DEVTYPE(dev, &vlan_type);
- vlan_dev_set_lockdep_class(dev, vlan_dev_get_lock_subclass(dev));
+ if (is_vlan_dev(real_dev))
+ subclass = 1;
+
+ vlan_dev_set_lockdep_class(dev, subclass);
vlan_dev_priv(dev)->vlan_pcpu_stats = alloc_percpu(struct vlan_pcpu_stats);
if (!vlan_dev_priv(dev)->vlan_pcpu_stats)
@@ -793,7 +791,6 @@ static const struct net_device_ops vlan_netdev_ops = {
.ndo_netpoll_cleanup = vlan_dev_netpoll_cleanup,
#endif
.ndo_fix_features = vlan_dev_fix_features,
- .ndo_get_lock_subclass = vlan_dev_get_lock_subclass,
};
void vlan_setup(struct net_device *dev)
diff --git a/net/core/dev.c b/net/core/dev.c
index 7c22974..6088927 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4605,32 +4605,6 @@ void *netdev_lower_get_next_private_rcu(struct net_device *dev,
EXPORT_SYMBOL(netdev_lower_get_next_private_rcu);
/**
- * netdev_lower_get_next - Get the next device from the lower neighbour
- * list
- * @dev: device
- * @iter: list_head ** of the current position
- *
- * Gets the next netdev_adjacent from the dev's lower neighbour
- * list, starting from iter position. The caller must hold RTNL lock or
- * its own locking that guarantees that the neighbour lower
- * list will remain unchainged.
- */
-void *netdev_lower_get_next(struct net_device *dev, struct list_head **iter)
-{
- struct netdev_adjacent *lower;
-
- lower = list_entry((*iter)->next, struct netdev_adjacent, list);
-
- if (&lower->list == &dev->adj_list.lower)
- return NULL;
-
- *iter = &lower->list;
-
- return lower->dev;
-}
-EXPORT_SYMBOL(netdev_lower_get_next);
-
-/**
* netdev_lower_get_first_private_rcu - Get the first ->private from the
* lower neighbour list, RCU
* variant
@@ -5080,30 +5054,6 @@ void *netdev_lower_dev_get_private(struct net_device *dev,
}
EXPORT_SYMBOL(netdev_lower_dev_get_private);
-
-int dev_get_nest_level(struct net_device *dev,
- bool (*type_check)(struct net_device *dev))
-{
- struct net_device *lower = NULL;
- struct list_head *iter;
- int max_nest = -1;
- int nest;
-
- ASSERT_RTNL();
-
- netdev_for_each_lower_dev(dev, lower, iter) {
- nest = dev_get_nest_level(lower, type_check);
- if (max_nest < nest)
- max_nest = nest;
- }
-
- if (type_check(dev))
- max_nest++;
-
- return max_nest;
-}
-EXPORT_SYMBOL(dev_get_nest_level);
-
static void dev_change_rx_flags(struct net_device *dev, int flags)
{
const struct net_device_ops *ops = dev->netdev_ops;

View File

@ -1,47 +0,0 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 01 Jun 2014 23:29:17 +0100
Subject: netfilter: Avoid ABI change in 3.14.5
Forwarded: not-needed
The types of fields in struct nf_ct_ext were changed by commit
223b02d923ec ("netfilter: nf_conntrack: reserve two bytes for
nf_ct_ext->len") as u8 is not large enough to store the offsets
that may be needed now.
This ABI change should only affect the conntrack extension modules,
which must be in-tree as they have centrally assigned numbers.
However the structure definition is visible to all modules using
conntrack at all. Hide the ABI change from genksyms and use a macro
to rename the extension registration function so that it is still not
possible to mismatch conntrack core and extension modules.
--- a/include/net/netfilter/nf_conntrack_extend.h
+++ b/include/net/netfilter/nf_conntrack_extend.h
@@ -47,8 +47,19 @@ enum nf_ct_ext_id {
/* Extensions: optional stuff which isn't permanently in struct. */
struct nf_ct_ext {
struct rcu_head rcu;
+#ifdef __GENKSYMS__
+ /* Layout expected by modules calling nf_ct_extend_register()
+ * (which has been removed)
+ */
+ u8 offset[NF_CT_EXT_NUM];
+ u8 len;
+#else
+ /* Layout expected by modules calling nf_ct_extend_register_16()
+ * (all newly built modules, thanks to macro definition below)
+ */
u16 offset[NF_CT_EXT_NUM];
u16 len;
+#endif
char data[0];
};
@@ -118,6 +129,7 @@ struct nf_ct_ext_type {
u8 alloc_size;
};
+#define nf_ct_extend_register nf_ct_extend_register_16
int nf_ct_extend_register(struct nf_ct_ext_type *type);
void nf_ct_extend_unregister(struct nf_ct_ext_type *type);
#endif /* _NF_CONNTRACK_EXTEND_H */

View File

@ -1,20 +0,0 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Mon, 07 Jul 2014 09:52:12 +0100
Subject: ptrace: Avoid ABI change in 3.14.10
Forwarded: not-needed
Hide a new #include from genksyms, which changed the symbol hashes for
most of networking.
--- a/include/linux/ptrace.h
+++ b/include/linux/ptrace.h
@@ -5,7 +5,9 @@
#include <linux/sched.h> /* For struct task_struct. */
#include <linux/err.h> /* for IS_ERR_VALUE */
#include <linux/bug.h> /* For BUG_ON. */
+#ifndef __GENKSYMS__
#include <linux/pid_namespace.h> /* For task_active_pid_ns. */
+#endif
#include <uapi/linux/ptrace.h>
/*

View File

@ -1,44 +0,0 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 01 Jun 2014 20:47:46 +0100
Subject: target: Avoid ABI change in 3.14.5
Forwarded: not-needed
Commit e63ed0d7a980 ("scsi: fix our current target reap infrastructure")
removed one field (ew) and changed the type of another (reap_ref).
Put back 'ew' and hide the type change to 'reap_ref', which remains
the same size and is only used within the SCSI core.
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -433,6 +433,8 @@ static struct scsi_target *scsi_alloc_ta
}
dev = &starget->dev;
device_initialize(dev);
+ /* bwh: assert binary compatibility */
+ BUILD_BUG_ON(sizeof(starget->reap_ref) != sizeof(unsigned int));
kref_init(&starget->reap_ref);
dev->parent = get_device(parent);
dev_set_name(dev, "target%d:%d:%d", shost->host_no, channel, id);
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -257,7 +257,11 @@ struct scsi_target {
struct list_head siblings;
struct list_head devices;
struct device dev;
+#ifdef __GENKSYMS__
+ unsigned int reap_ref;
+#else
struct kref reap_ref; /* last put renders target invisible */
+#endif
unsigned int channel;
unsigned int id; /* target id ... replace
* scsi_device.id eventually */
@@ -284,6 +288,7 @@ struct scsi_target {
#define SCSI_DEFAULT_TARGET_BLOCKED 3
char scsi_level;
+ struct execute_work ew; /* bwh: unused, for binary compatibility */
enum scsi_target_state state;
void *hostdata; /* available to low-level driver */
unsigned long starget_data[0]; /* for the transport */

View File

@ -1,18 +0,0 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Fri, 11 Jul 2014 09:07:00 +0100
Subject: trace/syscall: Avoid ABI change in 3.14.11
Hide the added #include from genksyms.
--- a/include/trace/syscall.h
+++ b/include/trace/syscall.h
@@ -4,7 +4,9 @@
#include <linux/tracepoint.h>
#include <linux/unistd.h>
#include <linux/ftrace_event.h>
+#ifndef __GENKSYMS__
#include <linux/thread_info.h>
+#endif
#include <asm/ptrace.h>

View File

@ -1,22 +0,0 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 15 Jun 2014 23:59:03 +0100
Subject: vfs: Avoid ABI change for CVE-2014-4014
Forwarded: not-needed
inode_capable() was renamed for good reasons, but we should keep
providing a function with that name. The only modular in-tree caller,
xfs, wants the new behaviour of capable_wrt_inode_uidgid(), so make
inode_capable() call that.
--- a/kernel/capability.c
+++ b/kernel/capability.c
@@ -449,3 +449,9 @@ bool capable_wrt_inode_uidgid(const stru
kgid_has_mapping(ns, inode->i_gid);
}
EXPORT_SYMBOL(capable_wrt_inode_uidgid);
+
+bool inode_capable(const struct inode *inode, int cap)
+{
+ return capable_wrt_inode_uidgid(inode, cap);
+}
+EXPORT_SYMBOL(inode_capable);

View File

@ -1,29 +0,0 @@
From: Ben Hutchings <ben@decadent.org.uk>
Date: Wed, 16 Jul 2014 20:50:04 +0100
Subject: writeback: Fix ABI change in 3.14.10
Bug-Debian: https://bugs.debian.org/754902
Forwarded: not-needed
Commit 1c8349a17137 ("ext4: fix data integrity sync in ordered mode")
renamed test_set_page_writeback() to __test_set_page_writeback() and
added a function-macro under the old name as a wrapper.
test_set_page_writeback() was an exported function that is used by
some OOT modules including openafs. To keep old modules working, we
need to provide a real function as well.
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -2439,6 +2439,13 @@ int __test_set_page_writeback(struct pag
}
EXPORT_SYMBOL(__test_set_page_writeback);
+#undef test_set_page_writeback
+int test_set_page_writeback(struct page *page)
+{
+ return __test_set_page_writeback(page, false);
+}
+EXPORT_SYMBOL(test_set_page_writeback);
+
/*
* Return true if any of the pages in the mapping are marked with the
* passed tag.

View File

@ -11,7 +11,6 @@ entropy.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: stable-rt@vger.kernel.org
[bwh:
- Adjust context to apply on top of Debian ABI-maintaining patches
- Restore interrupt randomness dropped in 3.14.10-rt6]
---
drivers/char/random.c | 11 +++++++----
@ -61,10 +60,10 @@ Cc: stable-rt@vger.kernel.org
* back-to-back timer interrupts, then skip giving credit for
--- a/include/linux/irqdesc.h
+++ b/include/linux/irqdesc.h
@@ -54,6 +54,7 @@ struct irq_desc {
unsigned int irq_count; /* For detecting broken IRQs */
unsigned long last_unhandled; /* Aging timer for unhandled count */
@@ -56,6 +56,7 @@ struct irq_desc {
unsigned int irqs_unhandled;
atomic_t threads_handled;
int threads_handled_last;
+ u64 random_ip;
raw_spinlock_t lock;
struct cpumask *percpu_enabled;

14
debian/patches/series vendored
View File

@ -82,20 +82,6 @@ features/arm/ARM-dt-sun4i-Add-A10-SPI-controller-nodes.patch
features/arm/PHY-sunxi-Add-driver-for-sunxi-usb-phy.patch
features/arm/ARM-sun4i-dt-Add-bindings-for-USB-clocks.patch
features/arm/ARM-sun4i-dt-Add-USB-host-bindings.patch
debian/libata-avoid-abi-change-in-3.14.4.patch
debian/dm-avoid-abi-change-in-3.14.4.patch
debian/net-revert-lockdep-changes-in-3.14.5.patch
debian/target-avoid-abi-change-in-3.14.5.patch
debian/netfilter-avoid-abi-change-in-3.14.5.patch
bugfix/mips/MIPS-Fix-branch-emulation-of-branch-likely-instructi.patch
debian/drivers-base-platform-avoid-abi-change-in-3.14.6.patch
debian/dma-avoid-abi-change-in-3.14.6.patch
debian/vfs-avoid-abi-change-for-cve-2014-4014.patch
debian/alsa-avoid-abi-change-for-cve-2014-4652-fix.patch
bugfix/all/shmem-fix-faulting-into-a-hole-while-it-s-punched.patch
debian/irq-avoid-abi-change-in-3.14.10.patch
debian/ptrace-avoid-abi-change-in-3.14.10.patch
debian/trace-syscall-avoid-abi-change-in-3.14.11.patch
debian/blkcg-avoid-abi-change-in-3.14.12.patch
debian/writeback-fix-abi-change-in-3.14.10.patch
bugfix/all/net-l2tp-don-t-fall-back-on-UDP-get-set-sockopt.patch