Linux 4.19.168
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.168 kernel.
All users of the 4.19 kernel series must upgrade.
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.19.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/mach-omap2/omap_device.c | 8 - arch/arm64/kvm/sys_regs.c | 4 arch/x86/kernel/cpu/intel_rdt_rdtgroup.c | 113 +++++++++------------- block/genhd.c | 9 + drivers/base/regmap/regmap-debugfs.c | 9 + drivers/block/Kconfig | 1 drivers/cpufreq/powernow-k8.c | 9 - drivers/crypto/chelsio/chtls/chtls_cm.c | 68 ++++--------- drivers/dma/mediatek/mtk-hsdma.c | 1 drivers/dma/xilinx/xilinx_dma.c | 11 +- drivers/gpu/drm/i915/i915_gem_execbuffer.c | 2 drivers/hid/wacom_sys.c | 35 ++++++ drivers/i2c/busses/i2c-sprd.c | 8 + drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 26 ++++- drivers/iommu/intel_irq_remapping.c | 2 drivers/lightnvm/Kconfig | 1 drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h | 4 drivers/net/ethernet/mellanox/mlx5/core/en_fs.c | 3 drivers/net/ethernet/natsemi/macsonic.c | 12 +- drivers/net/ethernet/natsemi/xtsonic.c | 7 - drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 58 ++++++++--- drivers/net/usb/cdc_ncm.c | 8 + drivers/net/wan/Kconfig | 1 drivers/net/wireless/ath/wil6210/Kconfig | 1 drivers/spi/spi-pxa2xx.c | 3 drivers/spi/spi-stm32.c | 4 include/asm-generic/vmlinux.lds.h | 5 net/8021q/vlan.c | 3 net/core/skbuff.c | 6 + net/ipv4/ip_output.c | 2 net/ipv4/ip_tunnel.c | 10 - net/ipv6/ip6_fib.c | 5 33 files changed, 267 insertions(+), 174 deletions(-)
Andreas Kemnade (1):
ARM: OMAP2+: omap_device: fix idling of devices during probe
Arnd Bergmann (4):
wil6210: select CONFIG_CRC32
block: rsxx: select CONFIG_CRC32
lightnvm: select CONFIG_CRC32
wan: ds26522: select CONFIG_BITREVERSE
Ayush Sawal (6):
chtls: Fix hardware tid leak
chtls: Remove invalid set_tcb call
chtls: Fix panic when route to peer not configured
chtls: Replace skb_dequeue with skb_peek
chtls: Added a check to avoid NULL pointer dereference
chtls: Fix chtls resources release sequence
Chris Wilson (1):
drm/i915: Fix mismatch between misplaced vma check and vma insert
Christophe JAILLET (2):
net/sonic: Fix some resource leaks in error handling paths
dmaengine: mediatek: mtk-hsdma: Fix a resource leak in the error handling path of the probe function
Chunyan Zhang (1):
i2c: sprd: use a specific timeout to avoid system hang up issue
Colin Ian King (1):
cpufreq: powernow-k8: pass policy rather than use cpufreq_cpu_get()
Dan Carpenter (1):
regmap: debugfs: Fix a reversed if statement in regmap_debugfs_init()
Dinghao Liu (3):
iommu/intel: Fix memleak in intel_irq_remapping_alloc net/mlx5e: Fix memleak in mlx5e_create_l2_table_groups net/mlx5e: Fix two double free cases
Fenghua Yu (2):
x86/resctrl: Use an IPI instead of task_work_add() to update PQR_ASSOC MSR x86/resctrl: Don't move a task to the same resource group
Florian Westphal (2):
net: ip: always refragment ip defragmented packets
net: fix pmtu check in nopmtudisc mode
Greg Kroah-Hartman (1):
Linux 4.19.168
Jakub Kicinski (1):
net: vlan: avoid leaks on register_vlan_dev() failures
Jouni K. Seppänen (1):
net: cdc_ncm: correct overhead in delayed_ndp_size
Lorenzo Bianconi (1):
iio: imu: st_lsm6dsx: fix edge-trigger interrupts
Lukas Wunner (1):
spi: pxa2xx: Fix use-after-free on unbind
Marc Zyngier (1):
KVM: arm64: Don't access PMCR_EL0 when no PMU is available
Ming Lei (1):
block: fix use-after-free in disk_part_iter_next
Nick Desaulniers (1):
vmlinux.lds.h: Add PGO and AutoFDO input sections
Ping Cheng (1):
HID: wacom: Fix memory leakage caused by kfifo_alloc
Roman Guskov (1):
spi: stm32: FIFO threshold level - fix align packet size
Samuel Holland (2):
net: stmmac: dwmac-sun8i: Balance internal PHY resource references
net: stmmac: dwmac-sun8i: Balance internal PHY power
Sean Nyekjaer (1):
iio: imu: st_lsm6dsx: flip irq return logic
Sean Tranchetti (1):
net: ipv6: fib: flush exceptions when purging route
Shravya Kumbham (3):
dmaengine: xilinx_dma: check dma_async_device_register return value
dmaengine: xilinx_dma: fix incompatible param warning in _child_probe()
dmaengine: xilinx_dma: fix mixed_enum_type coverity warning
Vasily Averin (1):
net: drop bogus skb with CHECKSUM_PARTIAL and offset beyond end of trimmed packet
Xiaolei Wang (1):
regmap: debugfs: Fix a memory leak when calling regmap_attach_dev
Yufeng Mo (1):
net: hns3: fix the number of queues actually used by ARQ
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 167 +SUBLEVEL = 168 EXTRAVERSION = NAME = "People's Front"
arch/arm/mach-omap2/omap_device.c +5 -3
@@ -239,10 +239,12 @@ static int _omap_device_notifier_call(struct notifier_block *nb,break ;case BUS_NOTIFY_BIND_DRIVER : od =to_omap_device (pdev); -if (od && (od->_state ==OMAP_DEVICE_STATE_ENABLED ) && -pm_runtime_status_suspended (dev)) { +if (od) { od->_driver_status =BUS_NOTIFY_BIND_DRIVER ; -pm_runtime_set_active (dev); +if (od->_state ==OMAP_DEVICE_STATE_ENABLED && +pm_runtime_status_suspended (dev)) { +pm_runtime_set_active (dev); + } }break ;case BUS_NOTIFY_ADD_DEVICE :
arch/arm64/kvm/sys_regs.c +4 -0
@@ -619,6 +619,10 @@ static void reset_pmcr(struct kvm_vcpu *vcpu, const struct sys_reg_desc *r) {u64 pmcr, val; +/* No PMU available, PMCR_EL0 may UNDEF... */ +if (!kvm_arm_support_pmu_v3 ()) +return ; + pmcr =read_sysreg (pmcr_el0);/* * Writable bits of PMCR_EL0 (ARMV8_PMU_PMCR_MASK) are reset to UNKNOWN
arch/x86/kernel/cpu/intel_rdt_rdtgroup.c +49 -64
134 lines not on this page · raw message
block/genhd.c +6 -3
@@ -208,14 +208,17 @@ struct hd_struct *disk_part_iter_next(struct disk_part_iter *piter) part =rcu_dereference (ptbl->part[piter->idx]);if (!part)continue ; +get_device (part_to_dev (part)); + piter->part = part;if (!part_nr_sects_read (part) && !(piter->flags &DISK_PITER_INCL_EMPTY ) && !(piter->flags &DISK_PITER_INCL_EMPTY_PART0 && - piter->idx ==0 )) + piter->idx ==0 )) { +put_device (part_to_dev (part)); + piter->part =NULL ;continue ; + } -get_device (part_to_dev (part)); - piter->part = part; piter->idx += inc;break ; }
drivers/base/regmap/regmap-debugfs.c +7 -2
@@ -579,8 +579,12 @@ void regmap_debugfs_init(struct regmap *map, const char *name) devname =dev_name (map->dev);if (name) { - map->debugfs_name =kasprintf (GFP_KERNEL ,"%s-%s" , +if (!map->debugfs_name) { + map->debugfs_name =kasprintf (GFP_KERNEL ,"%s-%s" , devname, name); +if (!map->debugfs_name) +return ; + } name = map->debugfs_name; }else { name = devname;
@@ -588,9 +592,10 @@ void regmap_debugfs_init(struct regmap *map, const char *name)if (!strcmp (name,"dummy" )) {kfree (map->debugfs_name); - map->debugfs_name =kasprintf (GFP_KERNEL ,"dummy%d" , dummy_index); +if (!map->debugfs_name) +return ; name = map->debugfs_name; dummy_index++; }
drivers/block/Kconfig +1 -0
@@ -474,6 +474,7 @@ config BLK_DEV_RBD config BLK_DEV_RSXX tristate "IBM Flash Adapter 900GB Full Height PCIe Device Driver" depends on PCI + select CRC32 help Device driver for IBM's high speed PCIe SSD storage device: Flash Adapter 900GB Full Height.
drivers/cpufreq/powernow-k8.c +3 -6
@@ -881,9 +881,9 @@ static int get_transition_latency(struct powernow_k8_data *data)/* Take a frequency, and issue the fid/vid transition command */ static int transition_frequency_fidvid (struct powernow_k8_data *data, -unsigned int index) +unsigned int index, +struct cpufreq_policy *policy) { -struct cpufreq_policy *policy;u32 fid =0 ;u32 vid =0 ;int res;
@@ -915,9 +915,6 @@ static int transition_frequency_fidvid(struct powernow_k8_data *data, freqs.old =find_khz_freq_from_fid (data->currfid); freqs.new =find_khz_freq_from_fid (fid); - policy =cpufreq_cpu_get (smp_processor_id ()); -cpufreq_cpu_put (policy); -cpufreq_freq_transition_begin (policy, &freqs); res =transition_fid_vid (data, fid, vid);cpufreq_freq_transition_end (policy, &freqs, res);
@@ -972,7 +969,7 @@ static long powernowk8_target_fn(void *arg)powernow_k8_acpi_pst_values (data, newstate); - ret =transition_frequency_fidvid (data, newstate); + ret =transition_frequency_fidvid (data, newstate, pol);if (ret) {pr_err ("transition frequency failed\n" );
drivers/crypto/chelsio/chtls/chtls_cm.c +23 -45
147 lines not on this page · raw message
drivers/dma/mediatek/mtk-hsdma.c +1 -0
@@ -1007,6 +1007,7 @@ static int mtk_hsdma_probe(struct platform_device *pdev)return 0 ; err_free: +mtk_hsdma_hw_deinit (hsdma);of_dma_controller_free (pdev->dev.of_node); err_unregister:dma_async_device_unregister (dd);
drivers/dma/xilinx/xilinx_dma.c +8 -3
@@ -2426,7 +2426,7 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev, has_dre = false;if (!has_dre) - xdev->common.copy_align =fls (width -1 ); + xdev->common.copy_align = (enum dmaengine_alignment )fls (width -1 ); if (of_device_is_compatible(node, "xlnx,axi-vdma-mm2s-channel") || of_device_is_compatible(node, "xlnx,axi-dma-mm2s-channel") ||
@@ -2529,7 +2529,8 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev,static int xilinx_dma_child_probe (struct xilinx_dma_device *xdev,struct device_node *node) { -int ret, i, nr_channels =1 ; +int ret, i; +u32 nr_channels =1 ; ret =of_property_read_u32 (node,"dma-channels" , &nr_channels);if ((ret <0 ) && xdev->mcdma)
@@ -2713,7 +2714,11 @@ static int xilinx_dma_probe(struct platform_device *pdev) }/* Register the DMA engine with the core */ -dma_async_device_register (&xdev->common); + err =dma_async_device_register (&xdev->common); +if (err) { +dev_err (xdev->dev,"failed to register the dma device\n" ); + goto error; + } err =of_dma_controller_register (node, of_dma_xilinx_xlate, xdev);
drivers/gpu/drm/i915/i915_gem_execbuffer.c +1 -1
@@ -380,7 +380,7 @@ eb_vma_misplaced(const struct drm_i915_gem_exec_object2 *entry,return true;if (!(flags &EXEC_OBJECT_SUPPORTS_48B_ADDRESS ) && - (vma->node.start + vma->node.size -1 ) >>32 ) + (vma->node.start + vma->node.size +4095 ) >>32 )return true; if (flags & __EXEC_OBJECT_NEEDS_MAP &&
drivers/hid/wacom_sys.c +32 -3
@@ -1241,6 +1241,37 @@ static int wacom_devm_sysfs_create_group(struct wacom *wacom, group); } +static void wacom_devm_kfifo_release (struct device *dev,void *res) +{ +struct kfifo_rec_ptr_2 *devres = res; + +kfifo_free (devres); +} + +static int wacom_devm_kfifo_alloc (struct wacom *wacom) +{ +struct wacom_wac *wacom_wac = &wacom->wacom_wac; +struct kfifo_rec_ptr_2 *pen_fifo = &wacom_wac->pen_fifo; +int error; + + pen_fifo =devres_alloc (wacom_devm_kfifo_release, +sizeof (struct kfifo_rec_ptr_2 ), +GFP_KERNEL ); + +if (!pen_fifo) +return -ENOMEM ; + + error =kfifo_alloc (pen_fifo,WACOM_PKGLEN_MAX ,GFP_KERNEL ); +if (error) { +devres_free (pen_fifo); +return error; + } + +devres_add (&wacom->hdev->dev, pen_fifo); + +return 0 ; +} +enum led_brightness wacom_leds_brightness_get (struct wacom_led *led) {struct wacom *wacom = led->wacom;
@@ -2697,7 +2728,7 @@ static int wacom_probe(struct hid_device *hdev, goto fail; } - error =kfifo_alloc (&wacom_wac->pen_fifo,WACOM_PKGLEN_MAX ,GFP_KERNEL ); + error =wacom_devm_kfifo_alloc (wacom);if (error) goto fail;
@@ -2764,8 +2795,6 @@ static void wacom_remove(struct hid_device *hdev)if (wacom->wacom_wac.features.type !=REMOTE )wacom_release_resources (wacom); -kfifo_free (&wacom_wac->pen_fifo); -hid_set_drvdata (hdev,NULL ); }
drivers/i2c/busses/i2c-sprd.c +7 -1
@@ -71,6 +71,8 @@/* timeout (ms) for pm runtime autosuspend */ #define SPRD_I2C_PM_TIMEOUT 1000 +/* timeout (ms) for transfer message */ +#define I2C_XFER_TIMEOUT 1000/* SPRD i2c data structure */ struct sprd_i2c {
@@ -244,6 +246,7 @@ static int sprd_i2c_handle_msg(struct i2c_adapter *i2c_adap, struct i2c_msg *msg, bool is_last_msg) {struct sprd_i2c *i2c_dev = i2c_adap->algo_data; +unsigned long time_left; i2c_dev->msg = msg; i2c_dev->buf = msg->buf;
@@ -273,7 +276,10 @@ static int sprd_i2c_handle_msg(struct i2c_adapter *i2c_adap,sprd_i2c_opt_start (i2c_dev); -wait_for_completion (&i2c_dev->complete); + time_left =wait_for_completion_timeout (&i2c_dev->complete, +msecs_to_jiffies (I2C_XFER_TIMEOUT )); +if (!time_left) +return -ETIMEDOUT ;return i2c_dev->err; }
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c +21 -5
@@ -475,13 +475,29 @@ static irqreturn_t st_lsm6dsx_handler_irq(int irq, void *private)static irqreturn_t st_lsm6dsx_handler_thread (int irq,void *private) {struct st_lsm6dsx_hw *hw = private; -int count; +int fifo_len =0 , len; -mutex_lock (&hw->fifo_lock); - count =st_lsm6dsx_read_fifo (hw); -mutex_unlock (&hw->fifo_lock); +/* +* If we are using edge IRQs, new samples can arrive while +* processing current interrupt since there are no hw +* guarantees the irq line stays "low" long enough to properly +* detect the new interrupt. In this case the new sample will +* be missed. +* Polling FIFO status register allow us to read new +* samples even if the interrupt arrives while processing +* previous data and the timeslot where the line is "low" is +* too short to be properly detected. +*/ +do { +mutex_lock (&hw->fifo_lock); + len =st_lsm6dsx_read_fifo (hw); +mutex_unlock (&hw->fifo_lock); + +if (len >0 ) + fifo_len += len; + }while (len >0 ); -return !count ?IRQ_NONE :IRQ_HANDLED ; +return fifo_len ?IRQ_HANDLED :IRQ_NONE ; }static int st_lsm6dsx_buffer_preenable (struct iio_dev *iio_dev)
drivers/iommu/intel_irq_remapping.c +2 -0
@@ -1373,6 +1373,8 @@ static int intel_irq_remapping_alloc(struct irq_domain *domain, irq_data =irq_domain_get_irq_data (domain, virq + i); irq_cfg =irqd_cfg (irq_data);if (!irq_data || !irq_cfg) { +if (!i) +kfree (data); ret = -EINVAL ; goto out_free_data; }
drivers/lightnvm/Kconfig +1 -0
@@ -19,6 +19,7 @@ if NVM config NVM_PBLK tristate "Physical Block Device Open-Channel SSD target" + select CRC32 help Allows an open-channel SSD to be exposed as a block device to the host. The target assumes the device exposes raw flash and must be
drivers/net/ethernet/hisilicon/hns3/hclge_mbx.h +2 -2
@@ -102,7 +102,7 @@ struct hclgevf_mbx_arq_ring {#define hclge_mbx_ring_ptr_move_crq (crq) \ (crq->next_to_use = (crq->next_to_use + 1) % crq->desc_num)#define hclge_mbx_tail_ptr_move_arq (arq) \ - (arq.tail = (arq.tail + 1) % HCLGE_MBX_MAX_ARQ_MSG_SIZE) + (arq.tail = (arq.tail + 1) % HCLGE_MBX_MAX_ARQ_MSG_NUM)#define hclge_mbx_head_ptr_move_arq (arq) \ - (arq.head = (arq.head + 1) % HCLGE_MBX_MAX_ARQ_MSG_SIZE) + (arq.head = (arq.head + 1) % HCLGE_MBX_MAX_ARQ_MSG_NUM)#endif
drivers/net/ethernet/mellanox/mlx5/core/en_fs.c +3 -0
@@ -893,6 +893,7 @@ static int mlx5e_create_ttc_table_groups(struct mlx5e_ttc_table *ttc, in =kvzalloc (inlen,GFP_KERNEL );if (!in) {kfree (ft->g); + ft->g =NULL ;return -ENOMEM ; }
@@ -1033,6 +1034,7 @@ static int mlx5e_create_inner_ttc_table_groups(struct mlx5e_ttc_table *ttc) in =kvzalloc (inlen,GFP_KERNEL );if (!in) {kfree (ft->g); + ft->g =NULL ;return -ENOMEM ; }
@@ -1312,6 +1314,7 @@ static int mlx5e_create_l2_table_groups(struct mlx5e_l2_table *l2_table) ft->g[ft->num_groups] =NULL ;mlx5e_destroy_groups (ft);kvfree (in); +kfree (ft->g);return err; }
drivers/net/ethernet/natsemi/macsonic.c +10 -2
@@ -540,10 +540,14 @@ static int mac_sonic_platform_probe(struct platform_device *pdev) err =register_netdev (dev);if (err) - goto out; + goto undo_probe;return 0 ; +undo_probe: +dma_free_coherent (lp->device, +SIZEOF_SONIC_DESC *SONIC_BUS_SCALE (lp->dma_bitmode), + lp->descriptors, lp->descriptors_laddr); out:free_netdev (dev);
@@ -618,12 +622,16 @@ static int mac_sonic_nubus_probe(struct nubus_board *board) err =register_netdev (ndev);if (err) - goto out; + goto undo_probe;nubus_set_drvdata (board, ndev);return 0 ; +undo_probe: +dma_free_coherent (lp->device, +SIZEOF_SONIC_DESC *SONIC_BUS_SCALE (lp->dma_bitmode), + lp->descriptors, lp->descriptors_laddr); out:free_netdev (ndev);return err;
drivers/net/ethernet/natsemi/xtsonic.c +5 -2
@@ -265,11 +265,14 @@ int xtsonic_probe(struct platform_device *pdev)sonic_msg_init (dev);if ((err =register_netdev (dev))) - goto out1; + goto undo_probe1;return 0 ; -out1: +undo_probe1: +dma_free_coherent (lp->device, +SIZEOF_SONIC_DESC *SONIC_BUS_SCALE (lp->dma_bitmode), + lp->descriptors, lp->descriptors_laddr);release_region (dev->base_addr,SONIC_MEM_SIZE ); out:free_netdev (dev);
drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c +44 -14
140 lines not on this page · raw message
drivers/net/usb/cdc_ncm.c +6 -2
@@ -1127,7 +1127,10 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)* accordingly. Otherwise, we should check here. */ if (ctx->drvflags &CDC_NCM_FLAG_NDP_TO_END ) - delayed_ndp_size =ALIGN (ctx->max_ndp_size, ctx->tx_ndp_modulus); + delayed_ndp_size = ctx->max_ndp_size + +max_t (u32, + ctx->tx_ndp_modulus, + ctx->tx_modulus + ctx->tx_remainder) -1 ;else delayed_ndp_size =0 ;
@@ -1308,7 +1311,8 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)if (!(dev->driver_info->flags &FLAG_SEND_ZLP ) && skb_out->len > ctx->min_tx_pkt) { padding_count = ctx->tx_curr_size - skb_out->len; -skb_put_zero (skb_out, padding_count); +if (!WARN_ON (padding_count > ctx->tx_curr_size)) +skb_put_zero (skb_out, padding_count); }else if (skb_out->len < ctx->tx_curr_size && (skb_out->len % dev->maxpacket) ==0 ) {skb_put_u8 (skb_out,0 );/* force short packet */
drivers/net/wan/Kconfig +1 -0
@@ -295,6 +295,7 @@ config SLIC_DS26522 tristate "Slic Maxim ds26522 card support" depends on SPI depends on FSL_SOC || ARCH_MXC || ARCH_LAYERSCAPE || COMPILE_TEST + select BITREVERSE help This module initializes and configures the slic maxim card in T1 or E1 mode.
drivers/net/wireless/ath/wil6210/Kconfig +1 -0
@@ -1,6 +1,7 @@ config WIL6210 tristate "Wilocity 60g WiFi card wil6210 support" select WANT_DEV_COREDUMP + select CRC32 depends on CFG80211 depends on PCI default n
drivers/spi/spi-pxa2xx.c +1 -2
@@ -1572,7 +1572,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)return -ENODEV ; } - master =spi_alloc_master (dev,sizeof (struct driver_data )); + master =devm_spi_alloc_master (dev,sizeof (*drv_data));if (!master) {dev_err (&pdev->dev,"cannot alloc spi_master\n" );pxa_ssp_free (ssp);
@@ -1759,7 +1759,6 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)free_irq (ssp->irq, drv_data); out_error_master_alloc: -spi_controller_put (master);pxa_ssp_free (ssp);return status; }
drivers/spi/spi-stm32.c +2 -2
@@ -299,9 +299,9 @@ static u32 stm32_spi_prepare_fthlv(struct stm32_spi *spi)/* align packet size with data registers access */ if (spi->cur_bpw >8 ) - fthlv -= (fthlv %2 );/* multiple of 2 */ + fthlv += (fthlv %2 ) ?1 :0 ;else - fthlv -= (fthlv %4 );/* multiple of 4 */ + fthlv += (fthlv %4 ) ? (4 - (fthlv %4 )) :0 ;return fthlv; }
include/asm-generic/vmlinux.lds.h +4 -1
@@ -492,7 +492,10 @@*/ #define TEXT_TEXT \ ALIGN_FUNCTION(); \ - *(.text.hot TEXT_MAIN .text.fixup .text.unlikely) \ + *(.text.hot .text.hot.*) \ + *(TEXT_MAIN .text.fixup) \ + *(.text.unlikely .text.unlikely.*) \ + *(.text.unknown .text.unknown.*) \ *(.text..refcount) \ *(.ref.text) \ MEM_KEEP(init.text*) \
net/8021q/vlan.c +2 -1
@@ -277,7 +277,8 @@ static int register_vlan_device(struct net_device *real_dev, u16 vlan_id)return 0 ; out_free_newdev: -if (new_dev->reg_state ==NETREG_UNINITIALIZED ) +if (new_dev->reg_state ==NETREG_UNINITIALIZED || + new_dev->reg_state ==NETREG_UNREGISTERED )free_netdev (new_dev);return err; }
net/core/skbuff.c +6 -0
@@ -1853,6 +1853,12 @@ int pskb_trim_rcsum_slow(struct sk_buff *skb, unsigned int len) skb->csum =csum_block_sub (skb->csum,skb_checksum (skb, len, delta,0 ), len); + }else if (skb->ip_summed ==CHECKSUM_PARTIAL ) { +int hdlen = (len >skb_headlen (skb)) ?skb_headlen (skb) : len; +int offset =skb_checksum_start_offset (skb) + skb->csum_offset; + +if (offset +sizeof (__sum16) > hdlen) +return -EINVAL ; }return __pskb_trim (skb, len); }
net/ipv4/ip_output.c +1 -1
@@ -312,7 +312,7 @@ static int ip_finish_output(struct net *net, struct sock *sk, struct sk_buff *skif (skb_is_gso (skb))return ip_finish_output_gso (net, sk, skb, mtu); -if (skb->len > mtu || (IPCB (skb)->flags &IPSKB_FRAG_PMTU )) +if (skb->len > mtu ||IPCB (skb)->frag_max_size)return ip_fragment (net, sk, skb, mtu, ip_finish_output2);return ip_finish_output2 (net, sk, skb);
net/ipv4/ip_tunnel.c +5 -5
@@ -736,7 +736,11 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, goto tx_error; } -if (tnl_update_pmtu (dev, skb, rt, tnl_params->frag_off, inner_iph)) { + df = tnl_params->frag_off; +if (skb->protocol ==htons (ETH_P_IP ) && !tunnel->ignore_df) + df |= (inner_iph->frag_off &htons (IP_DF )); + +if (tnl_update_pmtu (dev, skb, rt, df, inner_iph)) {ip_rt_put (rt); goto tx_error; }
@@ -764,10 +768,6 @@ void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev, ttl =ip4_dst_hoplimit (&rt->dst); } - df = tnl_params->frag_off; -if (skb->protocol ==htons (ETH_P_IP ) && !tunnel->ignore_df) - df |= (inner_iph->frag_off&htons (IP_DF )); - max_headroom =LL_RESERVED_SPACE (rt->dst.dev) +sizeof (struct iphdr ) + rt->dst.header_len +ip_encap_hlen (&tunnel->encap);if (max_headroom > dev->needed_headroom)
net/ipv6/ip6_fib.c +2 -3
@@ -906,6 +906,8 @@ static void fib6_purge_rt(struct fib6_info *rt, struct fib6_node *fn, {struct fib6_table *table = rt->fib6_table; +/* Flush all cached dst in exception table */ +rt6_flush_exceptions (rt);if (rt->rt6i_pcpu)fib6_drop_pcpu_from (rt, table);
@@ -1756,9 +1758,6 @@ static void fib6_del_route(struct fib6_table *table, struct fib6_node *fn, net->ipv6.rt6_stats->fib_rt_entries--; net->ipv6.rt6_stats->fib_discarded_routes++; -/* Flush all cached dst in exception table */ -rt6_flush_exceptions (rt); -/* Reset round-robin state, if necessary */ if (rcu_access_pointer (fn->rr_ptr) == rt) fn->rr_ptr =NULL ;