This is the 4.14.19 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAlqCrbkACgkQONu9yGCS aT5xyRAAgfkFRW7sAiH5wiXmwSPE7sz/HHvhYRevUHTgODMDi19YDcy6Zjq2NMaU zsg6Bi+b11QZ77g0ctnxHDfo6snqwBkrapbO9ddnsZtWB6eTcD9o2Mhd82I5Trj6 4EQcq+fQGoPPPVvRCnuVk+HInfovgBV5DhTGxC2qX6KOrbDh0QF/43mlWf7H8eXb HJ7ot9Xpsg7AjzpCJfqQGoDFB2a/ThXMftXwcxHNWdiVqjzWXuZfwUh1gqV4afl1 x418+HUGUHvHGB6nLUCKrsewVpczLB3IQYe6+AQ1n9W/mK6IEZyDvRD7tuJ0BkMC YR5hjesKT7U6fUL1lbfPBXcHpbQLUEYeqz6S0St5MvkzmJq9TimVcNwgXwB75sQs PECdOzrojNtJuZx+n3ReocrpWQzvBQ3Xt5odE5qqvIepXj7CnRiJfg2vsTNW0A6K KNT+mdzno36Te6nDMXKiMUnH8IRjwwXk7zveI6daYN0FZE++gvoyEhOeF3bUAcpR UQYj8pgLuwFUNm22JcGHQhTudMv2z9Ulv5zsylwkU3CuS8wMTS6O4JrwX0IfOIkj c4Ta/6w+bNC63WKboAyGlwwbZy+Xll8+3NMoFx6TsEytcnowyqli1bP0kDONMXQR O5kMzZJ6elSOwZjk7Q0IZ7sdV3lKTIj4Fxh0UN4yu1JxHyDvops= =gY6O -----END PGP SIGNATURE----- Merge 4.14.19 into android-4.14 Changes in 4.14.19 .gitignore: sort normal pattern rules alphabetically .gitignore: move *.dtb and *.dtb.S patterns to the top-level .gitignore kbuild: rpm-pkg: keep spec file until make mrproper ip6mr: fix stale iterator net: igmp: add a missing rcu locking section qlcnic: fix deadlock bug qmi_wwan: Add support for Quectel EP06 r8169: fix RTL8168EP take too long to complete driver initialization. tcp: release sk_frag.page in tcp_disconnect vhost_net: stop device during reset owner Revert "defer call to mem_cgroup_sk_alloc()" net: ipv6: send unsolicited NA after DAD rocker: fix possible null pointer dereference in rocker_router_fib_event_work tcp_bbr: fix pacing_gain to always be unity when using lt_bw ipv6: Fix SO_REUSEPORT UDP socket with implicit sk_ipv6only soreuseport: fix mem leak in reuseport_add_sock() media: mtk-vcodec: add missing MODULE_LICENSE/DESCRIPTION media: soc_camera: soc_scale_crop: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE crypto: tcrypt - fix S/G table for test_aead_speed() arch: define weak abort() kernel/exit.c: export abort() to modules scsi: storvsc: missing error code in storvsc_probe() Revert "x86/alternative: Print unadorned pointers" Linux 4.14.19 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
fb6faf0423
38 changed files with 173 additions and 103 deletions
55
.gitignore
vendored
55
.gitignore
vendored
|
@ -7,38 +7,40 @@
|
|||
# command after changing this file, to see if there are
|
||||
# any tracked files which get ignored after the change.
|
||||
#
|
||||
# Normal rules
|
||||
# Normal rules (sorted alphabetically)
|
||||
#
|
||||
.*
|
||||
*.a
|
||||
*.bin
|
||||
*.bz2
|
||||
*.c.[012]*.*
|
||||
*.dtb
|
||||
*.dtb.S
|
||||
*.dwo
|
||||
*.elf
|
||||
*.gcno
|
||||
*.gz
|
||||
*.i
|
||||
*.ko
|
||||
*.ll
|
||||
*.lst
|
||||
*.lz4
|
||||
*.lzma
|
||||
*.lzo
|
||||
*.mod.c
|
||||
*.o
|
||||
*.o.*
|
||||
*.a
|
||||
*.order
|
||||
*.patch
|
||||
*.s
|
||||
*.ko
|
||||
*.so
|
||||
*.so.dbg
|
||||
*.mod.c
|
||||
*.i
|
||||
*.lst
|
||||
*.symtypes
|
||||
*.order
|
||||
*.elf
|
||||
*.bin
|
||||
*.tar
|
||||
*.gz
|
||||
*.bz2
|
||||
*.lzma
|
||||
*.xz
|
||||
*.lz4
|
||||
*.lzo
|
||||
*.patch
|
||||
*.gcno
|
||||
*.ll
|
||||
modules.builtin
|
||||
Module.symvers
|
||||
*.dwo
|
||||
*.su
|
||||
*.c.[012]*.*
|
||||
*.symtypes
|
||||
*.tar
|
||||
*.xz
|
||||
Module.symvers
|
||||
modules.builtin
|
||||
|
||||
#
|
||||
# Top-level generic files
|
||||
|
@ -53,6 +55,11 @@ Module.symvers
|
|||
/System.map
|
||||
/Module.markers
|
||||
|
||||
#
|
||||
# RPM spec file (make rpm-pkg)
|
||||
#
|
||||
/*.spec
|
||||
|
||||
#
|
||||
# Debian directory (make deb-pkg)
|
||||
#
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 14
|
||||
SUBLEVEL = 18
|
||||
SUBLEVEL = 19
|
||||
EXTRAVERSION =
|
||||
NAME = Petit Gorille
|
||||
|
||||
|
|
1
arch/arc/boot/.gitignore
vendored
1
arch/arc/boot/.gitignore
vendored
|
@ -1,2 +1 @@
|
|||
*.dtb*
|
||||
uImage
|
||||
|
|
2
arch/arm/boot/.gitignore
vendored
2
arch/arm/boot/.gitignore
vendored
|
@ -3,5 +3,3 @@ zImage
|
|||
xipImage
|
||||
bootpImage
|
||||
uImage
|
||||
*.dtb
|
||||
zImage-dtb
|
|
@ -790,7 +790,6 @@ void abort(void)
|
|||
/* if that doesn't kill us, halt */
|
||||
panic("Oops failed to kill thread");
|
||||
}
|
||||
EXPORT_SYMBOL(abort);
|
||||
|
||||
void __init trap_init(void)
|
||||
{
|
||||
|
|
1
arch/arm64/boot/dts/.gitignore
vendored
1
arch/arm64/boot/dts/.gitignore
vendored
|
@ -1 +0,0 @@
|
|||
*.dtb
|
|
@ -122,7 +122,6 @@ void abort(void)
|
|||
/* if that doesn't kill us, halt */
|
||||
panic("Oops failed to kill thread");
|
||||
}
|
||||
EXPORT_SYMBOL(abort);
|
||||
|
||||
void __init trap_init(void)
|
||||
{
|
||||
|
|
1
arch/metag/boot/.gitignore
vendored
1
arch/metag/boot/.gitignore
vendored
|
@ -1,4 +1,3 @@
|
|||
vmlinux*
|
||||
uImage*
|
||||
ramdisk.*
|
||||
*.dtb*
|
||||
|
|
1
arch/microblaze/boot/.gitignore
vendored
1
arch/microblaze/boot/.gitignore
vendored
|
@ -1,3 +1,2 @@
|
|||
*.dtb
|
||||
linux.bin*
|
||||
simpleImage.*
|
||||
|
|
1
arch/mips/boot/.gitignore
vendored
1
arch/mips/boot/.gitignore
vendored
|
@ -5,4 +5,3 @@ zImage
|
|||
zImage.tmp
|
||||
calc_vmlinuz_load_addr
|
||||
uImage
|
||||
*.dtb
|
||||
|
|
1
arch/nios2/boot/.gitignore
vendored
1
arch/nios2/boot/.gitignore
vendored
|
@ -1,2 +1 @@
|
|||
*.dtb
|
||||
vmImage
|
||||
|
|
1
arch/powerpc/boot/.gitignore
vendored
1
arch/powerpc/boot/.gitignore
vendored
|
@ -18,7 +18,6 @@ otheros.bld
|
|||
uImage
|
||||
cuImage.*
|
||||
dtbImage.*
|
||||
*.dtb
|
||||
treeImage.*
|
||||
vmlinux.strip
|
||||
zImage
|
||||
|
|
|
@ -298,7 +298,6 @@ void abort(void)
|
|||
/* if that doesn't kill us, halt */
|
||||
panic("Oops failed to kill thread");
|
||||
}
|
||||
EXPORT_SYMBOL(abort);
|
||||
|
||||
void __init trap_init(void)
|
||||
{
|
||||
|
|
|
@ -287,7 +287,7 @@ recompute_jump(struct alt_instr *a, u8 *orig_insn, u8 *repl_insn, u8 *insnbuf)
|
|||
tgt_rip = next_rip + o_dspl;
|
||||
n_dspl = tgt_rip - orig_insn;
|
||||
|
||||
DPRINTK("target RIP: %px, new_displ: 0x%x", tgt_rip, n_dspl);
|
||||
DPRINTK("target RIP: %p, new_displ: 0x%x", tgt_rip, n_dspl);
|
||||
|
||||
if (tgt_rip - orig_insn >= 0) {
|
||||
if (n_dspl - 2 <= 127)
|
||||
|
@ -344,7 +344,7 @@ static void __init_or_module noinline optimize_nops(struct alt_instr *a, u8 *ins
|
|||
add_nops(instr + (a->instrlen - a->padlen), a->padlen);
|
||||
local_irq_restore(flags);
|
||||
|
||||
DUMP_BYTES(instr, a->instrlen, "%px: [%d:%d) optimized NOPs: ",
|
||||
DUMP_BYTES(instr, a->instrlen, "%p: [%d:%d) optimized NOPs: ",
|
||||
instr, a->instrlen - a->padlen, a->padlen);
|
||||
}
|
||||
|
||||
|
@ -365,7 +365,7 @@ void __init_or_module noinline apply_alternatives(struct alt_instr *start,
|
|||
u8 *instr, *replacement;
|
||||
u8 insnbuf[MAX_PATCH_LEN];
|
||||
|
||||
DPRINTK("alt table %px, -> %px", start, end);
|
||||
DPRINTK("alt table %p -> %p", start, end);
|
||||
/*
|
||||
* The scan order should be from start to end. A later scanned
|
||||
* alternative code can overwrite previously scanned alternative code.
|
||||
|
@ -389,14 +389,14 @@ void __init_or_module noinline apply_alternatives(struct alt_instr *start,
|
|||
continue;
|
||||
}
|
||||
|
||||
DPRINTK("feat: %d*32+%d, old: (%px len: %d), repl: (%px, len: %d), pad: %d",
|
||||
DPRINTK("feat: %d*32+%d, old: (%p, len: %d), repl: (%p, len: %d), pad: %d",
|
||||
a->cpuid >> 5,
|
||||
a->cpuid & 0x1f,
|
||||
instr, a->instrlen,
|
||||
replacement, a->replacementlen, a->padlen);
|
||||
|
||||
DUMP_BYTES(instr, a->instrlen, "%px: old_insn: ", instr);
|
||||
DUMP_BYTES(replacement, a->replacementlen, "%px: rpl_insn: ", replacement);
|
||||
DUMP_BYTES(instr, a->instrlen, "%p: old_insn: ", instr);
|
||||
DUMP_BYTES(replacement, a->replacementlen, "%p: rpl_insn: ", replacement);
|
||||
|
||||
memcpy(insnbuf, replacement, a->replacementlen);
|
||||
insnbuf_sz = a->replacementlen;
|
||||
|
@ -422,7 +422,7 @@ void __init_or_module noinline apply_alternatives(struct alt_instr *start,
|
|||
a->instrlen - a->replacementlen);
|
||||
insnbuf_sz += a->instrlen - a->replacementlen;
|
||||
}
|
||||
DUMP_BYTES(insnbuf, insnbuf_sz, "%px: final_insn: ", instr);
|
||||
DUMP_BYTES(insnbuf, insnbuf_sz, "%p: final_insn: ", instr);
|
||||
|
||||
text_poke_early(instr, insnbuf, insnbuf_sz);
|
||||
}
|
||||
|
|
1
arch/xtensa/boot/.gitignore
vendored
1
arch/xtensa/boot/.gitignore
vendored
|
@ -1,3 +1,2 @@
|
|||
uImage
|
||||
zImage.redboot
|
||||
*.dtb
|
||||
|
|
|
@ -221,10 +221,12 @@ static void sg_init_aead(struct scatterlist *sg, char *xbuf[XBUFSIZE],
|
|||
}
|
||||
|
||||
sg_init_table(sg, np + 1);
|
||||
if (rem)
|
||||
np--;
|
||||
for (k = 0; k < np; k++)
|
||||
sg_set_buf(&sg[k + 1], xbuf[k], PAGE_SIZE);
|
||||
|
||||
if (rem)
|
||||
sg_set_buf(&sg[k + 1], xbuf[k], rem);
|
||||
}
|
||||
|
||||
|
|
|
@ -115,3 +115,6 @@ struct mtk_vcodec_ctx *mtk_vcodec_get_curr_ctx(struct mtk_vcodec_dev *dev)
|
|||
return ctx;
|
||||
}
|
||||
EXPORT_SYMBOL(mtk_vcodec_get_curr_ctx);
|
||||
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_DESCRIPTION("Mediatek video codec driver");
|
||||
|
|
|
@ -419,3 +419,7 @@ void soc_camera_calc_client_output(struct soc_camera_device *icd,
|
|||
mf->height = soc_camera_shift_scale(rect->height, shift, scale_v);
|
||||
}
|
||||
EXPORT_SYMBOL(soc_camera_calc_client_output);
|
||||
|
||||
MODULE_DESCRIPTION("soc-camera scaling-cropping functions");
|
||||
MODULE_AUTHOR("Guennadi Liakhovetski <kernel@pengutronix.de>");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -3891,7 +3891,7 @@ static void qlcnic_83xx_flush_mbx_queue(struct qlcnic_adapter *adapter)
|
|||
struct list_head *head = &mbx->cmd_q;
|
||||
struct qlcnic_cmd_args *cmd = NULL;
|
||||
|
||||
spin_lock(&mbx->queue_lock);
|
||||
spin_lock_bh(&mbx->queue_lock);
|
||||
|
||||
while (!list_empty(head)) {
|
||||
cmd = list_entry(head->next, struct qlcnic_cmd_args, list);
|
||||
|
@ -3902,7 +3902,7 @@ static void qlcnic_83xx_flush_mbx_queue(struct qlcnic_adapter *adapter)
|
|||
qlcnic_83xx_notify_cmd_completion(adapter, cmd);
|
||||
}
|
||||
|
||||
spin_unlock(&mbx->queue_lock);
|
||||
spin_unlock_bh(&mbx->queue_lock);
|
||||
}
|
||||
|
||||
static int qlcnic_83xx_check_mbx_status(struct qlcnic_adapter *adapter)
|
||||
|
@ -3938,12 +3938,12 @@ static void qlcnic_83xx_dequeue_mbx_cmd(struct qlcnic_adapter *adapter,
|
|||
{
|
||||
struct qlcnic_mailbox *mbx = adapter->ahw->mailbox;
|
||||
|
||||
spin_lock(&mbx->queue_lock);
|
||||
spin_lock_bh(&mbx->queue_lock);
|
||||
|
||||
list_del(&cmd->list);
|
||||
mbx->num_cmds--;
|
||||
|
||||
spin_unlock(&mbx->queue_lock);
|
||||
spin_unlock_bh(&mbx->queue_lock);
|
||||
|
||||
qlcnic_83xx_notify_cmd_completion(adapter, cmd);
|
||||
}
|
||||
|
@ -4008,7 +4008,7 @@ static int qlcnic_83xx_enqueue_mbx_cmd(struct qlcnic_adapter *adapter,
|
|||
init_completion(&cmd->completion);
|
||||
cmd->rsp_opcode = QLC_83XX_MBX_RESPONSE_UNKNOWN;
|
||||
|
||||
spin_lock(&mbx->queue_lock);
|
||||
spin_lock_bh(&mbx->queue_lock);
|
||||
|
||||
list_add_tail(&cmd->list, &mbx->cmd_q);
|
||||
mbx->num_cmds++;
|
||||
|
@ -4016,7 +4016,7 @@ static int qlcnic_83xx_enqueue_mbx_cmd(struct qlcnic_adapter *adapter,
|
|||
*timeout = cmd->total_cmds * QLC_83XX_MBX_TIMEOUT;
|
||||
queue_work(mbx->work_q, &mbx->work);
|
||||
|
||||
spin_unlock(&mbx->queue_lock);
|
||||
spin_unlock_bh(&mbx->queue_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -4112,15 +4112,15 @@ static void qlcnic_83xx_mailbox_worker(struct work_struct *work)
|
|||
mbx->rsp_status = QLC_83XX_MBX_RESPONSE_WAIT;
|
||||
spin_unlock_irqrestore(&mbx->aen_lock, flags);
|
||||
|
||||
spin_lock(&mbx->queue_lock);
|
||||
spin_lock_bh(&mbx->queue_lock);
|
||||
|
||||
if (list_empty(head)) {
|
||||
spin_unlock(&mbx->queue_lock);
|
||||
spin_unlock_bh(&mbx->queue_lock);
|
||||
return;
|
||||
}
|
||||
cmd = list_entry(head->next, struct qlcnic_cmd_args, list);
|
||||
|
||||
spin_unlock(&mbx->queue_lock);
|
||||
spin_unlock_bh(&mbx->queue_lock);
|
||||
|
||||
mbx_ops->encode_cmd(adapter, cmd);
|
||||
mbx_ops->nofity_fw(adapter, QLC_83XX_MBX_REQUEST);
|
||||
|
|
|
@ -1388,7 +1388,7 @@ DECLARE_RTL_COND(rtl_ocp_tx_cond)
|
|||
{
|
||||
void __iomem *ioaddr = tp->mmio_addr;
|
||||
|
||||
return RTL_R8(IBISR0) & 0x02;
|
||||
return RTL_R8(IBISR0) & 0x20;
|
||||
}
|
||||
|
||||
static void rtl8168ep_stop_cmac(struct rtl8169_private *tp)
|
||||
|
@ -1396,7 +1396,7 @@ static void rtl8168ep_stop_cmac(struct rtl8169_private *tp)
|
|||
void __iomem *ioaddr = tp->mmio_addr;
|
||||
|
||||
RTL_W8(IBCR2, RTL_R8(IBCR2) & ~0x01);
|
||||
rtl_msleep_loop_wait_low(tp, &rtl_ocp_tx_cond, 50, 2000);
|
||||
rtl_msleep_loop_wait_high(tp, &rtl_ocp_tx_cond, 50, 2000);
|
||||
RTL_W8(IBISR0, RTL_R8(IBISR0) | 0x20);
|
||||
RTL_W8(IBCR0, RTL_R8(IBCR0) & ~0x01);
|
||||
}
|
||||
|
|
|
@ -2902,6 +2902,12 @@ static int rocker_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
goto err_alloc_ordered_workqueue;
|
||||
}
|
||||
|
||||
err = rocker_probe_ports(rocker);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "failed to probe ports\n");
|
||||
goto err_probe_ports;
|
||||
}
|
||||
|
||||
/* Only FIBs pointing to our own netdevs are programmed into
|
||||
* the device, so no need to pass a callback.
|
||||
*/
|
||||
|
@ -2918,22 +2924,16 @@ static int rocker_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
|
||||
rocker->hw.id = rocker_read64(rocker, SWITCH_ID);
|
||||
|
||||
err = rocker_probe_ports(rocker);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "failed to probe ports\n");
|
||||
goto err_probe_ports;
|
||||
}
|
||||
|
||||
dev_info(&pdev->dev, "Rocker switch with id %*phN\n",
|
||||
(int)sizeof(rocker->hw.id), &rocker->hw.id);
|
||||
|
||||
return 0;
|
||||
|
||||
err_probe_ports:
|
||||
unregister_switchdev_notifier(&rocker_switchdev_notifier);
|
||||
err_register_switchdev_notifier:
|
||||
unregister_fib_notifier(&rocker->fib_nb);
|
||||
err_register_fib_notifier:
|
||||
rocker_remove_ports(rocker);
|
||||
err_probe_ports:
|
||||
destroy_workqueue(rocker->rocker_owq);
|
||||
err_alloc_ordered_workqueue:
|
||||
free_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_EVENT), rocker);
|
||||
|
@ -2961,9 +2961,9 @@ static void rocker_remove(struct pci_dev *pdev)
|
|||
{
|
||||
struct rocker *rocker = pci_get_drvdata(pdev);
|
||||
|
||||
rocker_remove_ports(rocker);
|
||||
unregister_switchdev_notifier(&rocker_switchdev_notifier);
|
||||
unregister_fib_notifier(&rocker->fib_nb);
|
||||
rocker_remove_ports(rocker);
|
||||
rocker_write32(rocker, CONTROL, ROCKER_CONTROL_RESET);
|
||||
destroy_workqueue(rocker->rocker_owq);
|
||||
free_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_EVENT), rocker);
|
||||
|
|
|
@ -1243,6 +1243,7 @@ static const struct usb_device_id products[] = {
|
|||
{QMI_QUIRK_SET_DTR(0x2c7c, 0x0125, 4)}, /* Quectel EC25, EC20 R2.0 Mini PCIe */
|
||||
{QMI_QUIRK_SET_DTR(0x2c7c, 0x0121, 4)}, /* Quectel EC21 Mini PCIe */
|
||||
{QMI_FIXED_INTF(0x2c7c, 0x0296, 4)}, /* Quectel BG96 */
|
||||
{QMI_QUIRK_SET_DTR(0x2c7c, 0x0306, 4)}, /* Quectel EP06 Mini PCIe */
|
||||
|
||||
/* 4. Gobi 1000 devices */
|
||||
{QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */
|
||||
|
|
2
drivers/of/unittest-data/.gitignore
vendored
2
drivers/of/unittest-data/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
|||
testcases.dtb
|
||||
testcases.dtb.S
|
|
@ -1826,9 +1826,11 @@ static int storvsc_probe(struct hv_device *device,
|
|||
fc_host_node_name(host) = stor_device->node_name;
|
||||
fc_host_port_name(host) = stor_device->port_name;
|
||||
stor_device->rport = fc_remote_port_add(host, 0, &ids);
|
||||
if (!stor_device->rport)
|
||||
if (!stor_device->rport) {
|
||||
ret = -ENOMEM;
|
||||
goto err_out3;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -1212,6 +1212,7 @@ static long vhost_net_reset_owner(struct vhost_net *n)
|
|||
}
|
||||
vhost_net_stop(n, &tx_sock, &rx_sock);
|
||||
vhost_net_flush(n);
|
||||
vhost_dev_stop(&n->dev);
|
||||
vhost_dev_reset_owner(&n->dev, umem);
|
||||
vhost_net_vq_reset(n);
|
||||
done:
|
||||
|
|
|
@ -1755,3 +1755,12 @@ Efault:
|
|||
return -EFAULT;
|
||||
}
|
||||
#endif
|
||||
|
||||
__weak void abort(void)
|
||||
{
|
||||
BUG();
|
||||
|
||||
/* if that doesn't kill us, halt */
|
||||
panic("Oops failed to kill thread");
|
||||
}
|
||||
EXPORT_SYMBOL(abort);
|
||||
|
|
|
@ -5828,6 +5828,20 @@ void mem_cgroup_sk_alloc(struct sock *sk)
|
|||
if (!mem_cgroup_sockets_enabled)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Socket cloning can throw us here with sk_memcg already
|
||||
* filled. It won't however, necessarily happen from
|
||||
* process context. So the test for root memcg given
|
||||
* the current task's memcg won't help us in this case.
|
||||
*
|
||||
* Respecting the original socket's memcg is a better
|
||||
* decision in this case.
|
||||
*/
|
||||
if (sk->sk_memcg) {
|
||||
css_get(&sk->sk_memcg->css);
|
||||
return;
|
||||
}
|
||||
|
||||
rcu_read_lock();
|
||||
memcg = mem_cgroup_from_task(current);
|
||||
if (memcg == root_mem_cgroup)
|
||||
|
|
|
@ -1677,16 +1677,13 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
|
|||
newsk->sk_dst_pending_confirm = 0;
|
||||
newsk->sk_wmem_queued = 0;
|
||||
newsk->sk_forward_alloc = 0;
|
||||
|
||||
/* sk->sk_memcg will be populated at accept() time */
|
||||
newsk->sk_memcg = NULL;
|
||||
|
||||
atomic_set(&newsk->sk_drops, 0);
|
||||
newsk->sk_send_head = NULL;
|
||||
newsk->sk_userlocks = sk->sk_userlocks & ~SOCK_BINDPORT_LOCK;
|
||||
atomic_set(&newsk->sk_zckey, 0);
|
||||
|
||||
sock_reset_flag(newsk, SOCK_DONE);
|
||||
mem_cgroup_sk_alloc(newsk);
|
||||
cgroup_sk_alloc(&newsk->sk_cgrp_data);
|
||||
|
||||
rcu_read_lock();
|
||||
|
|
|
@ -94,6 +94,16 @@ static struct sock_reuseport *reuseport_grow(struct sock_reuseport *reuse)
|
|||
return more_reuse;
|
||||
}
|
||||
|
||||
static void reuseport_free_rcu(struct rcu_head *head)
|
||||
{
|
||||
struct sock_reuseport *reuse;
|
||||
|
||||
reuse = container_of(head, struct sock_reuseport, rcu);
|
||||
if (reuse->prog)
|
||||
bpf_prog_destroy(reuse->prog);
|
||||
kfree(reuse);
|
||||
}
|
||||
|
||||
/**
|
||||
* reuseport_add_sock - Add a socket to the reuseport group of another.
|
||||
* @sk: New socket to add to the group.
|
||||
|
@ -102,7 +112,7 @@ static struct sock_reuseport *reuseport_grow(struct sock_reuseport *reuse)
|
|||
*/
|
||||
int reuseport_add_sock(struct sock *sk, struct sock *sk2)
|
||||
{
|
||||
struct sock_reuseport *reuse;
|
||||
struct sock_reuseport *old_reuse, *reuse;
|
||||
|
||||
if (!rcu_access_pointer(sk2->sk_reuseport_cb)) {
|
||||
int err = reuseport_alloc(sk2);
|
||||
|
@ -113,10 +123,13 @@ int reuseport_add_sock(struct sock *sk, struct sock *sk2)
|
|||
|
||||
spin_lock_bh(&reuseport_lock);
|
||||
reuse = rcu_dereference_protected(sk2->sk_reuseport_cb,
|
||||
lockdep_is_held(&reuseport_lock)),
|
||||
WARN_ONCE(rcu_dereference_protected(sk->sk_reuseport_cb,
|
||||
lockdep_is_held(&reuseport_lock)),
|
||||
"socket already in reuseport group");
|
||||
lockdep_is_held(&reuseport_lock));
|
||||
old_reuse = rcu_dereference_protected(sk->sk_reuseport_cb,
|
||||
lockdep_is_held(&reuseport_lock));
|
||||
if (old_reuse && old_reuse->num_socks != 1) {
|
||||
spin_unlock_bh(&reuseport_lock);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (reuse->num_socks == reuse->max_socks) {
|
||||
reuse = reuseport_grow(reuse);
|
||||
|
@ -134,19 +147,11 @@ int reuseport_add_sock(struct sock *sk, struct sock *sk2)
|
|||
|
||||
spin_unlock_bh(&reuseport_lock);
|
||||
|
||||
if (old_reuse)
|
||||
call_rcu(&old_reuse->rcu, reuseport_free_rcu);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void reuseport_free_rcu(struct rcu_head *head)
|
||||
{
|
||||
struct sock_reuseport *reuse;
|
||||
|
||||
reuse = container_of(head, struct sock_reuseport, rcu);
|
||||
if (reuse->prog)
|
||||
bpf_prog_destroy(reuse->prog);
|
||||
kfree(reuse);
|
||||
}
|
||||
|
||||
void reuseport_detach_sock(struct sock *sk)
|
||||
{
|
||||
struct sock_reuseport *reuse;
|
||||
|
|
|
@ -386,7 +386,11 @@ static struct sk_buff *igmpv3_newpack(struct net_device *dev, unsigned int mtu)
|
|||
pip->frag_off = htons(IP_DF);
|
||||
pip->ttl = 1;
|
||||
pip->daddr = fl4.daddr;
|
||||
|
||||
rcu_read_lock();
|
||||
pip->saddr = igmpv3_get_srcaddr(dev, &fl4);
|
||||
rcu_read_unlock();
|
||||
|
||||
pip->protocol = IPPROTO_IGMP;
|
||||
pip->tot_len = 0; /* filled in later */
|
||||
ip_select_ident(net, skb, NULL);
|
||||
|
|
|
@ -475,7 +475,6 @@ struct sock *inet_csk_accept(struct sock *sk, int flags, int *err, bool kern)
|
|||
}
|
||||
spin_unlock_bh(&queue->fastopenq.lock);
|
||||
}
|
||||
mem_cgroup_sk_alloc(newsk);
|
||||
out:
|
||||
release_sock(sk);
|
||||
if (req)
|
||||
|
|
|
@ -2379,6 +2379,12 @@ int tcp_disconnect(struct sock *sk, int flags)
|
|||
|
||||
WARN_ON(inet->inet_num && !icsk->icsk_bind_hash);
|
||||
|
||||
if (sk->sk_frag.page) {
|
||||
put_page(sk->sk_frag.page);
|
||||
sk->sk_frag.page = NULL;
|
||||
sk->sk_frag.offset = 0;
|
||||
}
|
||||
|
||||
sk->sk_error_report(sk);
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -481,7 +481,8 @@ static void bbr_advance_cycle_phase(struct sock *sk)
|
|||
|
||||
bbr->cycle_idx = (bbr->cycle_idx + 1) & (CYCLE_LEN - 1);
|
||||
bbr->cycle_mstamp = tp->delivered_mstamp;
|
||||
bbr->pacing_gain = bbr_pacing_gain[bbr->cycle_idx];
|
||||
bbr->pacing_gain = bbr->lt_use_bw ? BBR_UNIT :
|
||||
bbr_pacing_gain[bbr->cycle_idx];
|
||||
}
|
||||
|
||||
/* Gain cycling: cycle pacing gain to converge to fair share of available bw. */
|
||||
|
@ -490,8 +491,7 @@ static void bbr_update_cycle_phase(struct sock *sk,
|
|||
{
|
||||
struct bbr *bbr = inet_csk_ca(sk);
|
||||
|
||||
if ((bbr->mode == BBR_PROBE_BW) && !bbr->lt_use_bw &&
|
||||
bbr_is_next_cycle_phase(sk, rs))
|
||||
if (bbr->mode == BBR_PROBE_BW && bbr_is_next_cycle_phase(sk, rs))
|
||||
bbr_advance_cycle_phase(sk);
|
||||
}
|
||||
|
||||
|
|
|
@ -184,7 +184,8 @@ static struct rt6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
|
|||
|
||||
static void addrconf_dad_start(struct inet6_ifaddr *ifp);
|
||||
static void addrconf_dad_work(struct work_struct *w);
|
||||
static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id);
|
||||
static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id,
|
||||
bool send_na);
|
||||
static void addrconf_dad_run(struct inet6_dev *idev);
|
||||
static void addrconf_rs_timer(unsigned long data);
|
||||
static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifa);
|
||||
|
@ -3852,12 +3853,17 @@ static void addrconf_dad_begin(struct inet6_ifaddr *ifp)
|
|||
idev->cnf.accept_dad < 1) ||
|
||||
!(ifp->flags&IFA_F_TENTATIVE) ||
|
||||
ifp->flags & IFA_F_NODAD) {
|
||||
bool send_na = false;
|
||||
|
||||
if (ifp->flags & IFA_F_TENTATIVE &&
|
||||
!(ifp->flags & IFA_F_OPTIMISTIC))
|
||||
send_na = true;
|
||||
bump_id = ifp->flags & IFA_F_TENTATIVE;
|
||||
ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED);
|
||||
spin_unlock(&ifp->lock);
|
||||
read_unlock_bh(&idev->lock);
|
||||
|
||||
addrconf_dad_completed(ifp, bump_id);
|
||||
addrconf_dad_completed(ifp, bump_id, send_na);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -3986,16 +3992,21 @@ static void addrconf_dad_work(struct work_struct *w)
|
|||
}
|
||||
|
||||
if (ifp->dad_probes == 0) {
|
||||
bool send_na = false;
|
||||
|
||||
/*
|
||||
* DAD was successful
|
||||
*/
|
||||
|
||||
if (ifp->flags & IFA_F_TENTATIVE &&
|
||||
!(ifp->flags & IFA_F_OPTIMISTIC))
|
||||
send_na = true;
|
||||
bump_id = ifp->flags & IFA_F_TENTATIVE;
|
||||
ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED);
|
||||
spin_unlock(&ifp->lock);
|
||||
write_unlock_bh(&idev->lock);
|
||||
|
||||
addrconf_dad_completed(ifp, bump_id);
|
||||
addrconf_dad_completed(ifp, bump_id, send_na);
|
||||
|
||||
goto out;
|
||||
}
|
||||
|
@ -4033,7 +4044,8 @@ static bool ipv6_lonely_lladdr(struct inet6_ifaddr *ifp)
|
|||
return true;
|
||||
}
|
||||
|
||||
static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id)
|
||||
static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id,
|
||||
bool send_na)
|
||||
{
|
||||
struct net_device *dev = ifp->idev->dev;
|
||||
struct in6_addr lladdr;
|
||||
|
@ -4065,6 +4077,16 @@ static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id)
|
|||
if (send_mld)
|
||||
ipv6_mc_dad_complete(ifp->idev);
|
||||
|
||||
/* send unsolicited NA if enabled */
|
||||
if (send_na &&
|
||||
(ifp->idev->cnf.ndisc_notify ||
|
||||
dev_net(dev)->ipv6.devconf_all->ndisc_notify)) {
|
||||
ndisc_send_na(dev, &in6addr_linklocal_allnodes, &ifp->addr,
|
||||
/*router=*/ !!ifp->idev->cnf.forwarding,
|
||||
/*solicited=*/ false, /*override=*/ true,
|
||||
/*inc_opt=*/ true);
|
||||
}
|
||||
|
||||
if (send_rs) {
|
||||
/*
|
||||
* If a host as already performed a random delay
|
||||
|
|
|
@ -300,6 +300,7 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
|||
struct net *net = sock_net(sk);
|
||||
__be32 v4addr = 0;
|
||||
unsigned short snum;
|
||||
bool saved_ipv6only;
|
||||
int addr_type = 0;
|
||||
int err = 0;
|
||||
|
||||
|
@ -405,19 +406,21 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
|||
if (!(addr_type & IPV6_ADDR_MULTICAST))
|
||||
np->saddr = addr->sin6_addr;
|
||||
|
||||
saved_ipv6only = sk->sk_ipv6only;
|
||||
if (addr_type != IPV6_ADDR_ANY && addr_type != IPV6_ADDR_MAPPED)
|
||||
sk->sk_ipv6only = 1;
|
||||
|
||||
/* Make sure we are allowed to bind here. */
|
||||
if ((snum || !inet->bind_address_no_port) &&
|
||||
sk->sk_prot->get_port(sk, snum)) {
|
||||
sk->sk_ipv6only = saved_ipv6only;
|
||||
inet_reset_saddr(sk);
|
||||
err = -EADDRINUSE;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (addr_type != IPV6_ADDR_ANY) {
|
||||
if (addr_type != IPV6_ADDR_ANY)
|
||||
sk->sk_userlocks |= SOCK_BINDADDR_LOCK;
|
||||
if (addr_type != IPV6_ADDR_MAPPED)
|
||||
sk->sk_ipv6only = 1;
|
||||
}
|
||||
if (snum)
|
||||
sk->sk_userlocks |= SOCK_BINDPORT_LOCK;
|
||||
inet->inet_sport = htons(inet->inet_num);
|
||||
|
|
|
@ -496,6 +496,7 @@ static void *ipmr_mfc_seq_start(struct seq_file *seq, loff_t *pos)
|
|||
return ERR_PTR(-ENOENT);
|
||||
|
||||
it->mrt = mrt;
|
||||
it->cache = NULL;
|
||||
return *pos ? ipmr_mfc_seq_idx(net, seq->private, *pos - 1)
|
||||
: SEQ_START_TOKEN;
|
||||
}
|
||||
|
|
|
@ -558,6 +558,11 @@ static void ndisc_send_unsol_na(struct net_device *dev)
|
|||
|
||||
read_lock_bh(&idev->lock);
|
||||
list_for_each_entry(ifa, &idev->addr_list, if_list) {
|
||||
/* skip tentative addresses until dad completes */
|
||||
if (ifa->flags & IFA_F_TENTATIVE &&
|
||||
!(ifa->flags & IFA_F_OPTIMISTIC))
|
||||
continue;
|
||||
|
||||
ndisc_send_na(dev, &in6addr_linklocal_allnodes, &ifa->addr,
|
||||
/*router=*/ !!idev->cnf.forwarding,
|
||||
/*solicited=*/ false, /*override=*/ true,
|
||||
|
|
|
@ -50,7 +50,6 @@ rpm-pkg rpm: FORCE
|
|||
$(CONFIG_SHELL) $(MKSPEC) >$(objtree)/kernel.spec
|
||||
$(call cmd,src_tar,$(KERNELPATH),kernel.spec)
|
||||
+rpmbuild $(RPMOPTS) --target $(UTS_MACHINE) -ta $(KERNELPATH).tar.gz
|
||||
rm $(KERNELPATH).tar.gz kernel.spec
|
||||
|
||||
# binrpm-pkg
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -59,7 +58,8 @@ binrpm-pkg: FORCE
|
|||
$(CONFIG_SHELL) $(MKSPEC) prebuilt > $(objtree)/binkernel.spec
|
||||
+rpmbuild $(RPMOPTS) --define "_builddir $(objtree)" --target \
|
||||
$(UTS_MACHINE) -bb $(objtree)/binkernel.spec
|
||||
rm binkernel.spec
|
||||
|
||||
clean-files += $(objtree)/*.spec
|
||||
|
||||
# Deb target
|
||||
# ---------------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in a new issue