5.10.211-rc1 review
Subsystems (5)
Greg Kroah-Hartman
maintainerPATCH 111/122 s390: use the correct count for __iowrite64_copy()
In reply to Greg Kroah-Hartman5.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jason Gunthorpe <[email protected]>
[ Upstream commit 723a2cc8d69d4342b47dfddbfe6c19f1b135f09b ]
The signature for __iowrite64_copy() requires the number of 64 bit quantities, not bytes. Multiple by 8 to get to a byte length before invoking zpci_memcpy_toio()
--- arch/s390/pci/pci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/s390/pci/pci.c +1 -1
@@ -225,7 +225,7 @@ resource_size_t pcibios_align_resource(void *data, const struct resource *res,/* combine single writes by using store-block insn */ void __iowrite64_copy (void __iomem *to,const void *from,size_t count) { -zpci_memcpy_toio (to, from, count); +zpci_memcpy_toio (to, from, count *8 ); }static void __iomem *__ioremap (phys_addr_t addr,size_t size,pgprot_t prot)
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 112/122 tls: rx: jump to a more appropriate label
In reply to Greg Kroah-Hartman5.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jakub Kicinski <[email protected]>
[ Upstream commit bfc06e1aaa130b86a81ce3c41ec71a2f5e191690 ]
'recv_end:' checks num_async and decrypted, and is then followed by the 'end' label. Since we know that decrypted and num_async are 0 at the start we can jump to 'end'.
Move the init of decrypted and num_async to let the compiler catch if I'm wrong.
Stable-dep-of: fdfbaec5923d ("tls: stop recv() if initial process_rx_list gave us non-DATA")
--- net/tls/tls_sw.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
net/tls/tls_sw.c +4 -3
@@ -1754,6 +1754,7 @@ int tls_sw_recvmsg(struct sock *sk,struct tls_sw_context_rx *ctx =tls_sw_ctx_rx (tls_ctx);struct tls_prot_info *prot = &tls_ctx->prot_info;struct sk_psock *psock; +int num_async, pending;unsigned char control =0 ;ssize_t decrypted =0 ;struct strp_msg *rxm;
@@ -1766,8 +1767,6 @@ int tls_sw_recvmsg(struct sock *sk,bool is_kvec =iov_iter_is_kvec (&msg->msg_iter);bool is_peek = flags &MSG_PEEK ;bool bpf_strp_enabled; -int num_async =0 ; -int pending; flags |= nonblock;
@@ -1789,12 +1788,14 @@ int tls_sw_recvmsg(struct sock *sk, }if (len <= copied) - goto recv_end; + goto end; target =sock_rcvlowat (sk, flags &MSG_WAITALL , len); len = len - copied; timeo =sock_rcvtimeo (sk, flags &MSG_DONTWAIT ); + decrypted =0 ; + num_async =0 ;while (len && (decrypted + copied < target || ctx->recv_pkt)) {bool retain_skb = false;bool zc = false;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 113/122 tls: rx: drop pointless else after goto
In reply to Greg Kroah-Hartman5.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jakub Kicinski <[email protected]>
[ Upstream commit d5123edd10cf9d324fcb88e276bdc7375f3c5321 ]
Pointless else branch after goto makes the code harder to refactor down the line.
Stable-dep-of: fdfbaec5923d ("tls: stop recv() if initial process_rx_list gave us non-DATA")
--- net/tls/tls_sw.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
net/tls/tls_sw.c +1 -2
@@ -1783,10 +1783,9 @@ int tls_sw_recvmsg(struct sock *sk,if (err <0 ) {tls_err_abort (sk, err); goto end; - }else { - copied = err; } + copied = err;if (len <= copied) goto end;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 114/122 tls: stop recv() if initial process_rx_list gave us non-DATA
In reply to Greg Kroah-Hartman5.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sabrina Dubroca <[email protected]>
[ Upstream commit fdfbaec5923d9359698cbb286bc0deadbb717504 ]
If we have a non-DATA record on the rx_list and another record of the same type still on the queue, we will end up merging them:
- process_rx_list copies the non-DATA record
- we start the loop and process the first available record since it's of the same type
- we break out of the loop since the record was not DATA
Just check the record type and jump to the end in case process_rx_list did some work.
--- net/tls/tls_sw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/tls/tls_sw.c +1 -1
@@ -1786,7 +1786,7 @@ int tls_sw_recvmsg(struct sock *sk, } copied = err; -if (len <= copied) +if (len <= copied || (copied && control !=TLS_RECORD_TYPE_DATA )) goto end; target =sock_rcvlowat (sk, flags &MSG_WAITALL , len);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 115/122 netfilter: nf_tables: set dormant flag on hook register failure
In reply to Greg Kroah-Hartman5.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Florian Westphal <[email protected]>
[ Upstream commit bccebf64701735533c8db37773eeacc6566cc8ec ]
We need to set the dormant flag again if we fail to register the hooks.
During memory pressure hook registration can fail and we end up with a table marked as active but no registered hooks.
On table/base chain deletion, nf_tables will attempt to unregister the hook again which yields a warn splat from the nftables core.
--- net/netfilter/nf_tables_api.c | 1 + 1 file changed, 1 insertion(+)
net/netfilter/nf_tables_api.c +1 -0
@@ -1132,6 +1132,7 @@ static int nf_tables_updtable(struct nft_ctx *ctx)return 0 ; err_register_hooks: + ctx->table->flags |=NFT_TABLE_F_DORMANT ;nft_trans_destroy (trans);return ret; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 116/122 drm/syncobj: make lockdep complain on WAIT_FOR_SUBMIT v3
In reply to Greg Kroah-Hartman5.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian König <[email protected]>
[ Upstream commit 7621350c6bb20fb6ab7eb988833ab96eac3dcbef ]
DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT can't be used when we hold locks since we are basically waiting for userspace to do something.
Holding a lock while doing so can trivial deadlock with page faults etc...
So make lockdep complain when a driver tries to do this.
v2: Add lockdep_assert_none_held() macro.
v3: Add might_sleep() and also use lockdep_assert_none_held() in the
IOCTL path.
Stable-dep-of: 3c43177ffb54 ("drm/syncobj: call drm_syncobj_fence_add_wait when WAIT_AVAILABLE flag is set")
--- drivers/gpu/drm/drm_syncobj.c | 12 ++++++++++++ include/linux/lockdep.h | 5 +++++ 2 files changed, 17 insertions(+)
drivers/gpu/drm/drm_syncobj.c +12 -0
@@ -387,6 +387,15 @@ int drm_syncobj_find_fence(struct drm_file *file_private,if (!syncobj)return -ENOENT ; +/* Waiting for userspace with locks help is illegal cause that can +* trivial deadlock with page faults for example. Make lockdep complain +* about it early on. +*/ +if (flags &DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT ) { +might_sleep (); +lockdep_assert_none_held_once (); + } + *fence =drm_syncobj_fence_get (syncobj);if (*fence) {
@@ -951,6 +960,9 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs,uint64_t *points;uint32_t signaled_count, i; +if (flags &DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT ) +lockdep_assert_none_held_once (); + points =kmalloc_array (count,sizeof (*points),GFP_KERNEL );if (points ==NULL )return -ENOMEM ;
include/linux/lockdep.h +5 -0
@@ -321,6 +321,10 @@ extern void lock_unpin_lock(struct lockdep_map *lock, struct pin_cookie);WARN_ON_ONCE (debug_locks && !lockdep_is_held (l)); \ } while (0) +#define lockdep_assert_none_held_once () do { \ + WARN_ON_ONCE(debug_locks && current->lockdep_depth); \ + } while (0) +#define lockdep_recursing (tsk) ((tsk)->lockdep_recursion)#define lockdep_pin_lock (l) lock_pin_lock(&(l)->dep_map)
@@ -394,6 +398,7 @@ static inline void lockdep_unregister_key(struct lock_class_key *key)#define lockdep_assert_held_write (l) do { (void)(l); } while (0)#define lockdep_assert_held_read (l) do { (void)(l); } while (0)#define lockdep_assert_held_once (l) do { (void)(l); } while (0) +#define lockdep_assert_none_held_once () do { } while (0)#define lockdep_recursing (tsk) (0)
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 117/122 drm/syncobj: call drm_syncobj_fence_add_wait when WAIT_AVAILABLE flag is set
In reply to Greg Kroah-Hartman5.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Erik Kurzinger <[email protected]>
[ Upstream commit 3c43177ffb54ea5be97505eb8e2690e99ac96bc9 ]
When waiting for a syncobj timeline point whose fence has not yet been submitted with the WAIT_FOR_SUBMIT flag, a callback is registered using drm_syncobj_fence_add_wait and the thread is put to sleep until the timeout expires. If the fence is submitted before then, drm_syncobj_add_point will wake up the sleeping thread immediately which will proceed to wait for the fence to be signaled.
However, if the WAIT_AVAILABLE flag is used instead, drm_syncobj_fence_add_wait won't get called, meaning the waiting thread will always sleep for the full timeout duration, even if the fence gets submitted earlier. If it turns out that the fence *has* been submitted by the time it eventually wakes up, it will still indicate to userspace that the wait completed successfully (it won't return -ETIME), but it will have taken much longer than it should have.
To fix this, we must call drm_syncobj_fence_add_wait if *either* the WAIT_FOR_SUBMIT flag or the WAIT_AVAILABLE flag is set. The only difference being that with WAIT_FOR_SUBMIT we will also wait for the fence to be signaled after it has been submitted while with WAIT_AVAILABLE we will return immediately.
IGT test patch: https://lists.freedesktop.org/archives/igt-dev/2024-January/067537.html
v1 -> v2: adjust lockdep_assert_none_held_once condition
(cherry picked from commit 8c44ea81634a4a337df70a32621a5f3791be23df)
--- drivers/gpu/drm/drm_syncobj.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/gpu/drm/drm_syncobj.c +4 -2
@@ -960,7 +960,8 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs,uint64_t *points;uint32_t signaled_count, i; -if (flags &DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT ) +if (flags & (DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT | +DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE ))lockdep_assert_none_held_once (); points =kmalloc_array (count,sizeof (*points),GFP_KERNEL );
@@ -1029,7 +1030,8 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs,* fallthough and try a 0 timeout wait! */ -if (flags &DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT ) { +if (flags & (DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT | +DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE )) {for (i =0 ; i < count; ++i)drm_syncobj_fence_add_wait (syncobjs[i], &entries[i]); }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 118/122 drm/amd/display: Fix memory leak in dm_sw_fini()
In reply to Greg Kroah-Hartman5.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Armin Wolf <[email protected]>
[ Upstream commit bae67893578d608e35691dcdfa90c4957debf1d3 ]
After destroying dmub_srv, the memory associated with it is not freed, causing a memory leak:
unreferenced object 0xffff896302b45800 (size 1024):
comm "(udev-worker)", pid 222, jiffies 4294894636 hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace (crc 6265fd77):
[<ffffffff993495ed>] kmalloc_trace+0x29d/0x340
[<ffffffffc0ea4a94>] dm_dmub_sw_init+0xb4/0x450 [amdgpu]
[<ffffffffc0ea4e55>] dm_sw_init+0x15/0x2b0 [amdgpu]
[<ffffffffc0ba8557>] amdgpu_device_init+0x1417/0x24e0 [amdgpu]
[<ffffffffc0bab285>] amdgpu_driver_load_kms+0x15/0x190 [amdgpu]
[<ffffffffc0ba09c7>] amdgpu_pci_probe+0x187/0x4e0 [amdgpu]
[<ffffffff9968fd1e>] local_pci_probe+0x3e/0x90
[<ffffffff996918a3>] pci_device_probe+0xc3/0x230
[<ffffffff99805872>] really_probe+0xe2/0x480
[<ffffffff99805c98>] __driver_probe_device+0x78/0x160
[<ffffffff99805daf>] driver_probe_device+0x1f/0x90
[<ffffffff9980601e>] __driver_attach+0xce/0x1c0
[<ffffffff99803170>] bus_for_each_dev+0x70/0xc0
[<ffffffff99804822>] bus_add_driver+0x112/0x210
[<ffffffff99807245>] driver_register+0x55/0x100
[<ffffffff990012d1>] do_one_initcall+0x41/0x300Fix this by freeing dmub_srv after destroying it.
--- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 + 1 file changed, 1 insertion(+)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +1 -0
@@ -1456,6 +1456,7 @@ static int dm_sw_fini(void *handle)if (adev->dm.dmub_srv) {dmub_srv_destroy (adev->dm.dmub_srv); +kfree (adev->dm.dmub_srv); adev->dm.dmub_srv =NULL ; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 119/122 block: ataflop: more blk-mq refactoring fixes
In reply to Greg Kroah-Hartman5.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Schmitz <[email protected]>
commit d28e4dff085c5a87025c9a0a85fb798bd8e9ca17 upstream.
As it turns out, my earlier patch in commit 86d46fdaa12a (block:
ataflop: fix breakage introduced at blk-mq refactoring) was incomplete. This patch fixes any remaining issues found during more testing and code review.
Requests exceeding 4 k are handled in 4k segments but __blk_mq_end_request() is never called on these (still sectors outstanding on the request). With redo_fd_request() removed, there is no provision to kick off processing of the next segment, causing requests exceeding 4k to hang. (By setting /sys/block/fd0/queue/max_sectors_k <= 4 as workaround, this behaviour can be avoided).
Instead of reintroducing redo_fd_request(), requeue the remainder of the request by calling blk_mq_requeue_request() on incomplete requests (i.e. when blk_update_request() still returns true), and rely on the block layer to queue the residual as new request.
Both error handling and formatting needs to release the ST-DMA lock, so call finish_fdc() on these (this was previously handled by redo_fd_request()). finish_fdc() may be called legitimately without the ST-DMA lock held - make sure we only release the lock if we actually held it. In a similar way, early exit due to errors in ataflop_queue_rq() must release the lock.
After minor errors, fd_error sets up to recalibrate the drive but never re-runs the current operation (another task handled by redo_fd_request() before). Call do_fd_action() to get the next steps (seek, retry read/write) underway.
--- drivers/block/ataflop.c | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-)
drivers/block/ataflop.c +37 -5
@@ -456,10 +456,20 @@ static DEFINE_TIMER(fd_timer, check_chanstatic void fd_end_request_cur (blk_status_t err) { +DPRINT (("fd_end_request_cur(), bytes %d of %d\n" , +blk_rq_cur_bytes (fd_request), +blk_rq_bytes (fd_request))); +if (!blk_update_request (fd_request, err,blk_rq_cur_bytes (fd_request))) { +DPRINT (("calling __blk_mq_end_request()\n" ));__blk_mq_end_request (fd_request, err); fd_request =NULL ; + }else { +/* requeue rest of request */ +DPRINT (("calling blk_mq_requeue_request()\n" )); +blk_mq_requeue_request (fd_request, true); + fd_request =NULL ; } }
@@ -697,12 +707,21 @@ static void fd_error( void )if (fd_request->error_count >=MAX_ERRORS ) {printk (KERN_ERR "fd%d: too many errors.\n" , SelectedDrive );fd_end_request_cur (BLK_STS_IOERR ); +finish_fdc (); +return ; }else if (fd_request->error_count ==RECALIBRATE_ERRORS ) {printk (KERN_WARNING "fd%d: recalibrating\n" , SelectedDrive );if (SelectedDrive !=-1 )SUD .track =-1 ; } +/* need to re-run request to recalibrate */ +atari_disable_irq (IRQ_MFP_FDC ); + +setup_req_params ( SelectedDrive ); +do_fd_action ( SelectedDrive ); + +atari_enable_irq (IRQ_MFP_FDC ); }
@@ -737,6 +756,7 @@ static int do_format(int drive, int typeif (type) {if (--type >=NUM_DISK_MINORS || minor2disktype[type].drive_types > DriveType) { +finish_fdc (); ret = -EINVAL ; goto out; }
@@ -745,6 +765,7 @@ static int do_format(int drive, int type }if (!UDT || desc->track >=UDT ->blocks/UDT ->spt/2 || desc->head >=2 ) { +finish_fdc (); ret = -EINVAL ; goto out; }
@@ -785,6 +806,7 @@ static int do_format(int drive, int typewait_for_completion (&format_wait); +finish_fdc (); ret = FormatError ? -EIO :0 ; out:blk_mq_unquiesce_queue (q);
@@ -819,6 +841,7 @@ static void do_fd_action( int drive )else {/* all sectors finished */ fd_end_request_cur (BLK_STS_OK ); +finish_fdc ();return ; } }
@@ -1222,8 +1245,8 @@ static void fd_rwsec_done1(int status) }else {/* all sectors finished */ -finish_fdc ();fd_end_request_cur (BLK_STS_OK ); +finish_fdc (); }return ;
@@ -1345,7 +1368,7 @@ static void fd_times_out(struct timer_listatic void finish_fdc (void ) { -if (!NeedSeek) { +if (!NeedSeek || !stdma_is_locked_by (floppy_irq)) {finish_fdc_done (0 ); }else {
@@ -1380,7 +1403,8 @@ static void finish_fdc_done( int dummy )start_motor_off_timer ();local_irq_save (flags); -stdma_release (); +if (stdma_is_locked_by (floppy_irq)) +stdma_release ();local_irq_restore (flags);DPRINT (("finish_fdc() finished\n" ));
@@ -1477,7 +1501,9 @@ static blk_status_t ataflop_queue_rq(strint drive = floppy - unit;int type = floppy->type; -DPRINT (("Queue request: drive %d type %d last %d\n" , drive, type, bd->last)); +DPRINT (("Queue request: drive %d type %d sectors %d of %d last %d\n" , + drive, type,blk_rq_cur_sectors (bd->rq), +blk_rq_sectors (bd->rq), bd->last));spin_lock_irq (&ataflop_lock);if (fd_request) {
@@ -1499,6 +1525,7 @@ static blk_status_t ataflop_queue_rq(str/* drive not connected */ printk (KERN_ERR "Unknown Device: fd%d\n" , drive );fd_end_request_cur (BLK_STS_IOERR ); +stdma_release (); goto out; }
@@ -1515,11 +1542,13 @@ static blk_status_t ataflop_queue_rq(strif (--type >=NUM_DISK_MINORS ) {printk (KERN_WARNING "fd%d: invalid disk format" , drive );fd_end_request_cur (BLK_STS_IOERR ); +stdma_release (); goto out; }if (minor2disktype[type].drive_types > DriveType) {printk (KERN_WARNING "fd%d: unsupported disk format" , drive );fd_end_request_cur (BLK_STS_IOERR ); +stdma_release (); goto out; } type = minor2disktype[type].index;
@@ -1620,6 +1649,7 @@ static int fd_locked_ioctl(struct block_/* what if type > 0 here? Overwrite specified entry ? */ if (type) {/* refuse to re-set a predefined type for now */ +finish_fdc ();return -EINVAL ; }
@@ -1687,8 +1717,10 @@ static int fd_locked_ioctl(struct block_/* sanity check */ if (setprm.track != dtp->blocks/dtp->spt/2 || - setprm.head !=2 ) + setprm.head !=2 ) { +finish_fdc ();return -EINVAL ; + }UDT = dtp;set_capacity (floppy->disk,UDT ->blocks);
Greg Kroah-Hartman
maintainerPATCH 120/122 fs/aio: Restrict kiocb_set_cancel_fn() to I/O submitted via libaio
In reply to Greg Kroah-Hartman5.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bart Van Assche <[email protected]>
commit b820de741ae48ccf50dd95e297889c286ff4f760 upstream.
If kiocb_set_cancel_fn() is called for I/O submitted via io_uring, the following kernel warning appears:
WARNING: CPU: 3 PID: 368 at fs/aio.c:598 kiocb_set_cancel_fn+0x9c/0xa8 Call trace: kiocb_set_cancel_fn+0x9c/0xa8 ffs_epfile_read_iter+0x144/0x1d0 io_read+0x19c/0x498 io_issue_sqe+0x118/0x27c io_submit_sqes+0x25c/0x5fc __arm64_sys_io_uring_enter+0x104/0xab0 invoke_syscall+0x58/0x11c el0_svc_common+0xb4/0xf4 do_el0_svc+0x2c/0xb0 el0_svc+0x2c/0xa4 el0t_64_sync_handler+0x68/0xb4 el0t_64_sync+0x1a4/0x1a8
Fix this by setting the IOCB_AIO_RW flag for read and write I/O that is submitted by libaio.
--- fs/aio.c | 9 ++++++++- include/linux/fs.h | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-)
fs/aio.c +8 -1
@@ -569,6 +569,13 @@ void kiocb_set_cancel_fn(struct kiocb *istruct kioctx *ctx = req->ki_ctx;unsigned long flags; +/* +* kiocb didn't come from aio or is neither a read nor a write, hence +* ignore it. +*/ +if (!(iocb->ki_flags &IOCB_AIO_RW )) +return ; +if (WARN_ON_ONCE (!list_empty (&req->ki_list)))return ;
@@ -1454,7 +1461,7 @@ static int aio_prep_rw(struct kiocb *req req->ki_complete = aio_complete_rw; req->private =NULL ; req->ki_pos = iocb->aio_offset; - req->ki_flags =iocb_flags (req->ki_filp); + req->ki_flags =iocb_flags (req->ki_filp) |IOCB_AIO_RW ;if (iocb->aio_flags &IOCB_FLAG_RESFD ) req->ki_flags |=IOCB_EVENTFD ; req->ki_hint =ki_hint_validate (file_write_hint (req->ki_filp));
include/linux/fs.h +2 -0
@@ -316,6 +316,8 @@ enum rw_hint {/* iocb->ki_waitq is valid */ #define IOCB_WAITQ (1 << 19)#define IOCB_NOIO (1 << 20) +/* kiocb is a read or write operation submitted by fs/aio.c. */ +#define IOCB_AIO_RW (1 << 23)struct kiocb {struct file *ki_filp;
Greg Kroah-Hartman
maintainerPATCH 121/122 arp: Prevent overflow in arp_req_get().
In reply to Greg Kroah-Hartman5.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kuniyuki Iwashima <[email protected]>
commit a7d6027790acea24446ddd6632d394096c0f4667 upstream.
syzkaller reported an overflown write in arp_req_get(). [0]
When ioctl(SIOCGARP) is issued, arp_req_get() looks up an neighbour entry and copies neigh->ha to struct arpreq.arp_ha.sa_data.
The arp_ha here is struct sockaddr, not struct sockaddr_storage, so the sa_data buffer is just 14 bytes.
In the splat below, 2 bytes are overflown to the next int field, arp_flags. We initialise the field just after the memcpy(), so it's not a problem.
However, when dev->addr_len is greater than 22 (e.g. MAX_ADDR_LEN), arp_netmask is overwritten, which could be set as htonl(0xFFFFFFFFUL) in arp_ioctl() before calling arp_req_get().
To avoid the overflow, let's limit the max length of memcpy().
Note that commit b5f0de6df6dc ("net: dev: Convert sa_data to flexible array in struct sockaddr") just silenced syzkaller.
[0]:
memcpy: detected field-spanning write (size 16) of single field "r->arp_ha.sa_data" at net/ipv4/arp.c:1128 (size 14)
WARNING: CPU: 0 PID: 144638 at net/ipv4/arp.c:1128 arp_req_get+0x411/0x4a0 net/ipv4/arp.c:1128 Modules linked in: CPU: 0 PID: 144638 Comm: syz-executor.4 Not tainted 6.1.74 #31 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.0-debian-1.16.0-5 04/01/2014 RIP: 0010:arp_req_get+0x411/0x4a0 net/ipv4/arp.c:1128 Code: fd ff ff e8 41 42 de fb b9 0e 00 00 00 4c 89 fe 48 c7 c2 20 6d ab 87 48 c7 c7 80 6d ab 87 c6 05 25 af 72 04 01 e8 5f 8d ad fb <0f> 0b e9 6c fd ff ff e8 13 42 de fb be 03 00 00 00 4c 89 e7 e8 a6 RSP: 0018:ffffc900050b7998 EFLAGS: 00010286 RAX: 0000000000000000 RBX: ffff88803a815000 RCX: 0000000000000000 RDX: 0000000000000000 RSI: ffffffff8641a44a RDI: 0000000000000001 RBP: ffffc900050b7a98 R08: 0000000000000001 R09: 0000000000000000 R10: 0000000000000000 R11: 203a7970636d656d R12: ffff888039c54000 R13: 1ffff92000a16f37 R14: ffff88803a815084 R15: 0000000000000010 FS: 00007f172bf306c0(0000) GS:ffff88805aa00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f172b3569f0 CR3: 0000000057f12005 CR4: 0000000000770ef0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 PKRU: 55555554 Call Trace: <TASK> arp_ioctl+0x33f/0x4b0 net/ipv4/arp.c:1261 inet_ioctl+0x314/0x3a0 net/ipv4/af_inet.c:981 sock_do_ioctl+0xdf/0x260 net/socket.c:1204 sock_ioctl+0x3ef/0x650 net/socket.c:1321 vfs_ioctl fs/ioctl.c:51 [inline] __do_sys_ioctl fs/ioctl.c:870 [inline] __se_sys_ioctl fs/ioctl.c:856 [inline] __x64_sys_ioctl+0x18e/0x220 fs/ioctl.c:856 do_syscall_x64 arch/x86/entry/common.c:51 [inline] do_syscall_64+0x37/0x90 arch/x86/entry/common.c:81 entry_SYSCALL_64_after_hwframe+0x64/0xce RIP: 0033:0x7f172b262b8d Code: 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007f172bf300b8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010 RAX: ffffffffffffffda RBX: 00007f172b3abf80 RCX: 00007f172b262b8d RDX: 0000000020000000 RSI: 0000000000008954 RDI: 0000000000000003 RBP: 00007f172b2d3493 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 000000000000000b R14: 00007f172b3abf80 R15: 00007f172bf10000 </TASK>
--- net/ipv4/arp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/ipv4/arp.c +2 -1
@@ -1104,7 +1104,8 @@ static int arp_req_get(struct arpreq *r,if (neigh) {if (!(neigh->nud_state &NUD_NOARP )) {read_lock_bh (&neigh->lock); -memcpy (r->arp_ha.sa_data, neigh->ha, dev->addr_len); +memcpy (r->arp_ha.sa_data, neigh->ha, +min (dev->addr_len,sizeof (r->arp_ha.sa_data_min))); r->arp_flags =arp_state_to_flags (neigh);read_unlock_bh (&neigh->lock); r->arp_ha.sa_family = dev->type;
Greg Kroah-Hartman
maintainerPATCH 122/122 ext4: regenerate buddy after block freeing failed if under fc replay
In reply to Greg Kroah-Hartman5.10-stable review patch. If anyone has any objections, please let me know.
------------------
From: Baokun Li <[email protected]>
commit c9b528c35795b711331ed36dc3dbee90d5812d4e upstream.
This mostly reverts commit 6bd97bf273bd ("ext4: remove redundant mb_regenerate_buddy()") and reintroduces mb_regenerate_buddy(). Based on code in mb_free_blocks(), fast commit replay can end up marking as free blocks that are already marked as such. This causes corruption of the buddy bitmap so we need to regenerate it in that case.
--- fs/ext4/mballoc.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
fs/ext4/mballoc.c +20 -0
@@ -823,6 +823,24 @@ void ext4_mb_generate_buddy(struct superatomic64_add (period, &sbi->s_mb_generation_time); } +static void mb_regenerate_buddy (struct ext4_buddy *e4b) +{ +int count; +int order =1 ; +void *buddy; + +while ((buddy =mb_find_buddy (e4b, order++, &count))) +ext4_set_bits (buddy,0 , count); + + e4b->bd_info->bb_fragments =0 ; +memset (e4b->bd_info->bb_counters,0 , +sizeof (*e4b->bd_info->bb_counters) * + (e4b->bd_sb->s_blocksize_bits +2 )); + +ext4_mb_generate_buddy (e4b->bd_sb, e4b->bd_buddy, + e4b->bd_bitmap, e4b->bd_group, e4b->bd_info); +} +/* The buddy information is attached the buddy cache inode * for convenience. The information regarding each group * is loaded via ext4_mb_load_buddy. The information involve
@@ -1505,6 +1523,8 @@ static void mb_free_blocks(struct inodeext4_mark_group_bitmap_corrupted ( sb, e4b->bd_group,EXT4_GROUP_INFO_BBITMAP_CORRUPT ); + }else { +mb_regenerate_buddy (e4b); } goto done; }
Hi!
Quoted 4 lines
This is the start of the stable review cycle for the 5.10.211 release. There are 122 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 problems here:
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/tree/linux-5.10.y
Best regards,
Pavel
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Erika Unter HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Hello!
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.211 release. There are 122 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 Thu, 29 Feb 2024 13:15:36 +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/v5.x/stable-review/patch-5.10.211-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.thanks,
greg k-h
We're seeing new warnings on 32-bits architectures: Arm, i386, PowerPC, RISC-V and System/390:
-----8<-----
builds/linux/net/ipv4/arp.c: In function 'arp_req_get':
/builds/linux/include/linux/minmax.h:20:35: warning: comparison of distinct pointer types lacks a cast
20 | (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
| ^~
/builds/linux/include/linux/minmax.h:26:18: note: in expansion of macro '__typecheck'
26 | (__typecheck(x, y) && __no_side_effects(x, y))
| ^~~~~~~~~~~
/builds/linux/include/linux/minmax.h:36:31: note: in expansion of macro '__safe_cmp'
36 | __builtin_choose_expr(__safe_cmp(x, y), \
| ^~~~~~~~~~
/builds/linux/include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
45 | #define min(x, y) __careful_cmp(x, y, <)
| ^~~~~~~~~~~~~
/builds/linux/net/ipv4/arp.c:1108:32: note: in expansion of macro 'min'
1108 | min(dev->addr_len, sizeof(r->arp_ha.sa_data_min)));
| ^~~----->8-----
Bisection points to:
commit 5a2d57992eca13530ac79ae287243b3ff6b01128
Author: Kuniyuki Iwashima <[email protected]>
Date: Thu Feb 15 15:05:16 2024 -0800
arp: Prevent overflow in arp_req_get().
commit a7d6027790acea24446ddd6632d394096c0f4667 upstream.
Tuxmake reproducers:
tuxmake --runtime podman --target-arch arm --toolchain gcc-12 --kconfig davinci_all_defconfig tuxmake --runtime podman --target-arch i386 --toolchain gcc-12 --kconfig defconfig tuxmake --runtime podman --target-arch powerpc --toolchain gcc-12 --kconfig maple_defconfig tuxmake --runtime podman --target-arch riscv --toolchain gcc-12 --kconfig defconfig
Reverting the change made the build pass again without warnings.
Greetings!
Daniel Díaz
[email protected]
Quoted 17 lines · Daniel Díaz
Hello!
Quoted 14 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.211 release. There are 122 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 Thu, 29 Feb 2024 13:15:36 +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/v5.x/stable-review/patch-5.10.211-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-5.10.y and the diffstat can be found below.
Quoted 5 lines
Quoted 3 lines
thanks,
greg k-h
We're seeing new warnings on 32-bits architectures: Arm, i386, PowerPC, RISC-V and System/390:
Seeing the same thing here.
Signature · 1 line
Florian
Greg Kroah-Hartman
maintainerQuoted 42 lines · Daniel Díaz
Hello!
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.211 release. There are 122 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 Thu, 29 Feb 2024 13:15:36 +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/v5.x/stable-review/patch-5.10.211-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.thanks,
greg k-h
We're seeing new warnings on 32-bits architectures: Arm, i386, PowerPC, RISC-V and System/390:
-----8<-----
builds/linux/net/ipv4/arp.c: In function 'arp_req_get':
/builds/linux/include/linux/minmax.h:20:35: warning: comparison of distinct pointer types lacks a cast20 | (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1))) | ^~ /builds/linux/include/linux/minmax.h:26:18: note: in expansion of macro '__typecheck' 26 | (__typecheck(x, y) && __no_side_effects(x, y)) | ^~~~~~~~~~~ /builds/linux/include/linux/minmax.h:36:31: note: in expansion of macro '__safe_cmp' 36 | __builtin_choose_expr(__safe_cmp(x, y), \ | ^~~~~~~~~~ /builds/linux/include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp' 45 | #define min(x, y) __careful_cmp(x, y, <) | ^~~~~~~~~~~~~ /builds/linux/net/ipv4/arp.c:1108:32: note: in expansion of macro 'min' 1108 | min(dev->addr_len, sizeof(r->arp_ha.sa_data_min))); | ^~~----->8-----
Quoted 8 lines
Bisection points to:
commit
5a2d57992eca13530ac79ae287243b3ff6b01128
Author: Kuniyuki Iwashima <[email protected]>
Date: Thu Feb 15 15:05:16 2024 -0800arp: Prevent overflow in
arp_req_get().
commita7d6027790acea24446ddd6632d394096c0f4667upstream.
Ugh, I fixed this up for 5.15, but forgot to do so for older kernels, my fault. I'll go update it now.
thanks,
greg k-h
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.211 release. There are 122 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 Thu, 29 Feb 2024 13:15:36 +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/v5.x/stable-review/patch-5.10.211-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.thanks,
greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels, build tested on BMIPS_GENERIC:
Same warning as what Daniel reported for ARM 32-bit:
In file included from ./include/linux/kernel.h:15,
from ./include/linux/list.h:9,
from ./include/linux/module.h:12,
from net/ipv4/arp.c:74:net/ipv4/arp.c: In function 'arp_req_get':./include/linux/minmax.h:20:35: warning: comparison of distinct pointer types lacks a cast
20 | (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
| ^~./include/linux/minmax.h:26:18: note: in expansion of macro '__typecheck'
26 | (__typecheck(x, y) && __no_side_effects(x, y))
| ^~~~~~~~~~~
./include/linux/minmax.h:36:31: note: in expansion of macro '__safe_cmp'
36 | __builtin_choose_expr(__safe_cmp(x, y), \
| ^~~~~~~~~~
./include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
45 | #define min(x, y) __careful_cmp(x, y, <)
| ^~~~~~~~~~~~~net/ipv4/arp.c:1108:32: note: in expansion of macro 'min'
1108 | min(dev->addr_len,sizeof(r->arp_ha.sa_data_min)));
| ^~~
Signature · 1 line
Florian
Greg Kroah-Hartman wrote on Tue, Feb 27, 2024 at 02:26:01PM +0100:
Quoted 4 lines
Kees Cook <[email protected]>
net: dev: Convertsa_datato flexible array in struct sockaddr
(ca13c2b1e9e4b5d982c2f1e75f28b1586e5c0f7fin this tree,b5f0de6df6dce8d641ef58ef7012f3304dffb9a1upstream)
This commit breaks build of some 3rd party wireless module we use here (because sizeof(sa->sa_data) no longer works and needs to use sa_data_min)
With that said I guess it really is a dependency on the arp_req_get overflow, so probably necessary evil, and I don't think we explicitly pretend to preserve APIs for 3rd party modules so this is probably fine... The new warnings that poped up (and were reported in other messages) a probably worth checking though.
That aside no particular problem actually running this, so-- Tested 5d69d611e74d ("Linux 5.10.211-rc1") on:
- arm i.MX6ULL (Armadillo 640)
- arm64 i.MX8MP (Armadillo G4)
No obvious regression in dmesg or basic tests:
Signature · 1 line
Dominique Martinet | Asmadeus
Greg Kroah-Hartman
maintainerQuoted 6 lines · Dominique Martinet
Greg Kroah-Hartman wrote on Tue, Feb 27, 2024 at 02:26:01PM +0100:
Quoted 4 lines
Kees Cook <[email protected]>
net: dev: Convertsa_datato flexible array in struct sockaddr
(ca13c2b1e9e4b5d982c2f1e75f28b1586e5c0f7fin this tree,b5f0de6df6dce8d641ef58ef7012f3304dffb9a1upstream)
Quoted 8 lines
This commit breaks build of some 3rd party wireless module we use here (because
sizeof(sa->sa_data)no longer works and needs to usesa_data_min)
With that said I guess it really is a dependency on thearp_req_getoverflow, so probably necessary evil, and I don't think we explicitly pretend to preserve APIs for 3rd party modules so this is probably fine... The new warnings that poped up (and were reported in other messages) a probably worth checking though.
We NEVER preserve in-kernel APIs for any out-of-tree code as obviously, we have no idea what out-of-tree code is actually using, so it would be impossible to do so.
Also, it's odd that a driver is hit by this as no in-kernel driver was, so perhaps it's using the wrong api to start with :)
thanks,
greg k-h
Quoted 10 lines · Greg Kroah-Hartman
Quoted 9 lines · Dominique Martinet
Greg Kroah-Hartman wrote on Tue, Feb 27, 2024 at 02:26:01PM +0100:
Quoted 4 lines
Kees Cook <[email protected]>
net: dev: Convertsa_datato flexible array in struct sockaddr
(ca13c2b1e9e4b5d982c2f1e75f28b1586e5c0f7fin this tree,b5f0de6df6dce8d641ef58ef7012f3304dffb9a1upstream)This commit breaks build of some 3rd party wireless module we use here (because
sizeof(sa->sa_data)no longer works and needs to usesa_data_min)
Just FYI, it's possible that things using sizeof(sa->sa_data) were buggy to begin with since the struct size isn't actually dictated by that size (it's only the minimum possible size).
Quoted 6 lines
Quoted 5 lines
With that said I guess it really is a dependency on the
arp_req_getoverflow, so probably necessary evil, and I don't think we explicitly pretend to preserve APIs for 3rd party modules so this is probably fine... The new warnings that poped up (and were reported in other messages) a probably worth checking though.
Quoted 6 lines
We NEVER preserve in-kernel APIs for any out-of-tree code as obviously, we have no idea what out-of-tree code is actually using, so it would be impossible to do so.
Also, it's odd that a driver is hit by this as no in-kernel driver was, so perhaps it's using the wrong api to start with :)
The reason is that most drivers don't want this size (see above) and all the in-tree code that did need adjustment got adjusted (visible in the referenced patch). :) But that's the risk of an out-of-tree driver:
it doesn't get those fixes automatically.
Out of curiosity, which drivers broke and what's needed to get them into upstream (or at least staging)?
-Kees
Signature · 1 line
Kees Cook
Kees Cook wrote on Wed, Feb 28, 2024 at 12:39:42PM -0800:
Quoted 7 lines
Quoted 3 lines
Quoted 3 lines
This commit breaks build of some 3rd party wireless module we use here (because
sizeof(sa->sa_data)no longer works and needs to usesa_data_min)Just FYI, it's possible that things using
sizeof(sa->sa_data)were buggy to begin with since the struct size isn't actually dictated by that size (it's only the minimum possible size).
Yes, I definitely agree with this.
As it's "vendor stuff" I just replaced with sa_data_min because that preserves the values, but it ought to get a second look. I'd love to pretend that driver's upstream will do the right thing and use proper values here on newer kernel but upon checking its >6.2 tree support now they apparently did the same instead of getting the size properly.
Quoted 3 lines
Quoted 3 lines
We NEVER preserve in-kernel APIs for any out-of-tree code as obviously, we have no idea what out-of-tree code is actually using, so it would be impossible to do so.
Right, I just don't see much "common struct" changes in stable tree patches -- stuff like livepatches or weak modules and whatsnot don't like these so some downstreams (redhat to name them) try very hard to keep these constants for the lifetime of a given stable release... iirc they go as far as adding some padding fields to some structs that are likely to need fiddling so they can do this while preserving binary compatibility.
I understand the upstream stable kernels don't make such promise (and given the amount of work that probably goes into it, rightfully so! I wouldn't exect you or anyone to do this here), just pointed it out as part of my usual test round for anyone else who'd care.
Quoted 2 lines
Out of curiosity, which drivers broke and what's needed to get them into upstream (or at least staging)?
Sure, it was NXP's wifi chips driver:
https://github.com/nxp-imx/mwifiex/
It's mostly based on drivers/net/wireless/marvell/mwifiex but has since been quite extensively modified, so it'd take quite a bit of effort to upstream as a separate entity (changing a few names to avoid conflcts so both can be built together... Add to that the requirement for a compatible firmware with a restrictive license... And that NXP isn't exactly focused on upstreaming); I have little hope of seeing it upstream at this point unfortunately and gave up on it as part of maintaining an embedded kernel "port" as it's sadly far from being only one :/
(I especially don't get it as I consider maintaining a bunch of spaghetti ifdef on kernel versions to be much more work than getting the driver upstream once, but I guess I'm barking at the wrong tree here)
Thanks,
Signature · 1 line
Dominique Martinet | Asmadeus
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.211 release. There are 122 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 Thu, 29 Feb 2024 13:15:36 +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/v5.x/stable-review/patch-5.10.211-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v5.10:
10 builds: 10 pass, 0 fail
26 boots: 26 pass, 0 fail
68 tests: 68 pass, 0 failLinux version: 5.10.211-rc1-g5d69d611e74d
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000,
tegra20-ventana, tegra210-p2371-2180,
tegra210-p3450-0000, tegra30-cardhu-a04Jon
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.10.211 release. There are 122 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.
Quoted 9 lines
Responses should be made by Thu, 29 Feb 2024 13:15:36 +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/v5.x/stable-review/patch-5.10.211-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.10.y
and the diffstat can be found below.
KernelCI report for stable-rc/linux-5.10.y for this week.
## stable-rc HEAD for linux-5.10.y:
Date: 2024-02-27
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git/log/?h=5d69d611e74dd9f58af23f171ccd3405a650c6ed
## Build failures:
No build failures seen for the stable-rc/linux-5.10.y commit head \o/
## Boot failures:
No **new** boot failures seen for the stable-rc/linux-5.10.y commit head \o/
Thanks,
Shreeya Patel