Linux 4.19.225
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.225 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 - drivers/infiniband/core/uverbs_marshall.c | 2 - drivers/isdn/mISDN/core.c | 6 +-- drivers/isdn/mISDN/core.h | 4 +- drivers/isdn/mISDN/layer1.c | 4 +- drivers/net/ethernet/intel/i40e/i40e_main.c | 56 ++++++++++++++++++++++++---- drivers/net/ieee802154/atusb.c | 10 +++-- drivers/net/usb/rndis_host.c | 5 ++ drivers/power/reset/ltc2952-poweroff.c | 4 +- drivers/scsi/libiscsi.c | 6 ++- drivers/usb/mtu3/mtu3_gadget.c | 4 +- fs/xfs/xfs_ioctl.c | 3 + kernel/trace/trace.c | 6 +-- net/ipv4/udp.c | 2 - net/ipv6/ip6_vti.c | 2 + net/ipv6/route.c | 28 +++++++++++++- net/mac80211/mlme.c | 2 - net/phonet/pep.c | 1 net/sched/sch_qfq.c | 6 +-- 19 files changed, 115 insertions(+), 38 deletions(-)
Chunfeng Yun (1):
usb: mtu3: fix interval value for intr and isoc
Darrick J. Wong (1):
xfs: map unwritten blocks in XFS_IOC_{ALLOC,FREE}SP just like fallocate
David Ahern (4):
ipv6: Check attribute length for RTA_GATEWAY in multipath route
ipv6: Check attribute length for RTA_GATEWAY when deleting multipath route
ipv6: Continue processing multipath route even if gateway attribute is invalid
ipv6: Do cleanup if attribute validation fails in multipath route
Di Zhu (1):
i40e: fix use-after-free in i40e_sync_filters_subtask()
Eric Dumazet (1):
sch_qfq: prevent shift-out-of-bounds in qfq_init_qdisc
Greg Kroah-Hartman (1):
Linux 4.19.225
Hangyu Hua (1):
phonet: refcount leak in pep_sock_accep
Jedrzej Jagielski (1):
i40e: Fix incorrect netdev's real number of RX/TX queues
Leon Romanovsky (1):
RDMA/core: Don't infoleak GRH fields
Lixiaokeng (1):
scsi: libiscsi: Fix UAF in iscsi_conn_get_param()/iscsi_conn_teardown()
Nathan Chancellor (1):
power: reset: ltc2952: Fix use of floating point literals
Naveen N. Rao (2):
tracing: Fix check for trace_percpu_buffer validity in get_trace_buf()
tracing: Tag trace_percpu_buffer as a percpu pointer
Pavel Skripkin (1):
ieee802154: atusb: fix uninit value in atusb_set_extended_addr
Thomas Toye (1):
rndis_host: support Hytera digital radios
Tom Rix (1):
mac80211: initialize variable have_higher_than_11mbit
William Zhao (1):
ip6_vti: initialize __ip6_tnl_parm struct in vti6_siocdevprivate
wolfgang huang (1):
mISDN: change function names to avoid conflicts
yangxingwu (1):
net: udp: fix alignment problem in udp4_seq_show()
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 224 +SUBLEVEL = 225 EXTRAVERSION = NAME = "People's Front"
drivers/infiniband/core/uverbs_marshall.c +1 -1
@@ -66,7 +66,7 @@ void ib_copy_ah_attr_to_user(struct ib_device *device,struct rdma_ah_attr *src = ah_attr;struct rdma_ah_attr conv_ah; -memset (&dst->grh.reserved,0 ,sizeof (dst->grh.reserved)); +memset (&dst->grh,0 ,sizeof (dst->grh)); if ((ah_attr->type == RDMA_AH_ATTR_TYPE_OPA) && (rdma_ah_get_dlid(ah_attr) > be16_to_cpu(IB_LID_PERMISSIVE)) &&
drivers/isdn/mISDN/core.c +3 -3
@@ -390,7 +390,7 @@ mISDNInit(void) err =mISDN_inittimer (&debug);if (err) goto error2; - err =l1_init (&debug); + err =Isdnl1_Init (&debug);if (err) goto error3; err =Isdnl2_Init (&debug);
@@ -404,7 +404,7 @@ mISDNInit(void) error5:Isdnl2_cleanup (); error4: -l1_cleanup (); +Isdnl1_cleanup (); error3:mISDN_timer_cleanup (); error2:
@@ -417,7 +417,7 @@ static void mISDN_cleanup(void) {misdn_sock_cleanup ();Isdnl2_cleanup (); -l1_cleanup (); +Isdnl1_cleanup ();mISDN_timer_cleanup ();class_unregister (&mISDN_class);
drivers/isdn/mISDN/core.h +2 -2
@@ -69,8 +69,8 @@ struct Bprotocol *get_Bprotocol4id(u_int);extern int mISDN_inittimer (u_int *);extern void mISDN_timer_cleanup (void ); -extern int l1_init (u_int *); -extern void l1_cleanup (void ); +extern int Isdnl1_Init (u_int *); +extern void Isdnl1_cleanup (void );extern int Isdnl2_Init (u_int *);extern void Isdnl2_cleanup (void );
drivers/isdn/mISDN/layer1.c +2 -2
@@ -407,7 +407,7 @@ create_l1(struct dchannel *dch, dchannel_l1callback *dcb) {EXPORT_SYMBOL (create_l1);int -l1_init (u_int *deb) +Isdnl1_Init (u_int *deb) { debug = deb; l1fsm_s.state_count =L1S_STATE_COUNT ;
@@ -418,7 +418,7 @@ l1_init(u_int *deb) }void -l1_cleanup (void ) +Isdnl1_cleanup (void ) {mISDN_FsmFree (&l1fsm_s); }
drivers/net/ethernet/intel/i40e/i40e_main.c +49 -7
98 lines not on this page · raw message
drivers/net/ieee802154/atusb.c +6 -4
@@ -96,7 +96,9 @@ static int atusb_control_msg(struct atusb *atusb, unsigned int pipe, ret =usb_control_msg (usb_dev, pipe, request, requesttype, value, index, data, size, timeout); -if (ret <0 ) { +if (ret < size) { + ret = ret <0 ? ret : -ENODATA ; + atusb->err = ret; dev_err(&usb_dev->dev, "%s: req 0x%02x val 0x%x idx 0x%x, error %d\n",
@@ -864,9 +866,9 @@ static int atusb_get_and_show_build(struct atusb *atusb)if (!build)return -ENOMEM ; - ret =atusb_control_msg (atusb,usb_rcvctrlpipe (usb_dev,0 ), -ATUSB_BUILD ,ATUSB_REQ_FROM_DEV ,0 ,0 , - build,ATUSB_BUILD_SIZE ,1000 ); +/* We cannot call atusb_control_msg() here, since this request may read various length data */ + ret =usb_control_msg (atusb->usb_dev,usb_rcvctrlpipe (usb_dev,0 ),ATUSB_BUILD , +ATUSB_REQ_FROM_DEV ,0 ,0 , build,ATUSB_BUILD_SIZE ,1000 );if (ret >=0 ) { build[ret] =0 ;dev_info (&usb_dev->dev,"Firmware: build %s\n" , build);
drivers/net/usb/rndis_host.c +5 -0
@@ -620,6 +620,11 @@ static const struct usb_device_id products [] = {USB_DEVICE_AND_INTERFACE_INFO (0x1630 ,0x0042 , USB_CLASS_COMM, 2 /* ACM */, 0x0ff), .driver_info = (unsigned long ) &rndis_poll_status_info, +}, { +/* Hytera Communications DMR radios' "Radio to PC Network" */ +USB_VENDOR_AND_INTERFACE_INFO (0x238b , +USB_CLASS_COMM ,2 /* ACM */ ,0x0ff ), + .driver_info = (unsigned long)&rndis_info, }, {/* RNDIS is MSFT's un-official variant of CDC ACM */ USB_INTERFACE_INFO(USB_CLASS_COMM, 2 /* ACM */, 0x0ff),
drivers/power/reset/ltc2952-poweroff.c +2 -2
@@ -170,8 +170,8 @@ static void ltc2952_poweroff_kill(void)static void ltc2952_poweroff_default (struct ltc2952_poweroff *data) { - data->wde_interval =300L *1E6L ; - data->trigger_delay =ktime_set (2 ,500L *1E6L ); + data->wde_interval =300L *NSEC_PER_MSEC ; + data->trigger_delay =ktime_set (2 ,500L *NSEC_PER_MSEC );hrtimer_init (&data->timer_trigger,CLOCK_MONOTONIC ,HRTIMER_MODE_REL ); data->timer_trigger.function = ltc2952_poweroff_timer_trigger;
drivers/scsi/libiscsi.c +4 -2
@@ -2986,6 +2986,8 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn) {struct iscsi_conn *conn = cls_conn->dd_data;struct iscsi_session *session = conn->session; +char *tmp_persistent_address = conn->persistent_address; +char *tmp_local_ipaddr = conn->local_ipaddr;del_timer_sync (&conn->transport_timer);
@@ -3007,8 +3009,6 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn)spin_lock_bh (&session->frwd_lock);free_pages ((unsigned long ) conn->data,get_order (ISCSI_DEF_MAX_RECV_SEG_LEN )); -kfree (conn->persistent_address); -kfree (conn->local_ipaddr);/* regular RX path uses back_lock */ spin_lock_bh (&session->back_lock); kfifo_in(&session->cmdpool.queue, (void*)&conn->login_task,
@@ -3020,6 +3020,8 @@ void iscsi_conn_teardown(struct iscsi_cls_conn *cls_conn)mutex_unlock (&session->eh_mutex);iscsi_destroy_conn (cls_conn); +kfree (tmp_persistent_address); +kfree (tmp_local_ipaddr); }EXPORT_SYMBOL_GPL (iscsi_conn_teardown);
drivers/usb/mtu3/mtu3_gadget.c +2 -2
@@ -82,7 +82,7 @@ static int mtu3_ep_enable(struct mtu3_ep *mep)if (usb_endpoint_xfer_int (desc) ||usb_endpoint_xfer_isoc (desc)) { interval = desc->bInterval; - interval =clamp_val (interval,1 ,16 ) -1 ; + interval =clamp_val (interval,1 ,16 );if (usb_endpoint_xfer_isoc (desc) && comp_desc) mult = comp_desc->bmAttributes; }
@@ -94,7 +94,7 @@ static int mtu3_ep_enable(struct mtu3_ep *mep)if (usb_endpoint_xfer_isoc (desc) ||usb_endpoint_xfer_int (desc)) { interval = desc->bInterval; - interval =clamp_val (interval,1 ,16 ) -1 ; + interval =clamp_val (interval,1 ,16 ); mult =usb_endpoint_maxp_mult (desc) -1 ; }break ;
fs/xfs/xfs_ioctl.c +2 -1
@@ -701,7 +701,8 @@ xfs_ioc_space( flags |=XFS_PREALLOC_CLEAR ;if (bf->l_start >XFS_ISIZE (ip)) { error =xfs_alloc_file_space (ip,XFS_ISIZE (ip), - bf->l_start -XFS_ISIZE (ip),0 ); + bf->l_start -XFS_ISIZE (ip), +XFS_BMAPI_PREALLOC );if (error) goto out_unlock; }
kernel/trace/trace.c +3 -3
@@ -2812,7 +2812,7 @@ struct trace_buffer_struct {char buffer[4 ][TRACE_BUF_SIZE ]; }; -static struct trace_buffer_struct *trace_percpu_buffer; +static struct trace_buffer_struct __percpu *trace_percpu_buffer;/* * Thise allows for lockless recording. If we're nested too deeply, then
@@ -2822,7 +2822,7 @@ static char *get_trace_buf(void) {struct trace_buffer_struct *buffer =this_cpu_ptr (trace_percpu_buffer); -if (!buffer || buffer->nesting >=4 ) +if (!trace_percpu_buffer || buffer->nesting >=4 )return NULL ; buffer->nesting++;
@@ -2841,7 +2841,7 @@ static void put_trace_buf(void)static int alloc_percpu_trace_buffer (void ) { -struct trace_buffer_struct *buffers; +struct trace_buffer_struct __percpu *buffers; buffers = alloc_percpu(struct trace_buffer_struct);if (WARN (!buffers,"Could not allocate percpu trace_printk buffer" ))
net/ipv4/udp.c +1 -1
@@ -2845,7 +2845,7 @@ int udp4_seq_show(struct seq_file *seq, void *v) {seq_setwidth (seq,127 );if (v ==SEQ_START_TOKEN ) -seq_puts (seq," sl local_address rem_address st tx_queue " +seq_puts (seq," sl local_address rem_address st tx_queue " "rx_queue tr tm->when retrnsmt uid timeout " "inode ref pointer drops" );else {
net/ipv6/ip6_vti.c +2 -0
@@ -799,6 +799,8 @@ vti6_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)struct net *net =dev_net (dev);struct vti6_net *ip6n =net_generic (net, vti6_net_id); +memset (&p1,0 ,sizeof (p1)); +switch (cmd) {case SIOCGETTUNNEL :if (dev == ip6n->fb_tnl_dev) {
net/ipv6/route.c +26 -2
@@ -4413,6 +4413,19 @@ static void ip6_route_mpath_notify(struct fib6_info *rt,inet6_rt_notify (RTM_NEWROUTE , rt, info, nlflags); } +static int fib6_gw_from_attr (struct in6_addr *gw,struct nlattr *nla, +struct netlink_ext_ack *extack) +{ +if (nla_len (nla) <sizeof (*gw)) { +NL_SET_ERR_MSG (extack,"Invalid IPv6 address in RTA_GATEWAY" ); +return -EINVAL ; + } + + *gw =nla_get_in6_addr (nla); + +return 0 ; +} +static int ip6_route_multipath_add (struct fib6_config *cfg,struct netlink_ext_ack *extack) {
@@ -4453,7 +4466,11 @@ static int ip6_route_multipath_add(struct fib6_config *cfg, nla =nla_find (attrs, attrlen,RTA_GATEWAY );if (nla) { - r_cfg.fc_gateway =nla_get_in6_addr (nla); + err =fib6_gw_from_attr (&r_cfg.fc_gateway, nla, + extack); +if (err) + goto cleanup; + r_cfg.fc_flags |=RTF_GATEWAY ; } r_cfg.fc_encap =nla_find (attrs, attrlen,RTA_ENCAP );
@@ -4587,7 +4604,13 @@ static int ip6_route_multipath_del(struct fib6_config *cfg, nla =nla_find (attrs, attrlen,RTA_GATEWAY );if (nla) { -nla_memcpy (&r_cfg.fc_gateway, nla,16 ); + err =fib6_gw_from_attr (&r_cfg.fc_gateway, nla, + extack); +if (err) { + last_err = err; + goto next_rtnh; + } + r_cfg.fc_flags |=RTF_GATEWAY ; } }
@@ -4595,6 +4618,7 @@ static int ip6_route_multipath_del(struct fib6_config *cfg,if (err) last_err = err; +next_rtnh: rtnh =rtnh_next (rtnh, &remaining); }
net/mac80211/mlme.c +1 -1
@@ -4788,7 +4788,7 @@ static int ieee80211_prep_connection(struct ieee80211_sub_if_data *sdata,*/ if (new_sta) {u32 rates =0 , basic_rates =0 ; -bool have_higher_than_11mbit; +bool have_higher_than_11mbit = false;int min_rate =INT_MAX , min_rate_index =-1 ;const struct cfg80211_bss_ies *ies;int shift =ieee80211_vif_get_shift (&sdata->vif);
net/phonet/pep.c +1 -0
@@ -881,6 +881,7 @@ static struct sock *pep_sock_accept(struct sock *sk, int flags, int *errp, err =pep_accept_conn (newsk, skb);if (err) { +__sock_put (sk);sock_put (newsk); newsk =NULL ; goto drop;
net/sched/sch_qfq.c +2 -4
@@ -1430,10 +1430,8 @@ static int qfq_init_qdisc(struct Qdisc *sch, struct nlattr *opt,if (err <0 )return err; -if (qdisc_dev (sch)->tx_queue_len +1 >QFQ_MAX_AGG_CLASSES ) - max_classes =QFQ_MAX_AGG_CLASSES ; -else - max_classes =qdisc_dev (sch)->tx_queue_len +1 ; + max_classes =min_t (u64, (u64 )qdisc_dev (sch)->tx_queue_len +1 , +QFQ_MAX_AGG_CLASSES );/* max_cl_shift = floor(log_2(max_classes)) */ max_cl_shift =__fls (max_classes); q->max_agg_classes =1 <<max_cl_shift;