Merge tag 'v3.10.92' into update
This is the 3.10.92 stable release
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 10
|
||||
SUBLEVEL = 91
|
||||
SUBLEVEL = 92
|
||||
EXTRAVERSION =
|
||||
NAME = TOSSUG Baby Fish
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ asm volatile ("\n" \
|
||||
__put_user_asm(__pu_err, __pu_val, ptr, b, d, -EFAULT); \
|
||||
break; \
|
||||
case 2: \
|
||||
__put_user_asm(__pu_err, __pu_val, ptr, w, d, -EFAULT); \
|
||||
__put_user_asm(__pu_err, __pu_val, ptr, w, r, -EFAULT); \
|
||||
break; \
|
||||
case 4: \
|
||||
__put_user_asm(__pu_err, __pu_val, ptr, l, r, -EFAULT); \
|
||||
@@ -158,7 +158,7 @@ asm volatile ("\n" \
|
||||
__get_user_asm(__gu_err, x, ptr, u8, b, d, -EFAULT); \
|
||||
break; \
|
||||
case 2: \
|
||||
__get_user_asm(__gu_err, x, ptr, u16, w, d, -EFAULT); \
|
||||
__get_user_asm(__gu_err, x, ptr, u16, w, r, -EFAULT); \
|
||||
break; \
|
||||
case 4: \
|
||||
__get_user_asm(__gu_err, x, ptr, u32, l, r, -EFAULT); \
|
||||
@@ -245,7 +245,7 @@ __constant_copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||
__get_user_asm(res, *(u8 *)to, (u8 __user *)from, u8, b, d, 1);
|
||||
break;
|
||||
case 2:
|
||||
__get_user_asm(res, *(u16 *)to, (u16 __user *)from, u16, w, d, 2);
|
||||
__get_user_asm(res, *(u16 *)to, (u16 __user *)from, u16, w, r, 2);
|
||||
break;
|
||||
case 3:
|
||||
__constant_copy_from_user_asm(res, to, from, tmp, 3, w, b,);
|
||||
@@ -326,7 +326,7 @@ __constant_copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||
__put_user_asm(res, *(u8 *)from, (u8 __user *)to, b, d, 1);
|
||||
break;
|
||||
case 2:
|
||||
__put_user_asm(res, *(u16 *)from, (u16 __user *)to, w, d, 2);
|
||||
__put_user_asm(res, *(u16 *)from, (u16 __user *)to, w, r, 2);
|
||||
break;
|
||||
case 3:
|
||||
__constant_copy_to_user_asm(res, to, from, tmp, 3, w, b,);
|
||||
|
||||
@@ -52,7 +52,7 @@ unsigned long __generic_copy_from_user(void *to, const void __user *from,
|
||||
" .long 3b,30b\n"
|
||||
" .long 5b,50b\n"
|
||||
" .previous"
|
||||
: "=d" (res), "+a" (from), "+a" (to), "=&r" (tmp)
|
||||
: "=d" (res), "+a" (from), "+a" (to), "=&d" (tmp)
|
||||
: "0" (n / 4), "d" (n & 3));
|
||||
|
||||
return res;
|
||||
@@ -96,7 +96,7 @@ unsigned long __generic_copy_to_user(void __user *to, const void *from,
|
||||
" .long 7b,50b\n"
|
||||
" .long 8b,50b\n"
|
||||
" .previous"
|
||||
: "=d" (res), "+a" (from), "+a" (to), "=&r" (tmp)
|
||||
: "=d" (res), "+a" (from), "+a" (to), "=&d" (tmp)
|
||||
: "0" (n / 4), "d" (n & 3));
|
||||
|
||||
return res;
|
||||
@@ -141,7 +141,7 @@ unsigned long __clear_user(void __user *to, unsigned long n)
|
||||
" .long 7b,40b\n"
|
||||
" .previous"
|
||||
: "=d" (res), "+a" (to)
|
||||
: "r" (0), "0" (n / 4), "d" (n & 3));
|
||||
: "d" (0), "0" (n / 4), "d" (n & 3));
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -433,6 +433,7 @@ static struct crypto_alg algs[] = { {
|
||||
.blkcipher = {
|
||||
.min_keysize = AES_MIN_KEY_SIZE,
|
||||
.max_keysize = AES_MAX_KEY_SIZE,
|
||||
.ivsize = AES_BLOCK_SIZE,
|
||||
.setkey = aes_set_key,
|
||||
.encrypt = cbc_encrypt,
|
||||
.decrypt = cbc_decrypt,
|
||||
@@ -452,6 +453,7 @@ static struct crypto_alg algs[] = { {
|
||||
.blkcipher = {
|
||||
.min_keysize = AES_MIN_KEY_SIZE,
|
||||
.max_keysize = AES_MAX_KEY_SIZE,
|
||||
.ivsize = AES_BLOCK_SIZE,
|
||||
.setkey = aes_set_key,
|
||||
.encrypt = ctr_crypt,
|
||||
.decrypt = ctr_crypt,
|
||||
|
||||
@@ -274,6 +274,7 @@ static struct crypto_alg algs[] = { {
|
||||
.blkcipher = {
|
||||
.min_keysize = CAMELLIA_MIN_KEY_SIZE,
|
||||
.max_keysize = CAMELLIA_MAX_KEY_SIZE,
|
||||
.ivsize = CAMELLIA_BLOCK_SIZE,
|
||||
.setkey = camellia_set_key,
|
||||
.encrypt = cbc_encrypt,
|
||||
.decrypt = cbc_decrypt,
|
||||
|
||||
@@ -429,6 +429,7 @@ static struct crypto_alg algs[] = { {
|
||||
.blkcipher = {
|
||||
.min_keysize = DES_KEY_SIZE,
|
||||
.max_keysize = DES_KEY_SIZE,
|
||||
.ivsize = DES_BLOCK_SIZE,
|
||||
.setkey = des_set_key,
|
||||
.encrypt = cbc_encrypt,
|
||||
.decrypt = cbc_decrypt,
|
||||
@@ -485,6 +486,7 @@ static struct crypto_alg algs[] = { {
|
||||
.blkcipher = {
|
||||
.min_keysize = DES3_EDE_KEY_SIZE,
|
||||
.max_keysize = DES3_EDE_KEY_SIZE,
|
||||
.ivsize = DES3_EDE_BLOCK_SIZE,
|
||||
.setkey = des3_ede_set_key,
|
||||
.encrypt = cbc3_encrypt,
|
||||
.decrypt = cbc3_decrypt,
|
||||
|
||||
+2
-1
@@ -462,7 +462,8 @@ static int ahash_prepare_alg(struct ahash_alg *alg)
|
||||
struct crypto_alg *base = &alg->halg.base;
|
||||
|
||||
if (alg->halg.digestsize > PAGE_SIZE / 8 ||
|
||||
alg->halg.statesize > PAGE_SIZE / 8)
|
||||
alg->halg.statesize > PAGE_SIZE / 8 ||
|
||||
alg->halg.statesize == 0)
|
||||
return -EINVAL;
|
||||
|
||||
base->cra_type = &crypto_ahash_type;
|
||||
|
||||
@@ -4860,7 +4860,6 @@ static int rbd_dev_probe_parent(struct rbd_device *rbd_dev)
|
||||
out_err:
|
||||
if (parent) {
|
||||
rbd_dev_unparent(rbd_dev);
|
||||
kfree(rbd_dev->header_name);
|
||||
rbd_dev_destroy(parent);
|
||||
} else {
|
||||
rbd_put_client(rbdc);
|
||||
|
||||
@@ -673,15 +673,16 @@ static int rcar_i2c_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
pm_runtime_enable(dev);
|
||||
platform_set_drvdata(pdev, priv);
|
||||
|
||||
ret = i2c_add_numbered_adapter(adap);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "reg adap failed: %d\n", ret);
|
||||
pm_runtime_disable(dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
pm_runtime_enable(dev);
|
||||
platform_set_drvdata(pdev, priv);
|
||||
|
||||
dev_info(dev, "probed\n");
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -2109,7 +2109,7 @@ static int pool_ctr(struct dm_target *ti, unsigned argc, char **argv)
|
||||
metadata_low_callback,
|
||||
pool);
|
||||
if (r)
|
||||
goto out_free_pt;
|
||||
goto out_flags_changed;
|
||||
|
||||
pt->callbacks.congested_fn = pool_is_congested;
|
||||
dm_table_add_target_callbacks(ti->table, &pt->callbacks);
|
||||
|
||||
@@ -313,7 +313,6 @@ static void pppoe_flush_dev(struct net_device *dev)
|
||||
if (po->pppoe_dev == dev &&
|
||||
sk->sk_state & (PPPOX_CONNECTED | PPPOX_BOUND | PPPOX_ZOMBIE)) {
|
||||
pppox_unbind_sock(sk);
|
||||
sk->sk_state = PPPOX_ZOMBIE;
|
||||
sk->sk_state_change(sk);
|
||||
po->pppoe_dev = NULL;
|
||||
dev_put(dev);
|
||||
|
||||
@@ -466,19 +466,7 @@ static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = asix_sw_reset(dev, AX_SWRESET_IPPD | AX_SWRESET_PRL);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
msleep(150);
|
||||
|
||||
ret = asix_sw_reset(dev, AX_SWRESET_CLEAR);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
msleep(150);
|
||||
|
||||
ret = asix_sw_reset(dev, embd_phy ? AX_SWRESET_IPRL : AX_SWRESET_PRTE);
|
||||
ax88772_reset(dev);
|
||||
|
||||
/* Read PHYID register *AFTER* the PHY was reset properly */
|
||||
phyid = asix_get_phyid(dev);
|
||||
@@ -888,7 +876,7 @@ static const struct driver_info ax88772_info = {
|
||||
.unbind = ax88772_unbind,
|
||||
.status = asix_status,
|
||||
.link_reset = ax88772_link_reset,
|
||||
.reset = ax88772_reset,
|
||||
.reset = ax88772_link_reset,
|
||||
.flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_LINK_INTR | FLAG_MULTI_PACKET,
|
||||
.rx_fixup = asix_rx_fixup_common,
|
||||
.tx_fixup = asix_tx_fixup,
|
||||
|
||||
@@ -2363,6 +2363,9 @@ static inline void skb_postpull_rcsum(struct sk_buff *skb,
|
||||
{
|
||||
if (skb->ip_summed == CHECKSUM_COMPLETE)
|
||||
skb->csum = csum_sub(skb->csum, csum_partial(start, len, 0));
|
||||
else if (skb->ip_summed == CHECKSUM_PARTIAL &&
|
||||
skb_checksum_start_offset(skb) < 0)
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
}
|
||||
|
||||
unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len);
|
||||
|
||||
@@ -64,7 +64,11 @@ struct unix_sock {
|
||||
struct socket_wq peer_wq;
|
||||
wait_queue_t peer_wake;
|
||||
};
|
||||
#define unix_sk(__sk) ((struct unix_sock *)__sk)
|
||||
|
||||
static inline struct unix_sock *unix_sk(struct sock *sk)
|
||||
{
|
||||
return (struct unix_sock *)sk;
|
||||
}
|
||||
|
||||
#define peer_wait peer_wq.wait
|
||||
|
||||
|
||||
@@ -786,6 +786,15 @@ static inline __must_check int sk_add_backlog(struct sock *sk, struct sk_buff *s
|
||||
#endif
|
||||
return -ENOBUFS;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the skb was allocated from pfmemalloc reserves, only
|
||||
* allow SOCK_MEMALLOC sockets to use it as this socket is
|
||||
* helping free memory
|
||||
*/
|
||||
if (skb_pfmemalloc(skb) && !sock_flag(sk, SOCK_MEMALLOC))
|
||||
return -ENOMEM;
|
||||
|
||||
__sk_add_backlog(sk, skb);
|
||||
sk->sk_backlog.len += skb->truesize;
|
||||
return 0;
|
||||
|
||||
+4
-4
@@ -1466,13 +1466,13 @@ static void __queue_delayed_work(int cpu, struct workqueue_struct *wq,
|
||||
timer_stats_timer_set_start_info(&dwork->timer);
|
||||
|
||||
dwork->wq = wq;
|
||||
/* timer isn't guaranteed to run in this cpu, record earlier */
|
||||
if (cpu == WORK_CPU_UNBOUND)
|
||||
cpu = raw_smp_processor_id();
|
||||
dwork->cpu = cpu;
|
||||
timer->expires = jiffies + delay;
|
||||
|
||||
if (unlikely(cpu != WORK_CPU_UNBOUND))
|
||||
add_timer_on(timer, cpu);
|
||||
else
|
||||
add_timer(timer);
|
||||
add_timer_on(timer, cpu);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+1
-1
@@ -1068,7 +1068,7 @@ static int ethtool_get_strings(struct net_device *dev, void __user *useraddr)
|
||||
|
||||
gstrings.len = ret;
|
||||
|
||||
data = kmalloc(gstrings.len * ETH_GSTRING_LEN, GFP_USER);
|
||||
data = kcalloc(gstrings.len, ETH_GSTRING_LEN, GFP_USER);
|
||||
if (!data)
|
||||
return -ENOMEM;
|
||||
|
||||
|
||||
+5
-4
@@ -2711,11 +2711,12 @@ EXPORT_SYMBOL(skb_append_datato_frags);
|
||||
*/
|
||||
unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len)
|
||||
{
|
||||
unsigned char *data = skb->data;
|
||||
|
||||
BUG_ON(len > skb->len);
|
||||
skb->len -= len;
|
||||
BUG_ON(skb->len < skb->data_len);
|
||||
skb_postpull_rcsum(skb, skb->data, len);
|
||||
return skb->data += len;
|
||||
__skb_pull(skb, len);
|
||||
skb_postpull_rcsum(skb, data, len);
|
||||
return skb->data;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(skb_pull_rcsum);
|
||||
|
||||
|
||||
@@ -1381,7 +1381,7 @@ static void l2tp_tunnel_del_work(struct work_struct *work)
|
||||
tunnel = container_of(work, struct l2tp_tunnel, del_work);
|
||||
sk = l2tp_tunnel_sock_lookup(tunnel);
|
||||
if (!sk)
|
||||
return;
|
||||
goto out;
|
||||
|
||||
sock = sk->sk_socket;
|
||||
|
||||
@@ -1402,6 +1402,8 @@ static void l2tp_tunnel_del_work(struct work_struct *work)
|
||||
}
|
||||
|
||||
l2tp_tunnel_sock_put(sk);
|
||||
out:
|
||||
l2tp_tunnel_dec_refcount(tunnel);
|
||||
}
|
||||
|
||||
/* Create a socket for the tunnel, if one isn't set up by
|
||||
@@ -1731,8 +1733,13 @@ EXPORT_SYMBOL_GPL(l2tp_tunnel_create);
|
||||
*/
|
||||
int l2tp_tunnel_delete(struct l2tp_tunnel *tunnel)
|
||||
{
|
||||
l2tp_tunnel_inc_refcount(tunnel);
|
||||
l2tp_tunnel_closeall(tunnel);
|
||||
return (false == queue_work(l2tp_wq, &tunnel->del_work));
|
||||
if (false == queue_work(l2tp_wq, &tunnel->del_work)) {
|
||||
l2tp_tunnel_dec_refcount(tunnel);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(l2tp_tunnel_delete);
|
||||
|
||||
|
||||
+13
-1
@@ -2331,8 +2331,20 @@ again:
|
||||
if (UNIXCB(skb).fp)
|
||||
siocb->scm->fp = scm_fp_dup(UNIXCB(skb).fp);
|
||||
|
||||
sk_peek_offset_fwd(sk, chunk);
|
||||
if (skip) {
|
||||
sk_peek_offset_fwd(sk, chunk);
|
||||
skip -= chunk;
|
||||
}
|
||||
|
||||
if (UNIXCB(skb).fp)
|
||||
break;
|
||||
|
||||
last = skb;
|
||||
unix_state_lock(sk);
|
||||
skb = skb_peek_next(skb, &sk->sk_receive_queue);
|
||||
if (skb)
|
||||
goto again;
|
||||
unix_state_unlock(sk);
|
||||
break;
|
||||
}
|
||||
} while (size);
|
||||
|
||||
Reference in New Issue
Block a user