Linux 4.19.201
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 200 +SUBLEVEL = 201 EXTRAVERSION = NAME = "People's Front"
arch/powerpc/platforms/pseries/setup.c +1 -1
@@ -76,7 +76,7 @@#include "../../../../drivers/pci/pci.h" DEFINE_STATIC_KEY_FALSE (shared_processor); -EXPORT_SYMBOL_GPL (shared_processor); +EXPORT_SYMBOL (shared_processor);int CMO_PrPSP =-1 ;int CMO_SecPSP =-1 ;
arch/x86/include/asm/proto.h +2 -0
@@ -4,6 +4,8 @@#include <asm/ldt.h> +struct task_struct ; +/* misc architecture specific prototypes */ void syscall_init (void );
arch/x86/kvm/ioapic.c +1 -1
@@ -96,7 +96,7 @@ static unsigned long ioapic_read_indirect(struct kvm_ioapic *ioapic,static void rtc_irq_eoi_tracking_reset (struct kvm_ioapic *ioapic) { ioapic->rtc_status.pending_eoi =0 ; -bitmap_zero (ioapic->rtc_status.dest_map.map,KVM_MAX_VCPU_ID ); +bitmap_zero (ioapic->rtc_status.dest_map.map,KVM_MAX_VCPU_ID +1 ); }static void kvm_rtc_eoi_tracking_restore_all (struct kvm_ioapic *ioapic);
arch/x86/kvm/ioapic.h +2 -2
@@ -43,13 +43,13 @@ struct kvm_vcpu;struct dest_map {/* vcpu bitmap where IRQ has been sent */ - DECLARE_BITMAP(map, KVM_MAX_VCPU_ID); + DECLARE_BITMAP(map, KVM_MAX_VCPU_ID + 1);/* * Vector sent to a given vcpu, only valid when * the vcpu's bit in map is set */ -u8 vectors[KVM_MAX_VCPU_ID ]; +u8 vectors[KVM_MAX_VCPU_ID +1 ]; };
drivers/net/can/spi/hi311x.c +1 -1
@@ -236,7 +236,7 @@ static int hi3110_spi_trans(struct spi_device *spi, int len)return ret; } -static u8 hi3110_cmd (struct spi_device *spi,u8 command) +static int hi3110_cmd (struct spi_device *spi,u8 command) {struct hi3110_priv *priv =spi_get_drvdata (spi);
drivers/net/can/usb/ems_usb.c +13 -1
@@ -267,6 +267,8 @@ struct ems_usb {unsigned int free_slots;/* remember number of available slots */ struct ems_cpc_msg active_params;/* active controller parameters */ +void *rxbuf[MAX_RX_URBS ]; +dma_addr_t rxbuf_dma[MAX_RX_URBS ]; };static void ems_usb_read_interrupt_callback (struct urb *urb)
@@ -599,6 +601,7 @@ static int ems_usb_start(struct ems_usb *dev)for (i =0 ; i <MAX_RX_URBS ; i++) {struct urb *urb =NULL ;u8 *buf =NULL ; +dma_addr_t buf_dma;/* create a URB, and a buffer for it */ urb =usb_alloc_urb (0 ,GFP_KERNEL );
@@ -608,7 +611,7 @@ static int ems_usb_start(struct ems_usb *dev) } buf =usb_alloc_coherent (dev->udev,RX_BUFFER_SIZE ,GFP_KERNEL , - &urb->transfer_dma); + &buf_dma);if (!buf) {netdev_err (netdev,"No memory left for USB buffer\n" );usb_free_urb (urb);
@@ -616,6 +619,8 @@ static int ems_usb_start(struct ems_usb *dev)break ; } + urb->transfer_dma = buf_dma; +usb_fill_bulk_urb (urb, dev->udev,usb_rcvbulkpipe (dev->udev,2 ), buf,RX_BUFFER_SIZE , ems_usb_read_bulk_callback, dev);
@@ -631,6 +636,9 @@ static int ems_usb_start(struct ems_usb *dev)break ; } + dev->rxbuf[i] = buf; + dev->rxbuf_dma[i] = buf_dma; +/* Drop reference, USB core will take care of freeing it */ usb_free_urb (urb); }
@@ -696,6 +704,10 @@ static void unlink_all_urbs(struct ems_usb *dev)usb_kill_anchored_urbs (&dev->rx_submitted); +for (i =0 ; i <MAX_RX_URBS ; ++i) +usb_free_coherent (dev->udev,RX_BUFFER_SIZE , + dev->rxbuf[i], dev->rxbuf_dma[i]); +usb_kill_anchored_urbs (&dev->tx_submitted);atomic_set (&dev->active_tx_urbs,0 );
drivers/net/can/usb/esd_usb2.c +15 -1
@@ -207,6 +207,8 @@ struct esd_usb2 {int net_count;u32 version;int rxinitdone; +void *rxbuf[MAX_RX_URBS ]; +dma_addr_t rxbuf_dma[MAX_RX_URBS ]; };struct esd_usb2_net_priv {
@@ -556,6 +558,7 @@ static int esd_usb2_setup_rx_urbs(struct esd_usb2 *dev)for (i =0 ; i <MAX_RX_URBS ; i++) {struct urb *urb =NULL ;u8 *buf =NULL ; +dma_addr_t buf_dma;/* create a URB, and a buffer for it */ urb =usb_alloc_urb (0 ,GFP_KERNEL );
@@ -565,7 +568,7 @@ static int esd_usb2_setup_rx_urbs(struct esd_usb2 *dev) } buf =usb_alloc_coherent (dev->udev,RX_BUFFER_SIZE ,GFP_KERNEL , - &urb->transfer_dma); + &buf_dma);if (!buf) {dev_warn (dev->udev->dev.parent,"No memory left for USB buffer\n" );
@@ -573,6 +576,8 @@ static int esd_usb2_setup_rx_urbs(struct esd_usb2 *dev) goto freeurb; } + urb->transfer_dma = buf_dma; + usb_fill_bulk_urb(urb, dev->udev, usb_rcvbulkpipe(dev->udev, 1), buf, RX_BUFFER_SIZE,
@@ -585,8 +590,12 @@ static int esd_usb2_setup_rx_urbs(struct esd_usb2 *dev)usb_unanchor_urb (urb);usb_free_coherent (dev->udev,RX_BUFFER_SIZE , buf, urb->transfer_dma); + goto freeurb; } + dev->rxbuf[i] = buf; + dev->rxbuf_dma[i] = buf_dma; + freeurb:/* Drop reference, USB core will take care of freeing it */ usb_free_urb (urb);
@@ -674,6 +683,11 @@ static void unlink_all_urbs(struct esd_usb2 *dev)int i, j;usb_kill_anchored_urbs (&dev->rx_submitted); + +for (i =0 ; i <MAX_RX_URBS ; ++i) +usb_free_coherent (dev->udev,RX_BUFFER_SIZE , + dev->rxbuf[i], dev->rxbuf_dma[i]); +for (i =0 ; i < dev->net_count; i++) { priv = dev->nets[i];if (priv) {
drivers/net/can/usb/mcba_usb.c +2 -0
@@ -664,6 +664,8 @@ static int mcba_usb_start(struct mcba_priv *priv)break ; } + urb->transfer_dma = buf_dma; + usb_fill_bulk_urb(urb, priv->udev, usb_rcvbulkpipe(priv->udev, MCBA_USB_EP_IN), buf, MCBA_USB_RX_BUFF_SIZE,
drivers/net/can/usb/usb_8dev.c +13 -2
@@ -148,7 +148,8 @@ struct usb_8dev_priv {u8 *cmd_msg_buffer;struct mutex usb_8dev_cmd_lock; - +void *rxbuf[MAX_RX_URBS ]; +dma_addr_t rxbuf_dma[MAX_RX_URBS ]; };/* tx frame */
@@ -744,6 +745,7 @@ static int usb_8dev_start(struct usb_8dev_priv *priv)for (i =0 ; i <MAX_RX_URBS ; i++) {struct urb *urb =NULL ;u8 *buf; +dma_addr_t buf_dma;/* create a URB, and a buffer for it */ urb =usb_alloc_urb (0 ,GFP_KERNEL );
@@ -753,7 +755,7 @@ static int usb_8dev_start(struct usb_8dev_priv *priv) } buf =usb_alloc_coherent (priv->udev,RX_BUFFER_SIZE ,GFP_KERNEL , - &urb->transfer_dma); + &buf_dma);if (!buf) {netdev_err (netdev,"No memory left for USB buffer\n" );usb_free_urb (urb);
@@ -761,6 +763,8 @@ static int usb_8dev_start(struct usb_8dev_priv *priv)break ; } + urb->transfer_dma = buf_dma; + usb_fill_bulk_urb(urb, priv->udev, usb_rcvbulkpipe(priv->udev, USB_8DEV_ENDP_DATA_RX),
@@ -778,6 +782,9 @@ static int usb_8dev_start(struct usb_8dev_priv *priv)break ; } + priv->rxbuf[i] = buf; + priv->rxbuf_dma[i] = buf_dma; +/* Drop reference, USB core will take care of freeing it */ usb_free_urb (urb); }
@@ -847,6 +854,10 @@ static void unlink_all_urbs(struct usb_8dev_priv *priv)usb_kill_anchored_urbs (&priv->rx_submitted); +for (i =0 ; i <MAX_RX_URBS ; ++i) +usb_free_coherent (priv->udev,RX_BUFFER_SIZE , + priv->rxbuf[i], priv->rxbuf_dma[i]); +usb_kill_anchored_urbs (&priv->tx_submitted);atomic_set (&priv->active_tx_urbs,0 );
drivers/net/ethernet/dec/tulip/winbond-840.c +2 -5
@@ -367,7 +367,7 @@ static int w840_probe1(struct pci_dev *pdev, const struct pci_device_id *ent)int i, option = find_cnt <MAX_UNITS ? options[find_cnt] :0 ;void __iomem *ioaddr; - i =pci_enable_device (pdev); + i =pcim_enable_device (pdev);if (i)return i;pci_set_master (pdev);
@@ -389,7 +389,7 @@ static int w840_probe1(struct pci_dev *pdev, const struct pci_device_id *ent) ioaddr =pci_iomap (pdev,TULIP_BAR , netdev_res_size);if (!ioaddr) - goto err_out_free_res; + goto err_out_netdev;for (i =0 ; i <3 ; i++) ((__le16 *)dev->dev_addr)[i] =cpu_to_le16 (eeprom_read (ioaddr, i));
@@ -468,8 +468,6 @@ static int w840_probe1(struct pci_dev *pdev, const struct pci_device_id *ent) err_out_cleardev:pci_iounmap (pdev, ioaddr); -err_out_free_res: -pci_release_regions (pdev); err_out_netdev:free_netdev (dev);return -ENODEV ;
@@ -1535,7 +1533,6 @@ static void w840_remove1(struct pci_dev *pdev)if (dev) {struct netdev_private *np =netdev_priv (dev);unregister_netdev (dev); -pci_release_regions (pdev);pci_iounmap (pdev, np->base_addr);free_netdev (dev); }
drivers/net/ethernet/intel/i40e/i40e_ethtool.c +1 -1
@@ -674,7 +674,7 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,default :/* if we got here and link is up something bad is afoot */ netdev_info (netdev, -"WARNING: Link is up but PHY type 0x%x is not recognized.\n" , +"WARNING: Link is up but PHY type 0x%x is not recognized, or incorrect cable is in use\n" , hw_link_info->phy_type); }
drivers/net/ethernet/intel/i40e/i40e_main.c +36 -24
128 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx4/main.c +1 -0
@@ -3515,6 +3515,7 @@ static int mlx4_load_one(struct pci_dev *pdev, int pci_dev_data,if (!SRIOV_VALID_STATE (dev->flags)) {mlx4_err (dev,"Invalid SRIOV state\n" ); + err = -EINVAL ; goto err_close; } }
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c +6 -4
@@ -904,17 +904,19 @@ static int connect_fwd_rules(struct mlx5_core_dev *dev,static int connect_flow_table (struct mlx5_core_dev *dev,struct mlx5_flow_table *ft,struct fs_prio *prio) { -struct mlx5_flow_table *next_ft; +struct mlx5_flow_table *next_ft, *first_ft;int err =0 ;/* Connect_prev_fts and update_root_ft_create are mutually exclusive */ -if (list_empty (&prio->node.children)) { + first_ft =list_first_entry_or_null (&prio->node.children, + struct mlx5_flow_table, node.list); +if (!first_ft || first_ft->level > ft->level) { err =connect_prev_fts (dev, ft, prio);if (err)return err; - next_ft =find_next_chained_ft (prio); + next_ft = first_ft ? first_ft :find_next_chained_ft (prio); err =connect_fwd_rules (dev, ft, next_ft);if (err)return err;
@@ -1945,7 +1947,7 @@ static int disconnect_flow_table(struct mlx5_flow_table *ft) node.list) == ft))return 0 ; - next_ft =find_next_chained_ft (prio); + next_ft =find_next_ft (ft); err =connect_fwd_rules (dev, next_ft, ft);if (err)return err;
drivers/net/ethernet/sis/sis900.c +2 -5
@@ -441,7 +441,7 @@ static int sis900_probe(struct pci_dev *pci_dev,#endif /* setup various bits in PCI command register */ - ret =pci_enable_device (pci_dev); + ret =pcim_enable_device (pci_dev);if (ret)return ret; i =pci_set_dma_mask (pci_dev,DMA_BIT_MASK (32 ));
@@ -467,7 +467,7 @@ static int sis900_probe(struct pci_dev *pci_dev, ioaddr =pci_iomap (pci_dev,0 ,0 );if (!ioaddr) { ret = -ENOMEM ; - goto err_out_cleardev; + goto err_out; } sis_priv =netdev_priv (net_dev);
@@ -575,8 +575,6 @@ static int sis900_probe(struct pci_dev *pci_dev, sis_priv->tx_ring_dma); err_out_unmap:pci_iounmap (pci_dev, ioaddr); -err_out_cleardev: -pci_release_regions (pci_dev); err_out:free_netdev (net_dev);return ret;
@@ -2421,7 +2419,6 @@ static void sis900_remove(struct pci_dev *pci_dev) sis_priv->tx_ring_dma);pci_iounmap (pci_dev, sis_priv->ioaddr);free_netdev (net_dev); -pci_release_regions (pci_dev); }#ifdef CONFIG_PM
drivers/net/ethernet/sun/niu.c +2 -1
@@ -8192,8 +8192,9 @@ static int niu_pci_vpd_fetch(struct niu *np, u32 start) err =niu_pci_vpd_scan_props (np, here, end);if (err <0 )return err; +/* ret == 1 is not an error */ if (err ==1 ) -return -EINVAL ; +return 0 ; }return 0 ; }
drivers/net/virtio_net.c +7 -3
@@ -413,9 +413,13 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi, offset += hdr_padded_len; p += hdr_padded_len; - copy = len; -if (copy >skb_tailroom (skb)) - copy =skb_tailroom (skb); +/* Copy all frame if it fits skb->head, otherwise +* we let virtio_net_hdr_to_skb() and GRO pull headers as needed. +*/ +if (len <=skb_tailroom (skb)) + copy = len; +else + copy =ETH_HLEN + metasize;skb_put_data (skb, p, copy);if (metasize) {
drivers/nfc/nfcsim.c +1 -2
@@ -201,8 +201,7 @@ static void nfcsim_recv_wq(struct work_struct *work)if (!IS_ERR (skb))dev_kfree_skb (skb); - - skb =ERR_PTR (-ENODEV ); +return ; } dev->cb (dev->nfc_digital_dev, dev->arg, skb);
fs/btrfs/volumes.c +1 -0
@@ -995,6 +995,7 @@ void btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices, int step)if (test_bit (BTRFS_DEV_STATE_WRITEABLE , &device->dev_state)) {list_del_init (&device->dev_alloc_list);clear_bit (BTRFS_DEV_STATE_WRITEABLE , &device->dev_state); + fs_devices->rw_devices--; }list_del_init (&device->dev_list); fs_devices->num_devices--;
fs/ocfs2/file.c +62 -41
145 lines not on this page · raw message
include/linux/skbuff.h +9 -0
@@ -2788,6 +2788,15 @@ static inline void skb_propagate_pfmemalloc(struct page *page, skb->pfmemalloc = true; } +/** +* skb_frag_off() - Returns the offset of a skb fragment +* @frag: the paged fragment +*/ +static inline unsigned int skb_frag_off (const skb_frag_t *frag) +{ +return frag->page_offset; +} +/** * skb_frag_page - retrieve the page referred to by a paged fragment * @frag: the paged fragment
include/linux/virtio_net.h +9 -5
@@ -65,14 +65,18 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb,skb_reset_mac_header (skb);if (hdr->flags &VIRTIO_NET_HDR_F_NEEDS_CSUM ) { -u16 start =__virtio16_to_cpu (little_endian, hdr->csum_start); -u16 off =__virtio16_to_cpu (little_endian, hdr->csum_offset); +u32 start =__virtio16_to_cpu (little_endian, hdr->csum_start); +u32 off =__virtio16_to_cpu (little_endian, hdr->csum_offset); +u32 needed = start +max_t (u32, thlen, off +sizeof (__sum16)); + +if (!pskb_may_pull (skb, needed)) +return -EINVAL ;if (!skb_partial_csum_set (skb, start, off))return -EINVAL ; p_off =skb_transport_offset (skb) + thlen; -if (p_off >skb_headlen (skb)) +if (!pskb_may_pull (skb, p_off))return -EINVAL ; }else {/* gso packets without NEEDS_CSUM do not set transport_offset.
@@ -102,14 +106,14 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb, } p_off = keys.control.thoff + thlen; -if (p_off >skb_headlen (skb) || +if (!pskb_may_pull (skb, p_off) || keys.basic.ip_proto != ip_proto)return -EINVAL ;skb_set_transport_header (skb, keys.control.thoff); }else if (gso_type) { p_off = thlen; -if (p_off >skb_headlen (skb)) +if (!pskb_may_pull (skb, p_off))return -EINVAL ; } }
include/net/llc_pdu.h +23 -8
@@ -15,9 +15,11 @@#include <linux/if_ether.h> /* Lengths of frame formats */ -#define LLC_PDU_LEN_I 4/* header and 2 control bytes */ -#define LLC_PDU_LEN_S 4 -#define LLC_PDU_LEN_U 3/* header and 1 control byte */ +#define LLC_PDU_LEN_I 4/* header and 2 control bytes */ +#define LLC_PDU_LEN_S 4 +#define LLC_PDU_LEN_U 3/* header and 1 control byte */ +/* header and 1 control byte and XID info */ +#define LLC_PDU_LEN_U_XID (LLC_PDU_LEN_U + sizeof(struct llc_xid_info))/* Known SAP addresses */ #define LLC_GLOBAL_SAP 0xFF#define LLC_NULL_SAP 0x00/* not network-layer visible */
@@ -50,9 +52,10 @@#define LLC_PDU_TYPE_U_MASK 0x03/* 8-bit control field */ #define LLC_PDU_TYPE_MASK 0x03 -#define LLC_PDU_TYPE_I 0/* first bit */ -#define LLC_PDU_TYPE_S 1/* first two bits */ -#define LLC_PDU_TYPE_U 3/* first two bits */ +#define LLC_PDU_TYPE_I 0/* first bit */ +#define LLC_PDU_TYPE_S 1/* first two bits */ +#define LLC_PDU_TYPE_U 3/* first two bits */ +#define LLC_PDU_TYPE_U_XID 4/* private type for detecting XID commands */ #define LLC_PDU_TYPE_IS_I (pdu) \ ((!(pdu->ctrl_1 & LLC_PDU_TYPE_I_MASK)) ? 1 : 0)
@@ -230,9 +233,18 @@ static inline struct llc_pdu_un *llc_pdu_un_hdr(struct sk_buff *skb)static inline void llc_pdu_header_init (struct sk_buff *skb,u8 type,u8 ssap,u8 dsap,u8 cr) { -const int hlen = type ==LLC_PDU_TYPE_U ?3 :4 ; +int hlen =4 ;/* default value for I and S types */ struct llc_pdu_un *pdu; +switch (type) { +case LLC_PDU_TYPE_U : + hlen =3 ; +break ; +case LLC_PDU_TYPE_U_XID : + hlen =6 ; +break ; + } +skb_push (skb, hlen);skb_reset_network_header (skb); pdu =llc_pdu_un_hdr (skb);
@@ -374,7 +386,10 @@ static inline void llc_pdu_init_as_xid_cmd(struct sk_buff *skb, xid_info->fmt_id =LLC_XID_FMT_ID ;/* 0x81 */ xid_info->type = svcs_supported; xid_info->rw = rx_window <<1 ;/* size of receive window */ -skb_put (skb,sizeof (struct llc_xid_info )); + +/* no need to push/put since llc_pdu_header_init() has already +* pushed 3 + 3 bytes +*/ }/**
net/can/raw.c +18 -2
@@ -549,10 +549,18 @@ static int raw_setsockopt(struct socket *sock, int level, int optname,return -EFAULT ; } +rtnl_lock ();lock_sock (sk); -if (ro->bound && ro->ifindex) +if (ro->bound && ro->ifindex) { dev =dev_get_by_index (sock_net (sk), ro->ifindex); +if (!dev) { +if (count >1 ) +kfree (filter); + err = -ENODEV ; + goto out_fil; + } + }if (ro->bound) {/* (try to) register the new filters */
@@ -591,6 +599,7 @@ static int raw_setsockopt(struct socket *sock, int level, int optname,dev_put (dev);release_sock (sk); +rtnl_unlock ();break ;
@@ -603,10 +612,16 @@ static int raw_setsockopt(struct socket *sock, int level, int optname, err_mask &=CAN_ERR_MASK ; +rtnl_lock ();lock_sock (sk); -if (ro->bound && ro->ifindex) +if (ro->bound && ro->ifindex) { dev =dev_get_by_index (sock_net (sk), ro->ifindex); +if (!dev) { + err = -ENODEV ; + goto out_err; + } + }/* remove current error mask */ if (ro->bound) {
@@ -630,6 +645,7 @@ static int raw_setsockopt(struct socket *sock, int level, int optname,dev_put (dev);release_sock (sk); +rtnl_unlock ();break ;
net/core/dev.c +2 -1
@@ -5400,7 +5400,8 @@ static void skb_gro_reset_offset(struct sk_buff *skb)if (skb_mac_header (skb) ==skb_tail_pointer (skb) && pinfo->nr_frags && - !PageHighMem (skb_frag_page (frag0))) { + !PageHighMem (skb_frag_page (frag0)) && + (!NET_IP_ALIGN || !(skb_frag_off (frag0) &3 ))) {NAPI_GRO_CB (skb)->frag0 =skb_frag_address (frag0); NAPI_GRO_CB(skb)->frag0_len = min_t(unsigned int, skb_frag_size(frag0),
net/llc/af_llc.c +9 -1
@@ -98,8 +98,16 @@ static inline u8 llc_ui_header_len(struct sock *sk, struct sockaddr_llc *addr) {u8 rc =LLC_PDU_LEN_U ; -if (addr->sllc_test || addr->sllc_xid) +if (addr->sllc_test) rc =LLC_PDU_LEN_U ; +else if (addr->sllc_xid) +/* We need to expand header to sizeof(struct llc_xid_info) +* since llc_pdu_init_as_xid_cmd() sets 4,5,6 bytes of LLC header +* as XID PDU. In llc_ui_sendmsg() we reserved header size and then +* filled all other space with user data. If we won't reserve this +* bytes, llc_pdu_init_as_xid_cmd() will overwrite user data +*/ + rc =LLC_PDU_LEN_U_XID ;else if (sk->sk_type ==SOCK_STREAM ) rc =LLC_PDU_LEN_I ;return rc;
net/llc/llc_s_ac.c +1 -1
@@ -79,7 +79,7 @@ int llc_sap_action_send_xid_c(struct llc_sap *sap, struct sk_buff *skb)struct llc_sap_state_ev *ev =llc_sap_ev (skb);int rc; -llc_pdu_header_init (skb,LLC_PDU_TYPE_U , ev->saddr.lsap, +llc_pdu_header_init (skb,LLC_PDU_TYPE_U_XID , ev->saddr.lsap, ev->daddr.lsap,LLC_PDU_CMD );llc_pdu_init_as_xid_cmd (skb,LLC_XID_NULL_CLASS_2 ,0 ); rc =llc_mac_hdr_init (skb, ev->saddr.mac, ev->daddr.mac);
net/netfilter/nf_conntrack_core.c +6 -1
@@ -630,8 +630,13 @@ bool nf_ct_delete(struct nf_conn *ct, u32 portid, int report)return false; tstamp =nf_conn_tstamp_find (ct); -if (tstamp && tstamp->stop ==0 ) +if (tstamp) { +s32 timeout = ct->timeout - nfct_time_stamp; + tstamp->stop =ktime_get_real_ns (); +if (timeout <0 ) + tstamp->stop -=jiffies_to_nsecs (-timeout); + }if (nf_conntrack_event_report (IPCT_DESTROY , ct, portid, report) <0 ) {
net/netfilter/nft_nat.c +3 -1
@@ -153,7 +153,9 @@ static int nft_nat_init(const struct nft_ctx *ctx, const struct nft_expr *expr, alen = FIELD_SIZEOF(struct nf_nat_range, min_addr.ip6);break ;default : -return -EAFNOSUPPORT ; +if (tb[NFTA_NAT_REG_ADDR_MIN ]) +return -EAFNOSUPPORT ; +break ; } priv->family = family;
net/sctp/input.c +1 -1
@@ -1132,7 +1132,7 @@ static struct sctp_association *__sctp_rcv_asconf_lookup(if (unlikely (!af))return NULL ; -if (af->from_addr_param (&paddr, param, peer_port,0 )) +if (!af->from_addr_param (&paddr, param, peer_port,0 ))return NULL ;return __sctp_lookup_association (net, laddr, &paddr, transportp);
net/tipc/socket.c +4 -5
@@ -2440,7 +2440,7 @@ static int tipc_listen(struct socket *sock, int len)static int tipc_wait_for_accept (struct socket *sock,long timeo) {struct sock *sk = sock->sk; -DEFINE_WAIT (wait); +DEFINE_WAIT_FUNC (wait, woken_wake_function);int err;/* True wake-one mechanism for incoming connections: only
@@ -2449,12 +2449,12 @@ static int tipc_wait_for_accept(struct socket *sock, long timeo)* anymore, the common case will execute the loop only once. */ for (;;) { -prepare_to_wait_exclusive (sk_sleep (sk), &wait, -TASK_INTERRUPTIBLE );if (timeo &&skb_queue_empty (&sk->sk_receive_queue)) { +add_wait_queue (sk_sleep (sk), &wait);release_sock (sk); - timeo =schedule_timeout (timeo); + timeo =wait_woken (&wait,TASK_INTERRUPTIBLE , timeo);lock_sock (sk); +remove_wait_queue (sk_sleep (sk), &wait); } err =0 ;if (!skb_queue_empty (&sk->sk_receive_queue))
@@ -2466,7 +2466,6 @@ static int tipc_wait_for_accept(struct socket *sock, long timeo)if (signal_pending (current))break ; } -finish_wait (sk_sleep (sk), &wait);return err; }
net/wireless/scan.c +2 -4
@@ -1029,16 +1029,14 @@ cfg80211_bss_update(struct cfg80211_registered_device *rdev,* be grouped with this beacon for updates ... */ if (!cfg80211_combine_bsses (rdev, new)) { -kfree (new); +bss_ref_put (rdev, new); goto drop; } }if (rdev->bss_entries >= bss_entries_limit && !cfg80211_bss_expire_oldest (rdev)) { -if (!list_empty (&new->hidden_list)) -list_del (&new->hidden_list); -kfree (new); +bss_ref_put (rdev, new); goto drop; }
tools/perf/util/map.c +0 -2
@@ -209,8 +209,6 @@ struct map *map__new(struct machine *machine, u64 start, u64 len,if (!(prot &PROT_EXEC ))dso__set_loaded (dso); } - -nsinfo__put (dso->nsinfo); dso->nsinfo = nsi;dso__put (dso); }
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.201 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/powerpc/platforms/pseries/setup.c | 2 arch/x86/include/asm/proto.h | 2 arch/x86/kvm/ioapic.c | 2 arch/x86/kvm/ioapic.h | 4 drivers/net/can/spi/hi311x.c | 2 drivers/net/can/usb/ems_usb.c | 14 ++ drivers/net/can/usb/esd_usb2.c | 16 +++ drivers/net/can/usb/mcba_usb.c | 2 drivers/net/can/usb/usb_8dev.c | 15 ++- drivers/net/ethernet/dec/tulip/winbond-840.c | 7 - drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 2 drivers/net/ethernet/intel/i40e/i40e_main.c | 60 +++++++----- drivers/net/ethernet/mellanox/mlx4/main.c | 1 drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 10 +- drivers/net/ethernet/sis/sis900.c | 7 - drivers/net/ethernet/sun/niu.c | 3 drivers/net/virtio_net.c | 10 +- drivers/nfc/nfcsim.c | 3 fs/btrfs/volumes.c | 1 fs/ocfs2/file.c | 103 +++++++++++++--------- include/linux/skbuff.h | 9 + include/linux/virtio_net.h | 14 +- include/net/llc_pdu.h | 31 ++++-- net/can/raw.c | 20 +++- net/core/dev.c | 3 net/llc/af_llc.c | 10 +- net/llc/llc_s_ac.c | 2 net/netfilter/nf_conntrack_core.c | 7 + net/netfilter/nft_nat.c | 4 net/sctp/input.c | 2 net/tipc/socket.c | 9 - net/wireless/scan.c | 6 - tools/perf/util/map.c | 2 34 files changed, 259 insertions(+), 128 deletions(-)
Arkadiusz Kubalewski (1):
i40e: Fix logic of disabling queues
Arnaldo Carvalho de Melo (1):
Revert "perf map: Fix dso->nsinfo refcounting"
Dan Carpenter (1):
can: hi311x: fix a signedness bug in hi3110_cmd()
Desmond Cheong Zhi Xi (1):
btrfs: fix rw device counting in __btrfs_free_extra_devids
Eric Dumazet (2):
virtio_net: Do not pull payload in skb->head
gro: ensure frag0 meets IP header alignment
Florian Westphal (1):
netfilter: conntrack: adjust stop timestamp to real expiry value
Greg Kroah-Hartman (1):
Linux 4.19.201
Hoang Le (1):
tipc: fix sleeping in tipc accept routine
Jan Kiszka (1):
x86/asm: Ensure asm/proto.h can be included stand-alone
Jedrzej Jagielski (1):
i40e: Fix log TC creation failure when max num of queues is exceeded
Jiapeng Chong (1):
mlx4: Fix missing error code in mlx4_load_one()
Juergen Gross (1):
x86/kvm: fix vcpu-id indexed array sizes
Junxiao Bi (2):
ocfs2: fix zero out valid data
ocfs2: issue zeroout to EOF blocks
Krzysztof Kozlowski (1):
nfc: nfcsim: fix use after free during module unload
Lukasz Cieplicki (1):
i40e: Add additional info to PHY type error
Maor Gottlieb (1):
net/mlx5: Fix flow table chaining
Marcelo Ricardo Leitner (1):
sctp: fix return value check in __sctp_rcv_asconf_lookup
Nguyen Dinh Phi (1):
cfg80211: Fix possible memory leak in function cfg80211_bss_update
Pablo Neira Ayuso (1):
netfilter: nft_nat: allow to specify layer 4 protocol NAT only
Paul Jakma (1):
NIU: fix incorrect error return, missed in previous revert
Pavel Skripkin (5):
can: mcba_usb_start(): add missing urb->transfer_dma initialization
can: usb_8dev: fix memory leak
can: ems_usb: fix memory leak
can: esd_usb2: fix memory leak
net: llc: fix skb_over_panic
Srikar Dronamraju (1):
powerpc/pseries: Fix regression while building external modules
Wang Hai (2):
tulip: windbond-840: Fix missing pci_disable_device() in probe and remove
sis900: Fix missing pci_disable_device() in probe and remove
Ziyang Xuan (1):
can: raw: raw_setsockopt(): fix raw_rcv panic for sock UAF