parent
cf12b5d989
commit
d117cd8e48
|
@ -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
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
|
@ -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;
|
|
@ -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.
|
|
@ -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;
|
|
@ -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>
|
|
@ -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
|
|
@ -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
|
|
@ -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;
|
|
@ -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 */
|
|
@ -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>
|
||||
|
||||
/*
|
|
@ -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 */
|
|
@ -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>
|
||||
|
|
@ -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);
|
|
@ -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.
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue