4.19.212-rc1 review
Subsystems (2)
Greg Kroah-Hartman
maintainercover 4.19.212-rc1 review
This is the start of the stable review cycle for the 4.19.212 release. There are 12 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 16 Oct 2021 14:51:59 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.19.212-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.19.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.19.212-rc1
Peter Zijlstra <[email protected]>
sched: Always inline is_percpu_thread()
Anand K Mistry <[email protected]>
perf/x86: Reset destroy callback on event init failure
Colin Ian King <[email protected]>
scsi: virtio_scsi: Fix spelling mistake "Unsupport" -> "Unsupported"
Jiapeng Chong <[email protected]>
scsi: ses: Fix unsigned comparison with less than zero
Randy Dunlap <[email protected]>
net: sun: SUNVNET_COMMON should depend on INET
MichelleJin <[email protected]>
mac80211: check return value of rhashtable_init
王贇 <[email protected]>
net: prevent user from passing illegal stab size
Al Viro <[email protected]>
m68k: Handle arrivals of multiple signals correctly
YueHaibing <[email protected]>
mac80211: Drop frames from invalid MAC address in ad-hoc mode
Jeremy Sowden <[email protected]>
netfilter: ip6_tables: zero-initialize fragment offset
Mizuho Mori <[email protected]>
HID: apple: Fix logical maximum and usage maximum of Magic Keyboard JIS
Florian Fainelli <[email protected]>
net: phy: bcm7xxx: Fixed indirect MMD operations
-------------
Diffstat:
Makefile | 4 +- arch/m68k/kernel/signal.c | 88 ++++++++++++++++++------------------- arch/x86/events/core.c | 1 + drivers/hid/hid-apple.c | 7 +++ drivers/net/ethernet/sun/Kconfig | 1 + drivers/net/phy/bcm7xxx.c | 94 ++++++++++++++++++++++++++++++++++++++++ drivers/scsi/ses.c | 2 +- drivers/scsi/virtio_scsi.c | 4 +- include/linux/sched.h | 2 +- include/net/pkt_sched.h | 1 + net/ipv6/netfilter/ip6_tables.c | 1 + net/mac80211/mesh_pathtbl.c | 5 ++- net/mac80211/rx.c | 3 +- net/sched/sch_api.c | 6 +++ 14 files changed, 165 insertions(+), 54 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/12 net: phy: bcm7xxx: Fixed indirect MMD operations
From: Florian Fainelli <[email protected]>
commit d88fd1b546ff19c8040cfaea76bf16aed1c5a0bb upstream.
When EEE support was added to the 28nm EPHY it was assumed that it would be able to support the standard clause 45 over clause 22 register access method. It turns out that the PHY does not support that, which is the very reason for using the indirect shadow mode 2 bank 3 access method.
Implement {read,write}_mmd to allow the standard PHY library routines pertaining to EEE querying and configuration to work correctly on these PHYs. This forces us to implement a __phy_set_clr_bits() function that does not grab the MDIO bus lock since the PHY driver's {read,write}_mmd functions are always called with that lock held.
[florian: adjust locking since phy_{read,write}_mmd are called with no PHYLIB locks held]
--- drivers/net/phy/bcm7xxx.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+)
drivers/net/phy/bcm7xxx.c +94 -0
@@ -30,7 +30,12 @@#define MII_BCM7XXX_SHD_2_ADDR_CTRL 0xe#define MII_BCM7XXX_SHD_2_CTRL_STAT 0xf#define MII_BCM7XXX_SHD_2_BIAS_TRIM 0x1a +#define MII_BCM7XXX_SHD_3_PCS_CTRL 0x0 +#define MII_BCM7XXX_SHD_3_PCS_STATUS 0x1 +#define MII_BCM7XXX_SHD_3_EEE_CAP 0x2#define MII_BCM7XXX_SHD_3_AN_EEE_ADV 0x3 +#define MII_BCM7XXX_SHD_3_EEE_LP 0x4 +#define MII_BCM7XXX_SHD_3_EEE_WK_ERR 0x5#define MII_BCM7XXX_SHD_3_PCS_CTRL_2 0x6#define MII_BCM7XXX_PCS_CTRL_2_DEF 0x4400#define MII_BCM7XXX_SHD_3_AN_STAT 0xb
@@ -463,6 +468,93 @@ static int bcm7xxx_28nm_ephy_config_initreturn bcm7xxx_28nm_ephy_apd_enable (phydev); } +#define MII_BCM7XXX_REG_INVALID 0xff + +static u8 bcm7xxx_28nm_ephy_regnum_to_shd (u16 regnum) +{ +switch (regnum) { +case MDIO_CTRL1 : +return MII_BCM7XXX_SHD_3_PCS_CTRL ; +case MDIO_STAT1 : +return MII_BCM7XXX_SHD_3_PCS_STATUS ; +case MDIO_PCS_EEE_ABLE : +return MII_BCM7XXX_SHD_3_EEE_CAP ; +case MDIO_AN_EEE_ADV : +return MII_BCM7XXX_SHD_3_AN_EEE_ADV ; +case MDIO_AN_EEE_LPABLE : +return MII_BCM7XXX_SHD_3_EEE_LP ; +case MDIO_PCS_EEE_WK_ERR : +return MII_BCM7XXX_SHD_3_EEE_WK_ERR ; +default : +return MII_BCM7XXX_REG_INVALID ; + } +} + +static bool bcm7xxx_28nm_ephy_dev_valid (int devnum) +{ +return devnum ==MDIO_MMD_AN || devnum ==MDIO_MMD_PCS ; +} + +static int bcm7xxx_28nm_ephy_read_mmd (struct phy_device *phydev, +int devnum,u16 regnum) +{ +u8 shd =bcm7xxx_28nm_ephy_regnum_to_shd (regnum); +int ret; + +if (!bcm7xxx_28nm_ephy_dev_valid (devnum) || + shd ==MII_BCM7XXX_REG_INVALID ) +return -EOPNOTSUPP ; + +/* set shadow mode 2 */ + ret =phy_set_clr_bits (phydev,MII_BCM7XXX_TEST , +MII_BCM7XXX_SHD_MODE_2 ,0 ); +if (ret <0 ) +return ret; + +/* Access the desired shadow register address */ + ret =phy_write (phydev,MII_BCM7XXX_SHD_2_ADDR_CTRL , shd); +if (ret <0 ) + goto reset_shadow_mode; + + ret =phy_read (phydev,MII_BCM7XXX_SHD_2_CTRL_STAT ); + +reset_shadow_mode: +/* reset shadow mode 2 */ +phy_set_clr_bits (phydev,MII_BCM7XXX_TEST ,0 , +MII_BCM7XXX_SHD_MODE_2 ); +return ret; +} + +static int bcm7xxx_28nm_ephy_write_mmd (struct phy_device *phydev, +int devnum,u16 regnum,u16 val) +{ +u8 shd =bcm7xxx_28nm_ephy_regnum_to_shd (regnum); +int ret; + +if (!bcm7xxx_28nm_ephy_dev_valid (devnum) || + shd ==MII_BCM7XXX_REG_INVALID ) +return -EOPNOTSUPP ; + +/* set shadow mode 2 */ + ret =phy_set_clr_bits (phydev,MII_BCM7XXX_TEST , +MII_BCM7XXX_SHD_MODE_2 ,0 ); +if (ret <0 ) +return ret; + +/* Access the desired shadow register address */ + ret =phy_write (phydev,MII_BCM7XXX_SHD_2_ADDR_CTRL , shd); +if (ret <0 ) + goto reset_shadow_mode; + +/* Write the desired value in the shadow register */ +phy_write (phydev,MII_BCM7XXX_SHD_2_CTRL_STAT , val); + +reset_shadow_mode: +/* reset shadow mode 2 */ +return phy_set_clr_bits (phydev,MII_BCM7XXX_TEST ,0 , +MII_BCM7XXX_SHD_MODE_2 ); +} +static int bcm7xxx_28nm_ephy_resume (struct phy_device *phydev) {int ret;
@@ -634,6 +726,8 @@ static int bcm7xxx_28nm_probe(struct phy .get_strings = bcm_phy_get_strings, \ .get_stats = bcm7xxx_28nm_get_phy_stats, \ .probe = bcm7xxx_28nm_probe, \ + .read_mmd = bcm7xxx_28nm_ephy_read_mmd, \ + .write_mmd = bcm7xxx_28nm_ephy_write_mmd, \ }#define BCM7XXX_40NM_EPHY (_oui, _name) \
Greg Kroah-Hartman
maintainerPATCH 2/12 HID: apple: Fix logical maximum and usage maximum of Magic Keyboard JIS
In reply to Greg Kroah-HartmanFrom: Mizuho Mori <[email protected]>
[ Upstream commit 67fd71ba16a37c663d139f5ba5296f344d80d072 ]
Apple Magic Keyboard(JIS)'s Logical Maximum and Usage Maximum are wrong.
Below is a report descriptor.
0x05, 0x01, /* Usage Page (Desktop), */ 0x09, 0x06, /* Usage (Keyboard), */ 0xA1, 0x01, /* Collection (Application), */ 0x85, 0x01, /* Report ID (1), */ 0x05, 0x07, /* Usage Page (Keyboard), */ 0x15, 0x00, /* Logical Minimum (0), */ 0x25, 0x01, /* Logical Maximum (1), */ 0x19, 0xE0, /* Usage Minimum (KB Leftcontrol), */ 0x29, 0xE7, /* Usage Maximum (KB Right GUI), */ 0x75, 0x01, /* Report Size (1), */ 0x95, 0x08, /* Report Count (8), */ 0x81, 0x02, /* Input (Variable), */ 0x95, 0x05, /* Report Count (5), */ 0x75, 0x01, /* Report Size (1), */ 0x05, 0x08, /* Usage Page (LED), */ 0x19, 0x01, /* Usage Minimum (01h), */ 0x29, 0x05, /* Usage Maximum (05h), */ 0x91, 0x02, /* Output (Variable), */ 0x95, 0x01, /* Report Count (1), */ 0x75, 0x03, /* Report Size (3), */ 0x91, 0x03, /* Output (Constant, Variable), */ 0x95, 0x08, /* Report Count (8), */ 0x75, 0x01, /* Report Size (1), */ 0x15, 0x00, /* Logical Minimum (0), */ 0x25, 0x01, /* Logical Maximum (1), */
here is a report descriptor which is parsed one in kernel. see sys/kernel/debug/hid/<dev>/rdesc
05 01 09 06 a1 01 85 01 05 07
15 00 25 01 19 e0 29 e7 75 01
95 08 81 02 95 05 75 01 05 08
19 01 29 05 91 02 95 01 75 03
91 03 95 08 75 01 15 00 25 01
06 00 ff 09 03 81 03 95 06 75
08 15 00 25 [65] 05 07 19 00 29
[65] 81 00 95 01 75 01 15 00 25
01 05 0c 09 b8 81 02 95 01 75
01 06 01 ff 09 03 81 02 95 01
75 06 81 03 06 02 ff 09 55 85
55 15 00 26 ff 00 75 08 95 40
b1 a2 c0 06 00 ff 09 14 a1 01
85 90 05 84 75 01 95 03 15 00
25 01 09 61 05 85 09 44 09 46
81 02 95 05 81 01 75 08 95 01
15 00 26 ff 00 09 65 81 02 c0
00
Position 64(Logical Maximum) and 70(Usage Maximum) are 101. Both should be 0xE7 to support JIS specific keys(ろ, Eisu, Kana, |) support. position 117 is also 101 but not related(it is Usage 65h).
There are no difference of product id between JIS and ANSI. They are same 0x0267.
--- drivers/hid/hid-apple.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/hid/hid-apple.c +7 -0
@@ -304,12 +304,19 @@ static int apple_event(struct hid_device *hdev, struct hid_field *field,/* * MacBook JIS keyboard has wrong logical maximum +* Magic Keyboard JIS has wrong logical maximum */ static __u8 *apple_report_fixup (struct hid_device *hdev,__u8 *rdesc,unsigned int *rsize) {struct apple_sc *asc =hid_get_drvdata (hdev); +if (*rsize >=71 && rdesc[70 ] ==0x65 && rdesc[64 ] ==0x65 ) { +hid_info (hdev, +"fixing up Magic Keyboard JIS report descriptor\n" ); + rdesc[64 ] = rdesc[70 ] =0xe7 ; + } +if ((asc->quirks &APPLE_RDESC_JIS ) && *rsize >=60 && rdesc[53 ] ==0x65 && rdesc[59 ] ==0x65 ) { hid_info(hdev,
Signature · 1 line
2.33.0
Greg Kroah-Hartman
maintainerPATCH 3/12 netfilter: ip6_tables: zero-initialize fragment offset
In reply to Greg Kroah-HartmanFrom: Jeremy Sowden <[email protected]>
[ Upstream commit 310e2d43c3ad429c1fba4b175806cf1f55ed73a6 ]
ip6tables only sets the IP6T_F_PROTO flag on a rule if a protocol is specified (-p tcp, for example). However, if the flag is not set, ip6_packet_match doesn't call ipv6_find_hdr for the skb, in which case the fragment offset is left uninitialized and a garbage value is passed to each matcher.
--- net/ipv6/netfilter/ip6_tables.c | 1 + 1 file changed, 1 insertion(+)
net/ipv6/netfilter/ip6_tables.c +1 -0
@@ -276,6 +276,7 @@ ip6t_do_table(struct sk_buff *skb,* things we don't know, ie. tcp syn flag or ports). If the * rule is also a fragment-specific rule, non-fragments won't * match it. */ + acpar.fragoff =0 ; acpar.hotdrop = false; acpar.state = state;
Signature · 1 line
2.33.0
Greg Kroah-Hartman
maintainerPATCH 4/12 mac80211: Drop frames from invalid MAC address in ad-hoc mode
In reply to Greg Kroah-HartmanFrom: YueHaibing <[email protected]>
[ Upstream commit a6555f844549cd190eb060daef595f94d3de1582 ]
WARNING: CPU: 1 PID: 9 at net/mac80211/sta_info.c:554 sta_info_insert_rcu+0x121/0x12a0 Modules linked in: CPU: 1 PID: 9 Comm: kworker/u8:1 Not tainted 5.14.0-rc7+ #253 Workqueue: phy3 ieee80211_iface_work RIP: 0010:sta_info_insert_rcu+0x121/0x12a0 ... Call Trace: ieee80211_ibss_finish_sta+0xbc/0x170 ieee80211_ibss_work+0x13f/0x7d0 ieee80211_iface_work+0x37a/0x500 process_one_work+0x357/0x850 worker_thread+0x41/0x4d0
If an Ad-Hoc node receives packets with invalid source MAC address, it hits a WARN_ON in sta_info_insert_check(), this can spam the log.
--- net/mac80211/rx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/mac80211/rx.c +2 -1
@@ -3875,7 +3875,8 @@ static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx)if (!bssid)return false;if (ether_addr_equal (sdata->vif.addr, hdr->addr2) || -ether_addr_equal (sdata->u.ibss.bssid, hdr->addr2)) +ether_addr_equal (sdata->u.ibss.bssid, hdr->addr2) || + !is_valid_ether_addr (hdr->addr2))return false;if (ieee80211_is_beacon (hdr->frame_control))return true;
Signature · 1 line
2.33.0
Greg Kroah-Hartman
maintainerPATCH 5/12 m68k: Handle arrivals of multiple signals correctly
In reply to Greg Kroah-HartmanFrom: Al Viro <[email protected]>
[ Upstream commit 4bb0bd81ce5e97092dfda6a106d414b703ec0ee8 ]
When we have several pending signals, have entered with the kernel with large exception frame *and* have already built at least one sigframe, regs->stkadj is going to be non-zero and regs->format/sr/pc are going to be junk - the real values are in shifted exception stack frame we'd built when putting together the first sigframe.
If that happens, subsequent sigframes are going to be garbage. Not hard to fix - just need to find the "adjusted" frame first and look for format/vector/sr/pc in it.
--- arch/m68k/kernel/signal.c | 88 +++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 46 deletions(-)
arch/m68k/kernel/signal.c +42 -46
@@ -448,7 +448,7 @@ static inline void save_fpu_state(struct sigcontext *sc, struct pt_regs *regs)if (CPU_IS_060 ? sc->sc_fpstate[2 ] : sc->sc_fpstate[0 ]) { fpu_version = sc->sc_fpstate[0 ]; -if (CPU_IS_020_OR_030 && +if (CPU_IS_020_OR_030 && !regs->stkadj && regs->vector >= (VEC_FPBRUC *4 ) && regs->vector <= (VEC_FPNAN *4 )) {/* Clear pending exception in 68882 idle frame */
@@ -511,7 +511,7 @@ static inline int rt_save_fpu_state(struct ucontext __user *uc, struct pt_regs *if (!(CPU_IS_060 ||CPU_IS_COLDFIRE )) context_size = fpstate[1 ]; fpu_version = fpstate[0 ]; -if (CPU_IS_020_OR_030 && +if (CPU_IS_020_OR_030 && !regs->stkadj && regs->vector >= (VEC_FPBRUC *4 ) && regs->vector <= (VEC_FPNAN *4 )) {/* Clear pending exception in 68882 idle frame */
@@ -828,18 +828,24 @@ badframe:return 0 ; } +static inline struct pt_regs *rte_regs (struct pt_regs *regs) +{ +return (void *)regs + regs->stkadj; +} +static void setup_sigcontext (struct sigcontext *sc,struct pt_regs *regs,unsigned long mask) { +struct pt_regs *tregs =rte_regs (regs); sc->sc_mask = mask; sc->sc_usp =rdusp (); sc->sc_d0 = regs->d0; sc->sc_d1 = regs->d1; sc->sc_a0 = regs->a0; sc->sc_a1 = regs->a1; - sc->sc_sr = regs->sr; - sc->sc_pc = regs->pc; - sc->sc_formatvec = regs->format <<12 | regs->vector; + sc->sc_sr = tregs->sr; + sc->sc_pc = tregs->pc; + sc->sc_formatvec = tregs->format <<12 | tregs->vector;save_a5_state (sc, regs);save_fpu_state (sc, regs); }
@@ -847,6 +853,7 @@ static void setup_sigcontext(struct sigcontext *sc, struct pt_regs *regs,static inline int rt_setup_ucontext (struct ucontext __user *uc,struct pt_regs *regs) {struct switch_stack *sw = (struct switch_stack *)regs -1 ; +struct pt_regs *tregs =rte_regs (regs);greg_t __user *gregs = uc->uc_mcontext.gregs;int err =0 ;
@@ -867,9 +874,9 @@ static inline int rt_setup_ucontext(struct ucontext __user *uc, struct pt_regs * err |=__put_user (sw->a5, &gregs[13 ]); err |=__put_user (sw->a6, &gregs[14 ]); err |=__put_user (rdusp (), &gregs[15 ]); - err |=__put_user (regs->pc, &gregs[16 ]); - err |=__put_user (regs->sr, &gregs[17 ]); - err |=__put_user ((regs->format <<12 ) | regs->vector, &uc->uc_formatvec); + err |=__put_user (tregs->pc, &gregs[16 ]); + err |=__put_user (tregs->sr, &gregs[17 ]); + err |=__put_user ((tregs->format <<12 ) | tregs->vector, &uc->uc_formatvec); err |=rt_save_fpu_state (uc, regs);return err; }
@@ -886,13 +893,14 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs) {struct sigframe __user *frame; -int fsize =frame_extra_sizes (regs->format); +struct pt_regs *tregs =rte_regs (regs); +int fsize =frame_extra_sizes (tregs->format);struct sigcontext context;int err =0 , sig = ksig->sig;if (fsize <0 ) {pr_debug ("setup_frame: Unknown frame format %#x\n" , - regs->format); + tregs->format);return -EFAULT ; }
@@ -903,7 +911,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, err |=__put_user (sig, &frame->sig); - err |=__put_user (regs->vector, &frame->code); + err |=__put_user (tregs->vector, &frame->code); err |=__put_user (&frame->sc, &frame->psc);if (_NSIG_WORDS >1 )
@@ -928,34 +936,28 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set,push_cache ((unsigned long ) &frame->retcode); -/* -* Set up registers for signal handler. All the state we are about -* to destroy is successfully copied to sigframe. -*/ -wrusp ((unsigned long ) frame); - regs->pc = (unsigned long ) ksig->ka.sa.sa_handler; -adjustformat (regs); -/* * This is subtle; if we build more than one sigframe, all but the * first one will see frame format 0 and have fsize == 0, so we won't * screw stkadj. */ -if (fsize) +if (fsize) { regs->stkadj = fsize; - -/* Prepare to skip over the extra stuff in the exception frame. */ -if (regs->stkadj) { -struct pt_regs *tregs = - (struct pt_regs *)((ulong )regs + regs->stkadj); + tregs =rte_regs (regs);pr_debug ("Performing stackadjust=%04lx\n" , regs->stkadj); -/* This must be copied with decreasing addresses to -handle overlaps. */ tregs->vector =0 ; tregs->format =0 ; - tregs->pc = regs->pc; tregs->sr = regs->sr; } + +/* +* Set up registers for signal handler. All the state we are about +* to destroy is successfully copied to sigframe. +*/ +wrusp ((unsigned long ) frame); + tregs->pc = (unsigned long ) ksig->ka.sa.sa_handler; +adjustformat (regs); +return 0 ; }
@@ -963,7 +965,8 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs) {struct rt_sigframe __user *frame; -int fsize =frame_extra_sizes (regs->format); +struct pt_regs *tregs =rte_regs (regs); +int fsize =frame_extra_sizes (tregs->format);int err =0 , sig = ksig->sig;if (fsize <0 ) {
@@ -1012,34 +1015,27 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,push_cache ((unsigned long ) &frame->retcode); -/* -* Set up registers for signal handler. All the state we are about -* to destroy is successfully copied to sigframe. -*/ -wrusp ((unsigned long ) frame); - regs->pc = (unsigned long ) ksig->ka.sa.sa_handler; -adjustformat (regs); -/* * This is subtle; if we build more than one sigframe, all but the * first one will see frame format 0 and have fsize == 0, so we won't * screw stkadj. */ -if (fsize) +if (fsize) { regs->stkadj = fsize; - -/* Prepare to skip over the extra stuff in the exception frame. */ -if (regs->stkadj) { -struct pt_regs *tregs = - (struct pt_regs *)((ulong )regs + regs->stkadj); + tregs =rte_regs (regs);pr_debug ("Performing stackadjust=%04lx\n" , regs->stkadj); -/* This must be copied with decreasing addresses to -handle overlaps. */ tregs->vector =0 ; tregs->format =0 ; - tregs->pc = regs->pc; tregs->sr = regs->sr; } + +/* +* Set up registers for signal handler. All the state we are about +* to destroy is successfully copied to sigframe. +*/ +wrusp ((unsigned long ) frame); + tregs->pc = (unsigned long ) ksig->ka.sa.sa_handler; +adjustformat (regs);return 0 ; }
Signature · 1 line
2.33.0
Greg Kroah-Hartman
maintainerPATCH 6/12 net: prevent user from passing illegal stab size
In reply to Greg Kroah-HartmanFrom: 王贇 <[email protected]>
[ Upstream commit b193e15ac69d56f35e1d8e2b5d16cbd47764d053 ]
We observed below report when playing with netlink sock:
UBSAN: shift-out-of-bounds in net/sched/sch_api.c:580:10 shift exponent 249 is too large for 32-bit type CPU: 0 PID: 685 Comm: a.out Not tainted Call Trace: dump_stack_lvl+0x8d/0xcf ubsan_epilogue+0xa/0x4e __ubsan_handle_shift_out_of_bounds+0x161/0x182 __qdisc_calculate_pkt_len+0xf0/0x190 __dev_queue_xmit+0x2ed/0x15b0
it seems like kernel won't check the stab log value passing from user, and will use the insane value later to calculate pkt_len.
This patch just add a check on the size/cell_log to avoid insane calculation.
--- include/net/pkt_sched.h | 1 + net/sched/sch_api.c | 6 ++++++ 2 files changed, 7 insertions(+)
include/net/pkt_sched.h +1 -0
@@ -11,6 +11,7 @@#include <uapi/linux/pkt_sched.h> #define DEFAULT_TX_QUEUE_LEN 1000 +#define STAB_SIZE_LOG_MAX 30struct qdisc_walker {int stop;
net/sched/sch_api.c +6 -0
@@ -498,6 +498,12 @@ static struct qdisc_size_table *qdisc_get_stab(struct nlattr *opt,return stab; } +if (s->size_log >STAB_SIZE_LOG_MAX || + s->cell_log >STAB_SIZE_LOG_MAX ) { +NL_SET_ERR_MSG (extack,"Invalid logarithmic size of size table" ); +return ERR_PTR (-EINVAL ); + } + stab =kmalloc (sizeof (*stab) + tsize *sizeof (u16),GFP_KERNEL );if (!stab)return ERR_PTR (-ENOMEM );
Signature · 1 line
2.33.0
Greg Kroah-Hartman
maintainerPATCH 7/12 mac80211: check return value of rhashtable_init
In reply to Greg Kroah-HartmanFrom: MichelleJin <[email protected]>
[ Upstream commit 111461d573741c17eafad029ac93474fa9adcce0 ]
When rhashtable_init() fails, it returns -EINVAL. However, since error return value of rhashtable_init is not checked, it can cause use of uninitialized pointers.
So, fix unhandled errors of rhashtable_init.
--- net/mac80211/mesh_pathtbl.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
net/mac80211/mesh_pathtbl.c +4 -1
@@ -63,7 +63,10 @@ static struct mesh_table *mesh_table_alloc(void)atomic_set (&newtbl->entries,0 );spin_lock_init (&newtbl->gates_lock);spin_lock_init (&newtbl->walk_lock); -rhashtable_init (&newtbl->rhead, &mesh_rht_params); +if (rhashtable_init (&newtbl->rhead, &mesh_rht_params)) { +kfree (newtbl); +return NULL ; + }return newtbl; }
Signature · 1 line
2.33.0
Greg Kroah-Hartman
maintainerPATCH 8/12 net: sun: SUNVNET_COMMON should depend on INET
In reply to Greg Kroah-HartmanFrom: Randy Dunlap <[email protected]>
[ Upstream commit 103bde372f084206c6972be543ecc247ebbff9f3 ]
When CONFIG_INET is not set, there are failing references to IPv4 functions, so make this driver depend on INET.
Fixes these build errors:
sparc64-linux-ld: drivers/net/ethernet/sun/sunvnet_common.o: in function `sunvnet_start_xmit_common':
sunvnet_common.c:(.text+0x1a68): undefined reference to `__icmp_send'
sparc64-linux-ld: drivers/net/ethernet/sun/sunvnet_common.o: in function `sunvnet_poll_common':
sunvnet_common.c:(.text+0x358c): undefined reference to `ip_send_check'
--- drivers/net/ethernet/sun/Kconfig | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/sun/Kconfig +1 -0
@@ -73,6 +73,7 @@ config CASSINI config SUNVNET_COMMON tristate "Common routines to support Sun Virtual Networking" depends on SUN_LDOMS + depends on INET default m config SUNVNET
Signature · 1 line
2.33.0
Greg Kroah-Hartman
maintainerPATCH 9/12 scsi: ses: Fix unsigned comparison with less than zero
In reply to Greg Kroah-HartmanFrom: Jiapeng Chong <[email protected]>
[ Upstream commit dd689ed5aa905daf4ba4c99319a52aad6ea0a796 ]
Fix the following coccicheck warning:
./drivers/scsi/ses.c:137:10-16: WARNING: Unsigned expression compared with zero: result > 0.
--- drivers/scsi/ses.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/scsi/ses.c +1 -1
@@ -134,7 +134,7 @@ static int ses_recv_diag(struct scsi_device *sdev, int page_code,static int ses_send_diag (struct scsi_device *sdev,int page_code,void *buf,int bufflen) { -u32 result; +int result;unsigned char cmd[] = {SEND_DIAGNOSTIC ,
Signature · 1 line
2.33.0
Greg Kroah-Hartman
maintainerPATCH 10/12 scsi: virtio_scsi: Fix spelling mistake "Unsupport" -> "Unsupported"
In reply to Greg Kroah-HartmanFrom: Colin Ian King <[email protected]>
[ Upstream commit cced4c0ec7c06f5230a2958907a409c849762293 ]
There are a couple of spelling mistakes in pr_info and pr_err messages. Fix them.
--- drivers/scsi/virtio_scsi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/scsi/virtio_scsi.c +2 -2
@@ -336,7 +336,7 @@ static void virtscsi_handle_transport_reset(struct virtio_scsi *vscsi, }break ;default : -pr_info ("Unsupport virtio scsi event reason %x\n" , event->reason); +pr_info ("Unsupported virtio scsi event reason %x\n" , event->reason); } }
@@ -389,7 +389,7 @@ static void virtscsi_handle_event(struct work_struct *work)virtscsi_handle_param_change (vscsi, event);break ;default : -pr_err ("Unsupport virtio scsi event %x\n" , event->event); +pr_err ("Unsupported virtio scsi event %x\n" , event->event); }virtscsi_kick_event (vscsi, event_node); }
Signature · 1 line
2.33.0
Greg Kroah-Hartman
maintainerPATCH 11/12 perf/x86: Reset destroy callback on event init failure
In reply to Greg Kroah-HartmanFrom: Anand K Mistry <[email protected]>
[ Upstream commit 02d029a41dc986e2d5a77ecca45803857b346829 ]
perf_init_event tries multiple init callbacks and does not reset the event state between tries. When x86_pmu_event_init runs, it unconditionally sets the destroy callback to hw_perf_event_destroy. On the next init attempt after x86_pmu_event_init, in perf_try_init_event, if the pmu's capabilities includes PERF_PMU_CAP_NO_EXCLUDE, the destroy callback will be run. However, if the next init didn't set the destroy callback, hw_perf_event_destroy will be run (since the callback wasn't reset).
Looking at other pmu init functions, the common pattern is to only set the destroy callback on a successful init. Resetting the callback on failure tries to replicate that pattern.
This was discovered after commit f11dd0d80555 ("perf/x86/amd/ibs: Extend PERF_PMU_CAP_NO_EXCLUDE to IBS Op") when the second (and only second) run of the perf tool after a reboot results in 0 samples being generated. The extra run of hw_perf_event_destroy results in active_events having an extra decrement on each perf run. The second run has active_events == 0 and every subsequent run has active_events < 0. When active_events == 0, the NMI handler will early-out and not record any samples.
--- arch/x86/events/core.c | 1 + 1 file changed, 1 insertion(+)
arch/x86/events/core.c +1 -0
@@ -2096,6 +2096,7 @@ static int x86_pmu_event_init(struct perf_event *event)if (err) {if (event->destroy) event->destroy (event); + event->destroy =NULL ; } if (READ_ONCE(x86_pmu.attr_rdpmc) &&
Signature · 1 line
2.33.0
Greg Kroah-Hartman
maintainerPATCH 12/12 sched: Always inline is_percpu_thread()
In reply to Greg Kroah-HartmanFrom: Peter Zijlstra <[email protected]>
[ Upstream commit 83d40a61046f73103b4e5d8f1310261487ff63b0 ]
vmlinux.o: warning: objtool: check_preemption_disabled()+0x81: call to is_percpu_thread() leaves .noinstr.text section
--- include/linux/sched.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/linux/sched.h +1 -1
@@ -1433,7 +1433,7 @@ extern struct pid *cad_pid;#define tsk_used_math (p) ((p)->flags & PF_USED_MATH)#define used_math () tsk_used_math(current) -static inline bool is_percpu_thread (void ) +static __always_inline bool is_percpu_thread(void) {#ifdef CONFIG_SMP return (current->flags & PF_NO_SETAFFINITY) &&
Signature · 1 line
2.33.0
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.19.212 release. There are 12 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 16 Oct 2021 14:51:59 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.19.212-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.19.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v4.19:
10 builds: 10 pass, 0 fail
22 boots: 22 pass, 0 fail
40 tests: 40 pass, 0 failLinux version: 4.19.212-rc1-g2be6a8418bd1
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra20-ventana,
tegra210-p2371-2180, tegra30-cardhu-a04Jon
Hi!
Quoted 4 lines
This is the start of the stable review cycle for the 4.19.212 release. There are 12 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
CIP testing did not find any kernel problems here: (some boards are unavailable)
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/tree/linux-4.19.y
Best regards,
Pavel
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.19.212 release. There are 12 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 16 Oct 2021 14:51:59 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.19.212-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.19.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.19.212 release. There are 12 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 16 Oct 2021 14:51:59 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.19.212-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.19.y
and the diffstat can be found below.thanks,
greg k-h
Tested on arm64 and x86 for 4.19.212-rc1,
Kernel repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Branch: linux-4.19.y
Version: 4.19.212-rc1
Commit: 2be6a8418bd1568db7e752ea68f73e6f24fca984
Compiler: gcc version 7.3.0 (GCC)
arm64:
--------------------------------------------------------------------
Testcase Result Summary:
total: 8859
passed: 8859
failed: 0
timeout: 0
--------------------------------------------------------------------
x86:
--------------------------------------------------------------------
Testcase Result Summary:
total: 8859
passed: 8859
failed: 0
timeout: 0
--------------------------------------------------------------------
Hi Greg,
Quoted 7 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.19.212 release. There are 12 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 16 Oct 2021 14:51:59 +0000. Anything received after that time might be too late.
Build test:
mips (gcc version 11.2.1 20211012): 63 configs -> no failure arm (gcc version 11.2.1 20211012): 116 configs -> no new failure arm64 (gcc version 11.2.1 20211012): 2 configs -> no failure x86_64 (gcc version 10.2.1 20210110): 4 configs -> no failure
Boot test:x86_64: Booted on my test laptop. No regression.x86_64: Booted on qemu. No regression. [1]
[1]. https://openqa.qa.codethink.co.uk/tests/265
--
Regards
Sudip
Hello!
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.19.212 release. There are 12 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 16 Oct 2021 14:51:59 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.19.212-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.19.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro's test farm.
No regressions on arm64, arm, x86_64, and i386.
## Build
* kernel: 4.19.212-rc1
* git: ['https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git', 'https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable-rc']
* git branch: linux-4.19.y
* git commit: 2be6a8418bd1568db7e752ea68f73e6f24fca984
* git describe: v4.19.211-13-g2be6a8418bd1
* test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-4.19.y/build/v4.19.211-13-g2be6a8418bd1
## No regressions (compared to v4.19.211)
## No fixes (compared to v4.19.211)
## Test result summary
total: 83844, pass: 67315, fail: 797, skip: 13617, xfail: 2115
## Build Summary
* arm: 129 total, 129 passed, 0 failed
* arm64: 37 total, 37 passed, 0 failed
* dragonboard-410c: 1 total, 1 passed, 0 failed
* hi6220-hikey: 1 total, 1 passed, 0 failed
* i386: 18 total, 18 passed, 0 failed
* juno-r2: 1 total, 1 passed, 0 failed
* mips: 29 total, 29 passed, 0 failed
* s390: 12 total, 12 passed, 0 failed
* sparc: 12 total, 12 passed, 0 failed
* x15: 1 total, 1 passed, 0 failed
* x86: 1 total, 1 passed, 0 failed
* x86_64: 21 total, 21 passed, 0 failed
## Test suites summary
* fwts
* igt-gpu-tools
* kselftest-android
* kselftest-arm64
* kselftest-bpf
* kselftest-breakpoints
* kselftest-capabilities
* kselftest-cgroup
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-cpufreq
* kselftest-drivers
* kselftest-efivarfs
* kselftest-filesystems
* kselftest-firmware
* kselftest-fpu
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-ir
* kselftest-kcmp
* kselftest-kexec
* kselftest-kvm
* kselftest-lib
* kselftest-livepatch
* kselftest-membarrier
* kselftest-memfd
* kselftest-memory-hotplug
* kselftest-mincore
* kselftest-mount
* kselftest-mqueue
* kselftest-net
* kselftest-netfilter
* kselftest-nsfs
* kselftest-openat2
* kselftest-pid_namespace
* kselftest-pidfd
* kselftest-proc
* kselftest-pstore
* kselftest-ptrace
* kselftest-rseq
* kselftest-rtc
* kselftest-seccomp
* kselftest-sigaltstack
* kselftest-size
* kselftest-splice
* kselftest-static_keys
* kselftest-sync
* kselftest-sysctl
* kselftest-tc-testing
* kselftest-timens
* kselftest-timers
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user
* kselftest-vm
* kselftest-x86
* kselftest-zram
* kvm-unit-tests
* libhugetlbfs
* linux-log-parser
* ltp-cap_bounds-tests
* ltp-commands-tests
* ltp-containers-tests
* ltp-controllers-tests
* ltp-cpuhotplug-tests
* ltp-crypto-tests
* ltp-cve-tests
* ltp-dio-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-hugetlb-tests
* ltp-io-tests
* ltp-ipc-tests
* ltp-math-tests
* ltp-mm-tests
* ltp-nptl-tests
* ltp-open-posix-tests
* ltp-pty-tests
* ltp-sched-tests
* ltp-securebits-tests
* ltp-syscalls-tests
* ltp-tracing-tests
* network-basic-tests
* packetdrill
* perf
* rcutorture
* ssuite
* v4l2-compliance
Greetings!
Daniel Díaz
[email protected]
Signature · 2 lines
Linaro LKFT https://lkft.linaro.org
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.19.212 release. There are 12 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Sat, 16 Oct 2021 14:51:59 +0000. Anything received after that time might be too late.
Build results:
total: 155 pass: 155 fail: 0 Qemu test results: total: 439 pass: 439 fail: 0
Guenter