mirror of
https://github.com/Fishwaldo/build.git
synced 2025-03-30 18:51:30 +00:00
413 lines
13 KiB
Diff
413 lines
13 KiB
Diff
diff --git a/Makefile b/Makefile
|
|
index ba6a94cf354b..25701b67bb6d 100644
|
|
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -1,6 +1,6 @@
|
|
VERSION = 3
|
|
PATCHLEVEL = 10
|
|
-SUBLEVEL = 91
|
|
+SUBLEVEL = 92
|
|
EXTRAVERSION =
|
|
NAME = TOSSUG Baby Fish
|
|
|
|
diff --git a/arch/m68k/include/asm/uaccess_mm.h b/arch/m68k/include/asm/uaccess_mm.h
|
|
index 472c891a4aee..15901db435b9 100644
|
|
--- a/arch/m68k/include/asm/uaccess_mm.h
|
|
+++ b/arch/m68k/include/asm/uaccess_mm.h
|
|
@@ -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,);
|
|
diff --git a/arch/m68k/lib/uaccess.c b/arch/m68k/lib/uaccess.c
|
|
index 5e97f2ee7c11..35d1442dee89 100644
|
|
--- a/arch/m68k/lib/uaccess.c
|
|
+++ b/arch/m68k/lib/uaccess.c
|
|
@@ -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;
|
|
}
|
|
diff --git a/arch/sparc/crypto/aes_glue.c b/arch/sparc/crypto/aes_glue.c
|
|
index ded4cee35318..dc78cdd43e0a 100644
|
|
--- a/arch/sparc/crypto/aes_glue.c
|
|
+++ b/arch/sparc/crypto/aes_glue.c
|
|
@@ -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,
|
|
diff --git a/arch/sparc/crypto/camellia_glue.c b/arch/sparc/crypto/camellia_glue.c
|
|
index 641f55cb61c3..eb87d6dd86b1 100644
|
|
--- a/arch/sparc/crypto/camellia_glue.c
|
|
+++ b/arch/sparc/crypto/camellia_glue.c
|
|
@@ -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,
|
|
diff --git a/arch/sparc/crypto/des_glue.c b/arch/sparc/crypto/des_glue.c
|
|
index d11500972994..1359bfc544e4 100644
|
|
--- a/arch/sparc/crypto/des_glue.c
|
|
+++ b/arch/sparc/crypto/des_glue.c
|
|
@@ -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,
|
|
diff --git a/crypto/ahash.c b/crypto/ahash.c
|
|
index 793a27f2493e..857ae2b2a2a2 100644
|
|
--- a/crypto/ahash.c
|
|
+++ b/crypto/ahash.c
|
|
@@ -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;
|
|
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
|
|
index 01677543248d..2fa22c24fa5d 100644
|
|
--- a/drivers/block/rbd.c
|
|
+++ b/drivers/block/rbd.c
|
|
@@ -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);
|
|
diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
|
|
index 8a806f5c40cf..3f2dbd1ce6a3 100644
|
|
--- a/drivers/i2c/busses/i2c-rcar.c
|
|
+++ b/drivers/i2c/busses/i2c-rcar.c
|
|
@@ -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;
|
|
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
|
|
index 39996ca58ce6..ec56072c6326 100644
|
|
--- a/drivers/md/dm-thin.c
|
|
+++ b/drivers/md/dm-thin.c
|
|
@@ -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);
|
|
diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c
|
|
index becfa3ef7fdc..eda9f3d87746 100644
|
|
--- a/drivers/net/ppp/pppoe.c
|
|
+++ b/drivers/net/ppp/pppoe.c
|
|
@@ -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);
|
|
diff --git a/drivers/net/usb/asix_devices.c b/drivers/net/usb/asix_devices.c
|
|
index 97b5de7aebdb..05e8bd7b3e0f 100644
|
|
--- a/drivers/net/usb/asix_devices.c
|
|
+++ b/drivers/net/usb/asix_devices.c
|
|
@@ -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,
|
|
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
|
|
index 478120ae34e5..993e34774bb1 100644
|
|
--- a/include/linux/skbuff.h
|
|
+++ b/include/linux/skbuff.h
|
|
@@ -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);
|
|
diff --git a/include/net/af_unix.h b/include/net/af_unix.h
|
|
index dbdfd2b0f3b3..e927d3e80b61 100644
|
|
--- a/include/net/af_unix.h
|
|
+++ b/include/net/af_unix.h
|
|
@@ -63,7 +63,11 @@ struct unix_sock {
|
|
#define UNIX_GC_MAYBE_CYCLE 1
|
|
struct socket_wq peer_wq;
|
|
};
|
|
-#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
|
|
|
|
diff --git a/include/net/sock.h b/include/net/sock.h
|
|
index c0aad07160ef..95dc0c8a9dac 100644
|
|
--- a/include/net/sock.h
|
|
+++ b/include/net/sock.h
|
|
@@ -782,6 +782,14 @@ static inline __must_check int sk_add_backlog(struct sock *sk, struct sk_buff *s
|
|
if (sk_rcvqueues_full(sk, skb, limit))
|
|
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;
|
|
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
|
|
index fe7c4b91d2e7..fa927fd5778d 100644
|
|
--- a/kernel/workqueue.c
|
|
+++ b/kernel/workqueue.c
|
|
@@ -1450,13 +1450,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);
|
|
}
|
|
|
|
/**
|
|
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
|
|
index ce91766eeca9..213b61255140 100644
|
|
--- a/net/core/ethtool.c
|
|
+++ b/net/core/ethtool.c
|
|
@@ -1066,7 +1066,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;
|
|
|
|
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
|
|
index 6148716884ae..05195b8c8718 100644
|
|
--- a/net/core/skbuff.c
|
|
+++ b/net/core/skbuff.c
|
|
@@ -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);
|
|
|
|
diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c
|
|
index 8c27de2b4d5a..797ff373e486 100644
|
|
--- a/net/l2tp/l2tp_core.c
|
|
+++ b/net/l2tp/l2tp_core.c
|
|
@@ -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);
|
|
|
|
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
|
|
index 123c16419cbe..825c029bf092 100644
|
|
--- a/net/unix/af_unix.c
|
|
+++ b/net/unix/af_unix.c
|
|
@@ -2063,8 +2063,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);
|