Skip to contentSkip to conversation

6.1.191-rc1 review

PATCH In review Greg Kroah-Hartman 10 participants 1,907 messages Oct 28 – Nov 9 Page 1 of 16

Subsystems (12)
lore
Share & tools
lore
author maintainer
#1 lore raw

PATCH 1/1887 io-wq: order the exit bit against worker creation task work

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Christian Brauner <[email protected]>

Commit 0e5663856b69219ef2f02e04bac9f5c5be19718a upstream.

io_wq_exit_workers() cancels task work for queued worker creation with task_work_cancel_match(). That has a plain load of task->task_works.

io_queue_worker_create() adds the new entry and tests IO_WQ_BIT_EXIT to cancel it if the workqueue is already on its way out.

That must be ordered. task_work_add() has a full barrier via cmpxchg(). But io_wq_exit_start() sets the bit with set_bit() which doesn't have any memory ordering.

So afaict, on weakly ordered architectures the exiting task may load task_works before the store of the bit is visible. The other side tests the bit before the store is visible as well. So the entry remains queued with worker_refs and the exiting task waits on worker_done indefinitely.

If the task still has rings then io_uring_del_tctx_node() provides the barrier via test_and_set_bit() in io_wq_set_exit_on_idle(). When it has closed all rings though that barrier is gone.

Add the barrier after the set_bit().

---
 io_uring/io-wq.c |    2 ++
 1 file changed, 2 insertions(+)
io_uring/io-wq.c +2 -0
@@ -1251,6 +1251,8 @@ static bool io_task_work_match(struct ca
 void io_wq_exit_start(struct io_wq *wq)
 {
 	set_bit(IO_WQ_BIT_EXIT, &wq->state);
+	/* Pairs with task_work_add() in io_queue_worker_create(). */
+	smp_mb__after_atomic();
 }
 
 static void io_wq_cancel_tw_create(struct io_wq *wq)
author maintainer
#10 lore raw

PATCH 10/1887 io_uring/cancel: recognize "no timeout" on 32-bit

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit 3774e4d4c8533da2caae95556c4d635c7c4f45b8 upstream.

IORING_REGISTER_SYNC_CANCEL waits without a limit if both fields of io_uring_sync_cancel_reg::timeout are -1. io_sync_cancel() compares them with -1UL. They are of type long long. With a long of 32 bits -1UL is 4294967295, which is what it stays when it is converted for the comparison, and the fields are never equal to it.

So { -1, -1 } is taken for a timeout. ktime_set() takes the nanoseconds as an unsigned long, so what becomes of it is -1s + 4294967295ns = 3.29s.

If the request is being run by io-wq and can't be interrupted, the call returns -ETIME after that time, rather than waiting for the request to be gone. On i386, with a buffered read from a null_blk device that takes 4s to complete a request, IOSQE_ASYNC, that is what each call does.

Fixes 78a861b94959 ("io_uring: add sync cancelation API through io_uring_register()")
Assisted-by LLM
---
 io_uring/cancel.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
io_uring/cancel.c +1 -1
@@ -306,7 +306,7 @@ int io_sync_cancel(struct io_ring_ctx *c
 	if (ret != -EALREADY)
 		goto out;
 
-	if (sc.timeout.tv_sec != -1UL || sc.timeout.tv_nsec != -1UL) {
+	if (sc.timeout.tv_sec != -1 || sc.timeout.tv_nsec != -1) {
 		struct timespec64 ts = {
 			.tv_sec		= sc.timeout.tv_sec,
 			.tv_nsec	= sc.timeout.tv_nsec
author maintainer
#11 lore raw

PATCH 11/1887 io_uring/cancel: let CANCEL_ALL find parked requests

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit fe6ca13c98b1223f6005f32913ebd32e4df64b77 upstream.

A cancellation with IORING_ASYNC_CANCEL_ALL or _ANY goes on until it finds nothing more. A request may stay where it was found for a while after it has been cancelled, so each one that matches is stamped with the sequence number of the cancellation, and is skipped from then on.

io_cancel_cb() does so for io-wq work as well. There is no need to:
pending work is taken off the list, and the workers are looked at once per call. And it does harm. A request that is run by io-wq may be parked while it still is the current work of the worker: poll gets armed for it, or it is put on ->futex_list or ->waitid_list.

io-wq worker io_try_cancel()
io_wq_submit_work()
io_arm_poll_handler()
io_poll_add_hash()
io_async_cancel_one()
io_cancel_cb()
stamps the request
sets IO_WQ_WORK_CANCEL = -EALREADY
io_poll_cancel()
skips the request
= -ENOENT
io_assign_current_work(NULL)

The flag comes too late for the worker to see it, and the search that would have found the request takes it for done. The cancellation returns, and the request stays.

With a multishot poll, IOSQE_ASYNC, and IORING_OP_ASYNC_CANCEL with IORING_ASYNC_CANCEL_ALL up to 63us later, that happens to 4 of 1,000 requests (4 CPUs, KVM).

Take the stamp off again if the work matches. If the request is found on one of the lists it gets a new one, and io_cancel_cb() doesn't match it a second time.

__io_async_cancel() tries the io-wq of the caller twice. So far the stamp has kept it from counting work that is running there the second time. Skip it instead, so that the number that is returned stays the same.

[ 6.1: no ->cancel_seq_set, a request is skipped when ->work.cancel_seq
equals the sequence of the cancellation, so set it back to the one before ]

Fixes 8e29da69fead ("io_uring: add support for IORING_ASYNC_CANCEL_ALL")
Assisted-by LLM
---
 io_uring/cancel.c |   18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)
io_uring/cancel.c +14 -4
@@ -69,7 +69,16 @@ static bool io_cancel_cb(struct io_wq_wo
 	struct io_kiocb *req = container_of(work, struct io_kiocb, work);
 	struct io_cancel_data *cd = data;
 
-	return io_cancel_req_match(req, cd);
+	if (!io_cancel_req_match(req, cd))
+		return false;
+	/*
+	 * Pending work is gone once it has matched. Work that is running may
+	 * park the request where the same cancellation looks next. Don't make
+	 * it skip the request as one that it has dealt with.
+	 */
+	if (cd->flags & (IORING_ASYNC_CANCEL_ALL | IORING_ASYNC_CANCEL_ANY))
+		req->work.cancel_seq = cd->seq - 1;
+	return true;
 }
 
 static int io_async_cancel_one(struct io_uring_task *tctx,
@@ -178,9 +187,10 @@ static int __io_async_cancel(struct io_c
 	io_ring_submit_lock(ctx, issue_flags);
 	ret = -ENOENT;
 	list_for_each_entry(node, &ctx->tctx_list, ctx_node) {
-		struct io_uring_task *tctx = node->task->io_uring;
-
-		ret = io_async_cancel_one(tctx, cd);
+		/* has been done above, don't count what is running there */
+		if (all && node->task->io_uring == tctx)
+			continue;
+		ret = io_async_cancel_one(node->task->io_uring, cd);
 		if (ret != -ENOENT) {
 			if (!all)
 				break;
author maintainer
#12 lore raw

PATCH 12/1887 io_uring/wait: look at all CQ waiters on wake up

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit 356f92f2412686f822383b784fa102924407457a upstream.

io_wake_function() returns -1 if the waiter it is called for doesn't have enough events yet, which makes __wake_up_common() stop walking the wait queue. That assumes that the waiters behind it can't be satisfied either. Each waiter has its own target though, computed from the min_complete it passed in:

thread A: io_uring_enter(GETEVENTS, min_complete = 10) // queued first thread B: io_uring_enter(GETEVENTS, min_complete = 1)
one CQE is posted: A isn't woken, and B isn't even considered

B keeps sleeping with the event it asked for sitting in the CQ ring, until A's demand is met or a timeout or signal ends the wait.

Return 0 to carry on with the next waiter. Only waiters whose condition is met are woken, like before.

[ 6.1: io_wake_function() lives in io_uring/io_uring.c ]
Fixes bda521624e75 ("io_uring: make CQ ring wakeups be more efficient")
Assisted-by LLM
---
 io_uring/io_uring.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
io_uring/io_uring.c +2 -1
@@ -2368,7 +2368,8 @@ static int io_wake_function(struct wait_
 	 */
 	if (io_should_wake(iowq) || io_has_work(ctx))
 		return autoremove_wake_function(curr, mode, wake_flags, key);
-	return -1;
+	/* keep going, a waiter further down may be content with less */
+	return 0;
 }
 
 int io_run_task_work_sig(struct io_ring_ctx *ctx)
author maintainer
#13 lore raw

PATCH 13/1887 io_uring/poll: drop stale double poll entry on rearm

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit f2dbe87968a3aef74a11c025776d293b80964d3f upstream.

A file that uses two wait queues for poll, e.g. a tty, gets a second io_poll entry, which IORING_OP_POLL_ADD keeps in ->async_data until the request is freed. io_poll_add() can run more than once for a request
though: IORING_OP_POLL_REMOVE with one of the update flags disarms and rearms it, and io_poll_task_func() reissues it if a wake up turns out to be spurious. The second poll_wait() of the new round then finds *poll_ptr set, with ->head cleared by the disarm, and __io_queue_proc() fails what it takes for a third wait queue with -EINVAL.

For an update that means that the poll request is completed with -ECANCELED, while the update itself reports success. For a spurious wake up, e.g. tcsetattr() on the polled tty, the poll request fails with -EINVAL.

Free the old entry and clear the poll flags before arming, which is what io_arm_apoll() does for internal polling. All entries have been removed from their wait queues at that point.

[ 6.1: no io_req_async_data_free(), open-coded ]
Fixes b69de288e913 ("io_uring: allow events and user_data update of running poll requests")
Fixes 6e5aedb9324a ("io_uring/poll: attempt request issue after racy poll wakeup")
Assisted-by LLM
---
 io_uring/poll.c |   12 ++++++++++++
 1 file changed, 12 insertions(+)
io_uring/poll.c +12 -0
@@ -999,6 +999,18 @@ int io_poll_add(struct io_kiocb *req, un
 	if (req->ctx->flags & (IORING_SETUP_SQPOLL|IORING_SETUP_SINGLE_ISSUER))
 		req->flags |= REQ_F_HASH_LOCKED;
 
+	/*
+	 * A poll update or a spurious wake up arms the request again. Forget
+	 * the entries of the previous round like io_arm_apoll() does, a stale
+	 * second entry would be taken for a third wait queue.
+	 */
+	if (req_has_async_data(req)) {
+		kfree(req->async_data);
+		req->async_data = NULL;
+		req->flags &= ~REQ_F_ASYNC_DATA;
+	}
+	req->flags &= ~(REQ_F_SINGLE_POLL | REQ_F_DOUBLE_POLL);
+
 	ret = __io_arm_poll_handler(req, poll, &ipt, poll->events, issue_flags);
 	if (ret > 0) {
 		io_req_set_res(req, ipt.result_mask, 0);
author maintainer
#2 lore raw

PATCH 2/1887 io_uring/io-wq: dont lose the signal that ends work

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit 63c103279a95e82280092f2f4232e91e8117a252 upstream.

When a thread exits, only its tracked requests are cancelled. Then its io-wq is torn down. io_wq_exit_workers() signals every worker, to get it out of an interruptible sleep, and waits for all of them to exit. Before they do, they go through the work that is left. Unbounded work is cancelled. Bounded work is run, as it is expected to end by itself.

Not all of it does. An open has no file yet, so it counts as bounded, and the open of a FIFO waits for the other end. That is what the signal is for. But the workers are signalled once, and a worker that hasn't started the work by then loses the signal:

io_wq_exit_workers() io_worker_handle_work()

    io_wq_worker_wake()
      set TIF_NOTIFY_SIGNAL
                                       io_assign_current_work()
                                         io_run_task_work()
                                           clear TIF_NOTIFY_SIGNAL
                                       io_wq_submit_work()
                                         fifo_open()
                                           wait_for_partner()
    wait_for_completion_timeout()

The thread never gets out of do_exit():

IORING_OP_OPENAT of a FIFO without a writer, IOSQE_ASYNC exit of the thread that has submitted it

hangs in more than 9 of 10 attempts (4 CPUs, KVM), until the process is killed.

Set TIF_NOTIFY_SIGNAL for bounded work that is started with IO_WQ_BIT_EXIT set. The bit is set before the workers are signalled, and it is tested after the flag has been cleared, with clear_notify_signal() providing the barrier. So either the flag stays, or the bit is seen.

Work that is started while the io-wq exits is treated like work that is being run at that time: it isn't interrupted unless it waits interruptibly.

[ 6.1: work->flags is not atomic here ]
Fixes afcc4015d1bf ("io-wq: provide an io_wq_put_and_exit() helper")
Assisted-by LLM
---
 io_uring/io-wq.c |    7 +++++++
 1 file changed, 7 insertions(+)
io_uring/io-wq.c +7 -0
@@ -598,8 +598,15 @@ static void io_worker_handle_work(struct
 
 			next_hashed = wq_next_work(work);
 
+			/*
+			 * io_wq_exit_workers() signals us once, so that we
+			 * don't sleep for ever. If that was before this work
+			 * became the current one, the signal is gone.
+			 */
 			if (unlikely(do_kill) && (work->flags & IO_WQ_WORK_UNBOUND))
 				work->flags |= IO_WQ_WORK_CANCEL;
+			else if (unlikely(do_kill))
+				set_notify_signal(current);
 			wq->do_work(work);
 			io_assign_current_work(worker, NULL);
 
author maintainer
#3 lore raw

PATCH 3/1887 io_uring/io-wq: dont hide a link from cancellations

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit 436d48a2ed13112d2d27085325838e5bce6b4507 upstream.

A task that exits cancels its tracked requests and waits until they are gone. io_uring_cancel_generic() looks everywhere a request can be, and goes to sleep if it found nothing to cancel. It is woken up each time one of the requests of the task is completed by task work or freed.

When io-wq is done with a request that has a link, there is a time in which the next request of the link can't be found:

io_worker_handle_work()
io_assign_current_work(worker, NULL)
io_wq_free_work(work)
io_req_find_next() // takes the link off the request
io_free_req() // task work for the task
io_assign_current_work(worker, linked)
io_run_task_work()
cond_resched()
worker->cur_work = linked

It is not pending, it is not the current work of a worker, and it is not yet on the list that it is about to be parked on. If the pass that the exiting task makes because of io_free_req() falls into that time, it finds nothing and the task goes to sleep. The worker then runs the link, which IO_WQ_BIT_EXIT doesn't prevent for bounded work. If that parks the request nothing is completed or freed, and nobody wakes up the task. If it is the process that exits it can't be killed any more either.

NOP, IOSQE_ASYNC | IOSQE_IO_LINK
FUTEX_WAIT, FUTEX2_PRIVATE
exit of the thread, or of the process, up to 63us later

With four of these per round 5 to 8 of 10,000 rounds hang (4 CPUs, KVM):

io_uring_cancel_generic
do_exit

Commit f8b632e89a10 ("io_uring: tighten task exit cancellations") is about the same gap, and makes the task look again for whatever happens before io_free_req().

Free the request once the link is the current work of the worker, or pending. Whoever is woken up by that can find the link, until it is parked where cancellations look as well. To do so split io_wq_free_work() in two.

[ 6.1: io-wq calls back through struct io_wq_data, so the split is a new
->put_work callback next to ->free_work, and io_put_req_find_next() is folded into io_wq_put_work(). io_wq_put_work() keeps the link check of 6.1, without the REQ_F_CQE_SKIP condition that commit 5530a5102e3c adds in 7.3 ]

Fixes 768134d4f481 ("io_uring: don't do flush cancel under inflight_lock")
Assisted-by LLM
---
 io_uring/io-wq.c    |   22 ++++++++++++++++++----
 io_uring/io-wq.h    |    4 +++-
 io_uring/io_uring.c |   42 ++++++++++++++++++++++--------------------
 io_uring/io_uring.h |    3 ++-
 io_uring/tctx.c     |    1 +
 5 files changed, 46 insertions(+), 26 deletions(-)
io_uring/io-wq.c +18 -4
@@ -118,6 +118,7 @@ struct io_wqe {
 struct io_wq {
 	unsigned long state;
 
+	put_work_fn *put_work;
 	free_work_fn *free_work;
 	io_wq_work_fn *do_work;
 
@@ -593,8 +594,9 @@ static void io_worker_handle_work(struct
 		/* handle a whole dependent link */
 		do {
 			bool do_kill = test_bit(IO_WQ_BIT_EXIT, &wq->state);
-			struct io_wq_work *next_hashed, *linked;
+			struct io_wq_work *next_hashed, *linked, *done = work;
 			unsigned int hash = io_get_work_hash(work);
+			bool last;
 
 			next_hashed = wq_next_work(work);
 
@@ -610,7 +612,7 @@ static void io_worker_handle_work(struct
 			wq->do_work(work);
 			io_assign_current_work(worker, NULL);
 
-			linked = wq->free_work(work);
+			last = wq->put_work(work, &linked);
 			work = next_hashed;
 			if (!work && linked && !io_wq_is_hashed(linked)) {
 				work = linked;
@@ -619,6 +621,13 @@ static void io_worker_handle_work(struct
 			io_assign_current_work(worker, work);
 			if (linked)
 				io_wqe_enqueue(wqe, linked);
+			/*
+			 * Not before the link is current or pending work again.
+			 * This may be the last time that a task is woken up
+			 * which exits and looks for requests to cancel.
+			 */
+			if (last)
+				wq->free_work(done);
 
 			if (hash != -1U && !next_hashed) {
 				/* serialize hash clear with wake_up() */
@@ -899,9 +908,13 @@ static void io_run_cancel(struct io_wq_w
 	struct io_wq *wq = wqe->wq;
 
 	do {
+		struct io_wq_work *linked;
+
 		work->flags |= IO_WQ_WORK_CANCEL;
 		wq->do_work(work);
-		work = wq->free_work(work);
+		if (wq->put_work(work, &linked))
+			wq->free_work(work);
+		work = linked;
 	} while (work);
 }
 
@@ -1170,7 +1183,7 @@ struct io_wq *io_wq_create(unsigned boun
 	struct io_wq *wq;
 	cpumask_var_t allowed_mask;
 
-	if (WARN_ON_ONCE(!data->free_work || !data->do_work))
+	if (WARN_ON_ONCE(!data->put_work || !data->free_work || !data->do_work))
 		return ERR_PTR(-EINVAL);
 	if (WARN_ON_ONCE(!bounded))
 		return ERR_PTR(-EINVAL);
@@ -1184,6 +1197,7 @@ struct io_wq *io_wq_create(unsigned boun
 
 	refcount_inc(&data->hash->refs);
 	wq->hash = data->hash;
+	wq->put_work = data->put_work;
 	wq->free_work = data->free_work;
 	wq->do_work = data->do_work;
 
io_uring/io-wq.h +3 -1
@@ -21,7 +21,8 @@ enum io_wq_cancel {
 	IO_WQ_CANCEL_NOTFOUND,	/* work not found */
 };
 
-typedef struct io_wq_work *(free_work_fn)(struct io_wq_work *);
+typedef bool (put_work_fn)(struct io_wq_work *, struct io_wq_work **);
+typedef void (free_work_fn)(struct io_wq_work *);
 typedef void (io_wq_work_fn)(struct io_wq_work *);
 
 struct io_wq_hash {
@@ -40,6 +41,7 @@ struct io_wq_data {
 	struct io_wq_hash *hash;
 	struct task_struct *task;
 	io_wq_work_fn *do_work;
+	put_work_fn *put_work;
 	free_work_fn *free_work;
 };
 
io_uring/io_uring.c +22 -20

63 lines not on this page · raw message

io_uring/io_uring.h +2 -1
@@ -70,7 +70,8 @@ int io_do_iopoll(struct io_ring_ctx *ctx
 void io_free_batch_list(struct io_ring_ctx *ctx, struct io_wq_work_node *node);
 int io_req_prep_async(struct io_kiocb *req);
 
-struct io_wq_work *io_wq_free_work(struct io_wq_work *work);
+bool io_wq_put_work(struct io_wq_work *work, struct io_wq_work **linked);
+void io_wq_free_work(struct io_wq_work *work);
 void io_wq_submit_work(struct io_wq_work *work);
 
 void io_free_req(struct io_kiocb *req);
io_uring/tctx.c +1 -0
@@ -35,6 +35,7 @@ static struct io_wq *io_init_wq_offload(
 
 	data.hash = hash;
 	data.task = task;
+	data.put_work = io_wq_put_work;
 	data.free_work = io_wq_free_work;
 	data.do_work = io_wq_submit_work;
 
author maintainer
#4 lore raw

PATCH 4/1887 io_uring: dont flood a cancelling task with task_work

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit 22e643e61b9b6299b42ff7d88bab48bccada8a5d upstream.

io_ring_exit_work() asks each task which has used the ring to remove its tctx node, by task_work, and repeats that until the list is empty. io_tctx_exit_cb() doesn't touch the node while the task is in io_uring_cancel_generic(), which removes all the nodes at its end. So the work item queues the callback again as soon as it has completed, for nothing.

That is more than a waste of time. task_work_run() only returns when it finds the list empty. If the rings are released from inside the cancellation, because requests of other rings held the last references to their files, up to 64 work items keep sending callbacks to the one task which is running them. It never finds the list empty, never gets back to the cancellation, the nodes stay, and so it goes on: a task with 60 pairs of rings which poll each other ran 280000 callbacks in 5 seconds, 20 seconds after exit_group(). It ends when all the senders happen to be late at the same time. Until then the task keeps a CPU and the work items busy.

An exiting task can't be killed meanwhile. execve() cancels the requests in the same way, so a live task can get stuck there as well, for minutes. If it takes more than five, the work items run into the WARN_ON_ONCE(time_after(jiffies, timeout)) of io_ring_exit_work(). No privilege is needed for any of this.

If the callback has met a task in cancellation, wait a little before it is sent again. Nobody has to wake the work item up for that: either the node is gone by then, or it is the turn of the next round.

Fixes d56d938b4bef ("io_uring: do ctx initiated file note removal")
Assisted-by LLM
---
 io_uring/io_uring.c |   12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)
io_uring/io_uring.c +11 -1
@@ -2829,6 +2829,7 @@ struct io_tctx_exit {
 	struct callback_head		task_work;
 	struct completion		completion;
 	struct io_ring_ctx		*ctx;
+	bool				in_cancel;
 };
 
 static __cold void io_tctx_exit_cb(struct callback_head *cb)
@@ -2843,7 +2844,8 @@ static __cold void io_tctx_exit_cb(struc
 	 * tctx can be NULL if the queueing of this task_work raced with
 	 * work cancelation off the exec path.
 	 */
-	if (tctx && !atomic_read(&tctx->in_idle))
+	work->in_cancel = tctx && atomic_read(&tctx->in_idle);
+	if (tctx && !work->in_cancel)
 		io_uring_del_tctx_node((unsigned long)work->ctx);
 	complete(&work->completion);
 }
@@ -2931,6 +2933,14 @@ static __cold void io_ring_exit_work(str
 		 * wait is marked as interruptible.
 		 */
 		wait_for_completion_interruptible(&exit.completion);
+		/*
+		 * The task removes the node when it is done with its
+		 * cancellation. Give it the time for that: it doesn't get back
+		 * to it as long as it finds new task_work each time it has run
+		 * the old one, and we may be one of many who send it.
+		 */
+		if (exit.in_cancel)
+			schedule_timeout_idle(HZ / 20);
 		mutex_lock(&ctx->uring_lock);
 	}
 	mutex_unlock(&ctx->uring_lock);
author maintainer
#5 lore raw

PATCH 5/1887 io_uring/io-wq: dont strand work when a worker exits

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit ad41f325be1271b22d99353819c90f0d5e45acc8 upstream.

A worker exits if its idle timeout fired and it isn't the last one, if its affinity was changed, or if the wq is marked exit-on-idle. It decides so after it found the work list empty, and until io_worker_exit() is through it stays on the free list and in ->nr_running:

worker io_wq_enqueue()
io_acct_run_queue() == false

                                      queues work
                                      io_acct_activate_free_worker()
                                        wake_up_process(worker)
                                      // found one, nothing to create

acct->nr_workers--
break
io_worker_exit()

Nobody is going to look at the work. If other workers exist, it has to wait until one of them finishes what it is blocked on or hits its idle timeout. If not, which is possible for the affinity and the exit-on-idle case, it sits there until something else is queued. For exit-on-idle it takes a task that closes its last ring and sets up a new one while the workers are on their way out.

Make the worker take itself off the free list when it gives up its ->nr_workers slot, then leave ->nr_running, and only then take the final look at the work list. That look and queueing work are both done under acct->lock, so either the worker sees the work and stays, or the enqueue side sees that the worker is gone and wakes or creates another one. If it wants to stay and finds that its slot has been taken, a worker has been created in its place, which is going to look at the work list, and it can leave after all.

[ 6.1: no exit-on-idle state, per-node io_wqe with ->lock for the
workers and non-atomic worker flags; io_acct_run_queue() drops acct->lock itself here ]

Fixes 38aa434ab933 ("io_uring/io-wq: add exit-on-idle state")
Fixes 05c5f4ee4da7 ("io-wq: get rid of FIXED worker flag")
Assisted-by LLM
---
 io_uring/io-wq.c |   39 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 38 insertions(+), 1 deletion(-)
io_uring/io-wq.c +38 -1
@@ -642,6 +642,36 @@ static void io_worker_handle_work(struct
 	} while (1);
 }
 
+/*
+ * The worker has decided to exit, and has given up its ->nr_workers slot and
+ * its place on the free list. io_wqe_enqueue() may have picked it from that
+ * list, or seen it running, after it last looked at the work list. Leave
+ * ->nr_running as well and check again. Returns false if the worker has to
+ * stay.
+ */
+static bool io_worker_retire(struct io_wqe *wqe, struct io_worker *worker)
+{
+	struct io_wqe_acct *acct = io_wqe_get_acct(worker);
+
+	/* turns io_wqe_dec_running() and the scheduler hooks into no-ops */
+	worker->flags &= ~IO_WORKER_F_UP;
+	atomic_dec(&acct->nr_running);
+	if (!io_acct_run_queue(acct))
+		return true;
+
+	raw_spin_lock(&wqe->lock);
+	if (acct->nr_workers >= acct->max_workers) {
+		/* a worker was created in our place, the work is its business */
+		raw_spin_unlock(&wqe->lock);
+		return true;
+	}
+	acct->nr_workers++;
+	raw_spin_unlock(&wqe->lock);
+	atomic_inc(&acct->nr_running);
+	worker->flags |= IO_WORKER_F_UP;
+	return false;
+}
+
 static int io_wqe_worker(void *data)
 {
 	struct io_worker *worker = data;
@@ -670,9 +700,16 @@ static int io_wqe_worker(void *data)
 		 */
 		if (last_timeout && (exit_mask || acct->nr_workers > 1)) {
 			acct->nr_workers--;
+			if (worker->flags & IO_WORKER_F_FREE) {
+				worker->flags &= ~IO_WORKER_F_FREE;
+				hlist_nulls_del_init_rcu(&worker->nulls_node);
+			}
 			raw_spin_unlock(&wqe->lock);
 			__set_current_state(TASK_RUNNING);
-			break;
+			if (io_worker_retire(wqe, worker))
+				break;
+			last_timeout = false;
+			continue;
 		}
 		last_timeout = false;
 		__io_worker_idle(wqe, worker);
author maintainer
#6 lore raw

PATCH 6/1887 io_uring/io-wq: dont exit with a creation pending

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit e231d2e8f80d3649ecd3851b7f2abdfbe606c04b upstream.

A worker that is the last one to go to sleep while work is pending asks for another worker. io_wq_dec_running() bumps ->nr_running on behalf of the new worker and queues create_worker_cb() as task_work for the owner of the io-wq. Until that has run, everybody else takes it that a worker is running which is going to look after the work list: io_wq_enqueue() doesn't create one, and other workers that go to sleep don't find themselves to be the last.

If the worker that made the request exits, io_worker_exit() cancels the task_work, and io_worker_cancel_cb() drops ->nr_running without a look at the work list:

worker A worker B io_wq_enqueue()
blocks, work is pending
nr_running++
queues create_worker_cb()
wakes, handles the work
idle timeout, decides to exit
picks up work 1
queues work 2 B is on the free list
still: wakes B
work 1 blocks
nr_running 2 -> 1
io_worker_exit()
io_worker_cancel_cb()

    nr_running 1 -> 0

Work 2 has to wait for work 1, although there is room for more workers. It takes an owner that doesn't get around to run its task_work for the time of the idle timeout, less if the worker exits because its affinity was changed or the io-wq is marked exit-on-idle.

Let the worker stay around until its request has been dealt with. Only the worker itself sets ->create_state, so it can't be set behind its back once it has decided to leave.

[ 6.1: no exit-on-idle state ]
Fixes 1d5f5ea7cb7d ("io-wq: remove worker to owner tw dependency")
Assisted-by LLM
---
 io_uring/io-wq.c |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
io_uring/io-wq.c +5 -1
@@ -697,8 +697,12 @@ static int io_wqe_worker(void *data)
 		/*
 		 * Last sleep timed out. Exit if we're not the last worker,
 		 * or if someone modified our affinity.
+		 * Not as long as a request of ours for another worker is
+		 * pending, though. It is accounted as a running worker, which
+		 * others rely on, and io_worker_exit() would cancel it.
 		 */
-		if (last_timeout && (exit_mask || acct->nr_workers > 1)) {
+		if (last_timeout && (exit_mask || acct->nr_workers > 1) &&
+		    !test_bit(0, &worker->create_state)) {
 			acct->nr_workers--;
 			if (worker->flags & IO_WORKER_F_FREE) {
 				worker->flags &= ~IO_WORKER_F_FREE;
author maintainer
#7 lore raw

PATCH 7/1887 io_uring/io-wq: let cancel find picked up hashed work

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit e9efeb4fc97b0879512a3c3b995ed448f2487e12 upstream.

io_get_next_work() takes all the work items that share a hash off the work list in one go, and the worker runs them one after the other. Only the one it is working on is visible as ->cur_work. The others are neither on the list nor current, so io_wq_cancel_cb() can't find them.

IORING_OP_ASYNC_CANCEL and IORING_REGISTER_SYNC_CANCEL return -ENOENT for a request that has not even been started, e.g. a buffered write queued behind another write to the same file that is blocked, and the request is carried out. The cancellation done for a task or ring that goes away gets there in the end, as it keeps trying, but it has to wait for each item to become current.

Keep a pointer to the remainder of the chain next to ->cur_work, and have io_wq_worker_cancel() look at it. The items on it belong to the worker, which needs ->lock to move on to the next one. Matching work is flagged with IO_WQ_WORK_CANCEL and fails with -ECANCELED when its turn comes. The worker isn't signalled for it, that would interrupt the unrelated work it is busy with. As the request isn't gone yet, it is reported like running work, with -EALREADY.

[ 6.1: ->next_work is the item being picked up here, which
io_wq_worker_cancel() checks next to ->cur_work, so the chain remainder is a new ->chain_work, set when the item is picked up as well. work->flags is not atomic here ]

Fixes 86f3cd1b589a ("io-wq: handle hashed writes in chains")
Assisted-by LLM
---
 io_uring/io-wq.c |   20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
io_uring/io-wq.c +20 -0
@@ -53,6 +53,8 @@ struct io_worker {
 
 	struct io_wq_work *cur_work;
 	struct io_wq_work *next_work;
+	/* rest of the hashed chain ->next_work or ->cur_work came with */
+	struct io_wq_work *chain_work;
 	raw_spinlock_t lock;
 
 	struct completion ref_done;
@@ -548,6 +550,9 @@ static void io_assign_current_work(struc
 	raw_spin_lock(&worker->lock);
 	worker->cur_work = work;
 	worker->next_work = NULL;
+	/* stays valid while in between two items of a chain */
+	if (work)
+		worker->chain_work = wq_next_work(work);
 	raw_spin_unlock(&worker->lock);
 }
 
@@ -584,6 +589,7 @@ static void io_worker_handle_work(struct
 			 */
 			raw_spin_lock(&worker->lock);
 			worker->next_work = work;
+			worker->chain_work = wq_next_work(work);
 			raw_spin_unlock(&worker->lock);
 		} else {
 			break;
@@ -1073,6 +1079,7 @@ static bool __io_wq_worker_cancel(struct
 static bool io_wq_worker_cancel(struct io_worker *worker, void *data)
 {
 	struct io_cb_cancel_data *match = data;
+	struct io_wq_work *work;
 
 	/*
 	 * Hold the lock to avoid ->cur_work going out of scope, caller
@@ -1082,6 +1089,19 @@ static bool io_wq_worker_cancel(struct i
 	if (__io_wq_worker_cancel(worker, match, worker->cur_work) ||
 	    __io_wq_worker_cancel(worker, match, worker->next_work))
 		match->nr_running++;
+	/*
+	 * Hashed work is taken off the work list a chain at a time, what the
+	 * worker hasn't started yet can only be found here. It doesn't move on
+	 * without the lock. Just mark the work, it fails once it is its turn.
+	 */
+	for (work = worker->chain_work; work; work = wq_next_work(work)) {
+		if (match->nr_running && !match->cancel_all)
+			break;
+		if (match->fn(work, match->data)) {
+			work->flags |= IO_WQ_WORK_CANCEL;
+			match->nr_running++;
+		}
+	}
 	raw_spin_unlock(&worker->lock);
 
 	return match->nr_running && !match->cancel_all;
author maintainer
#8 lore raw

PATCH 8/1887 io_uring/poll: dont lose a cancel as io-wq arms poll

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit 6d2d4c2530e95ff6ddeb98195d49d99dbca14369 upstream.

A request on a pollable file that was forced to io-wq is issued without blocking there. If that ends in -EAGAIN, io_wq_submit_work() arms poll for it and returns. It looks at IO_WQ_WORK_CANCEL once, before it issues the request.

Somebody who wants to cancel the request in between finds it running:

io-wq worker io_try_cancel()
io_wq_submit_work()
IO_WQ_WORK_CANCEL isn't set
io_issue_sqe() = -EAGAIN
io_async_cancel_one()
sets IO_WQ_WORK_CANCEL signals the worker = -EALREADY
io_poll_cancel() = -ENOENT
...
= -ENOENT
io_arm_poll_handler() = IO_APOLL_OK
return

Nobody looks at the flag again, and the signal doesn't matter to a worker that doesn't sleep. The request is armed as if nothing had happened:

- a linked timeout completes with -ENOENT, and the request it was meant to limit waits for as long as it takes.
- IORING_OP_ASYNC_CANCEL returns -EALREADY, and the request stays.
- IORING_REGISTER_SYNC_CANCEL waits for the request to complete if it gets -EALREADY. Since commit 5623eb1ed035 ("io_uring/tctx: add separate lock for list of tctx's in ctx") it doesn't sleep but spins, so its next attempt finds the armed poll.

The same goes for a multishot poll, recv or accept that is armed from io-wq.

With a read of an empty pipe, IOSQE_ASYNC, and a linked timeout of 5ms or a cancel in the same submission, in a guest that is slow enough (TCG, KASAN), the request is lost in 21 of 24 rounds of 40 or 100 attempts.

While it arms poll from io-wq, __io_arm_poll_handler() owns the request. Look at the flag once the request is in the hash table. The table is searched and the request is added with ->uring_lock held, and the flag is set before the search. So either the search finds the request, or it came first and the flag is seen. With the request marked as cancelled, the task work that is queued, right away or because ownership can't be released, fails it with -ECANCELED.

What the canceller is told doesn't change. In this window a linked timeout still completes with -ENOENT rather than -ETIME, a cancel request with -EALREADY, and one with IORING_ASYNC_CANCEL_ALL or _ANY with a count that doesn't include the request. But the request is cancelled, so what is new is a request that completes with -ECANCELED after such a result.

This doesn't help in two cases:

- IORING_ASYNC_CANCEL_ALL and _ANY, if the work is flagged after the test added here, while io-wq still has it as the current work of the worker. io_cancel_cb() stamps it with the sequence of the cancel, so the search of the hash table on behalf of the same cancel takes it for done and skips it.
- requests that are parked elsewhere by io-wq, like IORING_OP_FUTEX_WAIT and IORING_OP_WAITID. They have the same problem.

[ 6.1: work->flags is not atomic here, the hash table has its own locks
]

Fixes 90fa02883f06 ("io_uring: implement async hybrid mode for pollable requests")
Assisted-by LLM
---
 io_uring/poll.c |   11 +++++++++++
 1 file changed, 11 insertions(+)
io_uring/poll.c +11 -0
@@ -652,6 +652,17 @@ static int __io_arm_poll_handler(struct
 
 	io_poll_add_hash(req);
 
+	/*
+	 * Whoever tried to cancel the request while io-wq was running it has
+	 * flagged the work item. If it searched the hash table before the
+	 * request got there it found nothing, and it won't come back. Both
+	 * the search and the insertion are done with the hash bucket lock
+	 * held, and the flag is set before the search. If the search came
+	 * first, the flag is visible by now.
+	 */
+	if (ipt->owning && (req->work.flags & IO_WQ_WORK_CANCEL))
+		io_poll_mark_cancelled(req);
+
 	if (mask && (poll->events & EPOLLET) &&
 	    io_poll_can_finish_inline(req, ipt)) {
 		__io_poll_execute(req, mask);
author maintainer
#9 lore raw

PATCH 9/1887 io_uring/cancel: dont forget that the work was running

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit 8aa0e5db4845fb5ac11abe40d7b1cac0656c3ee3 upstream.

If the request to be cancelled is being run by io-wq, io_async_cancel_one() flags the work, signals the worker and returns -EALREADY. Since commit ccbf726171b7 ("io_uring: perform poll removal even if async work removal is successful") io_try_cancel() goes on regardless, as poll may be armed for the request. If it isn't, and nothing else turns up, the result is the -ENOENT of the last search.

__io_async_cancel() makes up for that. On -ENOENT it tries the io-wq of every task that uses the ring, and that of the caller is one of them. So the work is found a second time, and the result is -EALREADY after all.

Unless the worker is done with it by then. If the work is flagged before io_wq_submit_work() looks at IO_WQ_WORK_CANCEL, all the worker does is to queue the request to be failed by task work. Then it isn't anywhere to be found until the task work has run, and

- IORING_REGISTER_SYNC_CANCEL returns -ENOENT,
- IORING_OP_ASYNC_CANCEL completes with -ENOENT,

for a request that they have just cancelled, and that completes with -ECANCELED.

With a read of an empty pipe, IOSQE_ASYNC, and a sync cancel right behind it, 1 to 3 of 1,000,000 calls return -ENOENT, and 50 to 110 with IORING_SETUP_DEFER_TASKRUN (4 CPUs, KVM). Nothing is written to the pipe, and all of these reads end with -ECANCELED.

Remember that the work was found. IORING_OP_ASYNC_CANCEL completes with -EALREADY, as it does if the worker is a bit slower. For IORING_REGISTER_SYNC_CANCEL it means to try again, which ends with 0.

The result of a linked timeout, which calls io_try_cancel() by itself, and the number that is returned for IORING_ASYNC_CANCEL_ALL and _ANY don't change.

Fixes ccbf726171b7 ("io_uring: perform poll removal even if async work removal is successful")
Assisted-by LLM
---
 io_uring/cancel.c |   13 ++++++++++++-
 io_uring/cancel.h |    2 ++
 2 files changed, 14 insertions(+), 1 deletion(-)
io_uring/cancel.c +12 -1
@@ -114,6 +114,8 @@ int io_try_cancel(struct io_uring_task *
 	 */
 	if (!ret)
 		return 0;
+	if (ret == -EALREADY)
+		cd->running = true;
 
 	ret = io_poll_cancel(ctx, cd, issue_flags);
 	if (ret != -ENOENT)
@@ -162,6 +164,7 @@ static int __io_async_cancel(struct io_c
 	struct io_tctx_node *node;
 	int ret, nr = 0;
 
+	cd->running = false;
 	do {
 		ret = io_try_cancel(tctx, cd, issue_flags);
 		if (ret == -ENOENT)
@@ -185,7 +188,15 @@ static int __io_async_cancel(struct io_c
 		}
 	}
 	io_ring_submit_unlock(ctx, issue_flags);
-	return all ? nr : ret;
+	if (all)
+		return nr;
+	/*
+	 * The worker may be done with the work that was found running, and
+	 * flagged, above. That isn't the same as not having found it.
+	 */
+	if (ret == -ENOENT && cd->running)
+		ret = -EALREADY;
+	return ret;
 }
 
 int io_async_cancel(struct io_kiocb *req, unsigned int issue_flags)
io_uring/cancel.h +2 -0
@@ -9,6 +9,8 @@ struct io_cancel_data {
 	u8 opcode;
 	u32 flags;
 	int seq;
+	/* io_try_cancel() has found it being run by io-wq, and flagged it */
+	bool running;
 };
 
 int io_async_cancel_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);

Greg Kroah-Hartman

author maintainer
#0 lore raw

cover 6.1.191-rc1 review

This is the start of the stable review cycle for the 6.1.191 release. There are 1887 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 Fri, 30 Oct 2026 17:02:34 +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/v6.x/stable-review/patch-6.1.191-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-6.1.y
and the diffstat can be found below.

thanks,

greg k-h

-------------
Pseudo-Shortlog of commits:

Greg Kroah-Hartman <[email protected]>

    Linux 6.1.191-rc1

Alexey Dobriyan <[email protected]>
uapi: stddef.h: Fix header guard location

Xiaolei Wang <[email protected]>
pinctrl: freescale: Fix a memory out of bounds when num_configs is 1

Shenwei Wang <[email protected]>
gpio: mxc: map Both Edge pad wakeup to Rising Edge

Haojie Li <[email protected]>
drm/amdkfd: fix dma_buf reference leak in get_dmabuf_info

Steffen Klassert <[email protected]>
Revert "esp: do not unref managed frag pages in esp_ssg_unref()"

Eric Dumazet <[email protected]>
inet: control sockets should not use current thread task_frag

Damien Le Moal <[email protected]>
scsi: block: Improve ioprio value validity checks

Damien Le Moal <[email protected]>
scsi: block: Introduce ioprio hints

Zhaoyang Huang <[email protected]>
mm: use stack_depot_early_init for kmemleak

Xiaolei Wang <[email protected]>
mm/kmemleak: use object_cache instead of kmemleak_initialized to check in set_track_prepare()

Thomas Zimmermann <[email protected]>
fbdev: Use /* */ comment in initializer macro

Eric Dumazet <[email protected]>
vlan: restore HW VLAN tag insertion with reorder_hdr off

Pablo Neira Ayuso <[email protected]>
netfilter: ctnetlink: do not expose expectation DEAD flag

Nathan Lynch <[email protected]>
seq_buf: Make DECLARE_SEQ_BUF() usable

HyeongJun An <[email protected]>
ALSA: seq: Don't leak the extension cell pointer in the bounce payload

Joseph Qi <[email protected]>
ocfs2: use correct endian in ocfs2_dinode_has_extents

ThangNN99 <[email protected]>
Bluetooth: hci_core: Fix queuing tx_work after workqueue is drained

Luiz Augusto von Dentz <[email protected]>

    Bluetooth: hci_core: Print number of packets in conn->data_q

Tejun Heo <[email protected]>
sched/psi: Create the psimon kthread outside of cgroup_mutex

Dan Carpenter <[email protected]>
ext4: fix error pointer dereference in ext4_mb_load_buddy_gfp()

Damien Le Moal <[email protected]>
ata: libata-core: fix cancellation of a port deferred qc work

Adrian Hunter <[email protected]>
i3c: mipi-i3c-hci: Preserve RUN bit when aborting DMA ring

Ming Qian <[email protected]>
media: verisilicon: Fix kernel panic due to __initconst misuse

Magnus Lindholm <[email protected]>
alpha: do not clear remote MMU contexts in migrate_flush_tlb_page()

Henrique Carvalho <[email protected]>
smb: client: protect tc_count increment in smb2_find_smb_sess_tcon_unlocked()

Mikhail Gavrilov <[email protected]>
drm/amdgpu: replace PASID IDR with XArray

Prike Liang <[email protected]>
drm/amdgpu: fix the idr allocation flags

Pankaj Gupta <[email protected]>
KVM: SEV: Drop FOLL_WRITE for encrypted region registration

Perry Yuan <[email protected]>
drm/amdgpu: ensure no_hw_access is visible before MMIO

Dan Carpenter <[email protected]>
xen/events: fix error code in xen_bind_pirq_msi_to_irq()

Pauli Virtanen <[email protected]>
Bluetooth: MGMT: fix crash in set_mesh_sync and set_mesh_complete

Jianpeng Chang <[email protected]>
Bluetooth: MGMT: Fix memory leak in set_ssp_complete

Luiz Augusto von Dentz <[email protected]>
Bluetooth: MGMT: Fix dangling pointer on mgmt_add_adv_patterns_monitor_complete

Su Hui <[email protected]>
highmem: fix a memory copy problem in memcpy_from_folio

Moon Hee Lee <[email protected]>
fs/ntfs3: reject index allocation if $BITMAP is empty but blocks exist

Karl Mehltretter <[email protected]>
virtio_ccw: always take irq_lock in the classic interrupt handler

Namjae Jeon <[email protected]>
ksmbd: fix r_count dec/increment mismatch

Qihang <[email protected]>
ksmbd: pin conn during async oplock break notification

Jason Gunthorpe <[email protected]>
RDMA/mlx5: Follow rb_key.ats when creating new mkeys

Yishai Hadas <[email protected]>
RDMA/mlx5: Fix implicit ODP hang on parent deregistration

Cen Zhang (Microsoft) <[email protected]>
rds: tcp: unregister sysctl before tearing down listen socket

Yihang Li <[email protected]>
scsi: hisi_sas: Remove redundant checks for automatic debugfs dump

Yihang Li <[email protected]>
scsi: hisi_sas: Fix a deadlock issue related to automatic dump

Yihang Li <[email protected]>
scsi: hisi_sas: Check before using pointer variables

Sudeep Holla <[email protected]>
firmware: arm_scmi: Drop handle on protocol bind failures

Sudeep Holla <[email protected]>
firmware: arm_scmi: Fix requested device removal race

Sudeep Holla <[email protected]>
firmware: arm_scmi: Unrequest devices if driver registration fails

Cristian Marussi <[email protected]>
firmware: arm_scmi: Add multiple protocols registration support

Sudeep Holla <[email protected]>
firmware: arm_scmi: Unregister device notifier before IDR teardown

Sudeep Holla <[email protected]>
firmware: arm_scmi: Free transport channel on IDR failure

Sudeep Holla <[email protected]>
firmware: arm_scmi: Protect device request lookup with RCU

Sudeep Holla <[email protected]>
firmware: arm_scmi: Avoid IDR updates while cleaning channels

Sudeep Holla <[email protected]>
firmware: arm_scmi: Reject out of range DT protocol IDs

Sudeep Holla <[email protected]>
firmware: arm_scmi: Use channel ID for transport teardown

Cristian Marussi <[email protected]>
firmware: arm_scmi: Add internal platform/channel identifiers

Cristian Marussi <[email protected]>
firmware: arm_scmi: Move errors defs and code to common.h

Gleb Markov <[email protected]>
drm/amd/display: Remove unused-but-set variable hubp from

Zicheng Qu <[email protected]>

    drm/amd/display: Fix null check for pipe_ctx->plane_state in dcn20_program_pipe

Hamza Mahfooz <[email protected]>
drm/amd/display: drop unused function set_abm_event()

Mukesh Ojha <[email protected]>
pinmux: fix race causing mux_owner NULL with active mux_usecount

Yongpeng Yang <[email protected]>
f2fs: fix node_cnt race between extent node destroy and writeback

Cong Wang <[email protected]>
bpf: Fix a potential use-after-free in bpf_link_free()

Filipe Manana <[email protected]>
btrfs: fix race between ordered extent completion and fiemap

Johannes Berg <[email protected]>
net/sched: initialize noop_qdisc owner

Petr Machata <[email protected]>
Documentation: networking: Add a caveat to nexthop_compat_mode sysctl

Mike Tipton <[email protected]>
interconnect: Don't access req_list while it's being manipulated

Song Shuai <[email protected]>
riscv: Remove SHADOW_OVERFLOW_STACK_SIZE macro

Radim Krčmář <[email protected]>
riscv: use lw when reading int cpu in asm_per_cpu

Christian Brauner <[email protected]>
signal: allow taks to temporarily block TIF_NOTIFY_SIGNAL

Christian Brauner <[email protected]>
pid_namespace: prevent TIF_NOTIFY_SIGNAL from interrupting the reaper

Christian Brauner <[email protected]>
signal: don't retarget shared signals in a dying thread group

Christian Brauner <[email protected]>
signal: only SIGKILL and the freezers interrupt a coredumping task

Christian Brauner <[email protected]>
coredump: hold RCU while releasing parked threads

Aaron Ahmed <[email protected]>
ftrace: Initialize modname and offset in print_rec()

Weiming Shi <[email protected]>
asymmetric_keys: reject trust keys without IDs

Srish Srinivasan <[email protected]>
keys/trusted_keys: return immediately after TPM unseal failure

Stefano Garzarella <[email protected]>
KEYS: trusted: Fix blob allocation size in tpm2_key_decode()

Adrian Martinez <[email protected]>
KEYS: Fix key_reject_and_link() race with keyring restriction

Cen Zhang <[email protected]>
keys: Protect the read method check against type removal

Kyle Zeng <[email protected]>
keys: make keyring indexes independent of kernel addresses

Cen Zhang <[email protected]>
keys: Protect the type name while describing a key

Cen Zhang <[email protected]>
keys: Check the authorization payload in process keyring searches

Cen Zhang <[email protected]>
keys: Avoid the owner account dereference in named keyring lookup

Lee Jones <[email protected]>
tracing/histograms: Verify event_call identity when updating synth_event refcount

Donggeun Yoo <[email protected]>
tracing: Fix 64-bit and signed histogram fields on 32-bit kernels

Donggeun Yoo <[email protected]>
tracing: Unregister field variable histograms when the command fails

Donggeun Yoo <[email protected]>
tracing: Save the event file instead of the compatible histogram

Kyle Zeng <[email protected]>
tracing: Reject incomplete event filter expressions

Kees Cook <[email protected]>
Compiler Attributes: counted_by: Adjust name and identifier expansion

Pauli Virtanen <[email protected]>
Bluetooth: L2CAP: refuse __l2cap_chan_add if chan already has conn

Pauli Virtanen <[email protected]>

    Bluetooth: L2CAP: access chan->conn safely in get/setsockopt

Kirill A. Shutemov <[email protected]>
mm: split critical region in remap_file_pages() and invoke LSMs in between

Jonas Köppeler <[email protected]>
net_sched: codel: fix stale state for empty flows in fq_codel

Hangbin Liu <[email protected]>
bonding: do not set usable_slaves for broadcast mode

Yun Zhou <[email protected]>
xfs: don't hold buffer locks across sync transaction commit in xfs_sync_sb_buf

Frank Sorenson <[email protected]>
cifs: add revalidation on FSCTL failure in smb2_duplicate_extents()

Ben Cressey <[email protected]>
dm-integrity: fix infinite loop on discard with large tag size

Dibin Moolakadan Subrahmanian <[email protected]>
drm/i915/dmc: Harden DMC firmware payload parsing

Jann Horn <[email protected]>
futex: Fix mm reuse handling for FUT_OFF_MMSHARED

Wentao Liang <[email protected]>
i2c: viai2c-wmt: Fix clock leak in wmt_i2c_probe()

Ido Schimmel <[email protected]>
ipv4: udp: Create exceptions before socket matching

Daehyeon Ko <[email protected]>
vsock/virtio: validate packet source for connected sockets

Chen Cheng <[email protected]>
dm-integrity: require stable writes for internal hash modes

Usama Arif <[email protected]>
mm/huge_memory: transfer the pmd dirty bit to the folio on zap

Aviv Vaknin <[email protected]>
pid_namespace: make zap_pid_ns_processes() freezable

Jens Axboe <[email protected]>
exit: move core of do_wait() into helper

Christian Brauner <[email protected]>
ext4: free the sbi after a grace period

Cen Zhang (Microsoft) <[email protected]>
watch_queue: Fix note pool publication race in watch_queue_set_size()

Daniil Stas <[email protected]>
hwmon: (drivetemp) Fix driver producing garbage data when SCSI errors occur

Lorenzo Stoakes (ARM) <[email protected]>
perf: Track the perf mlock gift separately

Laurence Oberman <[email protected]>
scsi: st: Fix use-after-free race between st_remove() and st_open()

Lee Jones <[email protected]>
tracing/histograms: Reject non-stacktrace fields for synthetic stacktrace fields

Paulo Alcantara <[email protected]>
smb: client: fix multiuser mount with krb5

Aohan Mei <[email protected]>
net/sched: cls_flower: validate mask pointer after nla_next()

Aleksandr Khromov <[email protected]>
ksmbd: zero the FS_OBJECT_ID_INFORMATION buffer before filling it in

Aleksandr Khromov <[email protected]>
ksmbd: initialize FileSystemControlFlags in FS_CONTROL_INFORMATION

Aleksandr Khromov <[email protected]>
ksmbd: fill in FileSysIdentifier in FS_POSIX_INFORMATION

Jun Yang <[email protected]>
net: bridge: mcast: don't truncate the port group walk on teardown

Kairui Song <[email protected]>
mm, madvise: fix potential workingset node list_lru leaks

Hyunwoo Kim <[email protected]>
KVM: x86/mmu: Preserve nested TDP shadow page tables if they are used as roots

Matt Fleming <[email protected]>
mm/huge_memory: initialise workingset state before folio split

David Rosca <[email protected]>
drm/amdgpu: Fix VCE 3 ring align_mask

Zihan Xi <[email protected]>
ipv4: avoid divide by zero in fib_rebalance

Niklas Schnelle <[email protected]>
s390/pci: Fix leak of uninitialized kernel data in SCLP report

Aswin Karuvally <[email protected]>
s390/ctcm: Prevent XID null dereference

Florian Schauer <[email protected]>
page_pool: keep frag_offset aligned for odd-sized requests

Charles Vosburgh <[email protected]>
sctp: validate chunk length in the inqueue parser

Chengfeng Ye <[email protected]>
tipc: protect node reset trace dump with node lock

Carlos Maiolino <[email protected]>
xfs: fix capability check in xfs

Bryam Vargas <[email protected]>
net/iucv: fix the recvmsg window update

Genjian Zhang <[email protected]>
dm-ebs: fix incorrect device offset check in ebs_ctr()

Ben Cressey <[email protected]>
dm-crypt: fix a tiny race condition in crypt_dec_pending

Benjamin Marzinski <[email protected]>
dm cache: fix issue with background work locking

Ming-Hung Tsai <[email protected]>
dm cache: fix demotion stats in passthrough mode

Etienne Perot <[email protected]>
cgroup: fix spurious SIGKILL of CLONE_INTO_CGROUP children

Cen Zhang (Microsoft Security FORGE Labs) <[email protected]>
tcp: fix use-after-free in do_tcp_getsockopt(TCP_CC_INFO)

Cen Zhang (Microsoft Security FORGE Labs) <[email protected]>
tcp: fix use-after-free in do_tcp_getsockopt(TCP_CONGESTION)

Heyang Tan <[email protected]>
wifi: p54: validate firmware record lengths

Tengda Wu <[email protected]>
tracing: Fix hist trigger timestamps for buffered events

Amit Machhiwal <[email protected]>
tracing: Do not initialize tracefs work if tracing is disabled

Donggeun Yoo <[email protected]>
tracing: Fix the shift out of bounds in the log2 histogram modifier

Jesse Zhang <[email protected]>
drm/amdgpu: don't drop the runtime PM reference twice in amdgpu_gpr

Timur Kristóf <[email protected]>
drm/amdgpu/sdma3: Work around POLL_REGMEM / FENCE hang

Yehyeong Lee <[email protected]>
scsi: libiscsi: Validate the task named by a management response

Yehyeong Lee <[email protected]>
scsi: libiscsi: Validate the ITT reflected in a Reject PDU

Yehyeong Lee <[email protected]>
scsi: libiscsi: Reject a negative task index from parse_pdu_itt

Yehyeong Lee <[email protected]>
scsi: xen/scsifront: Check for a NULL shadow entry on a backend response

Loic Poulain <[email protected]>
i2c: qcom-cci: Fix HALT_ACK reset request being dropped

Sasha Levin <[email protected]>
tools: gpio: fix building from the top level with O=

Daehyeon Ko <[email protected]>
sctp: revalidate output stream after association connect wait

Mario Limonciello <[email protected]>
pinctrl: amd: Clear S4 wake bits when firmware has _AEI

Aohan Mei <[email protected]>
net: rds: fix uninitialized trans dereference in CM event handler

Jérémy Jean <[email protected]>
net/sched: fix use-after-free in __tcf_action_put()

Kyle Zeng <[email protected]>
fsnotify: prevent mark additions during connector teardown

Amirmohammad Eftekhar <[email protected]>
KVM: nVMX: Reset MMU back to the root MMU if loading L2 state fails for !VM-Entry

Christian Brauner <[email protected]>
unicode: free the map after a grace period

Sung Byeongchan <[email protected]>
autofs: ignore notification errors from a replaced pipe

Peng Fan <[email protected]>
gpio: mxc: fix wakeup_pads bit operations

Alexander Stein <[email protected]>
gpio: mxc: use BIT() macro

Peng Fan <[email protected]>
gpio: mxc: fix both_edges bit operations

Bartosz Golaszewski <[email protected]>
gpio: mxc: use lock guards for the generic GPIO chip lock

Shenwei Wang <[email protected]>
gpio: mxc: enable pad wakeup on i.MX8x platforms

Nicolai Buchwitz <[email protected]>
net: bcmgenet: unshare the skb before writing the control block

Kyle Zeng <[email protected]>
netlink: avoid hashing the network namespace pointer

Xingui Yang <[email protected]>
scsi: libsas: Fix SMP IO deadlock during HA resume

Kyle Zeng <[email protected]>
pipe: preserve existing fasync readers on writer setup failure

Sasha Levin <[email protected]>
samples: pidfd: fix userprogs typo

Cen Zhang <[email protected]>
ocfs2/dlm: Protect the recovery list during debugfs reads

Linfeng Sun <[email protected]>
scsi: target: iscsi: Fix race in discovery auth updates

Laurence Oberman <[email protected]>
scsi: st: Save the visited block for the partition the drive is in

Keith Busch <[email protected]>
nios2: fix __wsum type degradation in csum_fold()

Carlos Jones Jr <[email protected]>
spi: tegra114: assert CS GPIO for every transfer in a message

HyeongJun An <[email protected]>
ASoC: nau8822: Fix the 128x oversampling switch bits

HyeongJun An <[email protected]>
ASoC: wm8978: Fix the 128x oversampling switch bits

HyeongJun An <[email protected]>
ASoC: max98371: Fix the Speaker DHT Min Volume bits

HyeongJun An <[email protected]>
ASoC: pcm3168a: Fix the DAC zero flag polarity bit

HyeongJun An <[email protected]>
ASoC: cs42l52: Fix the NG Type Switch bit

HyeongJun An <[email protected]>
ASoC: cs42l56: Put the Limiter Cushion control on the limiter register

Avi Weiss <[email protected]>
ASoC: stm32: spdifrx: fix synchronization state check

Sergey Tiraspolsky <[email protected]>
ASoC: Intel: avs: Reset the stream unless it is already prepared

Allison Henderson <[email protected]>
net/rds: don't let the rdma_cm destroy an id RDS still owns on route failure

Michal Luczaj <[email protected]>
vsock: treat TCP_CLOSING as once-established

Michael Kelley <[email protected]>
Drivers: hv: Don't reset VMBus connection state on error/exit paths

Waiman Long <[email protected]>
Drivers: hv: Avoid infinite retry loop in init_vp_index()

Xueqin Luo <[email protected]>
power: supply: ds2780: Fix ds2780_get_capacity() returning raw value

Karl Mehltretter <[email protected]>
power: supply: Fix maintenance charge table kernel-doc

Abdul Wasey <[email protected]>
mptcp: move the OoO check back into __mptcp_try_fallback()

Jinu Kim <[email protected]>
KVM: x86: Use active memslots for the per-vCPU MMIO cache

Ilan Dudnik <[email protected]>
ksmbd: fix heap out-of-bounds write in krb5_authenticate()

Matthew Wilcox (Oracle) <[email protected]>
powerpc: Remove initialisation of readpos

Chengfeng Ye <[email protected]>
netfilter: cttimeout: prevent UAF during module unload

David Carlier <[email protected]>
ieee802154: hwsim: serialize pib updates to fix double-free

Zhiling Zou <[email protected]>
ipv6: flowlabel: cap duplicate leases per socket

Xixin Liu <[email protected]>
perf: RISC-V: store available counter mask as bitmap

Kalpan Jani <[email protected]>
mptcp: pm: kernel: drop pending ADD_ADDR when removing ID0

Paulo Alcantara <[email protected]>
smb: client: honor forceuid/forcegid when mapping SIDs to uid/gid

Bjoern Doebel <[email protected]>
smb: client: fail DACL rewrite when the new DACL exceeds 64K

Paulo Alcantara <[email protected]>
smb: client: avoid using uninitialized SIDs in cifs_posix_to_fattr()

Nilesh Javali <[email protected]>
scsi: qla2xxx: Bound VP index against VP_CTRL IOCB bitmap size

Daeho Jeong <[email protected]>
f2fs: accurately adjust free_sections during free_segment_range

Nilesh Javali <[email protected]>
scsi: qla2xxx: Skip vport under deletion in report ID acquisition

Yuqi Xu <[email protected]>
wifi: cfg80211: reject duplicate wiphy cipher suite entries

Viken Dadhaniya <[email protected]>
spi: spi-qcom-qspi: Fix incomplete error handling in runtime PM

Douglas Anderson <[email protected]>
spi: spi-qcom-qspi: Support pinctrl sleep states

Krzysztof Wilczyński <[email protected]>
PCI/sysfs: Add CAP_SYS_ADMIN check to __resource_resize_store()

Ilpo Järvinen <[email protected]>
PCI/sysfs: Demacrofy pci_dev_resource_resize_attr(n) functions

Chen-Yu Tsai <[email protected]>
pinctrl: mediatek: paris: bypass pinctrl GPIO layer in set GPIO direction

Ping-Ke Shih <[email protected]>
wifi: rtw89: phy: check length before parsing PHY status IE

Candice Li <[email protected]>
drm/amdgpu: validate and share PSP fw_pri_buf copies via psp_copy_fw

Candice Li <[email protected]>
drm/amdgpu: Bound GPIO I2C table entry count from VBIOS

Stepan Ionichev <[email protected]>

    tty: serial: 8250: protect against NULL uart->port.dev in register

Herve Codina <[email protected]>
driver core: Avoid warning when removing a device while its supplier is unbinding

Sicong Huang <[email protected]>
virt: acrn: Fix irqfd use-after-free during eventfd shutdown

Tao Cui <[email protected]>
RDMA/counter: Fix num_counters leak on bind_qp failure in alloc_and_bind()

Shiwu Zhang <[email protected]>
drm/amdgpu: fix buffer overflow during vBIOS update

Mario Limonciello <[email protected]>
drm/amd: Use attribute groups for PSP flashing attributes

Lijo Lazar <[email protected]>
drm/amdgpu: Add vbios attribute only if supported

Yongqiang Sun <[email protected]>
drm/amdkfd: fix SMI event cross-process information leak

Mohamed Khalfella <[email protected]>
nvme-fc: Do not cancel requests in io target before it is initialized

Fredric Cover <[email protected]>
smb: client: fix races in cifsd thread creation

Paulo Alcantara <[email protected]>
cifs: get rid of dns resolve worker

David Timber <[email protected]>
exfat: fix handling of damaged volume in exfat_create_upcase_table()

Daniel Yang <[email protected]>
exfat: resolve memory leak from exfat_create_upcase_table()

Xiaogang Chen <[email protected]>
drm/amdkfd: Let driver decide buffer size at AMDKFD_IOC_GET_DMABUF_INFO ioctl

Peter Zijlstra <[email protected]>
perf: Fix addr_filter_ranges lifetime

Pagadala Yesu Anjaneyulu <[email protected]>
wifi: mac80211: ibss: wait for in-flight TX on disconnect

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: pcie: null RX pointers after free

Huiwen He <[email protected]>
smb/client: flush dirty data before punching a hole

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: validate TX_CMD response layout

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: fix a possible underflow

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: add a check on the tid coming from the firmware

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: mvm: fix out-of-bounds tid_data access in BA notif

Namjae Jeon <[email protected]>
ksmbd: preserve VFS inherited POSIX ACL mask

Namjae Jeon <[email protected]>
ksmbd: fix maximum allowed access checks

Val Packett <[email protected]>
remoteproc: qcom_wcnss: Fix handling the lack of PD regulators in v3

Yun Zhou <[email protected]>
ext4: fix circular lock dependency in ext4_ext_migrate

Gou Hao <[email protected]>
powerpc/xive: propagate IPI init errors to prevent use-after-free

Gou Hao <[email protected]>
powerpc/xive: add error return value to xive_smp_probe()

Rafael J. Wysocki <[email protected]>
ACPI: bus: Introduce acpi_bus_get_primary_device()

Chris Mason <[email protected]>
svcrdma: Reject Write/Reply chunks with segcount 0

Shameer Kolothum <[email protected]>
iommu/arm-smmu-v3: Manage teardown with devm

Adrian Hunter <[email protected]>
i3c: master: Fix recursive locking during device registration

Li Chen <[email protected]>
nvdimm: virtio_pmem: refcount requests for token lifetime

Maíra Canal <[email protected]>

    drm/v3d: Clear queue->active_job when v3d_fence_create() fails

Richard Cheng <[email protected]>
cxl/mbox: Clamp mailbox output allocation to the payload size

Evgenii Burenchev <[email protected]>
drm/amd/display: Fix dangling pointer in plane reset function

Evgenii Burenchev <[email protected]>
drm/amd/display: Fix dangling pointer in CRTC reset function

Leon Hwang <[email protected]>
bpf: Copy per-CPU map value padding in copy_map_value_long()

Gregory Price <[email protected]>
mm/mm_init: handle alloc_percpu failure in free_area_init_core_hotplug

Alex Bereza <[email protected]>
dmaengine: xilinx_dma: Fix CPU stall in xilinx_dma_poll_timeout

Manos Pitsidianakis <[email protected]>
hwrng: core - fix rng list on registration error

Myeonghun Pak <[email protected]>
crypto: keembay - Fix AEAD unregister count in error path

Waiman Long <[email protected]>
cgroup/cpuset: Make nr_deadline_tasks an atomic_t

Chen Ridong <[email protected]>
cgroup/cpuset: move common code to cpuset-internal.h

Chen Ridong <[email protected]>
cgroup/cpuset: introduce cpuset-v1.c

Malaya Kumar Rout <[email protected]>
time/namespace: Validate nanosecond field in proc_timens_set_offset()

Armin Wolf <[email protected]>
platform/x86: dell-wmi-base: Fix handling of ultra performance key

Armin Wolf <[email protected]>
platform/x86: lg-laptop: Fix LED resource handling

Nicholas Dudar <[email protected]>
bpf: Reject rdonly/rdwr_buf_size kfunc arguments that exceed u32 max

Qing Ming <[email protected]>
usb: gadget: uac: validate rate list length before storing

Marco Scardovi <[email protected]>
platform/x86: asus-wmi: fix resource leaks on probe failure

Maher Azzouzi <[email protected]>
esp: do not unref managed frag pages in esp_ssg_unref()

Leon Romanovsky <[email protected]>
RDMA/rvt: Return NULL after port allocation failure

Reinette Chatre <[email protected]>
fs/resctrl: Prevent use-after-free in rdtgroup_kn_put()

Sudeep Holla <[email protected]>
firmware: arm_scmi: Publish channel state before callbacks

Sudeep Holla <[email protected]>
firmware: arm_scmi: Fix SCMI device destroy lifetimes

Emmanuel Grumbach <[email protected]>
wifi: iwlwifi: guard against division by zero in iwl_dbg_tlv_alloc_fragments

Ruoyu Wang <[email protected]>
drm/msm: Only fini scheduler after successful init

Philipp Stanner <[email protected]>
drm/sched: Use struct for drm_sched_init() params

Koichiro Den <[email protected]>
dmaengine: dw-edma: Terminate all descriptors without callbacks

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Zero queue and stack outputs on lock failure

Aditya Prakash Srivastava <[email protected]>
ext4: fix ABBA deadlock in ext4_xattr_inode_cache_find()

Leon Romanovsky <[email protected]>
RDMA/erdma: complete object teardown when the destroy command fails

Leon Hwang <[email protected]>
bpf: Fix WARNING in bpf_tracing_link_release

Justin Yeh <[email protected]>
pinctrl: mediatek: use devm_gpiochip_add_data() for GPIO chip

Li Qiang <[email protected]>
scsi: ufs: core: Validate string descriptors

Fan Wu <[email protected]>
spi: oc-tiny: switch to managed controller allocation

Gary Guo <[email protected]>
PCI: Fix UAF when probe runs concurrent to dyn ID removal

Gary Guo <[email protected]>
PCI: Fix dyn_id add TOCTOU

Gary Guo <[email protected]>
PCI: Make pci_match_one_device() match on ID instead of device

Samiullah Khawaja <[email protected]>
PCI: Initialize temporary device in new_id_store()

Ryusuke Konishi <[email protected]>
nilfs2: fix BUG in nilfs_copy_dirty_pages() on dirty state mismatch

Leon Romanovsky <[email protected]>
RDMA/cxgb4: Fix dereg_skb leak and double free in write_tpt_entry()

Fan Wu <[email protected]>
spi: davinci: switch to managed controller allocation

Jeff Johnson <[email protected]>
wifi: ath11k: fix overreads in ath11k_wmi_process_csa_switch_count_event()

Jeff Johnson <[email protected]>
wifi: ath11k: fix stride mismatch in mac_phy_caps_parse()

Pu Lehui <[email protected]>
bpf: Fix potential UAF when reading bpf link info

Kui-Feng Lee <[email protected]>

    bpf: Retire the struct_ops map kvalue->refcnt.

Peter Zijlstra <[email protected]>
x86/ftrace: Remove SYSTEM_BOOTING exceptions

Martin Wilck <[email protected]>
md/raid1: create serial pool adding rdev to array with serialize_policy=1

Muhammad Usama Anjum <[email protected]>
misc: sgi-gru: remove interrupt-context page-table walks

Michael-CY Lee <[email protected]>
wifi: mt76: fix non-AQL packet accounting for MLO stations

Felix Fietkau <[email protected]>
wifi: mt76: mt7915: unwind state on add_interface failure

Christophe JAILLET <[email protected]>
wifi: mt76: mt7915: Fix an error handling path in mt7915_add_interface()

Felix Fietkau <[email protected]>
wifi: mt76: mt7915: allocate vif wcid in the same range as stations

Felix Fietkau <[email protected]>
wifi: mt76: cancel reset and rc work on device unregister

Yonghong Song <[email protected]>
bpf, x86: Fix trampoline stack size for 128-bit arguments

Will Deacon <[email protected]>
arm64: ptrace: Keep 'orig_x0' in-sync with x0 on syscall entry

Zhao Li <[email protected]>
wifi: nl80211: clean up color-change beacon data on errors

Jason Huang <[email protected]>
wifi: brcmfmac: fix P2P action frame handling without device vif

Zhao Li <[email protected]>
wifi: cfg80211: stop PMSR before P2P and NAN teardown

Karl Mehltretter <[email protected]>
serial: core: do fallible allocations before the console can be registered

Karl Mehltretter <[email protected]>
serial: core: clear freed pointers on uart_register_driver() failure

Karl Mehltretter <[email protected]>
tty: skip cdev_del() when no cdev is registered

Greg Kroah-Hartman <[email protected]>
tty: make tty_class a static const structure

Haoxiang Li <[email protected]>
HID: logitech-hidpp: Fix FF device cleanup on init failure

Vicki Pfau <[email protected]>
HID: steam: Reject short reads

Pu Lehui <[email protected]>
bpf, cgroup: Fix invalid storage access after __cgroup_bpf_attach failed

Rafael J. Wysocki <[email protected]>
thermal: hwmon: Remove hwmon class device along with its parent

Cheng Xu <[email protected]>
RDMA/erdma: Hold QP references for AE and CM processing

Cen Zhang <[email protected]>
ocfs2: o2hb: quiesce negotiate handlers and timeout work

Cen Zhang <[email protected]>
ocfs2/cluster: keep heartbeat local node stable

Yufan Chen <[email protected]>
ocfs2/heartbeat: fix slot mapping rollback leaks on error paths

Jiri Olsa <[email protected]>
bpf: Clear buf on error in __bpf_get_task_stack

Harry Wentland <[email protected]>
drm/amd/display: Resize MST HDCP per-connector arrays to 32

Yeoreum Yun <[email protected]>
coresight: etm4x: missing cscfg_csdev_disable_active_config() in perf enable

Yang Xiuwei <[email protected]>
scsi: sd: Fix special_vec mempool leak when scsi_alloc_sgtables() fails

Filipe Manana <[email protected]>
btrfs: defrag: fix deadlock between defrag and delalloc space reservation

Qu Wenruo <[email protected]>
btrfs: always wait for ordered extents to avoid OE races

Sun YangKai <[email protected]>
btrfs: check if root is readonly when setting posix acl

Qu Wenruo <[email protected]>
btrfs: qgroup: fix a wrong length calculation in qgroup_free_reserved_data()

Pu Lehui <[email protected]>
bpf, cgroup: Fix storage null-ptr-deref after replacing prog

Sanghyun Park <[email protected]>
bpf: Fix mmap_lock leak in irq_work path

Runyu Xiao <[email protected]>
sunrpc: xprtsock: annotate shared socket callbacks with READ_ONCE/WRITE_ONCE

Benjamin Coddington <[email protected]>
Treewide: Stop corrupting socket's task_frag

Guillaume Nault <[email protected]>
net: Introduce sk_use_task_frag in struct sock.

Alexander Aring <[email protected]>
fs: dlm: cleanup listen sock handling

Alexander Aring <[email protected]>
fs: dlm: remove socket shutdown handling

Alexander Aring <[email protected]>
fs: dlm: use listen sock as dlm running indicator

Chuck Lever <[email protected]>
NFS: Return a delegation the client fails to record

Kuniyuki Iwashima <[email protected]>
amt: Don't support cross-netns setup.

Sven Peter <[email protected]>
nvme-apple: Destroy the admin queue on removal

Takashi Sakamoto <[email protected]>
firewire: core: fix memory leak in error path of build_tree()

Marek Szyprowski <[email protected]>
clocksource/drivers/samsung_pwm: Switch to raw_spinlock_t type

Maurizio Lombardi <[email protected]>
nvmet: fix max_qid race between configfs and controller allocation

ZhengYuan Huang <[email protected]>
ocfs2: validate orphan slot during inode read

ZhengYuan Huang <[email protected]>
ocfs2: validate DIO orphan slot during inode read

Zhan Xusheng <[email protected]>
fs/ntfs3: fix integer overflow in MFT cluster validation

Zizhi Wo <[email protected]>
null_blk: free zones array on device power-off

Usama Arif <[email protected]>
blk-iolatency: clear delay state when freeing policy data

Usama Arif <[email protected]>
blk-iocost: clear delay state when freeing policy data

Yu Kuai <[email protected]>
blk-cgroup: delay freeing policy data after rcu grace period

John Johansen <[email protected]>
apparmor: fix deadlock in complain-mode change_hat

Yunseong Kim <[email protected]>
ksmbd: fix slab-out-of-bounds read in ksmbd_alloc_user()

Namjae Jeon <[email protected]>
ksmbd: free preauth sessions on connection teardown

Namjae Jeon <[email protected]>
ksmbd: serialize oplock close with pending break ownership

ZhangGuoDong <[email protected]>
smb/server: fix null-ptr-deref in ksmbd_ipc_tree_connect_request()

Ilan Dudnik <[email protected]>
ksmbd: defer publishing granted locks to prevent UAF/double-free race

Gao Xiang <[email protected]>
erofs: fix interlaced ztailpacking pclusters

Namjae Jeon <[email protected]>
ksmbd: safely discard unregistered deferred locks

Namjae Jeon <[email protected]>
ksmbd: detach blocked lock requests before freeing

Hang Nan <[email protected]>
ksmbd: bound smb_check_perm_dacl() ACE walks by DACL size

Ze Tan <[email protected]>
smb/server: fix session leak in ksmbd_session_register()

ZhangGuoDong <[email protected]>
pnfs/blocklayout: Fix device leaks on parse failure

Jeuk Kim <[email protected]>
NFSv4/flexfiles: fix NULL dereference for NFSv4.0 data servers

Zhansong Gao <[email protected]>
NFSv4: Fix incorrect argument passed to nfs4_delete_lease() in nfs4_add_lease()

Jiayuan Chen <[email protected]>
bpf, xdp: move offload check into dev_xdp_install()

Baokun Li <[email protected]>
fuse: check for NULL root inode in fuse_fill_super_submount

Nguyen Dinh Phi <[email protected]>
vsock: don't check the listener's sk_err in vsock_accept()

Tetsuo Handa <[email protected]>
net: add missing ref_tracker_dir_exit() to alloc_netdev_mqs()

Christopher Lusk <[email protected]>
smb: client: fix request buffer leak in smb2_new_read_req()

Runyu Xiao <[email protected]>
ALSA: mtpav: shut down output timer before card teardown

Pengpeng Hou <[email protected]>
net: qlcnic: validate unified ROM sections before loading

Eric Dumazet <[email protected]>
ip6mr: do not clone dst in ip6mr_cache_report()

Jamal Hadi Salim <[email protected]>
net: sched: fix 32-bit backlog wrap in gred, bfifo and plug enqueue

Eric Dumazet <[email protected]>
net_sched: sch_fifo: implement lockless __fifo_dump()

Nikolay Aleksandrov <[email protected]>
net: bridge: arp/nd proxy: fix reading neigh ha

Nikolay Aleksandrov <[email protected]>
vxlan: fix reading neigh ha

Jérémy Jean <[email protected]>
NFSv4.1: zero referring call lists before decoding

Jamal Hadi Salim <[email protected]>
net/sched: account classifier filter allocations to memcg

Michael Kelley <[email protected]>
Drivers: hv: vmbus: Skip VMBus module cleanup for non-nested root partition

Radek Podgorny <[email protected]>
Bluetooth: do not leak an hci_conn when a second LE connect is rejected

Anshumali Gaur <[email protected]>
octeontx2-vf: fix workqueue and netdev race in probe/remove

Victor Nogueira <[email protected]>
net/sched: act_ife: Only operate on Ethernet frames

Jamal Hadi Salim <[email protected]>
net/sched: fq: add overflow bounds to quantum and initial quantum

Haotian Zhang <[email protected]>
samples/ftrace: Fix kthread_stop() on ERR_PTR in ftrace-direct-multi-modify

Pablo Neira Ayuso <[email protected]>
netfilter: nf_tables: skip double clone set expressions on element insert

Doruk Tan Ozturk <[email protected]>
HID: sony: clean up device list on probe failure

Chuck Lever <[email protected]>
NFSD: Prevent client use-after-free during close_lru reaping

Jeffin Philip <[email protected]>
usb: gadget: f_midi: initialize work in f_midi_alloc()

Kees Cook <[email protected]>
usb: gadget: f_midi: Annotate struct f_midi with __counted_by

Kees Cook <[email protected]>
Compiler Attributes: Add __counted_by macro

Steven Rostedt <[email protected]>
tracing: Take trace_array reference when opening options file

Baineng Shou <[email protected]>
dma-buf: dma-heap: don't publish fd before copy_to_user() succeeds

Aneesh Kumar K.V (Arm) <[email protected]>
dma-direct: return struct page from dma_direct_alloc_from_pool()

Christoph Hellwig <[email protected]>
dma-direct: simplify the use atomic pool logic in dma_direct_alloc

Petr Tesarik <[email protected]>
dma-direct: cleanup parameters to dma_direct_optimal_gfp_mask

Jinjie Ruan <[email protected]>
powerpc/kexec_file: Prevent kexec range truncation

Anthony Krowiak <[email protected]>
s390/vfio-ap: fix stale pqap_hook pointer on error in vfio_ap_mdev_set_kvm()

Anthony Krowiak <[email protected]>

    s390/vfio-ap: Fix dereference matrix_mdev->kvm without checking for NULL

Anthony Krowiak <[email protected]>
s390/vfio-ap: Fix missing lock required to access list of ap_matrix_mdev objects

Haoxiang Li <[email protected]>
ASoC: hdac_hda: Fix hlink refcount leak on component registration failure

Vidhu Sarwal <[email protected]>
iio: light: ltrf216a: fix runtime PM reference leak in error path

Shreeya Patel <[email protected]>
iio: light: ltrf216a: Return floating point values

Christian Borntraeger <[email protected]>
KVM: s390: Fix memory corruption by not reinjecting CK machine checks

Fuad Tabba <[email protected]>
KVM: arm64: vgic-its: Don't dereference a NULL collection on ITT save

Wenjie Qi <[email protected]>
f2fs: validate MOVE_RANGE destination size

Wenjie Qi <[email protected]>
f2fs: avoid NULL checkpoint thread access in sysfs

Zhiguo Niu <[email protected]>
f2fs: use new ioprio Macro to get ckpt thread ioprio level

Damien Le Moal <[email protected]>
scsi: block: ioprio: Clean up interface definition

Yangtao Li <[email protected]>
f2fs: convert to use sysfs_emit

Daeho Jeong <[email protected]>
f2fs: fix to migrate all curseg types during free_segment_range

Chao Yu <[email protected]>
f2fs: fix to avoid potential deadloop in f2fs_fsync_node_pages()

Chao Yu <[email protected]>
f2fs: fix to clear dirty flag on folio in error path

Jesse Zhang <[email protected]>
drm/amdgpu: force complete the KIQ ring fences on reset

Priya Hosur <[email protected]>
drm/amdkfd: Add TLB flush after MES queue eviction/suspension

Xiaogang Chen <[email protected]>
drm/amdkfd: Fix error path at svm_migrate_copy_to_ram

Xiaogang Chen <[email protected]>
drm/amdkfd: Fix the case that vm range is hole at svm_migrate_copy_to_vram

Marek Czernohous <[email protected]>
drm/nouveau: unsubscribe the channel-kill event before the fence context

Jiri Olsa <[email protected]>
bpf: Disable preemption in bpf_get_stackid

Farhan Ali <[email protected]>
PCI: Allow per function PCI slots to fix slot reset on s390

Farhan Ali <[email protected]>
PCI: Introduce PCI_SLOT_PLACEHOLDER constant for slot_nr placeholder value

Namjae Jeon <[email protected]>
ksmbd: zero pipe read compound padding

Cen Zhang (Microsoft Security FORGE Labs) <[email protected]>
ksmbd: fix tree connection use-after-free in smb2_tree_connect()

Jann Horn <[email protected]>
apparmor: fix cred UAF caused by begin_current_label_crit_section()

Quanfa Fu <[email protected]>
apparmor: make aa_set_current_onexec return void

Breno Leitao <[email protected]>
mm/kmemleak: avoid soft lockup when scanning task stacks

Jim Cromie <[email protected]>
kmemleak: drop (age <increasing>) from leak record

Zhaoyang Huang <[email protected]>
mm: use stack_depot for recording kmemleak's backtrace

Kairui Song <[email protected]>
mm/mglru: fix and remove redundant unevictable folio handling

Daniel Borkmann <[email protected]>
bpf: Disable preemption in __bpf_get_stack

Chuck Lever <[email protected]>
svcrdma: Reject Read lists that exceed the page budget

Chuck Lever <[email protected]>
svcrdma: Validate Read chunk positions before reconstruction

Jiangshan Yi <[email protected]>
HID: nintendo: register input device after capabilities are set

Eric Farman <[email protected]>
s390/vfio_ccw: Ensure first IDAW remains constant

David Windsor <[email protected]>
bpf: Reject sleepable BPF_LSM_CGROUP programs at load time

Jordan Walters <[email protected]>
Bluetooth: hci_core: Fix UAF in hci_unregister_dev()

Eric Dumazet <[email protected]>
net: watchdog: fix refcount tracking races

Jamie Nguyen <[email protected]>

    fs/ntfs3: resize log->one_page_buf when adopting on-disk page size

Cen Zhang <[email protected]>
Bluetooth: 6lowpan: hold L2CAP conn across debugfs control

Marc Zyngier <[email protected]>
KVM: arm64: vgic: Handle race between interrupt affinity change and LPI disabling

Kanglong Wang <[email protected]>
LoongArch: Move jump_label_init() before parse_early_param()

Qing Ming <[email protected]>
cgroup/rstat: validate cpu before css_rstat_cpu() access

Florian Westphal <[email protected]>
netfilter: revalidate bridge ports

Damien Riégel <[email protected]>
greybus: raw: fix use-after-free if write is called after disconnect

Yongpeng Yang <[email protected]>
f2fs: fix fsck inconsistency caused by FGGC of node block

Gao Xiang <[email protected]>
erofs: fix inline data read failure for ztailpacking pclusters

Florian Westphal <[email protected]>
netfilter: nfnetlink_queue: do shared-unconfirmed check before segmentation

Xingui Yang <[email protected]>
scsi: hisi_sas: Fix NULL pointer exception during user_scan()

Fernando Fernandez Mancera <[email protected]>
ipv4: nexthop: allocate skb dynamically in rtm_get_nexthop()

Pablo Neira Ayuso <[email protected]>
netfilter: nf_tables: clone set on flush only

Peilin Ye <[email protected]>
bpf: Tell memcg to use allow_spinning=false path in bpf_timer_init()

Qu Wenruo <[email protected]>
btrfs: avoid NULL pointer dereference if no valid csum tree

Qu Wenruo <[email protected]>
btrfs: avoid NULL pointer dereference if no valid extent tree

Zqiang <[email protected]>
rcu-tasks: Fix access non-existent percpu rtpcp variable in rcu_tasks_need_gpcb()

Alex Hung <[email protected]>

    drm/amd/display: Check link_index before accessing dc->links[]

Hugo Villeneuve <[email protected]>
serial: sc16is7xx: fix TX fifo corruption

Junxian Huang <[email protected]>
RDMA/hns: Fix soft lockup under heavy CEQE load

Gavin Shan <[email protected]>
mm/shmem: disable PMD-sized page cache if needed

Jacob Keller <[email protected]>
ice: Don't process extts if PTP is disabled

Gavin Shan <[email protected]>
mm/filemap: skip to create PMD-sized page cache if needed

Longlong Xia <[email protected]>
zram: fix out-of-bounds access in writeback_store()

Chuck Lever <[email protected]>
NFSD: check truncate permission under inode lock

Jeff Layton <[email protected]>
lockd, nfsd: RCU-protect nlmsvc_ops dispatch

Jeff Layton <[email protected]>
nfsd: fix BUG_ON in nfsd4_alloc_layout_stateid on racing delegation revoke

Jeff Layton <[email protected]>
nfsd: fix fcache_disposal UAF by inlining dispose state into nfsd_net

Jeff Layton <[email protected]>
nfsd: fix stale s2s_cp_stateids IDR entry for async COPY

Chris Mason <[email protected]>

    nfsd: gate nfs3 setacl by argp->mask

Robbie Ko <[email protected]>
nfsd: reject out-of-range nseconds in NFSv3 SETATTR and create ops

Chuck Lever <[email protected]>
NFSD: Prevent client use-after-free during delegation revoke

Xiubo Li <[email protected]>
ceph: fix UAF in check_new_map() on session freed during unlock

Michael Bommarito <[email protected]>
ceph: cap delegated inode count in ceph_parse_deleg_inos()

Max Kellermann <[email protected]>
ceph: do not repeat ceph_trim_dentries() if no progress possible

Guanghui Yang <[email protected]>
btrfs: drop recovered reloc root refs on recovery failure

Anand Jain <[email protected]>
btrfs: rename err to ret in btrfs_recover_relocation()

Anand Jain <[email protected]>
btrfs: rename ret to ret2 in btrfs_recover_relocation()

Anand Jain <[email protected]>
btrfs: rename ret to err in btrfs_recover_relocation()

Shuangpeng Bai <[email protected]>
btrfs: fix extent map leak in NOCOW direct I/O write

Frank Sorenson <[email protected]>
cifs: call pagecache_isize_extended() in cifs_setsize() when extending

Bryam Vargas <[email protected]>
smb: client: reject a tree connect response whose byte count is too small

Jiangshan Yi <[email protected]>
HID: mcp2221: clear rxbuf after I2C/SMBus transfer completes

Florian Pradines <[email protected]>

    HID: mcp2221: fix OOB write in mcp2221_raw_event()

Jan Kara <[email protected]>
ext2: Fix lost inode updates for IS_SYNC inodes

Hui Su <[email protected]>
fbdev: ssd1307fb: defer I2C transfers from damage callbacks

Thomas Zimmermann <[email protected]>
fbdev/ssd1307fb: Generate deferred I/O ops

Thomas Zimmermann <[email protected]>
fbdev: Add initializer macros for struct fb_ops

Thomas Zimmermann <[email protected]>

    fbdev: Validate info->screen_{base, buffer} in fb_ops implementations

Thomas Zimmermann <[email protected]>

    fbdev: Don't re-validate info->state in fb_ops implementations

Bryam Vargas <[email protected]>
dm array: validate array block headers on read

Heinz Mauelshagen <[email protected]>
dm: correct block comments format.

Zhiling Zou <[email protected]>
ip: orphan prefetched skbs before multicast forwarding

Andrea Mayer <[email protected]>
ipv6: rpl: fix NULL dereference of idev in ipv6_rpl_srh_rcv()

Chris Mason <[email protected]>
SUNRPC: svcauth_gss: enforce krb5 token minimum length

Chuck Lever <[email protected]>
SUNRPC: Convert unwrap_priv_data() to use xdr_stream

Chuck Lever <[email protected]>
SUNRPC: Rename automatic variables in unwrap_priv_data()

Chuck Lever <[email protected]>
SUNRPC: Fix crasher in unwrap_integ_data()

Jeff Layton <[email protected]>
sunrpc: defer rq_argp and rq_resp free until after RCU grace period

Luxiao Xu <[email protected]>
sunrpc: fix use-after-free in __rpc_clnt_handle_event and __rpc_clnt_remove_pipedir

Chuck Lever <[email protected]>
SUNRPC: Reject short RFC 4121 MIC tokens in gss_krb5_verify_mic_v2

Chuck Lever <[email protected]>
svcrdma: Reject connection when transport allocation fails

Chuck Lever <[email protected]>
svcrdma: Handle ADDR_CHANGE CM event properly

Chuck Lever <[email protected]>
svcrdma: Reject inline replies that overflow the pull-up buffer

Chuck Lever <[email protected]>
svcrdma: Use svc_xprt_put to free listener on create failure

Yan Zhen <[email protected]>
sunrpc: xprtrdma: Use ERR_CAST() to return

Chuck Lever <[email protected]>
svcrdma: Refactor the creation of listener CMA ID

Chuck Lever <[email protected]>
svcrdma: Allocate new transports on device's NUMA node

Tejun Heo <[email protected]>
sched/core: Make core-sched flips wait for in-flight selections

Shuangpeng Bai <[email protected]>
lockd: fix NULL dereference on lockowner allocation failure

Fan Wu <[email protected]>
power: supply: charger-manager: register regulators before exposing sysfs

Uwe Kleine-König <[email protected]>
power: supply: charger-manager: Convert to platform remove callback returning void

Fan Wu <[email protected]>
power: supply: lp8788-charger: fix use-after-free on remove

Andrew Davis <[email protected]>
power: supply: lp8788: Use devm_power_supply_register() helper

Uwe Kleine-König <[email protected]>
power: supply: lp8788-charger: Convert to platform remove callback returning void

Jianing Li <[email protected]>
power: supply: max17040: propagate register read errors

Weimin Xiong <[email protected]>
iommu/msm: Unwind probe state on registration failure

Kevin Tian <[email protected]>
iommu/vt-d: Force requesting ACS when tboot is enabled

Lu Baolu <[email protected]>
iommu: Add max_pasids field in struct iommu_device

Abdun Nihaal <[email protected]>
platform/x86: int1092: Fix potential memory leak in sar_probe()

Rafael J. Wysocki <[email protected]>
platform/x86: intel_sar: Check ACPI_HANDLE() against NULL

Mario Limonciello <[email protected]>
platform/x86/amd/pmc: Propagate SMU errors and validate S2D address

Zihan Xi <[email protected]>
net: l2tp: do not propagate multicast notification errors

Xuanqiang Luo <[email protected]>
net: ravb: serialize PTP clock teardown

Fan Ye <[email protected]>
net: thunderbolt: Mark the connection down when bringing it up fails

Fan Ye <[email protected]>
net: thunderbolt: Release the Rx HopID that was handed out on mismatch

Hidayath Khan <[email protected]>
net/smc: stop killed, freed and out_of_sync sharing a byte

Abdun Nihaal <[email protected]>
mfd: sm501: Fix potential memory leaks during remove

Uwe Kleine-König <[email protected]>
mfd: sm501: Convert to platform remove callback returning void

Paul Cercueil <[email protected]>
mfd: sm501: Remove #ifdef guards for PM related functions

Dawei Feng <[email protected]>
wifi: iwlwifi: dvm: fix memory leak in iwl_op_mode_dvm_start()

Bryam Vargas <[email protected]>
wifi: mt76: mt7915: bound the device EEPROM address before the EFUSE copy

StanleyYP Wang <[email protected]>
wifi: mt76: mt7915: set correct background radar capability

Eric Dumazet <[email protected]>
vlan: fix skb_under_panic and races when toggling HW VLAN offload

David Rosca <[email protected]>
drm/amdgpu: Fix UVD dpb min size calculation for H264

Srinivasan Shanmugam <[email protected]>
drm/amd/amdgpu: Fix errors & warnings in amdgpu _uvd, _vce.c

Wei Fang <[email protected]>
net: tap: fix wrong transport_header when sending VLAN-tagged frame

Akihiko Odaki <[email protected]>
tap: Keep hdr_len in tap_get_user()

Leon Romanovsky <[email protected]>
ntb: Store original DMA address for future release

Koichiro Den <[email protected]>
NTB: ntb_transport: Use ntb_get_dma_dev() for DMA buffers

Koichiro Den <[email protected]>
NTB: core: Add .get_dma_dev() callback to ntb_dev_ops

Eric Dumazet <[email protected]>
tipc: avoid busy looping in tipc_exit_net()

Ibrahim Hashimov <[email protected]>
RDMA/rxe: Fix responder UAF on IB_QP_MAX_DEST_RD_ATOMIC modify_qp

Yong Wang <[email protected]>
tcp: clamp route advmss to TCP_MIN_MSS

Kyle Zeng <[email protected]>
net/packet: defer vmalloc TX_RING free until skbs finish

Fourie Zhang <[email protected]>
netfilter: nf_tables: don't queue packet path object notifications

Bryam Vargas <[email protected]>
crypto: virtio - bound the akcipher result length

Lukas Wunner <[email protected]>
crypto: virtio - Drop superfluous [as]kcipher_req pointer

Lukas Wunner <[email protected]>
crypto: virtio - Drop superfluous [as]kcipher_ctx pointer

Lukas Wunner <[email protected]>
crypto: virtio - Drop sign/verify operations

Markus Elfring <[email protected]>
crypto: virtio - Less function calls in __virtio_crypto_akcipher_do_req() after error detection

Thomas Zimmermann <[email protected]>
fbdev: Wrap user-invoked calls to fb_set_var() in helper

Ali Ahmet Memis <[email protected]>
Bluetooth: ISO: zero the sockaddr before returning it in getname

Bryam Vargas <[email protected]>
selinux: reject a permission value exceeding the class permission count

William Palacek <[email protected]>
drm/amdkfd: Add bounds check for CRAT subtype length

Yongqiang Sun <[email protected]>
drm/amdkfd: Fix infinite loop parsing CRAT with zero subtype length

Shay Drory <[email protected]>
net/mlx5e: TC, Check if flow is PEER before acquiring devcom lock

Luxiao Xu <[email protected]>
bpf: Check sk_state before sk_protocol in bpf_tcp_*_syncookie

Stefan Haberland <[email protected]>
s390/dasd: Fix undersized format-check buffer

Heiko Carstens <[email protected]>
s390: include linux/io.h instead of asm/io.h

Baoquan He <[email protected]>
s390/mm: do not include <asm-generic/io.h> directly

Thomas Richter <[email protected]>
s390/cpum_sf: move functions from header file to source file

Heiko Carstens <[email protected]>
s390/appldata: remove power management callbacks

Yuho Choi <[email protected]>
dmaengine: idxd: fix double free of wq, engine, and group structs

Guenter Roeck <[email protected]>
hwmon: (sht3x) Fix unaligned accesses

Chenguang Zhao <[email protected]>
net: ethernet: mtk_eth_soc: pass eth to mtk_handle_irq_rx in poll_controller

Pablo Neira Ayuso <[email protected]>
netfilter: nf_conntrack_expect: use conntrack GC to reap expectations

Prasanna Kumar T S M <[email protected]>
soc: xilinx: Shutdown and free rx mailbox channel

Uwe Kleine-König <[email protected]>
soc/xilinx: zynqmp_power: Convert to platform remove callback returning void

Yihang Li <[email protected]>
scsi: hisi_sas: Add slave_destroy interface for v3 hw

Yuho Choi <[email protected]>
media: atomisp: gc2235: fix UAF and memory leak

Qiuxu Zhuo <[email protected]>
EDAC/igen6: Fix call trace due to missing release()

Fernando Fernandez Mancera <[email protected]>
netfilter: synproxy: fix unaligned memory access in timestamp adjustment

Fernando Fernandez Mancera <[email protected]>
netfilter: synproxy: adjust duplicate timestamp options

Fernando Fernandez Mancera <[email protected]>
netfilter: synproxy: drop packets if timestamp adjustment fails

Florian Westphal <[email protected]>
netfilter: make nftables drops visible in net dropmonitor

David Carlier <[email protected]>
netfilter: flowtable: avoid num_encaps underflow on bridge VLAN untag

Weiming Shi <[email protected]>
btrfs: lzo: reject compressed segment that overflows the compressed input

Ratheesh Kannoth <[email protected]>
octeontx2-af: npc: Fix size of entry2cntr_map

Cen Zhang <[email protected]>

    ALSA: seq: oss: Serialize readq reset state with q->lock

James Clark <[email protected]>
coresight: ete: Always save state on power down

Ivan Abramov <[email protected]>

    ieee802154: Avoid calling WARN_ON() on -ENOMEM in cfg802154_switch_netns()

Li RongQing <[email protected]>
ACPI: processor_idle: Mark LPI enter functions as __cpuidle

Matthieu Baerts (NGI0) <[email protected]>
mptcp: avoid combining some incoming suboptions

Candice Li <[email protected]>
drm/amdgpu: reject oversized IBs with per-ring packet limits

Eric Farman <[email protected]>
s390/vfio_ccw: Limit the number of channel program segments

Mark Brown <[email protected]>
ASoC: tas2562: Validate values for volume writes

Hongjie Fang <[email protected]>
scsi: core: pair EH runtime PM get and put

Julian Anastasov <[email protected]>
ipvs: revalidate ihl to prevent out-of-bounds access

Jamal Hadi Salim <[email protected]>

    net/sched: act_api: fix TOCTOU NULL deref on a->goto_chain

Victor Nogueira <[email protected]>
net: sched: Add initial TC error skb drop reasons

Victor Nogueira <[email protected]>
net: sched: Move drop_reason to struct tc_skb_cb

Jamal Hadi Salim <[email protected]>
net, sched: Fix SKB_NOT_DROPPED_YET splat under debug config

Daniel Borkmann <[email protected]>
net, sched: Make tc-related drop reason more flexible

Eric Dumazet <[email protected]>
l2tp: fix tunnel and session refcount leak on seq_file release

Mark Tomlinson <[email protected]>
gpio: pca953x: fix pca953x_irq_bus_sync_unlock regmap lock

Karthikeyan KS <[email protected]>
soc: aspeed: lpc-snoop: Fix usercopy overflow in snoop_file_read

David Lee <[email protected]>
btrfs: lzo: reject inline extents without valid headers

Chengfeng Ye <[email protected]>
bpf: Fix netns reference imbalance in conntrack kfuncs

Linfeng Sun  <[email protected]>
vhost_iotlb: bound map allocation in add_range

Jamal Hadi Salim <[email protected]>
net/sched: cls_api: Always acquire rtnl_lock when destroying locked classifiers

Xin Long <[email protected]>
net: sched: refine software bypass handling in tc_run

Jianbo Liu <[email protected]>
net: sched: cls_api: fix slab-use-after-free in fl_dump_key

Asbjørn Sloth Tønnesen <[email protected]>
net: sched: cls_api: add filter counter

Asbjørn Sloth Tønnesen <[email protected]>
net: sched: cls_api: add skip_sw counter

Eric Dumazet <[email protected]>
netfilter: nf_flow_table: drop existing skb dst before skb_dst_set_noref()

Alexandra Winter <[email protected]>
s390/ism: Fix UAF of sba and ieq during ism_dev_exit()

Hongyan Xu <[email protected]>
watchdog: at91sam9_wdt: prevent timer rearm during teardown

Dongli Zhang <[email protected]>

    net: tap: set skb->dev before parsing virtio net header in tap_get_user_xdp()

Jérémy Jean <[email protected]>
tls: rx: restore msg_iter before TLS 1.3 optimistic retry

Sabrina Dubroca <[email protected]>
selftests: tls: add rekey tests

Sabrina Dubroca <[email protected]>
selftests: tls: add test with a partially invalid iov

Sabrina Dubroca <[email protected]>
selftests: tls: add getsockopt test

Zhiling Zou <[email protected]>
mm/page_table_check: skip special zero mappings

Lorenzo Stoakes (ARM) <[email protected]>
mm/ptdump: always stabilise against page table freeing using init_mm

Dongjiang Zhu <[email protected]>
btrfs: skip global block reserve accounting for rescue mounts

Cen Zhang (Microsoft) <[email protected]>
net/sched: cls_u32: validate offshift to prevent shift-out-of-bounds

Eric Dumazet <[email protected]>
net: udp_tunnel: fix memory leak in udp_tunnel_nic_unregister()

Pauli Virtanen <[email protected]>
Bluetooth: ISO: hold sk properly in iso_conn_ready

Hariprasad Kelam <[email protected]>
octeontx2-af: Block VFs from clobbering special CGX PKIND state

Harald Freudenberger <[email protected]>
s390/zcrypt: Close speculative mem read possibility

Zack Rusin <[email protected]>
drm/vmwgfx: reject DX_BIND_QUERY without a DX context

Werner Kasselman <[email protected]>
drm/radeon: fix integer overflow in radeon_align_pitch()

Wei Zhang <[email protected]>
wifi: ath11k: cancel SSR work items during PCI shutdown

Di Shen <[email protected]>
OPP: Fix race between OPP addition and lookup

Alexander Aring <[email protected]>
dlm: fix add msg handle in send_queue ordered

Prathamesh Deshpande <[email protected]>
IB/mlx5: Fix transport-domain rollback and initialize lb mutex earlier

Pengpeng Hou <[email protected]>
tracing: Bound synthetic-field strings with seq_buf

Kees Cook <[email protected]>
seq_buf: Introduce DECLARE_SEQ_BUF and seq_buf_str()

Matthew Wilcox (Oracle) <[email protected]>
tracing: Move readpos from seq_buf to trace_seq

Sergey Senozhatsky <[email protected]>
seq_buf: Add seq_buf_do_printk() helper

Lianfa Weng <[email protected]>
RDMA/hns: Fix log flood after cmd_mbox failure

Takashi Iwai <[email protected]>
ALSA: seq: oss: Fix UAF at handling events with embedded SysEx data

Geliang Tang <[email protected]>
nvmet-tcp: fix page fragment cache leak in error path

Michael S. Tsirkin <[email protected]>
vhost: fix vhost_get_avail_idx for a non empty ring

Michael S. Tsirkin <[email protected]>
vhost: move smp_rmb() into vhost_get_avail_idx()

Xianting Tian <[email protected]>
vhost: correct misleading printing information

Zhang Cen <[email protected]>
ocfs2: validate fast symlink target during inode read

Pablo Neira Ayuso <[email protected]>
netfilter: cttimeout: detach dataplane timeout policy and repurpose refcount

Bernard Metzler <[email protected]>
RDMA/siw: Fix endpoint/socket association handling

Guoqing Jiang <[email protected]>
RDMA/siw: Introduce siw_destroy_cep_sock

Filipe Manana <[email protected]>
btrfs: fix deadlock cloning inline extent when using flushoncommit

Larysa Zaremba <[email protected]>
ixgbe: do not configure xps for XDP queues

Aditya Prakash Srivastava <[email protected]>
ext4: fix kernel BUG in ext4_write_inline_data_end

Yun Zhou <[email protected]>
ext4: validate donor file superblock early in EXT4_IOC_MOVE_EXT

Cássio Gabriel <[email protected]>
ASoC: topology: Check PCM and DAI name strings before use

HanQuan <[email protected]>
ALSA: seq: Fix kernel heap address leak in bounce_error_event()

Takashi Iwai <[email protected]>
ALSA: seq: Drop superfluous filter argument of get_event_dest_client()

Joe Damato <[email protected]>
bnxt: fix head underflow on XDP head-grow

Cen Zhang <[email protected]>
ALSA: seq: avoid stale FIFO cells during resize

Takashi Iwai <[email protected]>
ALSA: seq: Clean up fifo locking with guard

Takashi Iwai <[email protected]>
ALSA: seq: fifo: Use guard() for locking

Kuniyuki Iwashima <[email protected]>
sockmap: Fix use-after-free in udp_bpf_recvmsg()

Jacob Moroni <[email protected]>
RDMA/irdma: Replace waitqueue and flag with completion

Baoli.Zhang <[email protected]>
soundwire: fix bug in sdw_add_element_group_count found by syzkaller

Yang Erkun <[email protected]>

    nfs: use nfsi->rwsem to protect traversal of the file lock list

Abd-Alrhman Masalkhi <[email protected]>
md/raid1: fix writes_pending and barrier reference leaks on write failures

Abd-Alrhman Masalkhi <[email protected]>
md/raid10: fix writes_pending leak on write request failures

John Garry <[email protected]>
md/raid10: Handle bio_split() errors

Abd-Alrhman Masalkhi <[email protected]>
md/raid10: fix writes_pending and barrier reference leaks on discard failures

Yiyang Chen <[email protected]>
bpf: Guard conntrack opts error writes

Chen Cheng <[email protected]>
md/raid5: avoid R5_Overlap races while breaking stripe batches

Florian Westphal <[email protected]>
netfilter: nft_compat: ebtables emulation must reject non-bridge targets

Eric Dumazet <[email protected]>
net: udp_tunnel: prevent double queueing in udp_tunnel_nic_device_sync

Eric Dumazet <[email protected]>
tipc: fix UAF in cleanup_bearer() due to premature dst_cache_destroy()

Xin Long <[email protected]>
sctp: add INIT verification after cookie unpacking

Xin Long <[email protected]>
sctp: fix addr_wq_timer race in sctp_free_addr_wq()

Haofeng Li <[email protected]>
ksmbd: reject undersized DACLs before parsing ACEs

Michael Bommarito <[email protected]>

    xen/pvcalls: bound backend response req_id before indexing rsp[]

Christian Brauner <[email protected]>
fs: refuse O_TMPFILE creation with an unmapped fsuid or fsgid

David Howells <[email protected]>

    afs: Fix reinitialisation of the inode, in particular ->lock_work

Feng Liu <[email protected]>

    net/mlx5e: Fix publication race for priv->channel_stats[]

Jamal Hadi Salim <[email protected]>
net/sched: act_pedit: fix TOCTOU heap OOB write in tc offload

Cen Zhang <[email protected]>
Bluetooth: 6lowpan: avoid untracked enable work

Yuho Choi <[email protected]>
net/liquidio: drop cached VF pci_dev LUT

Sandipan Das <[email protected]>
perf/x86/amd/core: Avoid enabling BRS from the SVM reload path

Eric Dumazet <[email protected]>
ipv4: igmp: Fix potential memory leaks in igmp_mod_timer() and igmp_stop_timer()

Tamaki Yanagawa <[email protected]>
netfilter: nft_lookup: fix catchall element handling with inverted lookups

Theodor Arsenij Larionov-Trichkine <[email protected]>
netfilter: nft_fib: reject fib expression on the netdev egress hook

Deepanshu Kartikey <[email protected]>
mm/hugetlb: fix hugetlb cgroup rsvd charge/uncharge mismatch

Matthew Wilcox (Oracle) <[email protected]>
fs: Remove NTFS classic

Florian Fuchs <[email protected]>
mtd: maps: vmu-flash: fix fault in unaligned fixup

Ian Bridges <[email protected]>
ocfs2: fix UBSAN array-index-out-of-bounds in ocfs2_sum_rightmost_rec

Deepanshu Kartikey <[email protected]>
ocfs2: validate i_refcount_loc when refcount flag is set

Dmitry Antipov <[email protected]>
ocfs2: add extra consistency checks for chain allocator dinodes

Dmitry Antipov <[email protected]>
ocfs2: add suballoc slot check in ocfs2_validate_inode_block()

Julian Sun <[email protected]>
ocfs2: correct l_next_free_rec in online check

Koichiro Den <[email protected]>
dmaengine: dw-edma-pcie: Reject devices without driver data

Haoxiang Li <[email protected]>
platform/x86: dell-laptop: fix missing cleanups in init error path

Lyndon Sanche <[email protected]>
platform/x86: dell-smbios: Move request functions for reuse

Armin Wolf <[email protected]>
ACPI: battery: Pass battery hook pointer to hook callbacks

Michael Bommarito <[email protected]>
nvmet-auth: reject short AUTH_RECEIVE buffers

Damien Le Moal <[email protected]>
nvmet: Introduce nvmet_req_transfer_len()

Mikulas Patocka <[email protected]>
dm-ioctl: fix a possible overflow in list_version_get_info

Heinz Mauelshagen <[email protected]>
dm: avoid spaces before function arguments or in favour of tabs

Mikulas Patocka <[email protected]>
dm ioctl: a small code cleanup in list_version_get_info

Mikulas Patocka <[email protected]>
dm-verity: fix buffer overflow in FEC calculation

Martin Kaiser <[email protected]>
riscv: probes: save original sp in rethook trampoline

Guoniu Zhou <[email protected]>
pmdomain: imx93-blk-ctrl: Extract PHY as shared domain for DSI/CSI

Peng Fan <[email protected]>
pmdomain: imx: Fix i.MX8MP VC8000E power up sequence

Zhao Li <[email protected]>
wifi: ieee80211: validate MLE common info length

Harald Freudenberger <[email protected]>
s390/zcrypt: Fix buffer over-read in cca_cipher2protkey

Rosen Penev <[email protected]>
ata: sata_dwc_460ex: fix infinite loop in NCQ tag completion bit-scanning

Amir Goldstein <[email protected]>
ovl: check access to copy_file_range source with src mounter creds

Linmao Li <[email protected]>
drm/vc4: Prevent shader BO mappings from becoming writable

Jamal Hadi Salim <[email protected]>
net/sched: Handle TC_ACT_REDIRECT from qdisc filter chains

George Guo <[email protected]>
LoongArch: Fix address space mismatch in kexec command line lookup

Petr Wozniak <[email protected]>

    xfrm: fix stale skb->prev after async crypto steals a GSO segment

Jacob Moroni <[email protected]>
RDMA/irdma: Prevent user-triggered null deref on QP create

Maoyi Xie <[email protected]>
wifi: mac80211: defer link RX stats percpu free to RCU

Sarika Sharma <[email protected]>
wifi: cfg80211: add link_station_info structure to support MLO statistics

Sarika Sharma <[email protected]>
wifi: mac80211: refactor populating mesh related fields in sinfo

Peddolla Harshavardhan Reddy <[email protected]>
wifi: cfg80211: convert pmsr_free_wk to wiphy_work to fix deadlock

Cen Zhang <[email protected]>
wifi: cfg80211: use wiphy work for socket owner autodisconnect

Mostafa Saleh <[email protected]>
firmware: arm_ffa: Fix out-of-bound writes in ffa_setup_and_transmit()

Matt Bobrowski <[email protected]>
bpf: Fix UAF in sock clone early bailouts

David Jeffery <[email protected]>
scsi: core: wake eh reliably when using scsi_schedule_eh

Guanghui Feng <[email protected]>
iommu/amd: Wait for completion instead of returning early in iommu_completion_wait()

Weiming Shi <[email protected]>
tipc: serialize udp bearer replicast list updates

Frank Sorenson <[email protected]>
cifs: fix cifsFileInfo leak on kmalloc failure in deferred close drain paths

Frank Sorenson <[email protected]>
cifs: prevent readdir from changing file size due to stale directory metadata

Gregor Herburger <[email protected]>
drm/vc4: hvs/v3d: Fix null dereference in unbind

Gal Pressman <[email protected]>
net/mlx5: Fix MCIA register buffer overflow on 32 dword reads

Tvrtko Ursulin <[email protected]>
drm/amdgpu: Fix context pstate override handling

James Zhu <[email protected]>
drm/amdgpu: keep amdgpu_ctx_mgr in ctx structure

David Francis <[email protected]>
drm/amdkfd: Check bounds on CRIU restore queue type and mqd size

Jani Nikula <[email protected]>
drm/i915/bios: range check LFP Data Block panel_type2

Joonas Lahtinen <[email protected]>
drm/i915/gt: Fix NULL deref on sched_engine alloc failure

Jani Nikula <[email protected]>
drm/i915/mst: limit DP MST ESI service loop

Mario Limonciello <[email protected]>
drm/amdgpu: Release VFCT ACPI table reference

Lijo Lazar <[email protected]>
drm/amdgpu: Add wrapper for freeing vbios memory

Lijo Lazar <[email protected]>
drm/amdgpu: Use dbg level for VBIOS check messages

Srinivasan Shanmugam <[email protected]>
drm/amd/amdgpu: Fix errors & warnings in amdgpu _bios, _cs, _dma_buf, _fence.c

Linmao Li <[email protected]>
drm/vc4: Shut down BO cache timer before teardown

Guangshuo Li <[email protected]>
media: vivid: fix cleanup bugs in vivid_init()

Yuxiang Yang <[email protected]>
tcp: challenge ACK for non-exact RST in SYN-RECEIVED

Asad Kamal <[email protected]>
drm/amdgpu: fix aperture mapping leak

Namjae Jeon <[email protected]>
ksmbd: bound DACL dedup walk to copied ACEs

Davide Ornaghi <[email protected]>
ksmbd: fix path resolution in ksmbd_vfs_kern_path_create

Sean Christopherson <[email protected]>
KVM: nVMX: Put vmcs12 pages if nested VM-Enter fails due to invalid guest state

Taeyang Lee <[email protected]>
perf/core: Detach event groups during remove_on_exec

Cássio Gabriel <[email protected]>
ALSA: hda/cs35l41: Fix firmware load work teardown

Myeonghun Pak <[email protected]>
usb: typec: tcpci_rt1711h: unregister TCPCI port with devres

Breno Leitao <[email protected]>
netpoll: fix a use-after-free on shutdown path

Namjae Jeon <[email protected]>
ksmbd: prevent path traversal bypass by restricting caseless retry

Namjae Jeon <[email protected]>
ksmbd: use opener credentials for delete-on-close

Namjae Jeon <[email protected]>
ksmbd: use opener credentials for ADS I/O

Haofeng Li <[email protected]>
ksmbd: validate NTLMv2 response before updating session key

Ralph Boehme <[email protected]>
smb/client: fix chown/chgrp with SMB3 POSIX Extensions

Dawei Feng <[email protected]>
usb: free iso schedules on failed submit

Xu Rao <[email protected]>
usb: gadget: f_printer: take kref only for successful open

Andrzej Pietrasiewicz <[email protected]>
usb: gadget: function: Simplify diagnostic messaging in printer

Johan Hovold <[email protected]>
USB: iowarrior: fix use-after-free on disconnect race

Bryam Vargas <[email protected]>
nvmet: fix pre-auth out-of-bounds heap read in Discovery Get Log Page

Tianchu Chen <[email protected]>
nvmet-auth: validate reply message payload bounds against transfer length

Hannes Reinecke <[email protected]>
nvmet: return DHCHAP status codes from nvmet_setup_auth()

Ahsan Atta <[email protected]>
crypto: qat - protect service table iterations with service_lock

Guenter Roeck <[email protected]>
hwmon: (lm90) Add lock protection to lm90_alert

Martin Kaiser <[email protected]>
test_kprobes: clear kprobes between test runs

Jia Zhu <[email protected]>
erofs: fix metabuf leak in inode xattr initialization

Jiajia Liu <[email protected]>

    Bluetooth: btmtk: fix urb->setup_packet leak in error paths

Junyi Liu <[email protected]>
ksmbd: validate SID in parent security descriptor during ACL inheritance

Florian Westphal <[email protected]>
netfilter: ebtables: move to two-stage removal scheme

Florian Westphal <[email protected]>
netfilter: bridge: eb_tables: close module init race

Guenter Roeck <[email protected]>
hwmon: (lm90) Stop work before releasing hwmon device

Xingwang Xiang <[email protected]>
bpf, skmsg: fix verdict sk_data_ready racing with ktls rx

Keith Busch <[email protected]>
blk-mq: pop cached request if it is usable

Fernando Fernandez Mancera <[email protected]>
netfilter: nf_tables: fix dst corruption in same register operation

Phil Sutter <[email protected]>
netfilter: nf_tables: Extend nft_expr_ops::dump callback parameters

Heitor Alves de Siqueira <[email protected]>
Bluetooth: hci_sync: Set HCI_CMD_DRAIN_WORKQUEUE during device close

Greg Kroah-Hartman <[email protected]>
usb: typec: tcpm: validate VDO count in Discover Identity ACK handlers

Greg Kroah-Hartman <[email protected]>

    usb: typec: tcpm: bound altmode_desc[] per iteration in svdm_consume_modes()

Greg Kroah-Hartman <[email protected]>
usb: typec: tcpm/tcpci_maxim: validate header NDO against RX_BYTE_CNT

Sean Christopherson <[email protected]>
KVM: SEV: Ignore Port I/O requests of length '0'

SeungJu Cheon <[email protected]>
Bluetooth: ISO: Fix data-race on iso_pi fields in hci_get_route calls

Yinjie Yao <[email protected]>
drm/amdgpu/vcn: set no_user_fence for VCN v2.0 enc/dec rings

Yinjie Yao <[email protected]>
drm/amdgpu/vcn: set no_user_fence for VCN v2.5 enc/dec rings

Yinjie Yao <[email protected]>
drm/amdgpu/vcn: set no_user_fence for VCN v3.0 enc/dec rings

Yinjie Yao <[email protected]>
drm/amdgpu/vcn: set no_user_fence for VCN v4.0 enc ring

Yinjie Yao <[email protected]>
drm/amdgpu/jpeg: set no_user_fence for JPEG v2.0 ring

Yinjie Yao <[email protected]>
drm/amdgpu/jpeg: set no_user_fence for JPEG v2.5 ring

Yinjie Yao <[email protected]>
drm/amdgpu/jpeg: set no_user_fence for JPEG v3.0 ring

Yinjie Yao <[email protected]>
drm/amdgpu/jpeg: set no_user_fence for JPEG v4.0 ring

Ian Bridges <[email protected]>
fbdev: fix use-after-free in store_modes()

Konstantin Khorenko <[email protected]>
gcov: use atomic counter updates to fix concurrent access crashes

Hongling Zeng <[email protected]>
fbdev: omap2: fix use-after-free in omapfb_mmap

Hongling Zeng <[email protected]>
fbdev: omap2: fix inconsistent lock returns in omapfb_mmap

Anna Maniscalco <[email protected]>
drm/msm: always recover the gpu

Alysa Liu <[email protected]>
drm/amdkfd: Add upper bound check for num_of_nodes

Yongpeng Yang <[email protected]>
f2fs: fix fsck inconsistency caused by incorrect nat_entry flag usage

Sean Christopherson <[email protected]>
KVM: Don't WARN if memory is dirtied without a vCPU when the VM is dying

Harry Wentland <[email protected]>
drm/amd/display: Fix out-of-bounds read in dp_get_eq_aux_rd_interval()

Rory Little <[email protected]>
wifi: mt76: mt7921: Place upper limit on station AID

Srinivasan Shanmugam <[email protected]>
drm/amd/display: Avoid NULL dereference in dc_dmub_srv error paths

Stylon Wang <[email protected]>
drm/amd/display: Add interface to enable DPIA trace

Erni Sri Satya Vennela <[email protected]>
net: mana: Guard mana_remove against double invocation

Morduan Zang <[email protected]>
net: phonet: do not BUG_ON() in pn_socket_autobind() on failed bind

Qu Wenruo <[email protected]>
btrfs: only release the dirty pages io tree after successful writes

Gao Xiang <[email protected]>

    erofs: fix use-after-free on sbi->sync_decompress

Jiayuan Chen <[email protected]>
netfilter: nft_ct: bail out on template ct in get eval

Lee Jones <[email protected]>
l2tp: pppol2tp: hold reference to session in pppol2tp_ioctl()

Fedor Pchelkin <[email protected]>
wifi: fix leak if split 6 GHz scanning fails

Yun Zhou <[email protected]>
gpio: mvebu: fix NULL pointer dereference in suspend/resume

Uwe Kleine-König <[email protected]>
gpio: mvebu: Use IS_REACHABLE instead of IS_ENABLED for CONFIG_PWM

Maxime Chevallier <[email protected]>
net: phy: clean the sfp upstream if phy probing fails

Dragos Tatulea <[email protected]>
net/mlx5: Fix slab-out-of-bounds in mlx5_query_nic_vport_mac_list

Shay Drory <[email protected]>
net/mlx5: Add generic getters for other functions caps

Dragos Tatulea <[email protected]>
net/mlx5e: xsk: Fix DMA and xdp_frame leak on XDP_TX xmit failure

Xin Long <[email protected]>
sctp: validate embedded INIT chunk and address list lengths in cookie

HyungJung Joo <[email protected]>
fs/mbcache: cancel shrink work before destroying the cache

Filipe Manana <[email protected]>
btrfs: fix deadlock between reflink and transaction commit when using flushoncommit

Ritesh Harjani (IBM) <[email protected]>
powerpc/64s: Fix unmap race with PMD migration entries

Zilin Guan <[email protected]>
wifi: mt76: Fix memory leak after mt76_connac_mcu_alloc_sta_req()

Sechang Lim <[email protected]>
bpf: Fix RCU stall in bpf_fd_array_map_clear()

Lang Xu <[email protected]>
bpf: Fix OOB in pcpu_init_value

Xin Long <[email protected]>
sctp: disable BH before calling udp_tunnel_xmit_skb()

Vasant Hegde <[email protected]>
iommu/amd: Fix clone_alias() to use the original device's devid

Deepanshu Kartikey <[email protected]>
fs/ntfs3: fix missing run load for vcn0 in attr_data_get_block_locked()

Damien Riégel <[email protected]>
greybus: raw: fix use-after-free on cdev close

Jianan Huang <[email protected]>
f2fs: avoid reading already updated pages during GC

Yongpeng Yang <[email protected]>
f2fs: fix data loss caused by incorrect use of nat_entry flag

Gao Xiang <[email protected]>
erofs: unify lcn as u64 for 32-bit platforms

Michal Schmidt <[email protected]>
ice: fix double-free of tx_buf skb

Pablo Neira Ayuso <[email protected]>
netfilter: nat: use kfree_rcu to release ops

Edward Adam Davis <[email protected]>
sched/psi: fix race between file release and pressure write

Amir Goldstein <[email protected]>
fsnotify: fix inode reference leak in fsnotify_recalc_mask()

Viacheslav Dubeyko <[email protected]>
ceph: fix BUG_ON in __ceph_build_xattrs_blob() due to stale blob size

Raphael Zimmer <[email protected]>
libceph: Fix potential out-of-bounds access in __ceph_x_decrypt()

Weiming Shi <[email protected]>
tap: fix stack info leak in tap_ioctl() SIOCGIFHWADDR

Haixin Xu <[email protected]>
crypto: jitterentropy - replace long-held spinlock with mutex

Stephan Müller <[email protected]>
crypto: jitter - replace LFSR with SHA3-256

D. Wythe <[email protected]>
Revert "net/smc: Introduce TCP ULP support"

Florian Westphal <[email protected]>
netfilter: nf_tables: use list_del_rcu for netlink hooks

Janne Grunau <[email protected]>
media: videobuf2: Set vma_flags in vb2_dma_sg_mmap

Stephen Smalley <[email protected]>
selinux: allow multiple opens of /sys/fs/selinux/policy

Helge Deller <[email protected]>
AppArmor: Allow apparmor to handle unaligned dfa tables

Johan Hovold <[email protected]>
spi: mpc52xx: fix use-after-free on registration failure

Amir Shetaia <[email protected]>
drm/amdkfd: Clear VRAM on allocation to prevent stale data exposure

Johan Hovold <[email protected]>
spi: fsl: fix controller deregistration

Yang Yingliang <[email protected]>
spi: fsl-spi: switch to use modern name

Uwe Kleine-König <[email protected]>
spi: fsl-spi: Convert to platform remove callback returning void

Johan Hovold <[email protected]>
spi: rspi: fix controller deregistration

Uwe Kleine-König <[email protected]>
spi: rspi: Convert to platform remove callback returning void

Benjamin Cheng <[email protected]>
drm/amdgpu/vcn4: Prevent OOB reads when parsing IB

David Rosca <[email protected]>
drm/amdgpu/vcn4: Fix IB parsing with multiple engine info packages

David (Ming Qiang) Wu <[email protected]>
drm/amdgpu: limit AV1 to the first instance on VCN4 encode

Johan Hovold <[email protected]>
spi: mpc52xx: fix controller deregistration

Yang Yingliang <[email protected]>
spi: mpc52xx: switch to use modern name

Uwe Kleine-König <[email protected]>
spi: mpc52xx: Convert to platform remove callback returning void

Jason Gunthorpe <[email protected]>
RDMA/mlx4: Fix mis-use of RCU in mlx4_srq_event()

Takashi Iwai <[email protected]>
ALSA: pcm: oss: Fix data race at accessing runtime.oss.trigger

Conor Dooley <[email protected]>
spi: microchip-core-qspi: control built-in cs manually

Yosry Ahmed <[email protected]>
KVM: nSVM: Avoid clearing VMCB_LBR in vmcb12

Yosry Ahmed <[email protected]>
KVM: nSVM: Always use NextRIP as vmcb02's NextRIP after first L2 VMRUN

Yosry Ahmed <[email protected]>
KVM: nSVM: Triple fault if restore host CR3 fails on nested #VMEXIT

David Howells <[email protected]>
rxrpc: Fix memory leaks in rxkad_verify_response()

David Howells <[email protected]>
rxrpc: Fix conn-level packet handling to unshare RESPONSE packets

Zhang Yi <[email protected]>
ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O

Deepanshu Kartikey <[email protected]>
gfs2: fix memory leaks in gfs2_fill_super error path

Yao Kai <[email protected]>
rcu: Fix rcu_read_unlock() deadloop due to softirq

Lianjie Wang <[email protected]>
hwrng: core - use RCU and work_struct to fix race condition

Lu Baolu <[email protected]>
iommu/vt-d: Clear Present bit before tearing down context entry

Yongjian Sun <[email protected]>
ext4: fix e4b bitmap inconsistency reports

Matthew Wilcox (Oracle) <[email protected]>
ext4: convert bd_buddy_page to bd_buddy_folio

Matthew Wilcox (Oracle) <[email protected]>
ext4: convert bd_bitmap_page to bd_bitmap_folio

Gou Hao <[email protected]>
ext4: delete redundant calculations in ext4_mb_get_buddy_page_lock()

Theodore Ts'o <[email protected]>
ext4: convert some BUG_ON's in mballoc to use WARN_RATELIMITED instead

Kemeng Shi <[email protected]>

    ext4: remove unnecessary e4b->bd_buddy_page check in ext4_mb_load_buddy_gfp

Jie Zhang <[email protected]>
net: stmmac: fix oops when split header is enabled

Boris Burkov <[email protected]>
btrfs: fix EEXIST abort due to non-consecutive gaps in chunk allocation

Julian Anastasov <[email protected]>
ipvs: do not keep dest_dst if dev is going down

Zhang Yi <[email protected]>
ext4: drop extent cache when splitting extent fails

Lu Baolu <[email protected]>
iommu/vt-d: Clear Present bit before tearing down PASID entry

Helge Deller <[email protected]>
apparmor: Fix & Optimize table creation from possibly unaligned memory

Ryan Lin <[email protected]>
HID: intel-ish-hid: fix NULL-ptr-deref in ishtp_bus_remove_all_clients

Even Xu <[email protected]>
HID: Intel-ish-hid: Ishtp: Fix sensor reads after ACPI S3 suspend

Damien Le Moal <[email protected]>
ata: libata-scsi: avoid Non-NCQ command starvation

Shota Zaizen <[email protected]>
ksmbd: validate inherited ACE SID length

Jiayuan Chen <[email protected]>
bonding: fix type confusion in bond_setup_by_slave()

Chen Ni <[email protected]>
ASoC: amd: acp-mach-common: Add missing error check for clock acquisition

Venkata Prasad Potturu <[email protected]>
ASoC: amd: acp: Refactor i2s clocks programming sequence

Venkata Prasad Potturu <[email protected]>
ASoC: amd: acp: Refactor dai format implementation

Venkata Prasad Potturu <[email protected]>
ASoC: amd: acp: Add setbias level for rt5682s codec in machine driver

Max Kellermann <[email protected]>
ceph: fix memory leaks in ceph_mdsc_build_path()

Vladimir Riabchun <[email protected]>
scsi: qla2xxx: Completely fix fcport double free

Adrian Hunter <[email protected]>
i3c: mipi-i3c-hci: Fix race in DMA ring dequeue

Adrian Hunter <[email protected]>
i3c: mipi-i3c-hci: Correct RING_CTRL_ABORT handling in DMA dequeue

Zide Chen <[email protected]>
perf/x86/intel/uncore: Fix die ID init and look up bugs

Filipe Manana <[email protected]>
btrfs: reserve enough transaction items for qgroup ioctls

Ming Qian <[email protected]>
media: verisilicon: Avoid G2 bus error while decoding H.264 and HEVC

Nicolas Dufresne <[email protected]>
media: v4l2-mem2mem: Add a kref to the v4l2_m2m_dev structure

Sebastian Reichel <[email protected]>
media: hantro: Disable multicore support

Filipe Manana <[email protected]>
btrfs: don't BUG() on unexpected delayed ref type in run_one_delayed_ref()

Qu Wenruo <[email protected]>
btrfs: do not ASSERT() when the fs flips RO inside btrfs_repair_io_failure()

Jiasheng Jiang <[email protected]>
md-cluster: fix NULL pointer dereference in process_metadata_update

Magnus Lindholm <[email protected]>
alpha: fix user-space corruption during memory compaction

Arnd Bergmann <[email protected]>
arch: turn off -Werror for architectures with known warnings

Ankit Soni <[email protected]>
iommu/amd: move wait_on_sem() out of spinlock

Mario Peter <[email protected]>
usb: chipidea: udc: fix DMA and SG cleanup in _ep_nuke()

Stefano Stabellini <[email protected]>
9p/xen: protect xen_9pfs_front_free against concurrent calls

Eugenio Pérez <[email protected]>
vhost: move vdpa group bound check to vhost_vdpa

Jiayuan Chen <[email protected]>
kcm: fix zero-frag skb in frag_list on partial sendmsg error

Henrique Carvalho <[email protected]>

    smb: client: prevent races in ->query_interfaces()

Tetsuo Handa <[email protected]>
team: avoid NETDEV_CHANGEMTU event when unregistering slave

Shyam Prasad N <[email protected]>
cifs: Fix locking usage for tcon fields

Ping-Ke Shih <[email protected]>
wifi: rtw89: pci: validate sequence number of TX release report

Cédric Bellegarde <[email protected]>
ASoC: qcom: q6asm: drop DSP responses for closed data streams

Srinivas Kandagatla <[email protected]>
ASoC: qcom: q6asm: handle the responses after closing

Nicholas Carlini <[email protected]>
ksmbd: fix signededness bug in smb_direct_prepare_negotiation()

Prashanth K <[email protected]>
usb: dwc3: gadget: Move vbus draw to workqueue context

Tetsuo Handa <[email protected]>
xfrm: always flush state and policy upon NETDEV_UNREGISTER event

Christoph Hellwig <[email protected]>
xfs: remove xfs_attr_leaf_hasname

Harshit Mogalapalli <[email protected]>
ima: verify the previous kernel's IMA buffer lies in addressable RAM

Takashi Iwai <[email protected]>
ALSA: mixer: oss: Add card disconnect checkpoints

Cen Zhang <[email protected]>

    Bluetooth: hci_sync: annotate data-races around hdev->req_status

Filipe Manana <[email protected]>
btrfs: fix zero size inode with non-zero size after log replay

Keenan Dong <[email protected]>
xfrm: account XFRMA_IF_ID in aevent size calculation

Eric Dumazet <[email protected]>
ipv6: ioam: fix potential NULL dereferences in __ioam6_fill_trace_data()

Steffen Klassert <[email protected]>
xfrm: Wait for RCU readers during policy netns exit

Justin Iurman <[email protected]>
net: ioam6: fix OOB and missing lock

Lee Jones <[email protected]>
HID: logitech-hidpp: Prevent use-after-free on force feedback initialisation failure

Lee Jones <[email protected]>
HID: core: Mitigate potential OOB by removing bogus memset()

Li Chen <[email protected]>
HID: rate-limit hid_warn to prevent log flooding

Tatsuya S <[email protected]>
HID: core: Add reserved item tag for main items

Sabrina Dubroca <[email protected]>
mpls: add seqcount to protect the platform_label{,s} pair

Guoyu Su <[email protected]>
net: use skb_header_pointer() for TCPv4 GSO frag_off check

Pauli Virtanen <[email protected]>
Bluetooth: hci_sync: hci_cmd_sync_queue_once() return -EEXIST if exists

Kuniyuki Iwashima <[email protected]>

    bpf: sockmap: Fix use-after-free of sk->sk_socket in sk_psock_verdict_data_ready().

Varun R Mallya <[email protected]>
bpf: Reject sleepable kprobe_multi programs at attach time

Daniel Borkmann <[email protected]>
bpf: Fix incorrect pruning due to atomic fetch precision tracking

Oleh Konko <[email protected]>
Bluetooth: hci_event: move wake reason storage into validated event handlers

Ville Syrjälä <[email protected]>
drm/i915/dsi: Don't do DSC horizontal timing adjustments in command mode

Kuen-Han Tsai <[email protected]>
usb: gadget: f_ecm: Fix net_device lifecycle with device_move

Kuen-Han Tsai <[email protected]>
usb: gadget: f_eem: Fix net_device lifecycle with device_move

Kuen-Han Tsai <[email protected]>
usb: gadget: f_subset: Fix net_device lifecycle with device_move

Kuen-Han Tsai <[email protected]>
usb: gadget: f_rndis: Fix net_device lifecycle with device_move

Michael Bommarito <[email protected]>
ksmbd: validate response sizes in ipc_validate_msg()

Michael Bommarito <[email protected]>
ksmbd: validate num_aces and harden ACE walk in smb_inherit_dacl()

Douya Le <[email protected]>
crypto: af_alg - limit RX SG extraction by receive buffer budget

Yucheng Lu <[email protected]>
net/sched: sch_netem: fix out-of-bounds access in packet corruption

Qi Tang <[email protected]>
xfrm: hold dev ref until after transport_finish NF_HOOK

Jacky Bai <[email protected]>
pmdomain: imx8mp-blk-ctrl: Keep the NOC_HDCP clock enabled

Michael Zimmermann <[email protected]>
usb: gadget: f_hid: don't call cdev_init while cdev in use

Sean Christopherson <[email protected]>

    KVM: SEV: Protect *all* of sev_mem_enc_register_region() with kvm->lock

Ge Yang <[email protected]>
KVM: SEV: Use long-term pin when registering encrypted memory regions

Janosch Frank <[email protected]>
s390/mm: Add missing secure storage access fixups for donated memory

Vladimir Yakovlev <[email protected]>
spi: spi-dw-dma: fix print error log when wait finish transaction

Chaitanya Kulkarni <[email protected]>
nvmet: move async event work off nvmet-wq

Kohei Enju <[email protected]>
iavf: fix out-of-bounds writes in iavf_get_ethtool_stats()

Jiayuan Chen <[email protected]>
team: fix header_ops type confusion with non-Ethernet ports

Guenter Roeck <[email protected]>
hwmon: (pmbus/core) Protect regulator operations with mutex

Eric Huang <[email protected]>
drm/amdgpu: prevent immediate PASID reuse case

Christophe JAILLET <[email protected]>
drm/amdgpu: Remove usage of the deprecated ida_simple_xx() API

Asim Viladi Oglu Manizada <[email protected]>
ksmbd: fix OOB write in QUERY_INFO for compound requests

Namjae Jeon <[email protected]>
ksmbd: use volume UUID in FS_OBJECT_ID_INFORMATION

Jiayuan Chen <[email protected]>
serial: core: fix infinite loop in handle_tx() for PORT_UNKNOWN

Filipe Manana <[email protected]>
btrfs: log new dentries when logging parent dir of a conflicting inode

Allison Henderson <[email protected]>
net/rds: Fix circular locking dependency in rds_tcp_tune

Fuad Tabba <[email protected]>
bpf, arm64: Force 8-byte alignment for JIT buffer to prevent atomic tearing

Chaitanya Kulkarni <[email protected]>
blktrace: fix __this_cpu_read/write in preemptible context

Juri Lelli <[email protected]>
sched/deadline: Fix missing ENQUEUE_REPLENISH during PI de-boosting

Niklas Cassel <[email protected]>
PCI: dwc: ep: Flush MSI-X write before unmapping its ATU entry

Jakub Kicinski <[email protected]>
nfc: nci: complete pending data exchange on device close

Davidlohr Bueso <[email protected]>
cxl/mbox: validate payload size before accessing contents in cxl_payload_from_user_allowed()

Eric Dumazet <[email protected]>
tcp: secure_seq: add back ports to TS offset

Namjae Jeon <[email protected]>
ksmbd: add chann_lock to protect ksmbd_chann_list xarray

Qu Wenruo <[email protected]>
btrfs: reject new transactions if the fs is fully read-only

Perry Yuan <[email protected]>
drm/amd/pm: Disable MMIO access during SMU Mode 1 reset

Edward Adam Davis <[email protected]>
ALSA: usb-audio: Prevent excessive number of frames

Breno Leitao <[email protected]>
spi: tegra210-quad: Protect curr_xfer check in IRQ handler

Nikolay Aleksandrov <[email protected]>
bonding: fix use-after-free due to enslave fail after slave array update

Steven Rostedt <[email protected]>
tracing: Add recursion protection in kernel stack trace recording

Zilin Guan <[email protected]>
of: unittest: Fix memory leak in unittest_data_add()

David Howells <[email protected]>
rxrpc: Fix data-race warning and potential load/store tearing

Trond Myklebust <[email protected]>
pNFS: Fix a deadlock when returning a delegation during open()

Eric Dumazet <[email protected]>
dst: fix races in rt6_uncached_list_del() and rt_del_uncached_list()

Jie Zhang <[email protected]>
drm/msm: Recover HW before retire hung submit

Cong Nguyen <[email protected]>
staging: rtl8723bs: fix xmit_frame/xmit_buf leaks on mgnt-frame error paths

Haotian Zhang <[email protected]>
PCI: endpoint: Add missing NULL check for alloc_workqueue()

Konstantin Komarov <[email protected]>
fs/ntfs3: handle attr_set_size() errors when truncating files

Manivannan Sadhasivam <[email protected]>
net: qrtr: Drop the MHI auto_queue feature for IPCR DL channels

Bitterblue Smith <[email protected]>
wifi: rtw88: Use devm_kmemdup() in rtw_set_supported_band()

Ping-Ke Shih <[email protected]>
wifi: rtw88: debugfs: support multiple adapters debugging

Johannes Berg <[email protected]>
wifi: mac80211: don't WARN for connections on invalid channels

Francesco Lavra <[email protected]>
iio: imu: st_lsm6dsx: fix iio_chan_spec for sensors without event detection

Lorenzo Bianconi <[email protected]>
iio: imu: st_lsm6dsx: fix LSM6DSV sensor description

Loic Poulain <[email protected]>
phy: qcom-qusb2: Fix NULL pointer dereference on early suspend

Miquel Sabaté Solà <[email protected]>
btrfs: fix NULL dereference on root when tracing inode eviction

Vladimir Oltean <[email protected]>
net: dsa: properly keep track of conduit reference

Nikolay Kuratov <[email protected]>
drm/msm/dpu: Add missing NULL pointer check for pingpong interface

Gregory CLEMENT <[email protected]>
MIPS: ftrace: Fix memory corruption when kernel is located beyond 32 bits

Al Viro <[email protected]>
functionfs: fix the open/removal races

Al Viro <[email protected]>
functionfs, gadgetfs: use simple_recursive_removal()

Paul Cercueil <[email protected]>
usb: gadget: functionfs: Factorize wait-for-endpoint code

Paul Cercueil <[email protected]>
usb: gadget: Support already-mapped DMA SGs

Linyu Yuan <[email protected]>
usb: gadget: ffs: remove ENTER() macro

Minseong Kim <[email protected]>
Input: lkkbd - disable pending work before freeing device

Joshua Rogers <[email protected]>
svcrdma: bound check rq_pages index in inline path

Duoming Zhou <[email protected]>
Input: alps - fix use-after-free bugs caused by dev3_register_work

Qianchang Zhao <[email protected]>
ksmbd: vfs: fix race on m_flags in vfs_cache

Johan Hovold <[email protected]>
staging: most: remove broken i2c driver

Tony Battersby <[email protected]>
scsi: qla2xxx: Clear cmds after chip reset

Zhu Yanjun <[email protected]>

    RDMA/rxe: Fix null deref on srq->rq.queue after resize failure

Arnaud Lecomte <[email protected]>
bpf: Fix stackmap overflow check in __bpf_get_stackid()

Marc Kleine-Budde <[email protected]>
can: gs_usb: gs_usb_receive_bulk_callback(): check actual_length before accessing data

Duoming Zhou <[email protected]>
scsi: imm: Fix use-after-free bug caused by unfinished delayed work

Horatiu Vultur <[email protected]>
lan966x: Fix sleeping in atomic context

Nitin Rawat <[email protected]>
scsi: ufs: ufs-qcom: Fix UFS OCP issue during UFS power down (PC=3)

Shaurya Rane <[email protected]>
cifs: fix memory leak in smb3_fs_context_parse_param error path

Akiva Goldberger <[email protected]>
mlx5: Fix default values in create CQ

Eric Dumazet <[email protected]>
tcp: use dst_dev_rcu() in tcp_fastopen_active_disable_ofo_check()

Coiby Xu <[email protected]>
ima: don't clear IMA_DIGSIG flag when setting or removing non-IMA xattr

Cezary Rojewski <[email protected]>
ASoC: Intel: avs: Do not share the name pointer between components

Oleksij Rempel <[email protected]>
net: stmmac: Correctly handle Rx checksum offload errors

Romain Gantois <[email protected]>
net: stmmac: Prevent DSA tags from breaking COE

Henrique Carvalho <[email protected]>
smb: client: fix potential UAF in smb2_close_cached_fid()

Xiao Ni <[email protected]>
md/raid10: wait barrier before returning discard request with REQ_NOWAIT

Moti Haimovski <[email protected]>
accel/habanalabs: support mapping cb with vmalloc-backed coherent memory

Christian König <[email protected]>
drm/amdgpu: hide VRAM sysfs attributes on GPUs without VRAM

Lijo Lazar <[email protected]>
drm/amdgpu: Show vram vendor only if available

Edward Adam Davis <[email protected]>
cifs: client: fix memory leak in smb3_fs_context_parse_param

Harini T <[email protected]>
mailbox: zynqmp-ipi: Fix out-of-bounds access in mailbox cleanup loop

Ben Levinsky <[email protected]>
mailbox: zynqmp: Move buffered IPI setup to of_match selected routine

Ben Levinsky <[email protected]>
mailbox: zynqmp: Move of_match structure closer to usage

Randy Dunlap <[email protected]>
mailbox: zynqmp-ipi: fix an Excess struct member kernel-doc warning

Rob Herring <[email protected]>
mailbox: Explicitly include correct DT includes

Rob Herring <[email protected]>
of: Move of_device_get_match_data() declaration

Rob Herring <[email protected]>
of: Move of_device_(add|register|unregister) to of_platform.h

Eric Dumazet <[email protected]>
net: use dst_dev_rcu() in sk_setup_caps()

Jason Andryuk <[email protected]>
xen/events: Return -EEXIST for bound VIRQs

Juergen Gross <[email protected]>
xen/events: modify internal [un]bind interfaces

Juergen Gross <[email protected]>
xen/events: drop xen_allocate_irqs_dynamic()

Juergen Gross <[email protected]>
xen/events: remove some simple helpers from events_base.c

Juergen Gross <[email protected]>
xen/events: reduce externally visible helper functions

Juergen Gross <[email protected]>
xen/events: avoid using info_for_irq() in xen_send_IPI_one()

Eric Dumazet <[email protected]>
ipv6: use RCU in ip6_output()

Chao Yu <[email protected]>
f2fs: fix to truncate first page in error path of f2fs_truncate()

Weili Qian <[email protected]>
crypto: hisilicon/qm - request reserved interrupt for virtual function

Chao Yu <[email protected]>
f2fs: fix to avoid overflow while left shift operation

Matthew Wilcox (Oracle) <[email protected]>
f2fs: Use a folio in f2fs_truncate_partial_cluster()

Eric Dumazet <[email protected]>
tcp_metrics: use dst_dev_net_rcu()

Seppo Takalo <[email protected]>
tty: n_gsm: Don't block input queue by waiting MSC

Daniel Starke <[email protected]>
tty: n_gsm: add parameters used with parameter negotiation

Daniel Starke <[email protected]>
tty: n_gsm: introduce macro for minimal unit size

Fangyu Yu <[email protected]>
RISC-V: KVM: Write hgatp register with valid mode bits

I Viswanath <[email protected]>
ptp: Add a upper bound on max_vclocks

Andy Shevchenko <[email protected]>
i915: Move list_count() to list.h as list_count_nodes() for broader use

Duoming Zhou <[email protected]>
net: mscc: ocelot: Fix use-after-free caused by cyclic delayed work

Shuai Xue <[email protected]>
x86/mce: use is_copy_from_user() to determine copy-from-user context

Luiz Augusto von Dentz <[email protected]>
Bluetooth: MGMT: Fix possible UAFs

[email protected] <[email protected]>
wifi: wilc1000: avoid buffer overflow in WID string configuration

Stefan Metzmacher <[email protected]>
smb: client: let recv_done verify data_offset, data_length and remaining_data_length

Stefan Metzmacher <[email protected]>

    smb: client: let smbd_destroy() call disable_work_sync(&info->post_send_credits_work)

Uladzislau Rezki (Sony) <[email protected]>
mm/vmalloc, mm/kasan: respect gfp mask in kasan_populate_vmalloc()

Duoming Zhou <[email protected]>
ptp: ocp: fix use-after-free bugs causing by ptp_ocp_watchdog

Ido Schimmel <[email protected]>
vxlan: Fix NPD when refreshing an FDB entry with a nexthop object

Ido Schimmel <[email protected]>
vxlan: Fix NPD in {arp,neigh}_reduce() when using nexthop objects

Ye Weihua <[email protected]>
trace/fgraph: Fix the warning caused by missing unregister notifier

Sreekanth Reddy <[email protected]>
bnxt_en: Fix memory corruption when FW resources change during ifdown

Aakash Kumar S <[email protected]>
xfrm: Duplicate SPI Handling

Kanglong Wang <[email protected]>
LoongArch: Optimize module load time by optimizing PLT/GOT counting

Jinjiang Tu <[email protected]>
mm/smaps: fix race between smaps_hugetlb_range and migration

Joel Fernandes <[email protected]>
rcu: Fix rcu_read_unlock() deadloop due to IRQ work

Halil Pasic <[email protected]>
s390/ism: fix concurrency management in ism_cmd()

Stefan Raspl <[email protected]>
s390/ism: Introduce struct ism_dmb

Ziyan Xu <[email protected]>
ksmbd: fix refcount leak causing resource not released

Siyang Liu <[email protected]>
drm/amd/display: fix a Null pointer dereference vulnerability

William Liu <[email protected]>
net/sched: Fix backlog accounting in qdisc_dequeue_internal

D. Wythe <[email protected]>
net/smc: fix UAF on smcsk after smc_listen_out()

Al Viro <[email protected]>
habanalabs: fix UAF in export_dmabuf()

Tomer Tayar <[email protected]>
habanalabs: fix dma-buf release handling if dma_buf_fd() fails

Ohad Sharabi <[email protected]>
habanalabs: helper function to validate export params

Ohad Sharabi <[email protected]>
habanalabs: remove support to export dmabuf from handle

Viacheslav Dubeyko <[email protected]>
hfs: fix general protection fault in hfs_find_init()

Matthew Wilcox (Oracle) <[email protected]>
highmem: add memcpy_to_folio() and memcpy_from_folio()

Vishal Moola (Oracle) <[email protected]>
pagemap: add filemap_grab_folio()

Jan Kara <[email protected]>
loop: Avoid updating block size under exclusive owner

Umio Yasuno <[email protected]>
drm/amd/pm: fix null pointer access

Yuezhang Mo <[email protected]>
exfat: add cluster chain loop check for dir

Yuezhang Mo <[email protected]>
exfat: remove unnecessary arguments from exfat_find_dir_entry()

Gabriele Monaco <[email protected]>
rv: Use strings in da monitors tracepoints

Edward Adam Davis <[email protected]>
fs/ntfs3: cancle set bad inode after removing name fails

Heiko Stuebner <[email protected]>
drm/rockchip: vop2: fail cleanly if missing a primary plane for a video-port

Al Viro <[email protected]>
xen: fix UAF in dmabuf_exp_from_pages()

Jianbo Liu <[email protected]>
net/mlx5e: Remove skb secpath if xfrm state is not found

Leon Romanovsky <[email protected]>
net/mlx5e: Provide intermediate pointer to access IPsec struct

wenglianfa <[email protected]>
RDMA/hns: Fix double destruction of rsv_qp

David Howells <[email protected]>
rxrpc: Fix bug due to prealloc collision

Maud Spierings <[email protected]>
iio: common: st_sensors: Fix use of uninitialize device structs

Kaustabh Chakraborty <[email protected]>
iio: st_sensors: relax WhoAmI check in st_sensors_verify_id()

Jonathan Cameron <[email protected]>
iio: st_sensors: core and lsm9ds0 switch to devm_regulator_bulk_get_enable()

David Howells <[email protected]>
rxrpc: Fix recv-recv race of completed call

Daniel J. Ogorchock <[email protected]>
HID: nintendo: avoid bluetooth suspend/resume stalls

Sumit Kumar <[email protected]>
bus: mhi: ep: Update read pointer only after buffer is written

Heiko Carstens <[email protected]>
s390/mm: Fix in_atomic() handling in do_secure_storage_access()

Longfang Liu <[email protected]>
hisi_acc_vfio_pci: bugfix live migration function without VF device driver

Jonas Gorski <[email protected]>
net: dsa: b53: do not enable EEE on bcm63xx

Ben Dooks <[email protected]>
riscv: save the SR_SUM status over switches

Ido Schimmel <[email protected]>
bridge: mcast: Fix use-after-free during router port configuration

Yan Zhai <[email protected]>
bnxt: properly flush XDP redirect lists

Paulo Alcantara <[email protected]>
smb: client: fix potential deadlock when reconnecting channels

Harshit Agarwal <[email protected]>
sched/rt: Fix race in push_rt_task

Tianyang Zhang <[email protected]>
LoongArch: Fix panic caused by NULL-PMD in huge_pte_offset()

Ronnie Sahlberg <[email protected]>
ublk: santizize the arguments from userspace when adding a device

Yeoreum Yun <[email protected]>
coresight: holding cscfg_csdev_lock while removing cscfg from csdev

Michal Kubiak <[email protected]>
ice: fix Tx scheduler error handling in XDP callback

Miri Korenblit <[email protected]>
wifi: iwlwifi: don't warn when if there is a FW error

Luis de Arquer <[email protected]>
spi-rockchip: Fix register out of bounds access

Christian Bruel <[email protected]>
PCI: endpoint: pci-epf-test: Fix double free that causes kernel to oops

Michael S. Tsirkin <[email protected]>
virtio: break and reset virtio devices on device_shutdown()

Johannes Berg <[email protected]>
wifi: iwlwifi: fix debug actions order

Johannes Berg <[email protected]>
wifi: iwlwifi: dbg-tlv: fix DRAM data init

Roger Quadros <[email protected]>
dmaengine: ti: k3-udma-glue: Drop skip_fdq argument from k3_udma_glue_reset_rx_chn

Philippe Simons <[email protected]>
clk: sunxi-ng: h616: Reparent GPU clock during frequency changes

Andre Przywara <[email protected]>
clk: sunxi-ng: h616: Reparent CPU clock during frequency changes

Alexander Gordeev <[email protected]>
kasan: avoid sleepable page allocation from atomic context

Andrey Konovalov <[email protected]>
kasan: use unchecked __memset internally

Matt Johnston <[email protected]>
net: mctp: Don't access ifa_index when missing

Peter Griffin <[email protected]>
scsi: ufs: exynos: Disable iocc if dma-coherent property isn't set

Mikhail Lobanov <[email protected]>
KVM: SVM: Forcibly leave SMM mode on SHUTDOWN interception

Namjae Jeon <[email protected]>
ksmbd: prevent rename with empty string

Sean Heelan <[email protected]>
ksmbd: Fix UAF in __close_file_table_ids

Johannes Berg <[email protected]>
um: fix time-travel syscall scheduling hack

Ranjan Kumar <[email protected]>
scsi: mpi3mr: Synchronous access b/w reset and tm thread for reply queue

Edward Cree <[email protected]>
sfc: fix NULL dereferences in ef100_process_design_param()

Boris Burkov <[email protected]>
btrfs: harden block_group::bg_list against list_del() races

Philip Yang <[email protected]>
drm/amdkfd: debugfs hang_hws skip GPU with MES

Han Xu <[email protected]>
spi: fsl-qspi: use devm function instead of driver remove

Yonghong Song <[email protected]>
bpf: Fix kmemleak warning for percpu hashmap

Lizhi Xu <[email protected]>
fs/ntfs3: Keep write operations atomic

Paulo Alcantara <[email protected]>
smb: client: fix UAF in decryption with multichannel

Frederic Weisbecker <[email protected]>
perf: Fix hang while freeing sigtrap event

Chao Yu <[email protected]>
f2fs: fix potential deadloop in prepare_compress_overwrite()

Chao Yu <[email protected]>
f2fs: convert f2fs_handle_page_eio() to use folio

Boris Burkov <[email protected]>
btrfs: fix block group refcount race in btrfs_create_pending_block_groups()

Murad Masimov <[email protected]>
ax25: Remove broken autobind

Christian Schoenebeck <[email protected]>
fs/9p: fix NULL pointer dereference on mkdir

Antoine Tenart <[email protected]>
net: decrease cached dst counters in dst_release

Dave Marquardt <[email protected]>
net: ibmveth: make veth_pool_store stop hanging

Nick Child <[email protected]>
ibmveth: Always stop tx queues during close

Hengqi Chen <[email protected]>
LoongArch: BPF: Don't override subprog's return value

Namjae Jeon <[email protected]>
ksmbd: fix null pointer dereference in alloc_preauth_hash()

Matt Johnston <[email protected]>
net: mctp: unshare packets when reassembling

Luiz Augusto von Dentz <[email protected]>
Bluetooth: L2CAP: Fix slab-use-after-free Read in l2cap_send_cmd

Namjae Jeon <[email protected]>
ksmbd: fix use-after-free in ksmbd_free_work_struct

Taehee Yoo <[email protected]>
eth: bnxt: fix truesize for mb-xdp-pass case

Namjae Jeon <[email protected]>
ksmbd: prevent connection release during oplock break notification

Maurizio Lombardi <[email protected]>
nvme-tcp: fix potential memory corruption in nvme_tcp_recv_pdu()

Wei Fang <[email protected]>
net: enetc: VFs do not support HWTSTAMP_TX_ONESTEP_SYNC

Yishai Hadas <[email protected]>
RDMA/mlx5: Fix the recovery flow of the UMR QP

Shay Drory <[email protected]>
RDMA/mlx5: Implement mkeys management via LIFO queue

Michael Guralnik <[email protected]>
RDMA/mlx5: Introduce mlx5r_cache_rb_key

Michael Guralnik <[email protected]>
RDMA/mlx5: Change the cache structure to an RB-tree

Aharon Landau <[email protected]>
RDMA/mlx5: Remove implicit ODP cache entry

Aharon Landau <[email protected]>
RDMA/mlx5: Don't keep umrable 'page_shift' in cache entries

Yishai Hadas <[email protected]>
RDMA/mlx5: Fix a WARN during dereg_mr for DM type

Kashyap Desai <[email protected]>
RDMA/bnxt_re: Fix the page details for the srq created by kernel consumers

Peter Jones <[email protected]>
efi: Don't map the entire mokvar table to determine its size

Peter Ujfalusi <[email protected]>
ASoC: SOF: ipc4-topology: Harden loops for looking up ALH copiers

Werner Sembach <[email protected]>
PCI: Avoid putting some root ports into D3 on TUXEDO Sirius Gen1

Mario Limonciello <[email protected]>
x86/PCI: Avoid PME from D3hot/D3cold for AMD Rembrandt and Phoenix USB4

Kory Maincent <[email protected]>
net: ravb: Fix missing rtnl lock in suspend/resume path

Jakub Kicinski <[email protected]>
net: ipv6: fix dst ref loops in rpl, seg6 and ioam6 lwtunnels

Yishai Hadas <[email protected]>
RDMA/mlx5: Fix a race for an ODP MR which leads to CQE with error

Ping-Ke Shih <[email protected]>
wifi: rtw89: fix race between cancel_hw_scan and hw_scan completion

Guixin Liu <[email protected]>
scsi: mpi3mr: Fix possible crash when setting up bsg fails

Patrisious Haddad <[email protected]>
RDMA/mlx5: Fix implicit ODP use after free

Ryan Roberts <[email protected]>
mm: clear uffd-wp PTE/PMD state on mremap()

Paulo Alcantara <[email protected]>
smb: client: fix double free of TCP_Server_Info::hostname

Matthieu Baerts (NGI0) <[email protected]>

    rds: sysctl: rds_tcp_{rcv,snd}buf: avoid using current->nsproxy

Bard Liao <[email protected]>
ASoC: SOF: Intel: hda-dai: Ensure DAI widget is valid during params

Niklas Cassel <[email protected]>
PCI: dwc: ep: Prevent changing BAR size/flags in pci_epc_set_bar()

Gaurav Batra <[email protected]>
powerpc/pseries/iommu: IOMMU incorrectly marks MMIO range in DDW

Florian Westphal <[email protected]>
xfrm: state: fix out-of-bounds read during lookup

Qu Wenruo <[email protected]>
btrfs: do proper folio cleanup when cow_file_range() failed

Stefano Brivio <[email protected]>
udp: Deal with race between UDP socket address change and rehash

Tvrtko Ursulin <[email protected]>
workqueue: Do not warn when cancelling WQ_MEM_RECLAIM work from !WQ_MEM_RECLAIM worker

Ranjan Kumar <[email protected]>
scsi: mpi3mr: Fix corrupt config pages PHY state is switched in sysfs

Yishai Hadas <[email protected]>
vfio/mlx5: Fix an unwind issue in mlx5vf_add_migration_pages()

Paul Aurich <[email protected]>

    smb: Initialize cfid->tcon before performing network ops

Jann Horn <[email protected]>
udmabuf: fix memory leak on last export_udmabuf() error path

Chao Yu <[email protected]>
f2fs: fix to do sanity check on node blkaddr in truncate_node()

Wen Gu <[email protected]>
net/smc: initialize close_work early to avoid warning

David Hildenbrand <[email protected]>
mm/mempolicy: fix migrate_to_node() assuming there is at least one VMA in a MM

Hou Tao <[email protected]>
bpf: Call free_htab_elem() after htab_unlock_bucket()

Yihang Li <[email protected]>
scsi: hisi_sas: Create all dump files during debugfs initialization

Yihang Li <[email protected]>
scsi: hisi_sas: Allocate DFX memory during dump trigger

Yihang Li <[email protected]>
scsi: hisi_sas: Directly call register snapshot instead of using workqueue

Xiang Chen <[email protected]>
scsi: hisi_sas: Add function complete_v3_hw()

Xingui Yang <[email protected]>
scsi: hisi_sas: Add SATA_DISK_ERR bit handling for v3 hw

Xingui Yang <[email protected]>
scsi: hisi_sas: Move slot variable definition in hisi_sas_abort_task()

Wander Lairson Costa <[email protected]>
sched/deadline: Fix warning in migrate_enable for boosted tasks

yuan.gao <[email protected]>
mm/slub: Avoid list corruption when removing a slab from the full list

Chao Yu <[email protected]>
f2fs: fix to drop all discards after creating snapshot on lvm device

Sean Anderson <[email protected]>
drm: zynqmp_kms: Unplug DRM device before removal

Phil Sutter <[email protected]>
netfilter: IDLETIMER: Fix for possible ABBA deadlock

Patrisious Haddad <[email protected]>
RDMA/mlx5: Move events notifier registration to be after device registration

Yang Erkun <[email protected]>
nfsd: release svc_expkey/svc_export with rcu_work

Raghavendra Rao Ananta <[email protected]>
KVM: arm64: Get rid of userspace_irqchip_in_use

Pavel Begunkov <[email protected]>
io_uring: check for overflows in io_pin_pages

Paulo Alcantara <[email protected]>
smb: client: fix use-after-free of signing key

Paulo Alcantara <[email protected]>
smb: client: stop flooding dmesg in smb2_calc_signature()

Paul Aurich <[email protected]>
smb: Don't leak cfid when reconnect races with open_cached_dir

Liu Jian <[email protected]>
sunrpc: fix one UAF issue caused by sunrpc kernel tcp socket

Yuezhang Mo <[email protected]>
exfat: fix out-of-bounds access of directory entries

Peng Fan <[email protected]>
pmdomain: imx93-blk-ctrl: correct remove path

Kuniyuki Iwashima <[email protected]>
smb: client: Fix use-after-free of network namespace.

Showrya M N <[email protected]>
RDMA/siw: Add sendpage_ok() check to disable MSG_SPLICE_PAGES

Zijian Zhang <[email protected]>
bpf: Add sk_is_inet and IS_ICSK check in tls_sw_has_ctx_tx/rx

David Howells <[email protected]>
afs: Fix lock recursion

Xinqi Zhang <[email protected]>
firmware: arm_scmi: Fix slab-use-after-free in scmi_bus_notifier()

Cristian Marussi <[email protected]>
firmware: arm_scmi: Refactor device create/destroy helpers

Cristian Marussi <[email protected]>
firmware: arm_scmi: Move handle get/set helpers

Cristian Marussi <[email protected]>
firmware: arm_scmi: Refactor protocol device creation

Cristian Marussi <[email protected]>
firmware: arm_scmi: Add common notifier helpers

Cristian Marussi <[email protected]>
firmware: arm_scmi: Move protocol registration helpers

Cristian Marussi <[email protected]>
firmware: arm_scmi: Use dedicated devices to initialize channels

Cristian Marussi <[email protected]>
firmware: arm_scmi: Simplify chan_available transport operation

Dan Carpenter <[email protected]>
drm/msm/gem: prevent integer overflow in msm_ioctl_gem_submit()

Namjae Jeon <[email protected]>
ksmbd: check outstanding simultaneous SMB operations

Dan Williams <[email protected]>
cxl/port: Fix use-after-free, permit out-of-order decoder shutdown

Maurizio Lombardi <[email protected]>
nvme-pci: fix race condition between reset and nvme_dev_disable()

Anastasia Belova <[email protected]>
cpufreq: amd-pstate: add check for cpufreq_cpu_get's return value

Srinivasan Shanmugam <[email protected]>
drm/amd/display: Implement bounds check for stream encoder creation in DCN401

Eddie James <[email protected]>
net/ncsi: Disable the ncsi work before freeing the associated structure

James Chapman <[email protected]>
l2tp: prevent possible tunnel refcount underflow

Alex Hung <[email protected]>
drm/amd/display: Pass non-null to dcn20_validate_apply_pipe_split_flags

Alex Hung <[email protected]>
drm/amd/display: Check null pointers before using them

Alex Hung <[email protected]>
drm/amd/display: Check null pointers before used

Alex Hung <[email protected]>
drm/amd/display: Check null pointers before multiple uses

Srinivasan Shanmugam <[email protected]>
drm/amd/display: Add null check for head_pipe in dcn201_acquire_free_pipe_for_layer

Srinivasan Shanmugam <[email protected]>
drm/amd/display: Add null check for head_pipe in dcn32_acquire_idle_pipe_for_head_pipe_in_layer

Srinivasan Shanmugam <[email protected]>

    drm/amd/display: Add null check for pipe_ctx->plane_state in dcn20_program_pipe

Rodrigo Siqueira <[email protected]>
drm/amd/display: Check null pointer before try to access it

Chunguang.xu <[email protected]>
nvme-rdma: unquiesce admin_q before destroy it

Leon Hwang <[email protected]>
bpf: Prevent tailcall infinite loop caused by freplace

Yunfei Dong <[email protected]>
media: mediatek: vcodec: Fix H264 stateless decoder smatch warning

Devyn Liu <[email protected]>
spi: hisi-kunpeng: Add verification for the max_frequency provided by the firmware

Yang Yingliang <[email protected]>
spi: hisi-kunpeng: switch to use modern name

Uwe Kleine-König <[email protected]>
spi: hisi-kunpeng: Convert to platform remove callback returning void

Alex Hung <[email protected]>
drm/amd/display: Avoid overflow from uint32_t to uint8_t

Leon Huang <[email protected]>
drm/amd/display: Refactor ABM feature

Maxime Méré <[email protected]>
crypto: stm32/cryp - call finalize with bh disabled

Mukesh Ojha <[email protected]>

    pinmux: Use sequential access to access desc->pinmux data

Bert Karwatzki <[email protected]>
wifi: mt76: mt7921: fix NULL pointer access in mt7921_ipv6_addr_change

Hersen Wu <[email protected]>
drm/amd/display: Fix index may exceed array range within fpu_update_bw_bounding_box

Hersen Wu <[email protected]>
drm/amd/display: Add missing NULL pointer check within dpcd_extend_address_range

Lenko Donchev <[email protected]>
drm/amd/display: Use kcalloc() instead of kzalloc()

Jann Horn <[email protected]>
userfaultfd: fix checks for huge PMDs

Larysa Zaremba <[email protected]>
ice: protect XDP configuration with a mutex

Alex Hung <[email protected]>
drm/amd/display: Ensure array index tg_inst won't be -1

Alex Hung <[email protected]>
drm/amd/display: Check index for aux_rd_interval before using

Eric Dumazet <[email protected]>
pktgen: use cpus_read_lock() in pg_net_init()

Filipe Manana <[email protected]>
btrfs: do not BUG_ON() when freeing tree block after error

Chao Yu <[email protected]>
f2fs: fix to do sanity check on F2FS_INLINE_DATA flag in inode during GC

Chao Yu <[email protected]>
f2fs: fix to cover read extent cache access with lock

Keith Busch <[email protected]>
nvme: apple: fix device reference counting

Aurabindo Pillai <[email protected]>
drm/amd/display: Fix null pointer deref in dcn20_resource.c

Sibi Sankar <[email protected]>
soc: qcom: icc-bwmon: Fix refcount imbalance seen during bwmon_remove

Manivannan Sadhasivam <[email protected]>
PCI: endpoint: pci-epf-test: Make use of cached 'epc_features' in pci_epf_test_core_init()

Steve Wilkins <[email protected]>
spi: microchip-core: ensure TX and RX FIFOs are empty at start of a transfer

Gavin Shan <[email protected]>
mm/filemap: make MAX_PAGECACHE_ORDER acceptable to xarray

Xu Yang <[email protected]>
filemap: add helper mapping_max_folio_size()

Jules Irenge <[email protected]>
s390/pkey: Use kfree_sensitive() to fix Coccinelle warnings

Holger Dengler <[email protected]>
s390/pkey: Wipe copies of clear-key structures on failure

Holger Dengler <[email protected]>
s390/pkey: Wipe copies of protected- and secure-keys

Milena Olech <[email protected]>
ice: Fix improper extts handling

George Stark <[email protected]>
leds: an30259a: Use devm_mutex_init() for mutex initialization

Bob Zhou <[email protected]>
drm/amdgpu: fix double free err_addr pointer warnings

Chao Yu <[email protected]>
f2fs: fix to shrink read extent node in batches

Wander Lairson Costa <[email protected]>
sched/deadline: Fix task_struct reference leak

Miaohe Lin <[email protected]>
fork: defer linking file vma until vma is fully initialized

Huacai Chen <[email protected]>
LoongArch: Update cpu_sibling_map when disabling nonboot CPUs

Shashank Sharma <[email protected]>

    drm/amdgpu: change vm->task_info handling

Baokun Li <[email protected]>

    ext4: fix uninitialized ratelimit_state->lock access in __ext4_fill_super()

Baokun Li <[email protected]>
ext4: refactoring to use the unified helper ext4_quotas_off()

Hans de Goede <[email protected]>
platform/x86: x86-android-tablets: Unregister devices in reverse order

Konstantin Komarov <[email protected]>
fs/ntfs3: Check 'folio' pointer for NULL

Aleksandr Mishin <[email protected]>
drm/msm/dpu: Add callback function pointer check before its call

Xiaolei Wang <[email protected]>
net: stmmac: move the EST lock to struct stmmac_priv

Andreas Gruenbacher <[email protected]>
gfs2: Fix potential glock use-after-free on unmount

Stanislav Fomichev <[email protected]>
bpf: Add BPF_PROG_TYPE_CGROUP_SKB attach type enforcement in BPF_LINK_CREATE

Maher Sanalla <[email protected]>
net/mlx5: Reload only IB representors upon lag disable/enable

Sungwoo Kim <[email protected]>
Bluetooth: L2CAP: Fix div-by-zero in l2cap_le_flowctl_init()

Rick Edgecombe <[email protected]>
hv_netvsc: Don't free decrypted memory

Peter Xu <[email protected]>
mm/userfaultfd: reset ptes when close() for wr-protected ones

Boris Brezillon <[email protected]>
drm/panfrost: Fix the error path in panfrost_mmu_map_fault_addr()

Po-Hao Huang <[email protected]>
wifi: rtw89: fix null pointer access when abort scan

Andre Werner <[email protected]>
net: phy: phy_device: Prevent nullptr exceptions on ISR

Adam Ford <[email protected]>
pmdomain: imx8mp-blk-ctrl: imx8mp_blk: Add fdcc clock to hdmimix domain

Abhishek Pandit-Subedi <[email protected]>
usb: typec: ucsi: Limit read size on v1.2

Christian Göttsche <[email protected]>
selinux: avoid dereference of garbage after mount failure

Andrii Nakryiko <[email protected]>
bpf: support deferring bpf_link dealloc to after RCU grace period

Chris Park <[email protected]>
drm/amd/display: Prevent crash when disable stream

Josef Bacik <[email protected]>
btrfs: fix deadlock with fiemap and extent locking

Kory Maincent <[email protected]>
dmaengine: dw-edma: eDMA: Add sync read before starting the DMA transfer in remote setup

Dave Airlie <[email protected]>
nouveau: lock the client object tree.

Peter Ujfalusi <[email protected]>
ASoC: SOF: ipc4-pcm: Workaround for crashed firmware on system suspend

Nikita Zhandarovich <[email protected]>

    drm/amd/display: fix NULL checks for adev->dm.dc in amdgpu_dm_fini()

Pablo Neira Ayuso <[email protected]>
netfilter: nf_tables: fix memleak in map from abort path

Eric Dumazet <[email protected]>
net/sched: Fix mirred deadlock on device recursion

Dragos Tatulea <[email protected]>
net: esp: fix bad handling of pages from page_pool

Allen Pan <[email protected]>
drm/amd/display: Add a dc_state NULL check in dc_state_release

Yongqiang Liu <[email protected]>
ARM: 9359/1: flush: check if the folio is reserved for no-mapping addresses

Fei Wu <[email protected]>
perf: RISCV: Fix panic on pmu overflow handler

Atish Patra <[email protected]>
perf: RISC-V: Define helper functions expose hpm counter width and count

Luiz Augusto von Dentz <[email protected]>
Bluetooth: hci_core: Fix possible buffer overflow

Luiz Augusto von Dentz <[email protected]>
Bluetooth: af_bluetooth: Fix deadlock

Mads Bligaard Nielsen <[email protected]>
drm/bridge: adv7511: fix crash on irq during probe

Chao Yu <[email protected]>
f2fs: fix to truncate meta inode pages forcely

Chao Yu <[email protected]>
f2fs: introduce f2fs_invalidate_internal_cache() for cleanup

Yangtao Li <[email protected]>
f2fs: introduce f2fs_is_readonly() for readability

Alexander Sverdlin <[email protected]>
spi: lpspi: Avoid potential use-after-free in probe()

Colin Ian King <[email protected]>
ASoC: qcom: Fix uninitialized pointer dmactl

Jakub Kicinski <[email protected]>
net/sched: act_mirred: use the backlog for mirred ingress

Petr Tesarik <[email protected]>
net: stmmac: protect updates of 64-bit statistics counters

David Howells <[email protected]>
rxrpc: Fix delayed ACKs to not set the reference serial number

Mark Rutland <[email protected]>
arm64: entry: fix ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD

Ido Schimmel <[email protected]>
net/sched: flower: Fix chain template offload

Srinivasan Shanmugam <[email protected]>
drm/amd/display: Fix 'panel_cntl' could be null in 'dcn21_set_backlight_level()'

Srinivasan Shanmugam <[email protected]>
drm/amd/display: Add NULL test for 'timing generator' in 'dcn21_set_pipe()'

Petr Machata <[email protected]>
net: nexthop: Increase weight to u16

Petr Machata <[email protected]>
net: nexthop: Have all NH notifiers carry NH ID

Benjamin Poirier <[email protected]>
nexthop: Do not return invalid nexthop object during multipath selection

Benjamin Poirier <[email protected]>
nexthop: Factor out neighbor validity check

Benjamin Poirier <[email protected]>
nexthop: Factor out hash threshold fdb nexthop selection

Yu Kuai <[email protected]>
blk-cgroup: dropping parent refcount after pd_free_fn() is done

Rob Clark <[email protected]>
interconnect: Fix locking for runpm vs reclaim

Chao Yu <[email protected]>
f2fs: fix to do sanity check on direct node in truncate_dnode()

Yu Kuai <[email protected]>
block/rq_qos: protect rq_qos apis with a new lock

Kuniyuki Iwashima <[email protected]>
smc: Fix use-after-free in tcp_write_timer_handler().

Marc Kleine-Budde <[email protected]>
can: gs_usb: fix time stamp counter initialization

Chao Yu <[email protected]>
f2fs: don't reset unchangable mount option in f2fs_remount()

Yangtao Li <[email protected]>
f2fs: fix to set flush_merge opt and show noflush_merge

Dragos Tatulea <[email protected]>
net/mlx5e: xsk: Fix crash on regular rq reactivation

Junhao He <[email protected]>

    coresight: Fix memory leak in acpi_buffer->pointer

Jan Kara <[email protected]>
ext4: avoid deadlock in fs reclaim with page writeback

Fei Shao <[email protected]>
media: mediatek: vcodec: Only free buffer VA that is not NULL

Dan Williams <[email protected]>
cxl/port: Fix delete_endpoint() vs parent unregistration race

Jaegeuk Kim <[email protected]>
f2fs: split initial and dynamic conditions for extent_cache

Deepak Gupta <[email protected]>
riscv: VMAP_STACK overflow detection thread-safe

Paulo Alcantara <[email protected]>
smb: client: fix use-after-free in smb2_query_info_compound()

Ilya Bakoulin <[email protected]>
drm/amd/display: Fix hang/underflow when transitioning to ODM4:1

Zhipeng Lu <[email protected]>
SUNRPC: fix a memleak in gss_import_v2_context

Jan Kara <[email protected]>
reiserfs: Avoid touching renamed directory if parent does not change

Jeff Layton <[email protected]>
reiserfs: convert to simple_rename_timestamp

Jeff Layton <[email protected]>
fs: new helper: simple_rename_timestamp

Paloma Arellano <[email protected]>
drm/msm/dpu: Add mutex lock in control vblank irq

Baolin Wang <[email protected]>
mm: migrate: fix getting incorrect page mapping during page migration

Dave Chinner <[email protected]>
xfs: fix unmount hang with unflushable inodes stuck in the AIL

Dave Chinner <[email protected]>
xfs: factor out stale buffer item completion

Dave Chinner <[email protected]>
xfs: rearrange code in xfs_buf_item.c

Dave Chinner <[email protected]>
xfs: catch stale AGF/AGF metadata

Dave Chinner <[email protected]>
xfs: xfs_ifree_cluster vs xfs_iflush_shutdown_abort deadlock

Johan Hovold <[email protected]>
tty: add break_wait kernel-doc

Christian Brauner <[email protected]>
namespace: handle mount locking for automounts correctly

Christian Brauner <[email protected]>
fcntl: refuse F_SET_RW_HINT on an immutable inode

Christian Brauner <[email protected]>
namespace: check the target before walking it in do_mount_setattr()

Christian Brauner <[email protected]>
namespace: don't copy an unmounted mount tree

Christian Brauner <[email protected]>
namespace: unhash a dentry before detaching the mounts on it

Nguyen Ngoc Thang <[email protected]>
drm/fb-helper: defer setup when fbdev_probe() fails, not just on -EAGAIN

Mikhail Gavrilov <[email protected]>
drm/amdgpu: copy debugfs register data outside the GRBM/SRBM locks

Wentao Liang <[email protected]>
drm/vc4: Fix firmware reference leak in vc4_drm_bind()

Ahmed Abdelhaleem Ahmed <[email protected]>
scsi: ch: Do not keep references to data transfer element devices

Shao-Fu Chen <[email protected]>
optee: register TEE devices only once fully initialized

Shawn Lin <[email protected]>
pmdomain: rockchip: propagate subdomain add errors

Shawn Lin <[email protected]>
pmdomain: rockchip: don't ignore clock lookup errors on attach

Ming Qian <[email protected]>
pmdomain: imx8m-blk-ctrl: Serialize power on/off across sibling domains

Shawn Lin <[email protected]>
pmdomain: rockchip: fix clock leak on domain probe failure

Mikulas Patocka <[email protected]>
dm: fix reading free memory in do_resume

Christian Brauner <[email protected]>
namespace: check the mounts before reading their parents in pivot_root()

Christian Brauner <[email protected]>
namespace: don't inherit MNT_UMOUNT in clone_mnt()

Chengfeng Ye <[email protected]>
Bluetooth: ISO: Serialize concurrent connect calls

Zack Rusin <[email protected]>
drm/vmwgfx: validate pitch coming from userspace

Mikhail Gavrilov <[email protected]>
Bluetooth: RFCOMM: connect the session socket without rfcomm_mutex

Weiming Shi <[email protected]>
net: team: stop reusing skb after queue override

Weiming Shi <[email protected]>
net: team: fix NULL pointer dereference in team_xmit during mode change

Marc Harvey <[email protected]>
net: team: Rename port_disabled team mode op to port_tx_disabled

Marc Harvey <[email protected]>
net: team: Remove unused team_mode_op, port_enabled

Felix Fietkau <[email protected]>
netfilter: nf_tables: fix bidirectional offload regression

Tahera Fahimi <[email protected]>
xfrm: prevent policy_hthresh.work from racing with netns teardown

Ramses de Norre <[email protected]>
wireguard: queueing: preserve tstamp_type when encapsulating packet

Lorenzo Stoakes (ARM) <[email protected]>
mm/mremap: fix locked_vm leak from MREMAP_DONTUNMAP self-merge

Lorenzo Stoakes (ARM) <[email protected]>
mm/mremap: fix locked_vm leak by splitting VMA for MREMAP_DONTUNMAP

Vishal Badole <[email protected]>
EDAC/amd64: Mask UMC chip select to the four implemented selects

Christian Göttsche <[email protected]>
selinux: fix data race on AVC latest_notif

Tristan Madani <[email protected]>
ice: fix metadata_dst refcount handling on representor teardown

Daehyeon Ko <[email protected]>
ip6_gre: remove obsolete ERSPAN PMTU update

Donggeun Yoo <[email protected]>
tracing: Set the trace clock before registering the histogram trigger

Vicki Pfau <[email protected]>
HID: steam: Clean up locking

Vicki Pfau <[email protected]>
HID: steam: Refactor registration

Vicki Pfau <[email protected]>
HID: steam: Rearrange teardown sequence

Vicki Pfau <[email protected]>
HID: steam: Fully unregister controller when hidraw is opened

Vicki Pfau <[email protected]>
HID: hid-steam: Make client_opened a counter

Dan Carpenter <[email protected]>
HID: hid-steam: Fix cleanup in probe()

Adrian Betschart <[email protected]>
drm/amd/display: Don't replace a sink mode that shares the native totals

Oliver Hartkopp <[email protected]>
can: fix unique skb identifier regression under RPS

Ezrak1e <[email protected]>
dlm: validate length in dlm_search_rsb_tree

Xue Lei <[email protected]>
mtd: fix double free and WARN_ON in add_mtd_device() error paths

Miquel Raynal <[email protected]>
mtd: maps: vmu-flash: Fix the (mtd core) switch to ref counters

Alexander Usyskin <[email protected]>
mtd: fix use-after-free in mtd release

Miquel Raynal <[email protected]>
mtd: Clean refcounting with MTD_PARTITIONED_MASTER

Fernando Fernandez Mancera <[email protected]>
net: openvswitch: validate transport header presence in set_ipv6_addr

Li RongQing <[email protected]>
net/mlx5e: Order ICOSQ cc update after CQ doorbell

Eric Dumazet <[email protected]>
flow_dissector: avoid u16 truncation of hlen in bpf_flow_dissect()

Eric Dumazet <[email protected]>

    flow_dissector: avoid u16 truncation of skb->len when computing thoff

Marek Szyprowski <[email protected]>
ASoC: samsung: i2s: enable op_clk in probe to balance runtime PM

Alvin Šipraga <[email protected]>
ASoC: adau1372: fix invalid default state of output ASRC and DAC muxes

Alvin Šipraga <[email protected]>
ASoC: adau1372: allow sleepy powerdown GPIOs

Sang-Hoon Choi <[email protected]>
nvmet: use the local P2P device on metadata allocation failure

Sang-Hoon Choi <[email protected]>
cxgb4/ch_ktls: disable softirqs around tid_list erases

Omar Ramadan <[email protected]>
amt: send the relay's General Query directly from the receive path

Jamal Hadi Salim <[email protected]>
net/sched: em_text: reject unterminated algo before autoload

Maíra Canal <[email protected]>
drm/vc4: Free the BO cache size list on teardown

Myeonghun Pak <[email protected]>
drm/aspeed: Balance the display clock enable on teardown

Sang-Hoon Choi <[email protected]>
gpio: exar: initialize the ID before registering its cleanup

Oleg Keri <[email protected]>
drm/dp: don't mark the AUX backlight enabled when enabling failed

Christian Brauner <[email protected]>
namespace: refuse an automount below a mount that is in no namespace

Christian Brauner <[email protected]>
dcache: don't put a mountpoint on a dentry that's being removed

Christian Brauner <[email protected]>
namespace: check a submount for references right before unmounting it

Christian Brauner <[email protected]>
fs: refuse fspick() on internal superblocks

Alex Deucher <[email protected]>
drm/amdgpu: make Mac FB workaround generic

Fan Wu <[email protected]>
drm/vc4: drain the hangcheck timer and works on V3D unbind

Krzysztof Karas <[email protected]>
drm/i915/gt: Unmask interrupts only when ACTIVE is true

Krzysztof Karas <[email protected]>
drm/i915/gem: Prevent overstepping exec array boundary

Sajal Gupta <[email protected]>
drm/gud: don't keep a connector without a CRTC as connector_state

Palla Raghunath <[email protected]>
Bluetooth: RFCOMM: Fix NULL tty_dev dereference in rfcomm_dev_shutdown

Maxim Skokov <[email protected]>
Bluetooth: RFCOMM: free the skb when the DLC has no owner

Iaroslav Voitovych <[email protected]>
Bluetooth: MGMT: Fix status of pending commands flushed on power off

Chengfeng Ye <[email protected]>
Bluetooth: hci_sock: Serialize dead-device detachment

Runyu Xiao <[email protected]>
scsi: qedi: Initialize callback state before registration

Abhishek Ojha <[email protected]>
regulator: ltc3676: don't read the write-only HRST and CLIRQ registers

Denis V. Lunev <[email protected]>
openvswitch: fix soft lockup in the netlink flow dump

Karl Bonde Torp <[email protected]>
nvme: fix swapped ZRASF zone state values for full and read only

Fredrik Nyberg <[email protected]>
net: usb: ax88179_178a: fix rx frame length for non-last packets

Sebastien Royen <[email protected]>
net: dsa: microchip: fix KSZ8765 fiber detection

Zixuan Chai <[email protected]>
net: bridge: avoid recursive multicast port cleanup

Chengfeng Ye <[email protected]>
net/smc: protect clcsock lifetime in smc_getname

Quchaosheng <[email protected]>
net/packet: guard the ll header push in packet_rcv_spkt()

Guangshuo Li <[email protected]>
mmc: sdhci-sprd: disable runtime PM on remove

Yibo Tan <[email protected]>
mmc: mtk-sd: Cancel request timeout work on remove

Guangshuo Li <[email protected]>
mmc: cavium-thunderx: destroy slot platform devices on remove

Guangshuo Li <[email protected]>
mmc: cavium-octeon: destroy slot platform devices on remove

Ma Xinmeng <[email protected]>
dm-snap: reject the transient exception store for snapshot-merge

Ben Cressey <[email protected]>
dm-crypt: reject the lmk IV mode with AEAD ciphers

Nguyen Ngoc Thang <[email protected]>
memstick: rtsx_usb_ms: complete requests after eject instead of dropping them

Raj Ojha <[email protected]>
memstick: core: wait for request completion before freeing card

성병찬 <[email protected]>
KEYS: Fix add_key() race with keyring restriction

Karl Mehltretter <[email protected]>
keys: finalize persistent keyring timeout after link attempt

Mingming Cao <[email protected]>
ibmveth: fix TX LTB and filter unwind on open-fail

Mingming Cao <[email protected]>
ibmveth: h_free logical LAN on open-fail after register

Ridham Khurana <[email protected]>
gpio: xilinx: fix runtime PM leak on request error path

Hui Peng <[email protected]>
sctp: copy zeroed stats to user in sctp_getsockopt_pr_streamstatus() when !streamoute

Stephen Smalley <[email protected]>
selinux: preserve NATIVE_LABELS on already-initialized sb in set_mnt_opts

Johannes Berg <[email protected]>
Revert "wifi: libertas: reject short monitor TX frames"

Chengfeng Ye <[email protected]>
tipc: hold a reference to nodes found by link name

Yuqi Xu <[email protected]>
tipc: destroy topsrv workqueues before closing connections

Sabrina Dubroca <[email protected]>
strparser: make sure __strp_recv isn't running before tearing down the parser

Josef Bacik <[email protected]>
xen/netfront: don't leak the skb when xennet_fill_frags() fails

Pavankumar Kondeti <[email protected]>
workqueue: Fix NULL current_pwq deref in chained work check

Jason A. Donenfeld <[email protected]>
wireguard: noise: reject response consumption after intermediate initiation

Michele Dionisio <[email protected]>
wifi: brcmfmac: fix P2P device removal race in brcmf_detach()

Palla Raghunath <[email protected]>
dm ioctl: don't let data_start run past the buffer

Wentao Liang <[email protected]>
btrfs: scrub: fix local_root reference leak in scrub_print_warning_inode()

Michael Garland <[email protected]>
ASoC: amd: yc: Add DMI quirk for Acer Aspire Go 15 (AG15-21P)

Karl Mehltretter <[email protected]>
arm64: irq: exclude the softirq stack switch from KCOV

Daehyeon Ko <[email protected]>
ipv6: do not warn on route notification size race

Daehyeon Ko <[email protected]>
ipv4: do not warn on route notification size race

Daehyeon Ko <[email protected]>
ipv4: stop route notification sizing when nexthop group shrinks

Daehyeon Ko <[email protected]>
ipv4: stop PMTU walk when nexthop group shrinks

Eric Biggers <[email protected]>
crypto: drbg - Fix ineffective sanity check

Karl Mehltretter <[email protected]>
netfilter: nft_set_pipapo: restore cloned mapping table memcg accounting

Jiajia Liu <[email protected]>
Bluetooth: hci_event: fix simultaneous discovery stuck in FINDING

Liew Rui Yan <[email protected]>
mm/damon/core: fix unconditionally skip last region

SeongJae Park <[email protected]>
mm/damon/core: do non-safe region walk on kdamond_apply_schemes()

Carlos Llamas <[email protected]>
HID: uhid: convert to hid_safe_input_report()

Benjamin Tissoires <[email protected]>
HID: core: introduce hid_safe_input_report()

Andrey Misiurov <[email protected]>
scsi: lpfc: Fix use-after-free of mboxq in lpfc_sli4_driver_resource_setup()

HE WEI(ギカク) <[email protected]>
fs/ntfs3: fix slab-out-of-bounds write in ni_create_attr_list()

Nirbhay Sharma <[email protected]>
fs/ntfs3: fix KMSAN uninit-value in ni_create_attr_list

Konstantin Komarov <[email protected]>
fs/ntfs3: Mark inode as bad as soon as error detected in mi_enum_attr()

Konstantin Komarov <[email protected]>
fs/ntfs3: Add more checks in mi_enum_attr (part 2)

Pengpeng Hou <[email protected]>
iio: cdc: ad7150: fix OF matching and publish module aliases

Fabrice Gasnier <[email protected]>
iio: adc: stm32-adc: fix possible division by zero in processed channel

Vladyslav Ivashchenko <[email protected]>
iio: adc: axp288: Add TS bias override for Haier HV103H

Cong Nguyen <[email protected]>
iio: adc: max1363: sign-extend bipolar differential channel reads

Pengpeng Hou <[email protected]>
iio: adc: aspeed: propagate reset deassert errors

Krzysztof Kozlowski <[email protected]>
iio: adc: aspeed: Simplify with dev_err_probe

Fan Wu <[email protected]>
iio: adc: ad_sigma_delta: fix use-after-free on unbind

Paulo Alcantara <[email protected]>
smb: client: discard post-EOF pagecache when extending a file via zero range

Felix Fietkau <[email protected]>

    wifi: mac80211: set info->band for 802.3 encap offload frames

Sean Christopherson <[email protected]>
KVM: SVM: Use the active VMCB's MSR bitmap when checking if MSR is intercepted

Peter Xu <[email protected]>
mm/hugetlb: fix avoid_reserve to allow taking folio from subpool

Matthew Wilcox (Oracle) <[email protected]>
fs: Free any excess xarray nodes in clear_inode()

Zhiling Zou <[email protected]>
wifi: mac80211: count only matching reservations in reserved switch

Zhiling Zou <[email protected]>
wifi: mac80211: keep paired old chanctx alive

Johan Hovold <[email protected]>
tty: port: fix tty_port_tty_vhangup() race

Eric Dumazet <[email protected]>
bnxt_en: fix DMA mapping length for padded small packets

Zhao Li <[email protected]>
wifi: mac80211: account proxy paths against the mesh path limit

Han Xu <[email protected]>
mtd: spinand: Enable QE on all dies

Pei Xiao <[email protected]>
mtd: block2mtd: Fix divide error when erase_size is zero

Johan Hovold <[email protected]>
USB: serial: fix ioctl hangup race

Johan Hovold <[email protected]>
USB: serial: report unsupported break signalling

Johan Hovold <[email protected]>
USB: serial: return errors from break handling

Zhao Li <[email protected]>
wifi: mac80211: keep fallback association elements alive

Zhao Li <[email protected]>
wifi: mac80211: shut down RX BA session timer on teardown

Nuno Sá <[email protected]>
mtd: spinand: fix NULL pointer dereference with no ECC engine

Timur Kristóf <[email protected]>
drm/amd/display: Mark DCE 6.4 as not APU

Johan Hovold <[email protected]>
serial: fix TIOCMIWAIT race

Fan Wu <[email protected]>
tty: serial: max3100: shut down timer before freeing port

Johan Hovold <[email protected]>
tty: tty_port: restore TTY_IO_ERROR on activation failure

Pannarat Wiriyaarritham <[email protected]>
usb: typec: ucsi: acpi: Assume UCSI 1.2 on Acer Nitro ANV15-41

Runyu Xiao <[email protected]>
USB: dwc2: shut down wakeup timer before freeing HCD state

Myeonghun Pak <[email protected]>
usb: ohci-spear: disable controller wakeup on removal

Chen Ni <[email protected]>
usb: ohci-spear: Remove unnecessary NULL check before clk_disable_unprepare()

Francisco Beltrán Millalén <[email protected]>
drm/amdgpu: reset VI ASIC on MacBookPro14,3

Andre Eikmeyer <[email protected]>
drm/amdgpu: reset VI ASIC on MacBookPro15,1

Jiangshan Yi <[email protected]>
drm/amd/display: check dc_state_create_copy() for NULL in dm_suspend

Eric Biggers <[email protected]>
fsverity: add dependency on 64K or smaller pages

Mostafa Saleh <[email protected]>
KVM: arm64: Don't use the VMA to size stage-2 block mappings for VM_PFNMAP

Jinseob Kim <[email protected]>
iio: buffer: serialize buffer teardown with mode claims

Beata Michalska <[email protected]>

    arm64: errata: Add Cortex-A725 erratum 3821522 workaround

Beata Michalska <[email protected]>
arm64: errata: Factor out broken AMU const counter cap

Mark Rutland <[email protected]>
arm64/fpsimd: signal: Forbid non-streaming SVE payload on SME-only systems

Zhengchuan Liang <[email protected]>
perf: Require kernel access for text poke events

Johan Hovold <[email protected]>
tty: fix saved termios reset race

Jiazi Liu <[email protected]>
usb: dwc3: gadget: fix IRQ storm on invalid event buffer count

Viken Dadhaniya <[email protected]>
soc: qcom: geni-se: Correct QUP Core ICC vote constants

Andrei Matei <[email protected]>
bpf: Fix accesses to uninit stack slots

Jiangshan Yi <[email protected]>
smb: client: clear setuid/setgid bit on write with cifsacl/modefromsid/posix extensions

Josef Bacik <[email protected]>
xen/netfront: drop RX packets with a short Ethernet header

Amit Sunil Dhamne <[email protected]>
usb: typec: tcpm: constrain TCPM_SOURCING_VBUS event handling

Xu Yang <[email protected]>
usb: typec: tcpm: fix debug accessory mode detection for sink ports

Neill Kapron <[email protected]>
usb: gadget: f_fs: Fix Use-After-Free in AIO error path

Gabriel Prostitis <[email protected]>
USB: gadget: ffs: fix mm lifetime handling

Fan Wu <[email protected]>
usb: gadget: at91_udc: drain polled-VBUS timer/work before udc is freed

Uwe Kleine-König <[email protected]>
usb: gadget: at91_udc: Convert to platform remove callback returning void

Karl Mehltretter <[email protected]>

    serial: imx: serialize imx_uart_ports[] lifetime

Uwe Kleine-König <[email protected]>
serial: imx: Convert to platform remove callback returning void

Gilberto Conde <[email protected]>
net: usb: qmi_wwan: add Quectel EG120K-EA

Wentao Liang <[email protected]>
wifi: wlcore: Fix runtime PM leak in wlcore_remove()

Uwe Kleine-König <[email protected]>
wifi: wlcore: Convert to platform remove callback returning void

Frank Sorenson <[email protected]>
smb: client: split cifsFileInfo bitfields to avoid shared-byte RMW races

Paolo Abeni <[email protected]>
mptcp: prevent race between disconnect() and rtx

Eric Dumazet <[email protected]>

    tcp: introduce icsk->icsk_keepalive_timer

Mehmet Fide <[email protected]>
mtd: rawnand: vf610_nfc: fix false bitflips on reads of erased pages

Yi Yang <[email protected]>
vc_screen: reload vc pointer before if (ret) in vcs_write() to avoid UAF

Chris Mason <[email protected]>
SUNRPC: reject duplicate CREDS_VALUE options

Chris Mason <[email protected]>
SUNRPC: fix gssx_dec_option_array error path bugs

Asad Kamal <[email protected]>
drm/amd/powerplay: fix VoltageObjectInfo zero-stride loop and OOB read

Aditya Dutt <[email protected]>
jfs: fix array-index-out-of-bounds read in add_missing_indices

Fan Wu <[email protected]>
iio: trigger: cancel reenable_work before freeing trigger

Salah Triki <[email protected]>
iio: proximity: vcnl3020: fix ISR bitmask check in IRQ handler

Zhang Jie <[email protected]>
iio: proximity: sx9324: Correct proximity channel resolution

Cong Nguyen <[email protected]>
iio: proximity: pulsedlight: fix iio_device left registered on PM setup failure

Salah Triki <[email protected]>
iio: proximity: isl29501: Fix return type of isl29501_register_write

Hui Su <[email protected]>
iio: pressure: bmp280: fix out-of-bounds access in sampling frequency lookup

Fan Wu <[email protected]>
iio: light: gp2ap020a00f: drain irq_work after free_irq

Arka Mondal <[email protected]>
iio: imu: adis16480: fix unprotected debugfs reads

Arka Mondal <[email protected]>
iio: imu: adis16400: fix unprotected debugfs reads

Arka Mondal <[email protected]>
iio: gyro: adis16136: fix unprotected debugfs reads

Salah Triki <[email protected]>
iio: frequency: admv1013: fix wrong channel field used in admv1013_read_raw()

Jonathan Cameron <[email protected]>
iio: buffer: Ensure bounce buffer used for unaligned case is zeroed.

Fan Wu <[email protected]>
iio: adc: xilinx-xadc: free IRQ before cancelling the unmask worker on unbind

Felix Gu <[email protected]>
iio: adc: sun4i-gpadc-iio: drop underflowing pm_runtime_put() calls

Felix Gu <[email protected]>
iio: adc: sun4i-gpadc-iio: clean up on thermal zone registration failure

Salah Triki <[email protected]>
iio: accel: sca3000: fix frequency divider condition check

Jiale Yao <[email protected]>
iio: accel: kxcjk-1013: reject duplicate event disable

Daehyeon Ko <[email protected]>
thunderbolt: Reject oversized XDomain properties responses

Kurt Lieber <[email protected]>
thunderbolt: Disable CL states for the Anker Prime TB5 dock

Mika Westerberg <[email protected]>
thunderbolt: Fix KASAN reported use-after-free when request is canceled

Ian Lin <[email protected]>
USB: serial: option: add Compal EXC-T1 support

Sebastian Sjoholm <[email protected]>
USB: serial: option: add Quectel RG660QB

Ian Lin <[email protected]>
USB: serial: option: add Compal EXM-G1x support

Carlo Szelinsky <[email protected]>
USB: serial: option: add Quectel EG060W

Zhao Dongdong <[email protected]>
USB: serial: option: add support for SIMCom SIM8260C

Johan Hovold <[email protected]>
USB: serial: fix driver deregistration order

Johan Hovold <[email protected]>
USB: serial: fix dynamic id driver deregistration race

Johan Hovold <[email protected]>
USB: serial: ssu100: fix baud rate overflow

Johan Hovold <[email protected]>
USB: serial: quatech2: fix baud rate overflow

Jérémy Carrat <[email protected]>

    USB: serial: cp210x: add Corsair AX1500i Power Supply

Yuqi Xu <[email protected]>
wifi: mac80211: handle empty FILS association request payload

Zhao Li <[email protected]>
wifi: mac80211: release mesh path quota on failed additions

Yuqi Xu <[email protected]>
wifi: mac80211: minstrel_ht: validate fixed rate index

Zhao Li <[email protected]>
wifi: mac80211: drain PS delivery work during station teardown

Guangshuo Li <[email protected]>
wifi: iwlegacy: 3945: free EEPROM data on remove

Tianchu Chen <[email protected]>
wifi: cw1200: fix TX padding OOB read leaking heap data to device

Nuno Sá <[email protected]>
mtd: spinand: fix zero oobavail when no ECC engine is used

Mehmet Fide <[email protected]>
mtd: rawnand: vf610_nfc: fix reads on chips with more than 64 bytes of OOB

Runyu Xiao <[email protected]>
mtd: rawnand: cadence: Initialize IRQ state before requesting IRQ

Weiming Shi <[email protected]>
nvmet-auth: fix out-of-bounds write in nvmet_auth_challenge()

Daehyeon Ko <[email protected]>
nvme-multipath: fix underflow in ANA log bounds checks

Zhiling Zou <[email protected]>
ipvs: bound LBLCR and LBLC cache growth

Chandrashekar Devegowda <[email protected]>
Bluetooth: btintel: fix buffer over-read in btintel_hw_error()

Chengfeng Ye <[email protected]>
Bluetooth: hci_core: Serialize fragmented ISO packet queueing

Chengfeng Ye <[email protected]>
Bluetooth: hci_core: Serialize ACL scheduling with channel deletion

Linmao Li <[email protected]>
Bluetooth: hci_core: Fix inquiry cache timestamps on 64-bit systems

Chengfeng Ye <[email protected]>
Bluetooth: hci_conn: Lock parent access during enhanced SCO setup

Chengfeng Ye <[email protected]>
Bluetooth: RFCOMM: Fix initial port reference race

Xiang Mei <[email protected]>
ALSA: ua101: reject mismatched capture/playback packet sizes

Kyle Zeng <[email protected]>
ALSA: seq: Serialize compat port-info ioctls

Zimeng Li <[email protected]>
ASoC: qcom: lpass-cpu: use DAI table index for playback constraints

Wentao Liang <[email protected]>
serial: vt8500: Fix clock reference leak in vt8500_serial_probe()

Simon Gassner <[email protected]>
serial: tegra: don't clear the Tx FIFO on an Rx-only reset

Fan Wu <[email protected]>

    serial: 8250_bcm7271: fix use-after-free in brcmuart_remove()

Johan Hovold <[email protected]>
tty: abort break signalling on hangup

Viken Dadhaniya <[email protected]>
tty: serial: qcom_geni_serial: Keep console RX functional after deep idle

Joshua Rogers <[email protected]>
tty: vcc: hold port lock when clearing tty pointer in vcc_cleanup

Joshua Rogers <[email protected]>
tty: vcc: zero-initialize control packet in vcc_send_ctl()

Johan Hovold <[email protected]>
tty: amiserial: fix broken TIOCMIWAIT

Mingyu Wang <[email protected]>
tty: vt: fix memory leak in vc_allocate()

Jie Deng <[email protected]>
usb: cdns3: Fix NULL pointer dereference in cdns3_pci_probe

Fan Wu <[email protected]>
usb: cdns3: fix use-after-free in cdns3_gadget_exit()

Jameson Thies <[email protected]>
usb: typec: ucsi: displayport: Current CAM OOB index fixup

Prashanth K <[email protected]>
usb: typec: ucsi: Get the connector fwnode based on reg value

Radhey Shyam Pandey <[email protected]>
usb: typec: tipd: fix uninitialized typec_partner_desc in tps6598x_connect()

Amit Sunil Dhamne <[email protected]>
usb: typec: tcpm: recover after failure to start the frs ams

Hui Peng <[email protected]>
usb: core: clear both ep_in and ep_out for non-ep0 control endpoints

Myeonghun Pak <[email protected]>
usb: chipidea: tegra: disable runtime PM on resume failure

Yuchao Zhang <[email protected]>
usb: gadget: f_fs: Fix NULL pointer dereference in FUNCTIONFS_ENDPOINT_DESC

Alan Stern <[email protected]>
USB: gadget: dummy-hcd: Fix wait for outstanding request completions

Fan Wu <[email protected]>
usb: gadget: aspeed-vhub: cancel wake work on device removal

Radhey Shyam Pandey <[email protected]>
usb: dwc3: am62: Fix runtime PM usage count leak on probe error path

Linkai Gong <[email protected]>
usb: typec: anx7411 - stop the IRQ before destroying the workqueue

Liu Chao <[email protected]>
usb: gadget: f_uac1_legacy: validate bRequest index in generic_{set,get}_cmd

Myeonghun Pak <[email protected]>
usb: ohci-st: disable controller wakeup on removal

Myeonghun Pak <[email protected]>
usb: ohci-s3c2410: disable controller wakeup on removal

Myeonghun Pak <[email protected]>
usb: ohci-da8xx: disable controller wakeup on cleanup

Orgad Shaneh <[email protected]>
usb: octeon-hcd: fix the FIFO-flush timeout computation

Lovekesh Solanki <[email protected]>
usb: hub: use shorter 120ms post resume hold for SS root hubs

Syed Labeeq Sajid Bukhari <[email protected]>
usb: storage: sierra_ms: reject short SWoC info transfers

Johan Hovold <[email protected]>
USB: serial: fix port tear down use-after-free

Yuchao Zhang <[email protected]>
USB: cdc-acm: skip URB restart in port_shutdown if disconnected

Johan Hovold <[email protected]>
USB: cdc-acm: fix racy TIOCMIWAIT implementation

Yuxiao Wang <[email protected]>
nitro_enclaves: fix use-after-free on SLOT_ALLOC failure

Raphaël Larocque <[email protected]>
Input: synaptics - limit T440p InterTouch quirk to LEN0036

Lovekesh Solanki <[email protected]>
Input: synaptics - add LEN205b entry to smbus_pnp_ids for ThinkPad T490

David Heidelberg <[email protected]>
Input: s6sy761 - fix resume ordering and restore sensing

Lovekesh Solanki <[email protected]>
Input: i8042 - add nomux quirk for Fujitsu LIFEBOOK U7410

Martino Papero <[email protected]>
Input: atkbd - skip deactivate for Lenovo IdeaPad Slim 3 15IWC11

Wentao Liang <[email protected]>
kgdboc: Fix tty driver reference leak in configure_kgdboc()

Tomer Pomeranc <[email protected]>
binder: fix leaked fd fixups on TF_UPDATE_TXN supersede

Tomer Pomeranc <[email protected]>
binder: fix is_failure flag for superseded transaction cleanup

Guangshuo Li <[email protected]>
drm/amdgpu: fix ACP MFD device leak on init failure

Guangshuo Li <[email protected]>
drm/amdgpu: fix IP instance memory leak on kobject add failure

Imre Kaloz <[email protected]>
drm/radeon: Read the VRAM VBIOS signature with readb()

Willian Oliveira <[email protected]>
drm/amdgpu/gfx6: fix firmware leak on teardown

Timur Kristóf <[email protected]>
drm/amd/pm/si: Fix updating clock limits on AC/DC

Timur Kristóf <[email protected]>
drm/amd/pm/si: Check AMD_IS_MOBILITY flag for PPSMC_SYSTEMFLAG_GPIO_DC

Nikola Prica <[email protected]>
PCI: Accept AtomicOps already enabled by the hypervisor

Luo Gengkun <[email protected]>
perf: Fix race between perf_event_exit_task() and perf_pending_task()

Hongjian Dai <[email protected]>
i2c: at91: release DMA channels when probe defers

Eric Dumazet <[email protected]>
ipv6: sr: use skb_get_hash_net() in seg6_make_flowlabel()

Florian Westphal <[email protected]>
net: add and use skb_get_hash_net

Quentin Freimanis <[email protected]>
net: sparx5: make ports inherit the switch base mac address type

Fernando Fernandez Mancera <[email protected]>
netfilter: bpf: reject invalid NAT manipulation types

Julian Anastasov <[email protected]>
ipvs: filter some flags received in the backup server

Julian Anastasov <[email protected]>
ipvs: do not create invisible templates

Julian Anastasov <[email protected]>
ipvs: fix missing counter decrement in lblc

Jeff Jo <[email protected]>
tcp: refresh TS.Recent for accepted old ACKs

Nicolai Buchwitz <[email protected]>
net: bcmgenet: fix NULL dereference in set_coalesce before first open

Jamal Hadi Salim <[email protected]>
net/sched: sch_codel: match the no-drop threshold to the packet size

Jamal Hadi Salim <[email protected]>
net/sched: fq_codel: match the no-drop threshold to the packet size

Jérémy Jean <[email protected]>
tipc: prevent GCM nonce reuse on peer key changes

Baha Mesleh <[email protected]>
octeontx2-af: mcs: Fix SC resource cleanup loop

Florian Fainelli <[email protected]>
net: systemport: Fix RUNT MIB counter register offset calculation

Nguyen Ngoc Thang <[email protected]>
Bluetooth: hci_sync: don't drain cmd_sync backlog on unregister

Florian Westphal <[email protected]>
netfilter: ipset: do not update comments from kernel-side adds

Jamal Hadi Salim <[email protected]>
net/sched: cls_api: reclaim an empty proto on the error path

Binbin Deng <[email protected]>
net/mctp: publish the mctp_dev only after it is initialised

Sai Teja Aluvala <[email protected]>
Bluetooth: btintel: validate DDC record lengths

Sang-Hoon Choi <[email protected]>
Bluetooth: hci_core: free the HCI ID if naming fails

Cezary Rojewski <[email protected]>
ASoC: codecs: rt274: Fix format setting for 44100 rate

Cezary Rojewski <[email protected]>
ASoC: codecs: rt286: Revert delay value for jack setup

Zhao Li <[email protected]>
wifi: cfg80211: preserve hidden-group beacon IE ownership

Manush Prajwal <[email protected]>
rtc: mpfs: fix unchecked devm_clk_get() error pointer in probe()

Liu Dalin <[email protected]>
rtc: dev: zero-initialize struct rtc_wkalrm to prevent information leak

Nicolas Escande <[email protected]>

    wifi: ath11k: reset ar->num_stations on hardware start

Sheetal <[email protected]>
ASoC: tegra: Fix ASRC Stream6 input threshold control

Aamir Ahmed <[email protected]>
wifi: wfx: validate MIB read length before copying to caller

HyeongJun An <[email protected]>
ASoC: wm8903: Move the DRC QR threshold to the register that holds it

Abdurrahman Hussain <[email protected]>
of/overlay: don't create "//" paths for fragments targeting the root

Abdurrahman Hussain <[email protected]>
of/overlay: don't leak fragment references when changeset init fails

Julian Sun <[email protected]>
nvmet: preserve device path on allocation failure

Karl Mehltretter <[email protected]>
mtd: core: call _get_device() with the master MTD

Alexander Usyskin <[email protected]>
mtd: call external _get and _put in right order

Tomas Winkler <[email protected]>
mtd: use refcount to prevent corruption

SJ Park <[email protected]>
mm/damon/core: don't skip damos_adjust_quota() while esz is not zero

Nilesh Javali <[email protected]>
scsi: qla2xxx: Fix NVMe abort reference leak on repeated abort

Nilesh Javali <[email protected]>
scsi: qla2xxx: Initialize NVMe abort_work once at submission

Svyatoslav Ryhel <[email protected]>
drm/tegra: gr2d/gr3d: Initialize address register map before HOST1X client is registered

Sandipan Das <[email protected]>
perf/x86/amd/lbr: Fix kernel address leakage

Kuniyuki Iwashima <[email protected]>
hsr: Remove WARN_ONCE() in hsr_addr_is_self().

Kang Yang <[email protected]>

    wifi: ath11k: add srng->lock for ath11k_hal_srng_* in monitor mode

Duoming Zhou <[email protected]>
watchdog: cpu5wdt.c: Fix use-after-free bug caused by cpu5wdt_trigger

Tetsuo Handa <[email protected]>
perf/core: Fix WARN in perf_sigtrap()

Lorenzo Stoakes (ARM) <[email protected]>
mm/secretmem: properly account locked pages

Xiang Mei <[email protected]>
ALSA: line6: reject oversized playback packets

Nguyen Ngoc Thang <[email protected]>
ALSA: caiaq: unregister the input device when probe fails

Zizhi Wo <[email protected]>
vt: skip screen update for DEC alignment test on backgroup consoles

Clément Léger <[email protected]>
of/irq: add missing of_node_put() for interrupt parent node

Chunguang Xu <[email protected]>
nvme-fabrics: use reserved tag for reg read/write command

Jakub Kicinski <[email protected]>
ethtool: fail closed if we can't get max channel used in indirection tables

Mauro Carvalho Chehab <[email protected]>
media: av7110: fix a spectre vulnerability

Christoph Schlameuss <[email protected]>
kvm: s390: Reject memory region operations for ucontrol VMs

Dan Carpenter <[email protected]>
drm/mediatek: Fix potential NULL dereference in mtk_crtc_destroy()

Suraj Kandpal <[email protected]>
drm/i915/hdcp: Add encoder check in hdcp2_get_capability

Suraj Kandpal <[email protected]>
drm/i915/hdcp: Add encoder check in intel_hdcp_get_capability

Alex Hung <[email protected]>
drm/amd/display: Validate function returns

Sanghyun Park <[email protected]>
vxlan: use one headroom snapshot for neighbour replies

Maoyi Xie <[email protected]>
rds_tcp: close NULL deref window in rds_tcp_set_callbacks

Konrad Dybcio <[email protected]>

    drm/msm/adreno: Assign msm_gpu->pdev earlier to avoid nullptrs

Benjamin Berg <[email protected]>
wifi: cfg80211: avoid double free if updating BSS fails

Mario Limonciello <[email protected]>
x86/CPU/AMD: Clear virtualized VMLOAD/VMSAVE on Zen4 client

David Arinzon <[email protected]>
net: ena: Add validation for completion descriptors consistency

Shay Drory <[email protected]>
net/mlx5e: Fix netif state handling

Jan Kara <[email protected]>
ocfs2: Avoid touching renamed directory if parent does not change

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Defer work in bpf_timer_cancel_and_free

Kumar Kartikeya Dwivedi <[email protected]>
bpf: Fail bpf_timer_cancel when callback is being cancelled

Jun Yang <[email protected]>
sctp: check RCV_SHUTDOWN after the sendmsg connect wait

Runyu Xiao <[email protected]>
rtc: spear: initialize IRQ state before requesting alarm IRQ

Ilkka Lappeteläinen <[email protected]>
net/packet: prevent TX_RING byte count overflow

Aohan Mei <[email protected]>
netfilter: nft_flow_offload: drop flowtable reference on init error path

Abdurrahman Hussain <[email protected]>
of/overlay: only treat a positive changeset id as registered

Abdurrahman Hussain <[email protected]>
of/overlay: put property on deadprops only after changeset add succeeds

Wentao Liang <[email protected]>
of/irq: Fix remaining refcount leaks in of_irq_init()

Leon Hwang <[email protected]>
kprobes: Skip disarmed probes when checking optkprobe overlap

Jérémy Jean <[email protected]>
audit: fix exe mark UAF in kill_rules()

Takashi Iwai <[email protected]>
ALSA: usb-audio: Apply IGNORE_CTL_ERROR quirk to all Audient devices

Darrick J. Wong <[email protected]>
xfs: fix cursor and pointer handling when recovering iunlink buckets

Zihan Xi <[email protected]>
smb: client: close completed creates on compound wait errors

Zihan Xi <[email protected]>
smb: client: close handle after create-context parsing failure

ChenXiaoSong <[email protected]>
smb/client: pass cifs_open_info_data to SMB2_open()

ChenXiaoSong <[email protected]>
smb/client: use stack-allocated smb2_file_all_info in smb3_query_mf_symlink()

Chen Changcheng <[email protected]>
HID: alps: unregister DualPoint Stick input device on remove

Bastien Nocera <[email protected]>
HID: hid-alps: Use pm_ptr instead of #ifdef CONFIG_PM

Marcus Folkesson <[email protected]>
HID: hid-alps: use default remove for hid device

Thomas Weißschuh <[email protected]>
HID: core: remove #ifdef CONFIG_PM from hid_driver

Tibor Harcsa <[email protected]>
Bluetooth: btusb: Add IMC Networks QCA9377 to quirks table

Aldo Ariel Panzardo <[email protected]>
Bluetooth: mgmt: fix race in read_unconf_index_list()

Namjae Jeon <[email protected]>
smb: client: use finish_no_open() for non-regular inodes

Dapeng Mi <[email protected]>
perf/x86/intel: Fix GRT PEBS load/store direction for latency events, to fix sample classification

Dapeng Mi <[email protected]>
perf/x86/intel: Update event constraints and cache_extra_regsfor ADL

Aohan Mei <[email protected]>
netfilter: nf_tables: skip expired catchall elements on insert and delete

Pablo Neira Ayuso <[email protected]>

    netfilter: nf_tables: set->ops->insert returns opaque set element in case of EEXIST

Guangshuo Li <[email protected]>
net: ena: fix MMIO read buffer leak on probe failure

Dr. David Alan Gilbert <[email protected]>
net: ena: Remove autopolling mode

Yuqi Xu <[email protected]>
net: ipconfig: bound DHCP option construction

Thorsten Blum <[email protected]>
net: ipconfig: Remove outdated comment and indent code block

Liz Fong-Jones <[email protected]>
PCI: Fix BAR resize for devices on a root bus

Ilpo Järvinen <[email protected]>
PCI: Fix Resizable BAR restore order

Zihan Xi <[email protected]>
smb: client: fix create context out-of-bounds reads

Steve French <[email protected]>
smb3: make query_on_disk_id open context consistent and move to common code

Ilya Maximets <[email protected]>
net: openvswitch: conntrack: fix helper UAF due to extensions realloc

Florian Westphal <[email protected]>
openvswitch: prepare for stolen verdict coming from conntrack and nat engine

Jaewook You <[email protected]>
mm/hugetlb: preserve mremap address delta when skipping page tables

Jinjiang Tu <[email protected]>

    mm/rmap: fix missing barrier between anon_vma init and vma->anon_vma publish

Waiman Long <[email protected]>
mm/kmemleak: fix UAF bug in kmemleak_scan()

Waiman Long <[email protected]>
mm/kmemleak: simplify kmemleak_cond_resched() usage

Henry Martin <[email protected]>
tracing/user_events: Don't destroy fields when event removal fails

Dapeng Mi <[email protected]>
perf/x86/intel: Remove anythread_deprecated bit from perf_capabilities

Willem de Bruijn <[email protected]>
tcp: prevent collapsing skbs across boundary in rtx queue

Myeonghun Pak <[email protected]>
bna: prevent IOC timer rearm during teardown

April Cardenas <[email protected]>
smb/client: send lease break ACKs thru correct session for multiuser mounts

Fan Wu <[email protected]>
wifi: wcn36xx: Fix potential use-after-free in TX ack timer teardown

Yibo Tan <[email protected]>
hwmon: (pwm-fan) Stop RPM timer before freeing tach data

Tzung-Bi Shih <[email protected]>
watchdog: rtd119x: Avoid division by zero

Christophe JAILLET <[email protected]>
watchdog: rtd119x: Use devm_clk_get_enabled() helper

Shakeel Butt <[email protected]>
mm/mlock: use the IRQ-safe accessor for NR_MLOCK in __munlock_folio()

Hongling Zeng <[email protected]>
btrfs: take commit root semaphore when iterating in mark_block_group_to_copy()

Fan Wu <[email protected]>
smb: client: fix cifsFileInfo reference leak in deferred close

Paulo Alcantara <[email protected]>
smb: client: fix file type corruption in cifs_reparse_point_to_fattr()

Matthieu Baerts (NGI0) <[email protected]>
mptcp: pm: reset retrans_time when ADD_ADDR entry is reused

Qing Luo <[email protected]>
mptcp: pm: userspace: fix address ID overflow

Geliang Tang <[email protected]>
mptcp: use sock_kmemdup for address entry

Geliang Tang <[email protected]>
sock: add sock_kmemdup helper

Geliang Tang <[email protected]>
mptcp: pm: drop match in userspace_pm_append_new_local_addr

Matthieu Baerts <[email protected]>
mptcp: userspace pm: use a single point of exit

Nikhil Gurudasani <[email protected]>
erofs: preserve LZMA decoders on resize failure

Sahil Chandna <[email protected]>
net: mana: Reserve extra CQ slot for the fence completion CQE

Xuanqiang Luo <[email protected]>
net/sched: act_api: release all action references on NEWACTION failure

Xiong Weimin <[email protected]>
virtio_mmio: disable IRQ wake before free_irq

Viresh Kumar <[email protected]>
virtio-mmio: Remove virtqueue list from mmio device

Zihan Xi <[email protected]>
ipmr: account multicast table and route memory

Thomas Zimmermann <[email protected]>
drm/sysfb: simpledrm: Improve stride validation

Guanghui Yang <[email protected]>
f2fs: fix dentry folio leak in find_in_level

Wenjie Qi <[email protected]>
f2fs: limit recovery filename logging to stored length

Nilesh Javali <[email protected]>
scsi: qla2xxx: Fix soft lockup polling continuation IOCB signature

Nilesh Javali <[email protected]>
scsi: qla2xxx: Use memset_io() to clear QLAFX00 request ring slot

Nilesh Javali <[email protected]>
scsi: qla2xxx: Quiesce response IRQ before freeing request queue

Nilesh Javali <[email protected]>
scsi: qla2xxx: Fix 64G link speed reporting in get_data_rate

Nilesh Javali <[email protected]>
scsi: qla2xxx: Null out freed pointers in qla2x00_mem_alloc() error path

Narasimharao Vadlamudi <[email protected]>
media: rkvdec: Propagate platform_get_irq() errors

Johan Hovold <[email protected]>
media: platform: mtk-mdp3: fix NULL deref on failed SCP lookup

Lorenzo Stoakes (ARM) <[email protected]>
mm/mremap: reset unfaulted VMA page offset for MREMAP_DONTUNMAP

Rupesh Majhi <[email protected]>
iio: pressure: dps310: fix NULL pointer dereference on ACPI probe

Anthony Krowiak <[email protected]>
s390/vfio-ap: Fix NULL deref in status_show() during queue probe

Xu Rao <[email protected]>
nvme-fabrics: fix DHCHAP secret leak on parse failure

Karl Mehltretter <[email protected]>
arm64: mm: Fix the lockless page-table walk in show_pte()

Hugh Dickins <[email protected]>
arm64: allow pte_offset_map() to fail

Lad Prabhakar <[email protected]>
rtc: rzn1: Handle unset alarm weekday in rzn1_rtc_read_alarm

Steven Rostedt <[email protected]>
ftrace: Synchronize the initialization of ftrace_ops

Muhammad Bilal <[email protected]>
staging: sm750fb: fix mono image source stride mismatch in lynxfb_ops_imageblit()

Can Peng <[email protected]>
spi: bcm63xx: disable clock on resume failure

Yang Yingliang <[email protected]>
spi: bcm63xx: switch to use modern name

Jeffin Philip <[email protected]>
usb: gadget: f_mass_storage: fix null pointer dereference in fsg_common_set_num_buffers()

Adrian Hunter <[email protected]>

    i3c: master: Fix use-after-free of master->this

Adrian Hunter <[email protected]>
i3c: master: Do not treat master device as a duplicate target

Can Peng <[email protected]>
hwrng: stm32 - Fix runtime PM cleanup on registration failure

Fan Wu <[email protected]>
mmc: via-sdmmc: cancel card-detect work on remove

Jianing Li <[email protected]>
power: supply: max17040: drop incorrect I2C functionality check

Uwe Kleine-König <[email protected]>

    power: supply: max17040: Convert to i2c's .probe_new()

Angel Iglesias <[email protected]>
i2c: core: Introduce i2c_client_get_device_id helper function

Fan Wu <[email protected]>
power: supply: rt9455: quiesce delayed work before teardown

Uwe Kleine-König <[email protected]>
power: supply: rt9455: Convert to i2c's .probe_new()

Oscar Ou <[email protected]>
lockd: fix swapped arguments in nlmsvc_match_ip()

Ruoyu Wang <[email protected]>
i2c: mxs: fix DMA channel leak on probe error

Bence Csókás <[email protected]>
dmaengine: Add devm_dma_request_chan()

Jiacheng Yu <[email protected]>
params: fix charp corruption on allocation failure

Andy Shevchenko <[email protected]>
params: Fix multi-line comment style

Andy Shevchenko <[email protected]>
params: Sort headers

Andy Shevchenko <[email protected]>
params: Use size_add() for kmalloc()

Andy Shevchenko <[email protected]>
params: Do not go over the limit when getting the string length

Christophe JAILLET <[email protected]>
kernel/params.c: Use kstrtobool() instead of strtobool()

Rafael J. Wysocki <[email protected]>
ACPI: TAD: Add locking around AML evaluations

Rafael J. Wysocki <[email protected]>
ACPI: TAD: Split three functions to untangle runtime PM handling

Rafael J. Wysocki <[email protected]>
ACPI: TAD: Rearrange RT data validation checking

Hui Su <[email protected]>
kasan: fix cache shrink race with CPU hotplug

Zqiang <[email protected]>
kasan: fix lockdep report invalid wait context

Kuan-Wei Chiu <[email protected]>
coresight: etm3x: Fix cntr_val_show() to match cntr_val_store() behavior

Chuck Lever <[email protected]>

    nfsd: gate nfs2 setacl by argp->mask

Jeff Layton <[email protected]>
nfsd: fix clock domain mismatch in clients_still_reclaiming()

Jeff Layton <[email protected]>
nfsd: check nfsd4_acl_to_attr() return value in nfsd4_create()

Chris Mason <[email protected]>
nfsd: size fh_verify server sockaddr slot by xpt_locallen

Chris Mason <[email protected]>
nfsd: release path refs on follow_down() error

Longlong Xia <[email protected]>
zram: fix out-of-bounds access in read_block_state()

Sergey Senozhatsky <[email protected]>
zram: fixup read_block_state()

Chengfeng Ye <[email protected]>
KEYS: trusted: Fix TPM teardown ordering

Qing Ming <[email protected]>
gtp: serialize PDP context updates

Breno Leitao <[email protected]>
usb: xhci: bail out of setup if the controller is inaccessible

Arnaldo Carvalho de Melo <[email protected]>
perf test bpf: Address error about non-null argument for epoll_pwait 2nd arg

Namhyung Kim <[email protected]>
perf tools: Fix a asan issue in parse_events_multi_pmu_add()

Ilya Titov <[email protected]>
pinctrl: sunxi: keep a shadow copy of the data register output latches

Xiang Mei <[email protected]>
vlan: require the MAC header to be present in __vlan_insert_inner_tag()

Frank Sorenson <[email protected]>
smb: client: fix OOB struct field reads in move_smb2_ea_to_cifs()

Joseph Qi <[email protected]>
smb: client: fix use-after-free of iface in cifs_try_adding_channels()

Daehyeon Ko <[email protected]>
wifi: libipw: reject TKIP frames without a full MIC

Hyunwoo Kim <[email protected]>
exec: Cleanup POSIX timers right after de_thread()

Xiang Mei <[email protected]>
ALSA: usb-audio: Clamp implicit feedback packet count to URB capacity

Takashi Iwai <[email protected]>
ALSA: usb-audio: Optimize the copy of packet sizes for implicit fb handling

Bjoern Doebel <[email protected]>
smb: client: fix heap overflow in DACL owner/group rewrite

Norbert Szetei <[email protected]>
landlock: Fix use-after-free of the source's parent directory

Zhiling Zou <[email protected]>
net: bridge: use option bits for CFM/MRP frame handlers

XingWang Xiang <[email protected]>
genetlink: pin family module during policy dump

Xu Rao <[email protected]>
Bluetooth: btqcomsmd: destroy RPMsg endpoints before freeing hci_dev

Uwe Kleine-König <[email protected]>
Bluetooth: btqcomsmd: Convert to platform remove callback returning void

Chao Yu <[email protected]>
f2fs: embed f2fs_gc_kthread in f2fs_sb_info

Nilesh Javali <[email protected]>

    scsi: qla2xxx: Validate BSG request_len before reading vendor_cmd[]

Nilesh Javali <[email protected]>
scsi: qla2xxx: Fix use-after-free of qpair work on queue teardown

Nilesh Javali <[email protected]>
scsi: qla2xxx: Fix queue teardown NULL dma_free and bitmap locking

Nilesh Javali <[email protected]>
scsi: qla2xxx: Zero dport diagnostics buffer to avoid info leak

Christian Borntraeger <[email protected]>
KVM: s390: Zero initialize data structures for inject_pfault_token

Tristan Madani <[email protected]>
nvme: add missing SRCU grace period in error path

Steven Rostedt <[email protected]>
ftrace: Take trace_array reference before accessing its ftrace_ops

Muhammad Bilal <[email protected]>
staging: rtl8723bs: fix OOB read in rtw_restruct_wmm_ie()

Vivek BalachandharTN <[email protected]>
staging: rtl8723bs: fix spacing around operators

Myeonghun Pak <[email protected]>
usb: storage: realtek_cr: fix use-after-free on disconnect

Fan Wu <[email protected]>
wifi: rtl8xxxu: fix use-after-free from rx_urb_wq on stop

Doruk Tan Ozturk <[email protected]>
ocfs2: validate directory-index entry counts when reading metadata

Joseph Qi <[email protected]>
ocfs2: validate dx_root extent list fields during block read

Dave Airlie <[email protected]>
nouveau/gem: reserve the bo in the info ioctl around the vma lookup

Doruk Tan Ozturk <[email protected]>
HID: sony: fix UAF of ghl_poke_timer / ghl_urb at driver unbind

Frank Sorenson <[email protected]>
smb: client: fix OOB read/write from unvalidated DataOffset in coalesce_t2()

Michael Bommarito <[email protected]>
ceph: bound copied dentry name length in NFS export get_name

Jeff Layton <[email protected]>
nfsd: fix nfsd_file leak on inter-server COPY setup failure

Hyunwoo Kim <[email protected]>
apparmor: fix out-of-bounds write when null terminating a label vec

Arnd Bergmann <[email protected]>
mips: unhide uasm_in_compat_space_p() declaration

Jens Axboe <[email protected]>
io_uring/poll: don't loop on HUP with multiple references

Jens Axboe <[email protected]>
io_uring/timeout: don't lose a cancel as io-wq arms a timeout

Jens Axboe <[email protected]>
io_uring/timeout: don't flush with the sequence behind the last flush

Jens Axboe <[email protected]>
io_uring/timeout: don't put a sequence target behind the last flush

Juanlu Herrero <[email protected]>
io_uring/poll: avoid retry wakeup loss when dropping ownership

Josef Bacik <[email protected]>
io_uring: look up the file before queueing to io-wq

Josef Bacik <[email protected]>
io_uring: don't pass restart error codes to userspace

Josef Bacik <[email protected]>
io_uring/sqpoll: let the thread sleep on disabled rings

Josef Bacik <[email protected]>
io_uring/timeout: don't skip over reached sequences

Josef Bacik <[email protected]>
io_uring/poll: drop stale double poll entry on rearm

Josef Bacik <[email protected]>
io_uring/wait: look at all CQ waiters on wake up

Josef Bacik <[email protected]>
io_uring/cancel: let CANCEL_ALL find parked requests

Josef Bacik <[email protected]>
io_uring/cancel: recognize "no timeout" on 32-bit

Josef Bacik <[email protected]>
io_uring/cancel: don't forget that the work was running

Josef Bacik <[email protected]>
io_uring/poll: don't lose a cancel as io-wq arms poll

Josef Bacik <[email protected]>
io_uring/io-wq: let cancel find picked up hashed work

Josef Bacik <[email protected]>
io_uring/io-wq: don't exit with a creation pending

Josef Bacik <[email protected]>
io_uring/io-wq: don't strand work when a worker exits

Josef Bacik <[email protected]>
io_uring: don't flood a cancelling task with task_work

Josef Bacik <[email protected]>
io_uring/io-wq: don't hide a link from cancellations

Josef Bacik <[email protected]>
io_uring/io-wq: don't lose the signal that ends work

Christian Brauner <[email protected]>
io-wq: order the exit bit against worker creation task work

-------------

Diffstat:

 CREDITS                                            |    5 +
 Documentation/arm64/silicon-errata.rst             |    2 +
 Documentation/filesystems/index.rst                |    1 -
 Documentation/filesystems/ntfs.rst                 |  466 ---
 Documentation/networking/ip-sysctl.rst             |    6 +
 Documentation/networking/strparser.rst             |    2 +-
 Documentation/virt/kvm/api.rst                     |    6 +
 MAINTAINERS                                        |   11 +-
 Makefile                                           |   31 +-
 arch/alpha/include/asm/pgtable.h                   |   33 +-
 arch/alpha/include/asm/tlbflush.h                  |    4 +-
 arch/alpha/lib/Makefile                            |    1 -
 arch/alpha/mm/Makefile                             |    4 +-
 arch/alpha/mm/tlbflush.c                           |   96 +
 arch/arm/mm/flush.c                                |    2 +
 arch/arm64/Kconfig                                 |   30 +
 arch/arm64/include/asm/kvm_host.h                  |    2 -
 arch/arm64/kernel/Makefile                         |    3 +
 arch/arm64/kernel/cpu_errata.c                     |   24 +-
 arch/arm64/kernel/cpufeature.c                     |    2 +-
 arch/arm64/kernel/entry.S                          |   22 +-
 arch/arm64/kernel/ptrace.c                         |   50 +
 arch/arm64/kernel/signal.c                         |   25 +-
 arch/arm64/kernel/topology.c                       |   11 +-
 arch/arm64/kvm/arch_timer.c                        |    3 +-
 arch/arm64/kvm/arm.c                               |   18 +-
 arch/arm64/kvm/mmu.c                               |   25 +-
 arch/arm64/kvm/vgic/vgic-its.c                     |    8 +
 arch/arm64/kvm/vgic/vgic.c                         |    9 +-
 arch/arm64/mm/fault.c                              |   15 +-
 arch/arm64/net/bpf_jit_comp.c                      |    2 +-
 arch/arm64/tools/cpucaps                           |    2 +-
 arch/loongarch/kernel/machine_kexec.c              |    5 +-
 arch/loongarch/kernel/module-sections.c            |   38 +-
 arch/loongarch/kernel/setup.c                      |    1 +
 arch/loongarch/kernel/smp.c                        |  129 +-
 arch/loongarch/mm/hugetlbpage.c                    |    3 +-
 arch/loongarch/net/bpf_jit.c                       |    5 +-
 arch/mips/Kbuild                                   |    6 -
 arch/mips/include/asm/uasm.h                       |    2 -
 arch/mips/kernel/ftrace.c                          |   25 +-
 arch/nios2/include/asm/checksum.h                  |    2 +-
 arch/powerpc/include/asm/book3s/64/pgtable.h       |   16 +
 arch/powerpc/include/asm/xive.h                    |    4 +-
 arch/powerpc/kernel/iommu.c                        |    2 +-
 arch/powerpc/kernel/setup-common.c                 |    1 -
 arch/powerpc/kexec/ranges.c                        |   12 +-
 arch/powerpc/mm/book3s64/pgtable.c                 |   13 +-
 arch/powerpc/platforms/powernv/smp.c               |    8 +-
 arch/powerpc/platforms/pseries/iommu.c             |    3 +-
 arch/powerpc/platforms/pseries/smp.c               |    8 +-
 arch/powerpc/sysdev/xive/common.c                  |   10 +-
 arch/riscv/include/asm/asm-prototypes.h            |    1 -
 arch/riscv/include/asm/asm.h                       |   23 +
 arch/riscv/include/asm/processor.h                 |    1 +
 arch/riscv/include/asm/thread_info.h               |    4 -
 arch/riscv/kernel/asm-offsets.c                    |    6 +
 arch/riscv/kernel/entry.S                          |   79 +-
 arch/riscv/kernel/probes/kprobes_trampoline.S      |    3 +
 arch/riscv/kernel/traps.c                          |   30 +-
 arch/riscv/kvm/vmid.c                              |    2 +-
 arch/s390/appldata/appldata_base.c                 |  117 +-
 arch/s390/appldata/appldata_mem.c                  |    2 +-
 arch/s390/include/asm/appldata.h                   |    2 +-
 arch/s390/include/asm/cpu_mf.h                     |   53 -
 arch/s390/include/asm/dma.h                        |    2 +-
 arch/s390/include/asm/nmi.h                        |    3 +
 arch/s390/kernel/cpcmd.c                           |    2 +-
 arch/s390/kernel/dis.c                             |    2 +-
 arch/s390/kernel/nmi.c                             |    5 +-
 arch/s390/kernel/perf_cpum_sf.c                    |   52 +
 arch/s390/kernel/process.c                         |    2 +-
 arch/s390/kvm/interrupt.c                          |   24 +-
 arch/s390/kvm/kvm-s390.c                           |    7 +-
 arch/s390/kvm/priv.c                               |    3 +-
 arch/s390/lib/spinlock.c                           |    2 +-
 arch/s390/mm/fault.c                               |   15 +-
 arch/s390/mm/maccess.c                             |    2 +-
 arch/s390/pci/pci_sysfs.c                          |    3 +
 arch/sparc/kernel/Makefile                         |    1 -
 arch/sparc/lib/Makefile                            |    1 -
 arch/sparc/mm/Makefile                             |    1 -
 arch/sparc/prom/Makefile                           |    1 -
 arch/um/kernel/skas/syscall.c                      |   34 +-
 arch/x86/events/amd/core.c                         |   12 +-
 arch/x86/events/amd/lbr.c                          |    3 +-
 arch/x86/events/intel/core.c                       |   14 +-
 arch/x86/events/intel/ds.c                         |   48 +-
 arch/x86/events/intel/uncore_snbep.c               |    5 -
 arch/x86/events/perf_event.h                       |   12 +-
 arch/x86/kernel/alternative.c                      |   10 -
 arch/x86/kernel/cpu/amd.c                          |   11 +
 arch/x86/kernel/cpu/mce/severity.c                 |   12 +-
 arch/x86/kernel/cpu/resctrl/rdtgroup.c             |   13 +-
 arch/x86/kernel/ftrace.c                           |    3 +-
 arch/x86/kvm/mmu/mmu.c                             |    4 +-
 arch/x86/kvm/svm/nested.c                          |   34 +-
 arch/x86/kvm/svm/sev.c                             |   33 +-
 arch/x86/kvm/svm/svm.c                             |   24 +-
 arch/x86/kvm/vmx/nested.c                          |    9 +-
 arch/x86/kvm/x86.c                                 |    5 +-
 arch/x86/kvm/x86.h                                 |    5 +-
 arch/x86/net/bpf_jit_comp.c                        |    4 +-
 arch/x86/pci/fixup.c                               |   89 +
 block/bfq-cgroup.c                                 |   15 +-
 block/bfq-iosched.c                                |    8 +-
 block/bfq-iosched.h                                |    2 +-
 block/blk-cgroup.c                                 |   18 +-
 block/blk-cgroup.h                                 |    2 +
 block/blk-core.c                                   |    1 +
 block/blk-iocost.c                                 |   25 +-
 block/blk-iolatency.c                              |   19 +-
 block/blk-mq.c                                     |   28 +-
 block/blk-rq-qos.c                                 |    2 +
 block/blk-rq-qos.h                                 |   18 +-
 block/blk-throttle.c                               |   15 +-
 block/blk-wbt.c                                    |    2 +
 block/ioprio.c                                     |    7 +-
 crypto/Kconfig                                     |    1 +
 crypto/af_alg.c                                    |    2 +
 crypto/algif_skcipher.c                            |    8 +-
 crypto/asymmetric_keys/restrict.c                  |    8 +-
 crypto/drbg.c                                      |   11 +-
 crypto/jitterentropy-kcapi.c                       |  195 +-
 crypto/jitterentropy.c                             |  143 +-
 crypto/jitterentropy.h                             |   10 +-
 drivers/acpi/acpi_tad.c                            |  188 +-
 drivers/acpi/battery.c                             |    8 +-
 drivers/acpi/bus.c                                 |   54 +-
 drivers/acpi/processor_idle.c                      |    4 +-
 drivers/android/binder.c                           |    3 +-
 drivers/ata/libata-core.c                          |    5 +-
 drivers/ata/libata-eh.c                            |    6 +
 drivers/ata/libata-scsi.c                          |   93 +
 drivers/ata/libata.h                               |    2 +
 drivers/ata/sata_dwc_460ex.c                       |    9 +-
 drivers/base/core.c                                |   38 +-
 drivers/block/drbd/drbd_receiver.c                 |    3 +
 drivers/block/loop.c                               |   40 +-
 drivers/block/nbd.c                                |    1 +
 drivers/block/null_blk/main.c                      |   16 +-
 drivers/block/ublk_drv.c                           |    4 +
 drivers/block/zram/zram_drv.c                      |   21 +-
 drivers/bluetooth/btintel.c                        |   15 +-
 drivers/bluetooth/btqcomsmd.c                      |   10 +-
 drivers/bluetooth/btusb.c                          |    4 +
 drivers/bus/mhi/ep/ring.c                          |   12 +-
 drivers/bus/mhi/host/pci_generic.c                 |   20 +-
 drivers/char/hw_random/core.c                      |  153 +-
 drivers/char/hw_random/stm32-rng.c                 |   12 +-
 drivers/clk/sunxi-ng/ccu-sun50i-h616.c             |   64 +-
 drivers/clocksource/samsung_pwm_timer.c            |   22 +-
 drivers/cpufreq/amd-pstate.c                       |    7 +-
 drivers/crypto/hisilicon/qm.c                      |   38 +-
 drivers/crypto/keembay/keembay-ocs-aes-core.c      |    4 +-
 drivers/crypto/qat/qat_common/adf_init.c           |   14 +
 drivers/crypto/stm32/stm32-cryp.c                  |    8 +-
 .../crypto/virtio/virtio_crypto_akcipher_algs.c    |   91 +-
 .../crypto/virtio/virtio_crypto_skcipher_algs.c    |   13 +-
 drivers/cxl/core/hdm.c                             |   48 +-
 drivers/cxl/core/mbox.c                            |   15 +-
 drivers/cxl/core/port.c                            |   23 +-
 drivers/cxl/core/region.c                          |   29 +-
 drivers/cxl/cxl.h                                  |    3 +-
 drivers/dma-buf/dma-buf.c                          |   15 +
 drivers/dma-buf/dma-heap.c                         |   80 +-
 drivers/dma-buf/udmabuf.c                          |   11 +-
 drivers/dma/dmaengine.c                            |   30 +
 drivers/dma/dw-edma/dw-edma-core.c                 |   90 +-
 drivers/dma/dw-edma/dw-edma-pcie.c                 |    3 +
 drivers/dma/dw-edma/dw-edma-v0-core.c              |   17 +
 drivers/dma/idxd/init.c                            |   36 +-
 drivers/dma/ti/k3-udma-glue.c                      |   15 +-
 drivers/dma/xilinx/xilinx_dma.c                    |   14 +-
 drivers/edac/amd64_edac.c                          |    2 +-
 drivers/edac/igen6_edac.c                          |    6 +
 drivers/firewire/core-topology.c                   |   40 +-
 drivers/firmware/arm_ffa/driver.c                  |    4 +-
 drivers/firmware/arm_scmi/bus.c                    |  428 ++-
 drivers/firmware/arm_scmi/common.h                 |   66 +-
 drivers/firmware/arm_scmi/driver.c                 |  699 ++---
 drivers/firmware/arm_scmi/mailbox.c                |   32 +-
 drivers/firmware/arm_scmi/optee.c                  |    6 +-
 drivers/firmware/arm_scmi/smc.c                    |   18 +-
 drivers/firmware/arm_scmi/virtio.c                 |    4 +-
 drivers/firmware/efi/mokvar-table.c                |   42 +-
 drivers/gpio/gpio-exar.c                           |    2 +-
 drivers/gpio/gpio-mvebu.c                          |    6 +-
 drivers/gpio/gpio-mxc.c                            |  161 +-
 drivers/gpio/gpio-pca953x.c                        |   18 +-
 drivers/gpio/gpio-xilinx.c                         |    9 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu.h                |    1 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c            |   13 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c         |   27 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h         |    2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c   |    3 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c       |   30 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h       |    1 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c           |   79 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c             |   42 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c            |   75 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h            |    1 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c        |  108 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c         |   55 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c      |    2 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c        |    2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c            |    2 -
 drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c          |   14 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c            |   17 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c            |   54 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h            |    1 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_job.c            |   18 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c            |   46 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h            |    2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c            |   33 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_umc.c            |    1 +
 drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c            |  137 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c            |   39 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c             |  150 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h             |   21 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.c          |    2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c       |   20 +-
 drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c              |    9 +
 drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c             |   25 +-
 drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c             |   24 +-
 drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c              |   20 +-
 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c              |   24 +-
 drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c             |    1 +
 drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c             |    2 +
 drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c             |    1 +
 drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c             |    1 +
 drivers/gpu/drm/amd/amdgpu/psp_v11_0.c             |    8 +-
 drivers/gpu/drm/amd/amdgpu/psp_v12_0.c             |    8 +-
 drivers/gpu/drm/amd/amdgpu/psp_v13_0.c             |   14 +-
 drivers/gpu/drm/amd/amdgpu/psp_v13_0_4.c           |   14 +-
 drivers/gpu/drm/amd/amdgpu/psp_v3_1.c              |    8 +-
 drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c             |   25 +-
 drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c             |   23 +-
 drivers/gpu/drm/amd/amdgpu/vce_v3_0.c              |    2 +-
 drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c              |    2 +
 drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c              |    4 +
 drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c              |    3 +
 drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c              |   58 +-
 drivers/gpu/drm/amd/amdgpu/vi.c                    |   21 +
 drivers/gpu/drm/amd/amdkfd/kfd_chardev.c           |   13 +-
 drivers/gpu/drm/amd/amdkfd/kfd_crat.c              |   17 +
 drivers/gpu/drm/amd/amdkfd/kfd_device.c            |    5 +
 .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.c  |   14 +
 .../gpu/drm/amd/amdkfd/kfd_device_queue_manager.h  |    2 +
 drivers/gpu/drm/amd/amdkfd/kfd_migrate.c           |   56 +-
 drivers/gpu/drm/amd/amdkfd/kfd_priv.h              |    4 +-
 .../gpu/drm/amd/amdkfd/kfd_process_queue_manager.c |   24 +-
 drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c        |   19 +-
 drivers/gpu/drm/amd/amdkfd/kfd_topology.c          |   11 +
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c  |   43 +-
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h  |    2 +-
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c |    8 +-
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.c |   10 +-
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_hdcp.h |    8 +-
 .../drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c    |   15 +-
 .../amd/display/dc/clk_mgr/dce110/dce110_clk_mgr.c |    2 +-
 drivers/gpu/drm/amd/display/dc/core/dc.c           |   19 +-
 drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c   |   14 +-
 drivers/gpu/drm/amd/display/dc/core/dc_link_dpcd.c |    3 +-
 drivers/gpu/drm/amd/display/dc/core/dc_resource.c  |    2 +-
 drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c       |   40 +-
 drivers/gpu/drm/amd/display/dc/dc_dmub_srv.h       |    3 +
 drivers/gpu/drm/amd/display/dc/dc_link.h           |    3 +
 drivers/gpu/drm/amd/display/dc/dc_types.h          |    2 +-
 drivers/gpu/drm/amd/display/dc/dce/Makefile        |    2 +-
 drivers/gpu/drm/amd/display/dc/dce/dmub_abm.c      |  282 +-
 drivers/gpu/drm/amd/display/dc/dce/dmub_abm_lcd.c  |  286 ++
 drivers/gpu/drm/amd/display/dc/dce/dmub_abm_lcd.h  |   46 +
 .../amd/display/dc/dce110/dce110_hw_sequencer.c    |    5 +-
 .../drm/amd/display/dc/dce112/dce112_resource.c    |    5 +-
 .../gpu/drm/amd/display/dc/dce60/dce60_resource.c  |    1 -
 .../drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c  |    4 +-
 .../gpu/drm/amd/display/dc/dcn20/dcn20_hubbub.c    |    3 +-
 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hubp.c  |    3 +-
 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c |   17 +-
 .../gpu/drm/amd/display/dc/dcn20/dcn20_resource.c  |   12 +-
 .../drm/amd/display/dc/dcn201/dcn201_resource.c    |    4 +-
 drivers/gpu/drm/amd/display/dc/dcn21/dcn21_hwseq.c |   24 +-
 .../gpu/drm/amd/display/dc/dcn21/dcn21_resource.c  |    3 +-
 drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hwseq.c |    4 +-
 .../gpu/drm/amd/display/dc/dcn314/dcn314_optc.c    |    7 +
 drivers/gpu/drm/amd/display/dc/dcn32/dcn32_optc.c  |    7 +
 .../gpu/drm/amd/display/dc/dcn32/dcn32_resource.c  |    7 +-
 .../drm/amd/display/dc/dcn321/dcn321_resource.c    |    2 +-
 .../gpu/drm/amd/display/dc/dml/dcn302/dcn302_fpu.c |   10 +
 .../gpu/drm/amd/display/dc/dml/dcn303/dcn303_fpu.c |   10 +
 .../gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c   |   10 +
 .../gpu/drm/amd/display/dc/dml/dcn321/dcn321_fpu.c |   10 +
 drivers/gpu/drm/amd/display/dc/inc/hw/abm.h        |    4 +
 .../gpu/drm/amd/display/dc/link/link_hwss_dio.c    |    5 +-
 .../gpu/drm/amd/display/dc/link/link_hwss_hpo_dp.c |    3 +-
 drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h    |   18 +
 drivers/gpu/drm/amd/pm/amdgpu_pm.c                 |    2 +
 drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c         |   39 +-
 .../gpu/drm/amd/pm/powerplay/hwmgr/ppatomctrl.c    |   10 +-
 .../gpu/drm/amd/pm/powerplay/hwmgr/ppatomfwctrl.c  |   11 +-
 .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c   |    7 +-
 drivers/gpu/drm/aspeed/aspeed_gfx_drv.c            |    5 +-
 drivers/gpu/drm/bridge/adv7511/adv7511_drv.c       |   22 +-
 drivers/gpu/drm/display/drm_dp_helper.c            |    4 +-
 drivers/gpu/drm/drm_fb_helper.c                    |    8 +-
 drivers/gpu/drm/etnaviv/etnaviv_sched.c            |   13 +-
 drivers/gpu/drm/gud/gud_pipe.c                     |    1 +
 drivers/gpu/drm/i915/display/icl_dsi.c             |    4 +-
 drivers/gpu/drm/i915/display/intel_bios.c          |   36 +-
 drivers/gpu/drm/i915/display/intel_dmc.c           |   21 +-
 drivers/gpu/drm/i915/display/intel_dp.c            |    8 +-
 drivers/gpu/drm/i915/display/intel_hdcp.c          |   14 +-
 drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c     |    2 +-
 .../gpu/drm/i915/gt/intel_execlists_submission.c   |   34 +-
 drivers/gpu/drm/i915/gt/intel_rps.c                |    3 +-
 drivers/gpu/drm/lima/lima_sched.c                  |   13 +-
 drivers/gpu/drm/mediatek/mtk_drm_crtc.c            |    3 +-
 drivers/gpu/drm/msm/adreno/adreno_gpu.c            |    2 +
 drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys.h   |    4 +-
 .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c   |   33 +-
 .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c   |   35 +-
 .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_wb.c    |   11 +-
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c  |    4 +-
 drivers/gpu/drm/msm/msm_gem_submit.c               |    3 +-
 drivers/gpu/drm/msm/msm_gpu.c                      |   31 +-
 drivers/gpu/drm/msm/msm_ringbuffer.c               |   22 +-
 drivers/gpu/drm/msm/msm_ringbuffer.h               |    1 +
 drivers/gpu/drm/nouveau/include/nvkm/core/client.h |    1 +
 drivers/gpu/drm/nouveau/nouveau_chan.c             |    9 +-
 drivers/gpu/drm/nouveau/nouveau_gem.c              |   11 +-
 drivers/gpu/drm/nouveau/nvkm/core/client.c         |    1 +
 drivers/gpu/drm/nouveau/nvkm/core/object.c         |   26 +-
 drivers/gpu/drm/panfrost/panfrost_job.c            |   16 +-
 drivers/gpu/drm/panfrost/panfrost_mmu.c            |   13 +-
 drivers/gpu/drm/radeon/radeon_bios.c               |    6 +-
 drivers/gpu/drm/radeon/radeon_fb.c                 |    9 +-
 drivers/gpu/drm/radeon/radeon_gem.c                |    4 +
 drivers/gpu/drm/rockchip/rockchip_drm_vop2.c       |    4 +
 drivers/gpu/drm/scheduler/sched_main.c             |   33 +-
 drivers/gpu/drm/tegra/gr2d.c                       |    8 +-
 drivers/gpu/drm/tegra/gr3d.c                       |    8 +-
 drivers/gpu/drm/tiny/simpledrm.c                   |   10 +-
 drivers/gpu/drm/v3d/v3d_sched.c                    |  106 +-
 drivers/gpu/drm/vc4/vc4_bo.c                       |   13 +-
 drivers/gpu/drm/vc4/vc4_drv.c                      |    5 +-
 drivers/gpu/drm/vc4/vc4_hvs.c                      |    2 +-
 drivers/gpu/drm/vc4/vc4_v3d.c                      |   10 +-
 drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c            |    6 +-
 drivers/gpu/drm/vmwgfx/vmwgfx_kms.c                |   22 +-
 drivers/gpu/drm/xlnx/zynqmp_dpsub.c                |    2 +-
 drivers/hid/hid-alps.c                             |   21 +-
 drivers/hid/hid-core.c                             |   38 +-
 drivers/hid/hid-logitech-hidpp.c                   |   27 +-
 drivers/hid/hid-mcp2221.c                          |   17 +-
 drivers/hid/hid-nintendo.c                         |   46 +-
 drivers/hid/hid-sony.c                             |   36 +-
 drivers/hid/hid-steam.c                            |  243 +-
 drivers/hid/i2c-hid/i2c-hid-core.c                 |    7 +-
 drivers/hid/intel-ish-hid/ishtp/bus.c              |    2 +
 drivers/hid/intel-ish-hid/ishtp/client.c           |    4 +-
 drivers/hid/uhid.c                                 |    8 +-
 drivers/hid/usbhid/hid-core.c                      |   11 +-
 drivers/hv/channel_mgmt.c                          |   12 +-
 drivers/hv/connection.c                            |    1 -
 drivers/hv/vmbus_drv.c                             |   16 +-
 drivers/hwmon/drivetemp.c                          |   10 +-
 drivers/hwmon/lm90.c                               |   26 +-
 drivers/hwmon/pmbus/pmbus_core.c                   |   60 +-
 drivers/hwmon/pwm-fan.c                            |   13 +-
 drivers/hwmon/sht3x.c                              |    9 +-
 .../hwtracing/coresight/coresight-etm3x-sysfs.c    |   15 +-
 drivers/hwtracing/coresight/coresight-etm4x-core.c |   83 +-
 drivers/hwtracing/coresight/coresight-platform.c   |   48 +-
 drivers/hwtracing/coresight/coresight-syscfg.c     |    2 +
 drivers/i2c/busses/i2c-at91-master.c               |    8 +-
 drivers/i2c/busses/i2c-mxs.c                       |    5 +-
 drivers/i2c/busses/i2c-qcom-cci.c                  |    4 +-
 drivers/i2c/busses/i2c-wmt.c                       |    2 +-
 drivers/i2c/i2c-core-base.c                        |   14 +
 drivers/i3c/master.c                               |   58 +-
 drivers/i3c/master/mipi-i3c-hci/core.c             |    2 +
 drivers/i3c/master/mipi-i3c-hci/dma.c              |   27 +-
 drivers/i3c/master/mipi-i3c-hci/hci.h              |    1 +
 drivers/iio/accel/kxcjk-1013.c                     |    2 +-
 drivers/iio/accel/sca3000.c                        |    2 +-
 drivers/iio/accel/st_accel_core.c                  |   10 +-
 drivers/iio/adc/ad_sigma_delta.c                   |   26 +-
 drivers/iio/adc/aspeed_adc.c                       |   13 +-
 drivers/iio/adc/axp288_adc.c                       |    8 +
 drivers/iio/adc/max1363.c                          |    8 +
 drivers/iio/adc/stm32-adc.c                        |   13 +-
 drivers/iio/adc/sun4i-gpadc-iio.c                  |   10 +-
 drivers/iio/adc/xilinx-xadc-core.c                 |    9 +-
 drivers/iio/cdc/ad7150.c                           |    8 +-
 drivers/iio/common/st_sensors/st_sensors_core.c    |   72 +-
 drivers/iio/common/st_sensors/st_sensors_trigger.c |   20 +-
 drivers/iio/frequency/admv1013.c                   |    2 +-
 drivers/iio/gyro/adis16136.c                       |    2 +-
 drivers/iio/imu/adis16400.c                        |    2 +-
 drivers/iio/imu/adis16480.c                        |    4 +-
 drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c       |   18 +-
 drivers/iio/imu/st_lsm9ds0/st_lsm9ds0_core.c       |   65 +-
 drivers/iio/industrialio-buffer.c                  |    5 +-
 drivers/iio/industrialio-trigger.c                 |    2 +
 drivers/iio/light/gp2ap020a00f.c                   |    2 +
 drivers/iio/light/ltrf216a.c                       |   13 +-
 drivers/iio/pressure/bmp280-core.c                 |    2 +-
 drivers/iio/pressure/dps310.c                      |    2 +-
 drivers/iio/proximity/isl29501.c                   |    2 +-
 drivers/iio/proximity/pulsedlight-lidar-lite-v2.c  |    4 +-
 drivers/iio/proximity/sx9324.c                     |    2 +-
 drivers/iio/proximity/vcnl3020.c                   |   24 +-
 drivers/infiniband/core/counters.c                 |    9 +-
 drivers/infiniband/hw/bnxt_re/ib_verbs.c           |    2 +
 drivers/infiniband/hw/cxgb4/mem.c                  |   46 +-
 drivers/infiniband/hw/erdma/erdma_cm.c             |    6 +-
 drivers/infiniband/hw/erdma/erdma_eq.c             |    3 +-
 drivers/infiniband/hw/erdma/erdma_verbs.c          |   23 +-
 drivers/infiniband/hw/erdma/erdma_verbs.h          |   15 +
 drivers/infiniband/hw/hns/hns_roce_cq.c            |    6 +-
 drivers/infiniband/hw/hns/hns_roce_device.h        |    1 +
 drivers/infiniband/hw/hns/hns_roce_hw_v2.c         |  130 +-
 drivers/infiniband/hw/hns/hns_roce_main.c          |    5 +-
 drivers/infiniband/hw/hns/hns_roce_mr.c            |    6 +-
 drivers/infiniband/hw/hns/hns_roce_srq.c           |    2 +-
 drivers/infiniband/hw/irdma/hw.c                   |    7 +-
 drivers/infiniband/hw/irdma/main.h                 |    3 +-
 drivers/infiniband/hw/irdma/utils.c                |   12 +-
 drivers/infiniband/hw/irdma/verbs.c                |   21 +-
 drivers/infiniband/hw/mlx5/cq.c                    |   11 +-
 drivers/infiniband/hw/mlx5/main.c                  |   55 +-
 drivers/infiniband/hw/mlx5/mlx5_ib.h               |   35 +-
 drivers/infiniband/hw/mlx5/mr.c                    |  385 ++-
 drivers/infiniband/hw/mlx5/odp.c                   |   59 +-
 drivers/infiniband/hw/mlx5/umr.c                   |   87 +-
 drivers/infiniband/sw/rdmavt/vt.c                  |    4 +-
 drivers/infiniband/sw/rxe/rxe_qp.c                 |    9 +
 drivers/infiniband/sw/rxe/rxe_srq.c                |    7 +-
 drivers/infiniband/sw/siw/siw_cm.c                 |   48 +-
 drivers/infiniband/sw/siw/siw_qp_tx.c              |    2 +
 drivers/input/keyboard/atkbd.c                     |    8 +
 drivers/input/keyboard/lkkbd.c                     |    2 +
 drivers/input/mouse/alps.c                         |    2 +
 drivers/input/mouse/synaptics.c                    |    7 +-
 drivers/input/serio/i8042-acpipnpio.h              |    9 +
 drivers/input/touchscreen/s6sy761.c                |   14 +-
 drivers/interconnect/core.c                        |   16 +-
 drivers/iommu/amd/iommu.c                          |   43 +-
 drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c        |   46 +-
 drivers/iommu/intel/dmar.c                         |   22 +-
 drivers/iommu/intel/iommu.c                        |   28 +-
 drivers/iommu/intel/iommu.h                        |    6 +-
 drivers/iommu/intel/pasid.c                        |   22 +-
 drivers/iommu/msm_iommu.c                          |    9 +-
 drivers/leds/leds-an30259a.c                       |   14 +-
 drivers/mailbox/arm_mhu.c                          |    1 +
 drivers/mailbox/arm_mhu_db.c                       |    1 -
 drivers/mailbox/hi3660-mailbox.c                   |    1 +
 drivers/mailbox/hi6220-mailbox.c                   |    1 +
 drivers/mailbox/imx-mailbox.c                      |    3 +-
 drivers/mailbox/mailbox-mpfs.c                     |    1 +
 drivers/mailbox/mailbox.c                          |    1 +
 drivers/mailbox/mtk-adsp-mailbox.c                 |    3 +-
 drivers/mailbox/mtk-cmdq-mailbox.c                 |    2 +-
 drivers/mailbox/omap-mailbox.c                     |    2 +-
 drivers/mailbox/platform_mhu.c                     |    1 +
 drivers/mailbox/rockchip-mailbox.c                 |    2 +-
 drivers/mailbox/sprd-mailbox.c                     |    2 +-
 drivers/mailbox/stm32-ipcc.c                       |    1 +
 drivers/mailbox/tegra-hsp.c                        |    1 -
 drivers/mailbox/zynqmp-ipi-mailbox.c               |  137 +-
 drivers/md/dm-bio-prison-v1.c                      |    6 +-
 drivers/md/dm-bufio.c                              |   30 +-
 drivers/md/dm-cache-metadata.c                     |    7 +-
 drivers/md/dm-cache-target.c                       |  129 +-
 drivers/md/dm-crypt.c                              |   17 +-
 drivers/md/dm-ebs-target.c                         |    5 +-
 drivers/md/dm-era-target.c                         |   58 +-
 drivers/md/dm-exception-store.h                    |   44 +-
 drivers/md/dm-integrity.c                          |    5 +-
 drivers/md/dm-io.c                                 |   24 +-
 drivers/md/dm-ioctl.c                              |   99 +-
 drivers/md/dm-kcopyd.c                             |   20 +-
 drivers/md/dm-log.c                                |   24 +-
 drivers/md/dm-mpath.c                              |   33 +-
 drivers/md/dm-path-selector.h                      |   27 +-
 drivers/md/dm-ps-queue-length.c                    |    4 +-
 drivers/md/dm-ps-round-robin.c                     |   13 +-
 drivers/md/dm-ps-service-time.c                    |    8 +-
 drivers/md/dm-raid.c                               |   12 +-
 drivers/md/dm-raid1.c                              |   46 +-
 drivers/md/dm-region-hash.c                        |    6 +-
 drivers/md/dm-snap-persistent.c                    |    8 +-
 drivers/md/dm-snap-transient.c                     |    8 +-
 drivers/md/dm-snap.c                               |   27 +-
 drivers/md/dm-table.c                              |    2 +-
 drivers/md/dm-thin-metadata.c                      |   20 +-
 drivers/md/dm-thin.c                               |   24 +-
 drivers/md/dm-uevent.c                             |    2 +-
 drivers/md/dm-verity-fec.c                         |    4 +-
 drivers/md/dm.c                                    |   12 +-
 drivers/md/dm.h                                    |   12 +-
 drivers/md/md-cluster.c                            |   11 +-
 drivers/md/md.c                                    |    3 +-
 drivers/md/persistent-data/dm-array.c              |   37 +-
 drivers/md/persistent-data/dm-block-manager.c      |    6 +-
 drivers/md/persistent-data/dm-btree.c              |    6 +-
 drivers/md/raid1.c                                 |   12 +-
 drivers/md/raid10.c                                |   72 +-
 drivers/md/raid5.c                                 |   12 +-
 drivers/media/common/videobuf2/videobuf2-dma-sg.c  |    1 +
 drivers/media/pci/ivtv/ivtvfb.c                    |    4 +-
 .../media/platform/mediatek/mdp3/mtk-mdp3-core.c   |    5 +
 .../mediatek/vcodec/vdec/vdec_h264_req_if.c        |    9 +-
 .../platform/mediatek/vcodec/venc/venc_h264_if.c   |    5 +-
 drivers/media/platform/verisilicon/hantro.h        |    2 +
 drivers/media/platform/verisilicon/hantro_drv.c    |   89 +-
 drivers/media/platform/verisilicon/imx8m_vpu_hw.c  |    8 +
 drivers/media/test-drivers/vivid/vivid-core.c      |    4 +-
 drivers/media/v4l2-core/v4l2-mem2mem.c             |   23 +
 drivers/memstick/core/memstick.c                   |    8 +-
 drivers/memstick/host/rtsx_usb_ms.c                |   31 +-
 drivers/mfd/sm501.c                                |   18 +-
 drivers/misc/habanalabs/common/habanalabs.h        |    5 -
 drivers/misc/habanalabs/common/memory.c            |  236 +-
 drivers/misc/habanalabs/gaudi/gaudi.c              |   19 +
 drivers/misc/habanalabs/gaudi2/gaudi2.c            |    7 +
 drivers/misc/sgi-gru/grufault.c                    |  101 +-
 drivers/misc/sgi-gru/gruprocfs.c                   |    1 -
 drivers/misc/sgi-gru/grutables.h                   |    1 -
 drivers/mmc/host/cavium-octeon.c                   |    5 +-
 drivers/mmc/host/cavium-thunderx.c                 |    5 +-
 drivers/mmc/host/mtk-sd.c                          |    1 +
 drivers/mmc/host/sdhci-sprd.c                      |    4 +
 drivers/mmc/host/via-sdmmc.c                       |    4 +
 drivers/mtd/devices/block2mtd.c                    |    2 +-
 drivers/mtd/maps/vmu-flash.c                       |   12 +-
 drivers/mtd/mtdcore.c                              |  124 +-
 drivers/mtd/mtdcore.h                              |    1 +
 drivers/mtd/mtdpart.c                              |   14 +-
 drivers/mtd/nand/raw/cadence-nand-controller.c     |    6 +-
 drivers/mtd/nand/raw/vf610_nfc.c                   |   85 +-
 drivers/mtd/nand/spi/core.c                        |   37 +-
 drivers/net/amt.c                                  |   51 +-
 drivers/net/bonding/bond_main.c                    |   70 +-
 drivers/net/can/dev/skb.c                          |    2 +
 drivers/net/can/usb/gs_usb.c                       |  159 +-
 drivers/net/dsa/b53/b53_common.c                   |    8 +-
 drivers/net/dsa/microchip/ksz_common.h             |    2 +-
 drivers/net/ethernet/amazon/ena/ena_com.c          |   25 +-
 drivers/net/ethernet/amazon/ena/ena_com.h          |   14 -
 drivers/net/ethernet/amazon/ena/ena_eth_com.c      |   37 +-
 drivers/net/ethernet/amazon/ena/ena_netdev.c       |    3 +
 drivers/net/ethernet/amazon/ena/ena_regs_defs.h    |    1 +
 drivers/net/ethernet/broadcom/bcmsysport.c         |    4 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt.c          |   70 +-
 drivers/net/ethernet/broadcom/bnxt/bnxt.h          |    1 +
 drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c      |    2 +-
 drivers/net/ethernet/broadcom/genet/bcmgenet.c     |   15 +-
 drivers/net/ethernet/brocade/bna/bnad.c            |   16 +-
 drivers/net/ethernet/cavium/liquidio/lio_main.c    |   27 -
 .../net/ethernet/cavium/liquidio/octeon_device.h   |    3 -
 .../net/ethernet/cavium/liquidio/octeon_mailbox.c  |   33 +-
 .../chelsio/inline_crypto/ch_ktls/chcr_ktls.c      |    4 +-
 drivers/net/ethernet/freescale/enetc/enetc.c       |    3 +
 .../net/ethernet/freescale/enetc/enetc_ethtool.c   |   10 +-
 drivers/net/ethernet/ibm/ibmveth.c                 |   79 +-
 drivers/net/ethernet/ibm/ibmveth.h                 |    1 -
 drivers/net/ethernet/intel/iavf/iavf_ethtool.c     |   31 +-
 drivers/net/ethernet/intel/ice/ice.h               |    2 +
 drivers/net/ethernet/intel/ice/ice_eswitch.c       |    2 +-
 drivers/net/ethernet/intel/ice/ice_lib.c           |   18 +-
 drivers/net/ethernet/intel/ice/ice_main.c          |   66 +-
 drivers/net/ethernet/intel/ice/ice_ptp.c           |   70 +-
 drivers/net/ethernet/intel/ice/ice_ptp.h           |    8 +
 drivers/net/ethernet/intel/ice/ice_txrx.c          |    6 +-
 drivers/net/ethernet/intel/ice/ice_xsk.c           |    3 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c      |    3 +-
 drivers/net/ethernet/marvell/octeontx2/af/cgx.c    |   12 +
 drivers/net/ethernet/marvell/octeontx2/af/cgx.h    |    1 +
 drivers/net/ethernet/marvell/octeontx2/af/mcs.c    |    4 +-
 drivers/net/ethernet/marvell/octeontx2/af/rvu.h    |    2 +
 .../net/ethernet/marvell/octeontx2/af/rvu_cgx.c    |   79 +
 .../net/ethernet/marvell/octeontx2/af/rvu_nix.c    |   22 +-
 .../net/ethernet/marvell/octeontx2/af/rvu_npc.c    |   69 +-
 .../net/ethernet/marvell/octeontx2/nic/otx2_vf.c   |   20 +-
 drivers/net/ethernet/mediatek/mtk_eth_soc.c        |    2 +-
 drivers/net/ethernet/mellanox/mlx4/srq.c           |   14 +-
 drivers/net/ethernet/mellanox/mlx5/core/cq.c       |   23 +-
 drivers/net/ethernet/mellanox/mlx5/core/en.h       |   12 +
 .../ethernet/mellanox/mlx5/core/en/hv_vhca_stats.c |   10 +-
 .../net/ethernet/mellanox/mlx5/core/en/tc_priv.h   |    1 +
 drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c   |    6 +-
 .../mellanox/mlx5/core/en_accel/ipsec_rxtx.c       |   16 +-
 drivers/net/ethernet/mellanox/mlx5/core/en_main.c  |   38 +-
 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c    |    6 +-
 drivers/net/ethernet/mellanox/mlx5/core/en_stats.c |    9 +-
 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c    |    4 +-
 drivers/net/ethernet/mellanox/mlx5/core/eswitch.c  |   13 +-
 drivers/net/ethernet/mellanox/mlx5/core/eswitch.h  |    4 +-
 .../ethernet/mellanox/mlx5/core/eswitch_offloads.c |   30 +-
 .../net/ethernet/mellanox/mlx5/core/fpga/conn.c    |   17 +-
 .../net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c  |    3 +-
 drivers/net/ethernet/mellanox/mlx5/core/lag/lag.c  |   12 +-
 .../net/ethernet/mellanox/mlx5/core/mlx5_core.h    |    3 +-
 drivers/net/ethernet/mellanox/mlx5/core/pci_irq.c  |    3 +-
 drivers/net/ethernet/mellanox/mlx5/core/port.c     |    4 +-
 .../ethernet/mellanox/mlx5/core/steering/dr_send.c |   28 +-
 drivers/net/ethernet/mellanox/mlx5/core/vport.c    |   78 +-
 .../ethernet/microchip/lan966x/lan966x_ethtool.c   |   18 +-
 .../net/ethernet/microchip/lan966x/lan966x_main.c  |    2 -
 .../net/ethernet/microchip/lan966x/lan966x_main.h  |    4 +-
 .../net/ethernet/microchip/sparx5/sparx5_main.c    |    1 +
 .../net/ethernet/microchip/sparx5/sparx5_main.h    |    1 +
 .../net/ethernet/microchip/sparx5/sparx5_netdev.c  |    1 +
 drivers/net/ethernet/microsoft/mana/mana_en.c      |   13 +-
 drivers/net/ethernet/mscc/ocelot_stats.c           |    2 +-
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c   |  467 +--
 drivers/net/ethernet/renesas/ravb_main.c           |    8 +-
 drivers/net/ethernet/renesas/ravb_ptp.c            |   37 +-
 drivers/net/ethernet/sfc/ef100_netdev.c            |    6 +-
 drivers/net/ethernet/sfc/ef100_nic.c               |   47 +-
 drivers/net/ethernet/stmicro/stmmac/common.h       |   56 +-
 drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c  |   15 +-
 drivers/net/ethernet/stmicro/stmmac/dwmac4_lib.c   |   15 +-
 drivers/net/ethernet/stmicro/stmmac/dwmac_lib.c    |   15 +-
 drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c |   15 +-
 drivers/net/ethernet/stmicro/stmmac/stmmac.h       |    2 +
 .../net/ethernet/stmicro/stmmac/stmmac_ethtool.c   |  125 +-
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c  |  191 +-
 drivers/net/ethernet/stmicro/stmmac/stmmac_ptp.c   |    8 +-
 drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c    |   18 +-
 drivers/net/ethernet/ti/am65-cpsw-nuss.c           |    4 +-
 drivers/net/gtp.c                                  |   18 +-
 drivers/net/hyperv/netvsc.c                        |   20 +-
 drivers/net/ieee802154/mac802154_hwsim.c           |    9 +-
 drivers/net/phy/phy_device.c                       |   19 +-
 drivers/net/tap.c                                  |   55 +-
 drivers/net/team/team.c                            |  161 +-
 drivers/net/team/team_mode_loadbalance.c           |    4 +-
 drivers/net/thunderbolt.c                          |   12 +
 drivers/net/usb/ax88179_178a.c                     |    6 +-
 drivers/net/usb/qmi_wwan.c                         |    1 +
 drivers/net/vxlan/vxlan_core.c                     |   44 +-
 drivers/net/vxlan/vxlan_private.h                  |    4 +-
 drivers/net/wireguard/noise.c                      |    7 +-
 drivers/net/wireguard/queueing.h                   |    2 +
 drivers/net/wireless/ath/ath11k/dp_rx.c            |   10 +-
 drivers/net/wireless/ath/ath11k/mac.c              |    1 +
 drivers/net/wireless/ath/ath11k/mhi.c              |    6 +-
 drivers/net/wireless/ath/ath11k/pci.c              |    7 +
 drivers/net/wireless/ath/ath11k/wmi.c              |   29 +-
 drivers/net/wireless/ath/wcn36xx/dxe.c             |    2 +-
 .../wireless/broadcom/brcm80211/brcmfmac/core.c    |   27 +-
 .../net/wireless/broadcom/brcm80211/brcmfmac/p2p.c |    4 +
 drivers/net/wireless/intel/iwlegacy/3945-mac.c     |    1 +
 drivers/net/wireless/intel/iwlwifi/dvm/main.c      |    4 +-
 drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c   |   28 +-
 drivers/net/wireless/intel/iwlwifi/iwl-trans.h     |    3 +
 drivers/net/wireless/intel/iwlwifi/mvm/d3.c        |   18 +-
 drivers/net/wireless/intel/iwlwifi/mvm/tx.c        |   47 +-
 drivers/net/wireless/intel/iwlwifi/pcie/rx.c       |    9 +-
 drivers/net/wireless/intersil/p54/fwio.c           |   42 +-
 drivers/net/wireless/marvell/libertas/tx.c         |    7 -
 .../net/wireless/mediatek/mt76/mt76_connac_mcu.c   |    4 +-
 .../net/wireless/mediatek/mt76/mt7915/debugfs.c    |    5 +
 drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c |   33 +-
 drivers/net/wireless/mediatek/mt76/mt7915/eeprom.h |    1 +
 drivers/net/wireless/mediatek/mt76/mt7915/init.c   |    9 +-
 drivers/net/wireless/mediatek/mt76/mt7915/main.c   |   17 +-
 drivers/net/wireless/mediatek/mt76/mt7915/mcu.c    |   15 +-
 drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h |    3 +-
 drivers/net/wireless/mediatek/mt76/mt7921/main.c   |    8 +-
 drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h |    2 +
 drivers/net/wireless/mediatek/mt76/tx.c            |    1 -
 drivers/net/wireless/microchip/wilc1000/wlan_cfg.c |   37 +-
 drivers/net/wireless/microchip/wilc1000/wlan_cfg.h |    5 +-
 .../net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c  |   19 +-
 drivers/net/wireless/realtek/rtw88/debug.c         |  303 +-
 drivers/net/wireless/realtek/rtw88/debug.h         |    2 +
 drivers/net/wireless/realtek/rtw88/main.c          |   20 +-
 drivers/net/wireless/realtek/rtw88/main.h          |    3 +-
 drivers/net/wireless/realtek/rtw89/core.c          |    8 +-
 drivers/net/wireless/realtek/rtw89/mac80211.c      |   11 +-
 drivers/net/wireless/realtek/rtw89/pci.c           |    7 +-
 drivers/net/wireless/silabs/wfx/hif_tx.c           |    4 +-
 drivers/net/wireless/st/cw1200/bh.c                |    8 +-
 drivers/net/wireless/st/cw1200/txrx.c              |   14 +
 drivers/net/wireless/ti/wl12xx/main.c              |    6 +-
 drivers/net/wireless/ti/wl18xx/main.c              |    2 +-
 drivers/net/wireless/ti/wlcore/main.c              |   10 +-
 drivers/net/wireless/ti/wlcore/wlcore.h            |    2 +-
 drivers/net/xen-netfront.c                         |   16 +-
 drivers/ntb/ntb_transport.c                        |   18 +-
 drivers/nvdimm/nd_virtio.c                         |   32 +-
 drivers/nvdimm/virtio_pmem.h                       |    2 +
 drivers/nvme/host/apple.c                          |   38 +-
 drivers/nvme/host/core.c                           |    3 +
 drivers/nvme/host/fabrics.c                        |    8 +-
 drivers/nvme/host/fc.c                             |    7 +-
 drivers/nvme/host/multipath.c                      |    5 +-
 drivers/nvme/host/pci.c                            |   18 +-
 drivers/nvme/host/rdma.c                           |    8 +-
 drivers/nvme/host/tcp.c                            |   33 +-
 drivers/nvme/target/admin-cmd.c                    |   31 +-
 drivers/nvme/target/auth.c                         |   20 +-
 drivers/nvme/target/configfs.c                     |    9 +-
 drivers/nvme/target/core.c                         |   94 +-
 drivers/nvme/target/discovery.c                    |   37 +-
 drivers/nvme/target/fabrics-cmd-auth.c             |  100 +-
 drivers/nvme/target/fabrics-cmd.c                  |   56 +-
 drivers/nvme/target/nvmet.h                        |   23 +-
 drivers/nvme/target/rdma.c                         |    1 +
 drivers/nvme/target/tcp.c                          |    8 +
 drivers/of/irq.c                                   |   14 +-
 drivers/of/overlay.c                               |   17 +-
 drivers/of/unittest.c                              |    7 +-
 drivers/opp/core.c                                 |    6 +-
 drivers/pci/controller/dwc/pcie-designware-ep.c    |   20 +
 drivers/pci/endpoint/functions/pci-epf-ntb.c       |    5 +
 drivers/pci/endpoint/functions/pci-epf-test.c      |   16 +-
 drivers/pci/endpoint/functions/pci-epf-vntb.c      |    5 +
 drivers/pci/hotplug/pnv_php.c                      |    2 +-
 drivers/pci/hotplug/rpaphp_slot.c                  |    2 +-
 drivers/pci/pci-driver.c                           |  187 +-
 drivers/pci/pci-sysfs.c                            |  125 +-
 drivers/pci/pci.c                                  |   20 +-
 drivers/pci/pci.h                                  |   41 +-
 drivers/pci/rebar.c                                |   19 +-
 drivers/pci/search.c                               |    4 +-
 drivers/pci/setup-bus.c                            |   56 +-
 drivers/pci/slot.c                                 |   46 +-
 drivers/perf/riscv_pmu_legacy.c                    |    5 +-
 drivers/perf/riscv_pmu_sbi.c                       |  103 +-
 drivers/phy/qualcomm/phy-qcom-qusb2.c              |   16 +-
 drivers/pinctrl/core.c                             |    3 +
 drivers/pinctrl/core.h                             |    1 +
 drivers/pinctrl/freescale/pinctrl-scu.c            |    3 +-
 drivers/pinctrl/mediatek/pinctrl-moore.c           |    6 +-
 drivers/pinctrl/mediatek/pinctrl-mtk-common.c      |   14 +-
 drivers/pinctrl/mediatek/pinctrl-paris.c           |    7 +-
 drivers/pinctrl/pinctrl-amd.c                      |    9 +
 drivers/pinctrl/pinmux.c                           |  175 +-
 drivers/pinctrl/sunxi/pinctrl-sunxi.c              |   88 +-
 drivers/pinctrl/sunxi/pinctrl-sunxi.h              |    7 +
 drivers/platform/x86/amd/pmc.c                     |   26 +-
 drivers/platform/x86/asus-wmi.c                    |    6 +-
 drivers/platform/x86/dell/dell-laptop.c            |   28 +-
 drivers/platform/x86/dell/dell-smbios-base.c       |   25 +
 drivers/platform/x86/dell/dell-smbios.h            |    5 +
 drivers/platform/x86/dell/dell-wmi-base.c          |    2 +-
 drivers/platform/x86/huawei-wmi.c                  |    4 +-
 drivers/platform/x86/intel/int1092/intel_sar.c     |   39 +-
 drivers/platform/x86/lg-laptop.c                   |   26 +-
 drivers/platform/x86/system76_acpi.c               |    4 +-
 drivers/platform/x86/thinkpad_acpi.c               |    4 +-
 drivers/platform/x86/toshiba_acpi.c                |    4 +-
 drivers/platform/x86/x86-android-tablets.c         |    6 +-
 drivers/power/supply/charger-manager.c             |   60 +-
 drivers/power/supply/ds2780_battery.c              |    2 +-
 drivers/power/supply/lp8788-charger.c              |   29 +-
 drivers/power/supply/max17040_battery.c            |   37 +-
 drivers/power/supply/rt9455_charger.c              |   26 +-
 drivers/ptp/ptp_ocp.c                              |    3 +-
 drivers/ptp/ptp_private.h                          |    1 +
 drivers/ptp/ptp_sysfs.c                            |    2 +-
 drivers/pwm/pwm-samsung.c                          |   22 +-
 drivers/regulator/ltc3676.c                        |   15 +-
 drivers/remoteproc/qcom_wcnss.c                    |   23 +-
 drivers/rtc/dev.c                                  |    2 +-
 drivers/rtc/rtc-mpfs.c                             |    6 +-
 drivers/rtc/rtc-rzn1.c                             |   16 +-
 drivers/rtc/rtc-spear.c                            |   11 +-
 drivers/s390/block/dasd_diag.c                     |    2 +-
 drivers/s390/block/dasd_eckd.c                     |   15 +-
 drivers/s390/block/dasd_fba.c                      |    2 +-
 drivers/s390/block/dcssblk.c                       |    2 +-
 drivers/s390/char/con3215.c                        |    2 +-
 drivers/s390/char/monwriter.c                      |    2 +-
 drivers/s390/cio/vfio_ccw_cp.c                     |   13 +
 drivers/s390/cio/vfio_ccw_cp.h                     |    8 +
 drivers/s390/crypto/pkey_api.c                     |  120 +-
 drivers/s390/crypto/vfio_ap_ops.c                  |  142 +-
 drivers/s390/crypto/zcrypt_api.c                   |    3 +
 drivers/s390/crypto/zcrypt_ccamisc.c               |   64 +-
 drivers/s390/crypto/zcrypt_ccamisc.h               |    6 +-
 drivers/s390/net/ctcm_mpc.c                        |   13 +-
 drivers/s390/net/ism.h                             |    2 +
 drivers/s390/net/ism_drv.c                         |   45 +-
 drivers/s390/net/netiucv.c                         |    2 +-
 drivers/s390/virtio/virtio_ccw.c                   |    4 -
 drivers/scsi/ch.c                                  |   30 +-
 drivers/scsi/hisi_sas/hisi_sas.h                   |    4 +-
 drivers/scsi/hisi_sas/hisi_sas_main.c              |   48 +-
 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c             |  279 +-
 drivers/scsi/hosts.c                               |    2 +
 drivers/scsi/imm.c                                 |    1 +
 drivers/scsi/iscsi_tcp.c                           |    1 +
 drivers/scsi/libiscsi.c                            |   14 +-
 drivers/scsi/libsas/sas_expander.c                 |   14 +-
 drivers/scsi/lpfc/lpfc_init.c                      |    2 +-
 drivers/scsi/mpi3mr/mpi3mr.h                       |   11 +-
 drivers/scsi/mpi3mr/mpi3mr_app.c                   |   11 +-
 drivers/scsi/mpi3mr/mpi3mr_fw.c                    |  148 +-
 drivers/scsi/qedi/qedi_main.c                      |    3 +-
 drivers/scsi/qla2xxx/qla_bsg.c                     |   47 +-
 drivers/scsi/qla2xxx/qla_init.c                    |   17 +
 drivers/scsi/qla2xxx/qla_iocb.c                    |   12 +-
 drivers/scsi/qla2xxx/qla_isr.c                     |   25 +-
 drivers/scsi/qla2xxx/qla_mbx.c                     |    6 +-
 drivers/scsi/qla2xxx/qla_mid.c                     |   41 +-
 drivers/scsi/qla2xxx/qla_nvme.c                    |   10 +-
 drivers/scsi/qla2xxx/qla_os.c                      |   33 +-
 drivers/scsi/qla2xxx/qla_target.c                  |    5 +-
 drivers/scsi/qla2xxx/qla_target.h                  |    1 +
 drivers/scsi/scsi_error.c                          |   28 +-
 drivers/scsi/scsi_priv.h                           |    1 +
 drivers/scsi/sd.c                                  |   25 +-
 drivers/scsi/st.c                                  |   18 +-
 drivers/scsi/xen-scsifront.c                       |    1 +
 drivers/soc/aspeed/aspeed-lpc-snoop.c              |   33 +-
 drivers/soc/imx/imx8m-blk-ctrl.c                   |   34 +-
 drivers/soc/imx/imx8mp-blk-ctrl.c                  |   18 +-
 drivers/soc/imx/imx93-blk-ctrl.c                   |   54 +-
 drivers/soc/qcom/icc-bwmon.c                       |    2 +
 drivers/soc/rockchip/pm_domains.c                  |   20 +-
 drivers/soc/xilinx/zynqmp_power.c                  |   10 +-
 drivers/soundwire/generic_bandwidth_allocation.c   |   35 +-
 drivers/spi/spi-bcm63xx.c                          |   72 +-
 drivers/spi/spi-davinci.c                          |    5 +-
 drivers/spi/spi-dw-dma.c                           |    2 +-
 drivers/spi/spi-fsl-lpspi.c                        |    9 +-
 drivers/spi/spi-fsl-qspi.c                         |   42 +-
 drivers/spi/spi-fsl-spi.c                          |   97 +-
 drivers/spi/spi-hisi-kunpeng.c                     |   95 +-
 drivers/spi/spi-microchip-core-qspi.c              |   79 +-
 drivers/spi/spi-microchip-core.c                   |    4 +
 drivers/spi/spi-mpc52xx.c                          |   66 +-
 drivers/spi/spi-oc-tiny.c                          |   24 +-
 drivers/spi/spi-qcom-qspi.c                        |   45 +-
 drivers/spi/spi-rockchip.c                         |    2 +-
 drivers/spi/spi-rspi.c                             |   14 +-
 drivers/spi/spi-tegra114.c                         |    7 +
 drivers/spi/spi-tegra210-quad.c                    |   20 +
 drivers/staging/greybus/raw.c                      |   90 +-
 drivers/staging/greybus/uart.c                     |    3 +-
 drivers/staging/media/atomisp/i2c/atomisp-gc2235.c |   29 +-
 .../media/deprecated/saa7146/av7110/av7110.h       |    4 +-
 .../media/deprecated/saa7146/av7110/av7110_ca.c    |   26 +-
 drivers/staging/media/rkvdec/rkvdec.c              |    4 +-
 drivers/staging/most/Kconfig                       |    2 -
 drivers/staging/most/Makefile                      |    1 -
 drivers/staging/most/i2c/Kconfig                   |   13 -
 drivers/staging/most/i2c/Makefile                  |    4 -
 drivers/staging/most/i2c/i2c.c                     |  371 ---
 drivers/staging/rtl8723bs/core/rtw_mlme.c          |    5 +-
 drivers/staging/rtl8723bs/core/rtw_mlme_ext.c      |   22 +-
 drivers/staging/sm750fb/sm750.c                    |    2 +-
 drivers/staging/sm750fb/sm750.h                    |    2 +-
 drivers/staging/sm750fb/sm750_accel.c              |    6 +-
 drivers/staging/sm750fb/sm750_accel.h              |    4 +-
 drivers/target/iscsi/iscsi_target_configfs.c       |   26 +-
 drivers/tee/optee/ffa_abi.c                        |   16 +-
 drivers/tee/optee/smc_abi.c                        |   17 +-
 drivers/thermal/thermal_hwmon.c                    |   89 +-
 drivers/thunderbolt/ctl.c                          |   63 +-
 drivers/thunderbolt/quirks.c                       |    3 +
 drivers/thunderbolt/xdomain.c                      |    4 +
 drivers/tty/amiserial.c                            |    9 +-
 drivers/tty/n_gsm.c                                |   90 +-
 drivers/tty/pty.c                                  |    2 +-
 drivers/tty/serial/8250/8250_bcm7271.c             |    2 +-
 drivers/tty/serial/8250/8250_core.c                |    2 +-
 drivers/tty/serial/imx.c                           |   26 +-
 drivers/tty/serial/kgdboc.c                        |    9 +
 drivers/tty/serial/max3100.c                       |   13 +-
 drivers/tty/serial/qcom_geni_serial.c              |    5 +-
 drivers/tty/serial/sc16is7xx.c                     |   22 +-
 drivers/tty/serial/serial-tegra.c                  |   18 +-
 drivers/tty/serial/serial_core.c                   |   48 +-
 drivers/tty/serial/vt8500_serial.c                 |    1 +
 drivers/tty/tty_io.c                               |   80 +-
 drivers/tty/tty_port.c                             |   75 +-
 drivers/tty/vcc.c                                  |    5 +-
 drivers/tty/vt/vc_screen.c                         |   25 +-
 drivers/tty/vt/vt.c                                |    7 +-
 drivers/ufs/core/ufshcd.c                          |   28 +-
 drivers/ufs/host/ufs-exynos.c                      |   17 +-
 drivers/ufs/host/ufs-exynos.h                      |    3 +-
 drivers/ufs/host/ufs-qcom.c                        |   13 +-
 drivers/usb/cdns3/cdns3-gadget.c                   |    4 +
 drivers/usb/cdns3/cdns3-pci-wrap.c                 |    5 +
 drivers/usb/chipidea/ci_hdrc_tegra.c               |    4 +-
 drivers/usb/chipidea/udc.c                         |    4 +
 drivers/usb/class/cdc-acm.c                        |   41 +-
 drivers/usb/class/cdc-acm.h                        |    1 -
 drivers/usb/core/hub.c                             |    7 +-
 drivers/usb/core/message.c                         |    8 +-
 drivers/usb/dwc2/hcd.c                             |    3 +-
 drivers/usb/dwc3/core.c                            |   19 +-
 drivers/usb/dwc3/core.h                            |   23 +
 drivers/usb/dwc3/dwc3-am62.c                       |    1 +
 drivers/usb/dwc3/ep0.c                             |    9 +
 drivers/usb/dwc3/gadget.c                          |  112 +-
 drivers/usb/gadget/function/f_ecm.c                |   41 +-
 drivers/usb/gadget/function/f_eem.c                |   59 +-
 drivers/usb/gadget/function/f_fs.c                 |  241 +-
 drivers/usb/gadget/function/f_hid.c                |   17 +-
 drivers/usb/gadget/function/f_mass_storage.c       |    3 +
 drivers/usb/gadget/function/f_midi.c               |    6 +-
 drivers/usb/gadget/function/f_printer.c            |   10 +-
 drivers/usb/gadget/function/f_rndis.c              |   42 +-
 drivers/usb/gadget/function/f_subset.c             |   57 +-
 drivers/usb/gadget/function/f_uac1.c               |   13 +-
 drivers/usb/gadget/function/f_uac1_legacy.c        |    6 +
 drivers/usb/gadget/function/f_uac2.c               |   13 +-
 drivers/usb/gadget/function/u_ecm.h                |   21 +-
 drivers/usb/gadget/function/u_eem.h                |   21 +-
 drivers/usb/gadget/function/u_fs.h                 |    2 -
 drivers/usb/gadget/function/u_gether.h             |   22 +-
 drivers/usb/gadget/function/u_rndis.h              |   31 +-
 drivers/usb/gadget/legacy/g_ffs.c                  |    9 -
 drivers/usb/gadget/legacy/inode.c                  |    7 +-
 drivers/usb/gadget/udc/aspeed-vhub/core.c          |    4 +
 drivers/usb/gadget/udc/aspeed-vhub/dev.c           |    2 +-
 drivers/usb/gadget/udc/aspeed-vhub/hub.c           |    5 +-
 drivers/usb/gadget/udc/aspeed-vhub/vhub.h          |    1 +
 drivers/usb/gadget/udc/at91_udc.c                  |   33 +-
 drivers/usb/gadget/udc/core.c                      |    7 +-
 drivers/usb/gadget/udc/dummy_hcd.c                 |    4 +
 drivers/usb/host/ehci-sched.c                      |   11 +-
 drivers/usb/host/fotg210-hcd.c                     |    6 +-
 drivers/usb/host/octeon-hcd.c                      |    2 +-
 drivers/usb/host/ohci-da8xx.c                      |    2 +
 drivers/usb/host/ohci-s3c2410.c                    |    1 +
 drivers/usb/host/ohci-spear.c                      |    4 +-
 drivers/usb/host/ohci-st.c                         |    1 +
 drivers/usb/host/xhci.c                            |   11 +-
 drivers/usb/misc/iowarrior.c                       |   57 +-
 drivers/usb/serial/ark3116.c                       |    7 +-
 drivers/usb/serial/belkin_sa.c                     |   12 +-
 drivers/usb/serial/bus.c                           |    6 +-
 drivers/usb/serial/ch341.c                         |   37 +-
 drivers/usb/serial/cp210x.c                        |    9 +-
 drivers/usb/serial/digi_acceleport.c               |    7 +-
 drivers/usb/serial/f81232.c                        |    4 +-
 drivers/usb/serial/f81534.c                        |    4 +-
 drivers/usb/serial/ftdi_sio.c                      |   10 +-
 drivers/usb/serial/generic.c                       |   10 +-
 drivers/usb/serial/io_edgeport.c                   |    6 +-
 drivers/usb/serial/io_ti.c                         |    9 +-
 drivers/usb/serial/keyspan.c                       |    5 +-
 drivers/usb/serial/keyspan_pda.c                   |    8 +-
 drivers/usb/serial/mct_u232.c                      |    6 +-
 drivers/usb/serial/mos7720.c                       |    9 +-
 drivers/usb/serial/mos7840.c                       |    7 +-
 drivers/usb/serial/mxuport.c                       |    6 +-
 drivers/usb/serial/option.c                        |   14 +
 drivers/usb/serial/pl2303.c                        |   14 +-
 drivers/usb/serial/quatech2.c                      |   27 +-
 drivers/usb/serial/ssu100.c                        |   18 +-
 drivers/usb/serial/ti_usb_3410_5052.c              |   10 +-
 drivers/usb/serial/upd78f0730.c                    |    7 +-
 drivers/usb/serial/usb-serial.c                    |  127 +-
 drivers/usb/serial/usb_debug.c                     |   13 +-
 drivers/usb/serial/whiteheat.c                     |    7 +-
 drivers/usb/serial/xr_serial.c                     |    4 +-
 drivers/usb/storage/realtek_cr.c                   |    9 +-
 drivers/usb/storage/sierra_ms.c                    |    7 +
 drivers/usb/typec/anx7411.c                        |    5 +-
 drivers/usb/typec/tcpm/tcpci_maxim.c               |    9 +
 drivers/usb/typec/tcpm/tcpci_rt1711h.c             |   13 +-
 drivers/usb/typec/tcpm/tcpm.c                      |   53 +-
 drivers/usb/typec/tipd/core.c                      |    3 +-
 drivers/usb/typec/ucsi/displayport.c               |    9 +-
 drivers/usb/typec/ucsi/ucsi.c                      |   43 +-
 drivers/usb/typec/ucsi/ucsi.h                      |   11 +
 drivers/usb/typec/ucsi/ucsi_acpi.c                 |   32 +
 drivers/usb/usbip/usbip_common.c                   |    1 +
 drivers/vdpa/mlx5/core/mlx5_vdpa.h                 |    2 +
 drivers/vdpa/mlx5/core/mr.c                        |    3 +
 drivers/vdpa/mlx5/core/resources.c                 |   11 +-
 drivers/vdpa/mlx5/net/mlx5_vnet.c                  |    9 +-
 drivers/vdpa/vdpa_sim/vdpa_sim.c                   |   11 +-
 drivers/vdpa/vdpa_user/iova_domain.c               |   11 +-
 drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c     |   22 +-
 drivers/vfio/pci/mlx5/main.c                       |    6 +-
 drivers/vhost/iotlb.c                              |   47 +-
 drivers/vhost/vdpa.c                               |   11 +-
 drivers/vhost/vhost.c                              |  116 +-
 drivers/video/fbdev/arcfb.c                        |    3 +
 drivers/video/fbdev/broadsheetfb.c                 |    4 +-
 drivers/video/fbdev/cobalt_lcdfb.c                 |    6 +
 drivers/video/fbdev/core/fb_sys_fops.c             |    8 +-
 drivers/video/fbdev/core/fbcon.c                   |    2 -
 drivers/video/fbdev/core/fbmem.c                   |   29 +-
 drivers/video/fbdev/core/fbsysfs.c                 |   13 +-
 drivers/video/fbdev/hecubafb.c                     |    4 +-
 drivers/video/fbdev/metronomefb.c                  |    4 +-
 drivers/video/fbdev/omap2/omapfb/omapfb-main.c     |   11 +-
 drivers/video/fbdev/ps3fb.c                        |    5 +-
 drivers/video/fbdev/pvr2fb.c                       |    3 +
 drivers/video/fbdev/sh_mobile_lcdcfb.c             |    5 +-
 drivers/video/fbdev/sm712fb.c                      |   10 +-
 drivers/video/fbdev/ssd1307fb.c                    |  126 +-
 drivers/virt/acrn/irqfd.c                          |   75 +-
 drivers/virt/nitro_enclaves/ne_misc_dev.c          |    1 +
 drivers/virtio/virtio.c                            |   29 +
 drivers/virtio/virtio_mmio.c                       |   66 +-
 drivers/watchdog/at91sam9_wdt.c                    |    4 +-
 drivers/watchdog/cpu5wdt.c                         |    2 +-
 drivers/watchdog/rtd119x_wdt.c                     |   21 +-
 drivers/xen/events/events_2l.c                     |    8 +-
 drivers/xen/events/events_base.c                   |  449 +--
 drivers/xen/events/events_internal.h               |    1 -
 drivers/xen/gntdev-dmabuf.c                        |   31 +-
 drivers/xen/pvcalls-front.c                        |   88 +-
 fs/9p/vfs_inode_dotl.c                             |    2 +-
 fs/Kconfig                                         |    1 -
 fs/Makefile                                        |    1 -
 fs/afs/inode.c                                     |    1 +
 fs/afs/internal.h                                  |    2 +
 fs/afs/rxrpc.c                                     |   79 +-
 fs/afs/super.c                                     |    2 +-
 fs/autofs/waitq.c                                  |   25 +-
 fs/btrfs/acl.c                                     |    3 +
 fs/btrfs/block-group.c                             |    3 +
 fs/btrfs/block-rsv.c                               |   19 +-
 fs/btrfs/ctree.c                                   |   65 +-
 fs/btrfs/ctree.h                                   |   23 +-
 fs/btrfs/dev-replace.c                             |    1 +
 fs/btrfs/disk-io.c                                 |    5 +
 fs/btrfs/extent-tree.c                             |   46 +-
 fs/btrfs/extent_io.c                               |  173 +-
 fs/btrfs/file.c                                    |  105 +-
 fs/btrfs/free-space-tree.c                         |   10 +-
 fs/btrfs/inode.c                                   |   82 +-
 fs/btrfs/ioctl.c                                   |   68 +-
 fs/btrfs/lzo.c                                     |   14 +-
 fs/btrfs/qgroup.c                                  |   24 +-
 fs/btrfs/reflink.c                                 |   58 +
 fs/btrfs/relocation.c                              |   87 +-
 fs/btrfs/scrub.c                                   |    9 +-
 fs/btrfs/transaction.c                             |   21 +-
 fs/btrfs/tree-log.c                                |  105 +-
 fs/btrfs/volumes.c                                 |  243 +-
 fs/ceph/dir.c                                      |   10 +-
 fs/ceph/export.c                                   |   23 +-
 fs/ceph/mds_client.c                               |   63 +-
 fs/ceph/mds_client.h                               |    1 +
 fs/ceph/super.h                                    |    9 +
 fs/ceph/xattr.c                                    |   16 +
 fs/coredump.c                                      |   16 +-
 fs/dcache.c                                        |    4 +-
 fs/dlm/config.c                                    |    4 +-
 fs/dlm/lock.c                                      |    2 +
 fs/dlm/lowcomms.c                                  |  197 +-
 fs/dlm/lowcomms.h                                  |    5 +-
 fs/dlm/midcomms.c                                  |   10 +-
 fs/erofs/decompressor_lzma.c                       |   18 +-
 fs/erofs/xattr.c                                   |    5 +-
 fs/erofs/zdata.c                                   |   46 +-
 fs/erofs/zmap.c                                    |   21 +-
 fs/exec.c                                          |   23 +-
 fs/exfat/dir.c                                     |   24 +-
 fs/exfat/exfat_fs.h                                |    3 +-
 fs/exfat/fatent.c                                  |   10 +
 fs/exfat/namei.c                                   |   28 +-
 fs/exfat/nls.c                                     |   24 +-
 fs/exfat/super.c                                   |   32 +-
 fs/ext2/inode.c                                    |    3 +-
 fs/ext2/xattr.c                                    |    4 +-
 fs/ext4/ext4.h                                     |   29 +-
 fs/ext4/extents.c                                  |   20 +-
 fs/ext4/extents_status.c                           |    7 +-
 fs/ext4/extents_status.h                           |    1 +
 fs/ext4/inode.c                                    |   57 +-
 fs/ext4/ioctl.c                                    |    5 +
 fs/ext4/mballoc.c                                  |  217 +-
 fs/ext4/mballoc.h                                  |    4 +-
 fs/ext4/migrate.c                                  |   14 +-
 fs/ext4/super.c                                    |   61 +-
 fs/ext4/xattr.c                                    |    2 +-
 fs/f2fs/checkpoint.c                               |    7 +-
 fs/f2fs/compress.c                                 |   10 +-
 fs/f2fs/data.c                                     |   14 +-
 fs/f2fs/debug.c                                    |    4 -
 fs/f2fs/dir.c                                      |    1 +
 fs/f2fs/extent_cache.c                             |  153 +-
 fs/f2fs/f2fs.h                                     |   69 +-
 fs/f2fs/file.c                                     |   32 +-
 fs/f2fs/gc.c                                       |   70 +-
 fs/f2fs/gc.h                                       |   20 -
 fs/f2fs/inode.c                                    |    8 +-
 fs/f2fs/node.c                                     |   78 +-
 fs/f2fs/recovery.c                                 |   33 +-
 fs/f2fs/segment.c                                  |   37 +-
 fs/f2fs/super.c                                    |   58 +-
 fs/f2fs/sysfs.c                                    |   42 +-
 fs/fcntl.c                                         |    3 +
 fs/fsopen.c                                        |    3 +
 fs/fuse/inode.c                                    |    2 +
 fs/gfs2/glock.c                                    |   35 +-
 fs/gfs2/glock.h                                    |    1 +
 fs/gfs2/incore.h                                   |    1 +
 fs/gfs2/lock_dlm.c                                 |   12 +-
 fs/gfs2/ops_fstype.c                               |   13 +-
 fs/gfs2/super.c                                    |    7 +-
 fs/hfs/bfind.c                                     |    3 +
 fs/hfs/btree.c                                     |   57 +-
 fs/hfs/extent.c                                    |    2 +-
 fs/hfs/hfs_fs.h                                    |    1 +
 fs/inode.c                                         |   24 +-
 fs/jfs/jfs_dtree.c                                 |   18 +-
 fs/libfs.c                                         |   36 +-
 fs/lockd/clntproc.c                                |    3 +
 fs/lockd/svc.c                                     |    6 +-
 fs/lockd/svc4proc.c                                |    4 +-
 fs/lockd/svcproc.c                                 |    4 +-
 fs/lockd/svcsubs.c                                 |   47 +-
 fs/mbcache.c                                       |    1 +
 fs/namei.c                                         |    4 +
 fs/namespace.c                                     |  123 +-
 fs/nfs/blocklayout/dev.c                           |   19 +-
 fs/nfs/callback_xdr.c                              |    6 +-
 fs/nfs/delegation.c                                |   27 +-
 fs/nfs/flexfilelayout/flexfilelayout.c             |    3 +-
 fs/nfs/nfs4proc.c                                  |   32 +-
 fs/nfs/nfs4session.c                               |   16 +-
 fs/nfs/pnfs.c                                      |   58 +-
 fs/nfs/pnfs.h                                      |   17 +-
 fs/nfsd/export.c                                   |   31 +-
 fs/nfsd/export.h                                   |    4 +-
 fs/nfsd/filecache.c                                |   67 +-
 fs/nfsd/lockd.c                                    |    6 +-
 fs/nfsd/netns.h                                    |    5 +-
 fs/nfsd/nfs2acl.c                                  |   21 +-
 fs/nfsd/nfs3acl.c                                  |   17 +-
 fs/nfsd/nfs3proc.c                                 |   38 +
 fs/nfsd/nfs4layouts.c                              |   21 +-
 fs/nfsd/nfs4proc.c                                 |   36 +-
 fs/nfsd/nfs4state.c                                |   33 +-
 fs/nfsd/trace.h                                    |    4 +-
 fs/nfsd/vfs.c                                      |   36 +-
 fs/nilfs2/page.c                                   |   17 +-
 fs/notify/mark.c                                   |   50 +-
 fs/ntfs/Kconfig                                    |   80 -
 fs/ntfs/Makefile                                   |   15 -
 fs/ntfs/aops.c                                     | 1761 -----------
 fs/ntfs/aops.h                                     |   88 -
 fs/ntfs/attrib.c                                   | 2624 ----------------
 fs/ntfs/attrib.h                                   |  102 -
 fs/ntfs/bitmap.c                                   |  179 --
 fs/ntfs/bitmap.h                                   |  104 -
 fs/ntfs/collate.c                                  |  110 -
 fs/ntfs/collate.h                                  |   36 -
 fs/ntfs/compress.c                                 |  950 ------
 fs/ntfs/debug.c                                    |  159 -
 fs/ntfs/debug.h                                    |   57 -
 fs/ntfs/dir.c                                      | 1538 ----------
 fs/ntfs/dir.h                                      |   34 -
 fs/ntfs/endian.h                                   |   79 -
 fs/ntfs/file.c                                     | 2006 ------------
 fs/ntfs/index.c                                    |  440 ---
 fs/ntfs/index.h                                    |  134 -
 fs/ntfs/inode.c                                    | 3100 -------------------
 fs/ntfs/inode.h                                    |  310 --
 fs/ntfs/layout.h                                   | 2421 ---------------
 fs/ntfs/lcnalloc.c                                 | 1000 ------
 fs/ntfs/lcnalloc.h                                 |  131 -
 fs/ntfs/logfile.c                                  |  849 ------
 fs/ntfs/logfile.h                                  |  295 --
 fs/ntfs/malloc.h                                   |   77 -
 fs/ntfs/mft.c                                      | 2906 ------------------
 fs/ntfs/mft.h                                      |  110 -
 fs/ntfs/mst.c                                      |  189 --
 fs/ntfs/namei.c                                    |  391 ---
 fs/ntfs/ntfs.h                                     |  150 -
 fs/ntfs/quota.c                                    |  103 -
 fs/ntfs/quota.h                                    |   21 -
 fs/ntfs/runlist.c                                  | 1893 ------------
 fs/ntfs/runlist.h                                  |   88 -
 fs/ntfs/super.c                                    | 3194 --------------------
 fs/ntfs/sysctl.c                                   |   69 -
 fs/ntfs/sysctl.h                                   |   27 -
 fs/ntfs/time.h                                     |   89 -
 fs/ntfs/types.h                                    |   55 -
 fs/ntfs/unistr.c                                   |  384 ---
 fs/ntfs/upcase.c                                   |   73 -
 fs/ntfs/usnjrnl.c                                  |   70 -
 fs/ntfs/usnjrnl.h                                  |  191 --
 fs/ntfs/volume.h                                   |  164 -
 fs/ntfs3/attrib.c                                  |   27 +-
 fs/ntfs3/file.c                                    |   43 +-
 fs/ntfs3/frecord.c                                 |   86 +-
 fs/ntfs3/fslog.c                                   |   16 +
 fs/ntfs3/index.c                                   |   10 +
 fs/ntfs3/inode.c                                   |   17 +-
 fs/ntfs3/namei.c                                   |   10 +-
 fs/ntfs3/ntfs_fs.h                                 |   24 +-
 fs/ntfs3/record.c                                  |   91 +-
 fs/ntfs3/super.c                                   |   16 +-
 fs/ocfs2/cluster/heartbeat.c                       |  168 +-
 fs/ocfs2/cluster/nodemanager.c                     |   19 +-
 fs/ocfs2/cluster/nodemanager.h                     |    2 +
 fs/ocfs2/cluster/tcp.c                             |  104 +-
 fs/ocfs2/cluster/tcp.h                             |    1 +
 fs/ocfs2/dir.c                                     |   71 +-
 fs/ocfs2/dlm/dlmcommon.h                           |    2 +
 fs/ocfs2/dlm/dlmdebug.c                            |    5 +-
 fs/ocfs2/dlm/dlmrecovery.c                         |    2 +-
 fs/ocfs2/inode.c                                   |  129 +
 fs/ocfs2/namei.c                                   |    8 +-
 fs/overlayfs/file.c                                |   19 +-
 fs/pipe.c                                          |    6 +-
 fs/proc/task_mmu.c                                 |    3 +
 fs/reiserfs/namei.c                                |   61 +-
 fs/smb/client/cached_dir.c                         |  122 +-
 fs/smb/client/cifsacl.c                            |   71 +-
 fs/smb/client/cifsfs.c                             |    1 +
 fs/smb/client/cifsglob.h                           |   15 +-
 fs/smb/client/connect.c                            |  172 +-
 fs/smb/client/dir.c                                |   39 +-
 fs/smb/client/file.c                               |   41 +-
 fs/smb/client/fs_context.c                         |    6 +
 fs/smb/client/inode.c                              |   40 +-
 fs/smb/client/link.c                               |   15 +-
 fs/smb/client/misc.c                               |   72 +-
 fs/smb/client/readdir.c                            |   17 +-
 fs/smb/client/sess.c                               |  104 +-
 fs/smb/client/smb1ops.c                            |   21 +-
 fs/smb/client/smb2file.c                           |   19 +-
 fs/smb/client/smb2misc.c                           |   15 +-
 fs/smb/client/smb2ops.c                            |  107 +-
 fs/smb/client/smb2pdu.c                            |   96 +-
 fs/smb/client/smb2pdu.h                            |    9 -
 fs/smb/client/smb2proto.h                          |    4 +-
 fs/smb/client/smb2transport.c                      |   58 +-
 fs/smb/client/smbdirect.c                          |   22 +-
 fs/smb/client/transport.c                          |   69 +-
 fs/smb/common/smb2pdu.h                            |   11 +
 fs/smb/server/auth.c                               |   22 +-
 fs/smb/server/connection.c                         |   23 +
 fs/smb/server/connection.h                         |   14 +
 fs/smb/server/ksmbd_work.c                         |    3 -
 fs/smb/server/ksmbd_work.h                         |    1 -
 fs/smb/server/mgmt/share_config.c                  |    7 +-
 fs/smb/server/mgmt/tree_connect.c                  |   28 +-
 fs/smb/server/mgmt/user_config.c                   |   11 +
 fs/smb/server/mgmt/user_session.c                  |   29 +-
 fs/smb/server/mgmt/user_session.h                  |    2 +
 fs/smb/server/misc.c                               |   33 -
 fs/smb/server/misc.h                               |    1 -
 fs/smb/server/oplock.c                             |  133 +-
 fs/smb/server/oplock.h                             |    2 +-
 fs/smb/server/server.c                             |   26 +-
 fs/smb/server/smb2ops.c                            |    1 -
 fs/smb/server/smb2pdu.c                            |  292 +-
 fs/smb/server/smb2pdu.h                            |    8 -
 fs/smb/server/smb_common.c                         |   10 +-
 fs/smb/server/smb_common.h                         |    2 +-
 fs/smb/server/smbacl.c                             |  317 +-
 fs/smb/server/smbacl.h                             |    4 +-
 fs/smb/server/transport_ipc.c                      |    5 +-
 fs/smb/server/transport_rdma.c                     |    4 +-
 fs/smb/server/vfs.c                                |   94 +-
 fs/smb/server/vfs_cache.c                          |  135 +-
 fs/unicode/utf8-core.c                             |   21 +-
 fs/userfaultfd.c                                   |   11 +
 fs/verity/Kconfig                                  |    3 +
 fs/xfs/libxfs/xfs_alloc.c                          |   46 +-
 fs/xfs/libxfs/xfs_attr.c                           |   74 +-
 fs/xfs/libxfs/xfs_ialloc.c                         |   32 +-
 fs/xfs/libxfs/xfs_sb.c                             |   17 +-
 fs/xfs/xfs_buf_item.c                              |  299 +-
 fs/xfs/xfs_buf_item.h                              |    3 +-
 fs/xfs/xfs_fsmap.c                                 |    2 +-
 fs/xfs/xfs_icache.c                                |    8 +
 fs/xfs/xfs_inode.c                                 |    2 +-
 fs/xfs/xfs_ioctl.c                                 |    2 +-
 fs/xfs/xfs_iops.c                                  |    2 +-
 fs/xfs/xfs_log_recover.c                           |   13 +-
 include/acpi/acpi_bus.h                            |    6 +
 include/acpi/battery.h                             |    4 +-
 include/clocksource/samsung_pwm.h                  |    2 +-
 include/drm/gpu_scheduler.h                        |   29 +-
 include/linux/blkdev.h                             |    1 +
 include/linux/bpf.h                                |   42 +-
 include/linux/can/skb.h                            |    2 +
 include/linux/cgroup-defs.h                        |    5 +-
 include/linux/cgroup.h                             |    1 +
 include/linux/compiler_attributes.h                |   13 +
 include/linux/device-mapper.h                      |   23 +-
 include/linux/device.h                             |    3 +
 include/linux/dm-dirty-log.h                       |    2 +-
 include/linux/dm-region-hash.h                     |    6 +-
 include/linux/dma-buf.h                            |    1 +
 include/linux/dma/k3-udma-glue.h                   |    3 +-
 include/linux/dmaengine.h                          |    7 +
 include/linux/f2fs_fs.h                            |    1 +
 include/linux/fb.h                                 |  115 +
 include/linux/fs.h                                 |    2 +
 include/linux/fsnotify_backend.h                   |    1 +
 include/linux/ftrace.h                             |    5 +-
 include/linux/futex.h                              |   14 +-
 include/linux/hid.h                                |   10 +-
 include/linux/highmem.h                            |   44 +
 include/linux/hw_random.h                          |    2 +
 include/linux/i2c.h                                |    1 +
 include/linux/i3c/master.h                         |    3 +
 include/linux/ieee80211.h                          |   12 +-
 include/linux/if_team.h                            |    3 +-
 include/linux/if_vlan.h                            |    3 +
 include/linux/iio/common/st_sensors.h              |    4 -
 include/linux/ima.h                                |    1 +
 include/linux/io_uring.h                           |    2 +
 include/linux/iommu.h                              |    2 +
 include/linux/ism.h                                |   23 +
 include/linux/kasan.h                              |    6 +-
 include/linux/key-type.h                           |    1 +
 include/linux/key.h                                |    5 +
 include/linux/libata.h                             |    3 +
 include/linux/list.h                               |   15 +
 include/linux/lockd/bind.h                         |   12 +-
 include/linux/lockd/lockd.h                        |    2 +-
 include/linux/memory_hotplug.h                     |    2 +-
 include/linux/mlx5/cq.h                            |    1 +
 include/linux/mlx5/driver.h                        |    1 -
 include/linux/mlx5/mlx5_ifc.h                      |   13 +-
 include/linux/mlx5/vport.h                         |    6 +-
 include/linux/mm.h                                 |    2 +-
 include/linux/mm_types.h                           |    3 +
 include/linux/mount.h                              |    2 +-
 include/linux/mtd/mtd.h                            |    2 +-
 include/linux/netdevice.h                          |    4 +
 include/linux/netfilter.h                          |   12 +
 include/linux/nfs_xdr.h                            |    1 -
 include/linux/ntb.h                                |   24 +
 include/linux/nvme.h                               |    4 +-
 include/linux/of.h                                 |    6 +
 include/linux/of_device.h                          |   11 -
 include/linux/of_platform.h                        |    5 +
 include/linux/pagemap.h                            |   48 +
 include/linux/pci.h                                |    7 +-
 include/linux/perf/riscv_pmu.h                     |    5 +-
 include/linux/perf_event.h                         |    1 -
 include/linux/power_supply.h                       |    6 +-
 include/linux/psi.h                                |    4 +-
 include/linux/qcom-geni-se.h                       |   15 +-
 include/linux/sched.h                              |    2 +-
 include/linux/sched/signal.h                       |   27 +-
 include/linux/sched/user.h                         |   11 +-
 include/linux/scmi_protocol.h                      |    5 -
 include/linux/seq_buf.h                            |   27 +-
 include/linux/skbuff.h                             |   22 +-
 include/linux/stmmac.h                             |    1 -
 include/linux/sunrpc/svc_rdma.h                    |    1 +
 include/linux/sunrpc/xdr.h                         |    1 -
 include/linux/trace_recursion.h                    |    9 +
 include/linux/trace_seq.h                          |    2 +
 include/linux/tty.h                                |    4 +-
 include/linux/tty_driver.h                         |    6 +
 include/linux/tty_port.h                           |   22 +-
 include/linux/unicode.h                            |    1 +
 include/linux/usb/gadget.h                         |    2 +
 include/linux/usb/serial.h                         |    3 +-
 include/linux/userfaultfd_k.h                      |    7 +
 include/linux/virtio.h                             |    2 +-
 include/media/v4l2-mem2mem.h                       |   21 +
 include/net/af_vsock.h                             |    3 +
 include/net/amt.h                                  |    4 -
 include/net/ax25.h                                 |    1 -
 include/net/bluetooth/hci.h                        |    9 +
 include/net/bluetooth/hci_core.h                   |    5 +-
 include/net/bluetooth/l2cap.h                      |    1 +
 include/net/bluetooth/mgmt.h                       |    2 +-
 include/net/bluetooth/rfcomm.h                     |    1 +
 include/net/cfg80211.h                             |  105 +-
 include/net/codel_impl.h                           |    1 +
 include/net/dropreason.h                           |    3 +
 include/net/dsa.h                                  |    1 +
 include/net/inet_connection_sock.h                 |   11 +-
 include/net/ip.h                                   |   17 +-
 include/net/ip6_route.h                            |    2 +-
 include/net/ip_vs.h                                |    2 +-
 include/net/netfilter/nf_conntrack_expect.h        |   16 +-
 include/net/netfilter/nf_conntrack_timeout.h       |   27 +-
 include/net/netfilter/nf_queue.h                   |    1 +
 include/net/netfilter/nf_tables.h                  |   16 +-
 include/net/netfilter/nft_fib.h                    |    2 +-
 include/net/netfilter/nft_meta.h                   |    4 +-
 include/net/netfilter/nft_reject.h                 |    3 +-
 include/net/netns/mpls.h                           |    1 +
 include/net/netns/xfrm.h                           |    1 +
 include/net/nexthop.h                              |    6 +-
 include/net/pkt_cls.h                              |   45 +-
 include/net/pkt_sched.h                            |    3 +-
 include/net/route.h                                |    2 +-
 include/net/sch_generic.h                          |   21 +-
 include/net/secure_seq.h                           |   47 +-
 include/net/sock.h                                 |   19 +-
 include/net/strparser.h                            |   10 +-
 include/net/tc_act/tc_pedit.h                      |   18 +-
 include/net/tcp.h                                  |   14 +-
 include/net/tls.h                                  |   12 +-
 include/scsi/scsi_host.h                           |    9 +-
 include/trace/events/btrfs.h                       |    4 +-
 include/trace/events/rv.h                          |   76 +-
 include/uapi/linux/ioprio.h                        |  100 +-
 include/uapi/linux/netfilter/nf_conntrack_common.h |    1 +
 include/uapi/linux/nexthop.h                       |    7 +-
 include/uapi/linux/stddef.h                        |    5 +
 include/uapi/linux/virtio_crypto.h                 |    1 +
 include/xen/events.h                               |    4 +-
 io_uring/cancel.c                                  |   33 +-
 io_uring/cancel.h                                  |    2 +
 io_uring/io-wq.c                                   |   96 +-
 io_uring/io-wq.h                                   |    4 +-
 io_uring/io_uring.c                                |  108 +-
 io_uring/io_uring.h                                |   44 +-
 io_uring/poll.c                                    |   42 +-
 io_uring/rsrc.c                                    |    7 +-
 io_uring/rw.c                                      |   18 -
 io_uring/sqpoll.c                                  |    7 +
 io_uring/tctx.c                                    |    1 +
 io_uring/timeout.c                                 |   46 +-
 kernel/audit_tree.c                                |   36 +-
 kernel/bpf/arraymap.c                              |   30 +-
 kernel/bpf/bpf_struct_ops.c                        |   75 +-
 kernel/bpf/btf.c                                   |    5 +
 kernel/bpf/cgroup.c                                |   23 +
 kernel/bpf/core.c                                  |    1 +
 kernel/bpf/hashtab.c                               |   63 +-
 kernel/bpf/helpers.c                               |  102 +-
 kernel/bpf/mmap_unlock_work.h                      |   51 +-
 kernel/bpf/queue_stack_maps.c                      |    8 +-
 kernel/bpf/stackmap.c                              |   85 +-
 kernel/bpf/syscall.c                               |   93 +-
 kernel/bpf/task_iter.c                             |   14 +-
 kernel/bpf/trampoline.c                            |   54 +-
 kernel/bpf/verifier.c                              |  104 +-
 kernel/cgroup/Makefile                             |    2 +-
 kernel/cgroup/cgroup.c                             |   53 +-
 kernel/cgroup/cpuset-internal.h                    |  222 ++
 kernel/cgroup/cpuset-v1.c                          |    3 +
 kernel/cgroup/cpuset.c                             |  222 +-
 kernel/cgroup/rstat.c                              |   19 +-
 kernel/dma/direct.c                                |   56 +-
 kernel/events/core.c                               |  111 +-
 kernel/exit.c                                      |   51 +-
 kernel/fork.c                                      |   38 +-
 kernel/futex/core.c                                |   49 +-
 kernel/kprobes.c                                   |    8 +-
 kernel/params.c                                    |   61 +-
 kernel/pid_namespace.c                             |    5 +-
 kernel/rcu/tasks.h                                 |   82 +-
 kernel/rcu/tree.h                                  |   13 +-
 kernel/rcu/tree_plugin.h                           |   42 +-
 kernel/sched/core.c                                |   50 +
 kernel/sched/deadline.c                            |    7 +-
 kernel/sched/psi.c                                 |   69 +-
 kernel/sched/rt.c                                  |   52 +-
 kernel/sched/sched.h                               |    1 +
 kernel/signal.c                                    |    4 +
 kernel/time/namespace.c                            |    5 +
 kernel/trace/blktrace.c                            |    3 +-
 kernel/trace/bpf_trace.c                           |    6 +-
 kernel/trace/fgraph.c                              |    1 +
 kernel/trace/ftrace.c                              |   76 +-
 kernel/trace/trace.c                               |  103 +-
 kernel/trace/trace.h                               |    4 +-
 kernel/trace/trace_events_filter.c                 |    6 +
 kernel/trace/trace_events_hist.c                   |  102 +-
 kernel/trace/trace_events_synth.c                  |   10 +
 kernel/trace/trace_events_user.c                   |   26 +-
 kernel/trace/trace_functions.c                     |    2 +-
 kernel/trace/trace_seq.c                           |    6 +-
 kernel/trace/trace_stack.c                         |    2 +-
 kernel/trace/trace_synth.h                         |    1 +
 kernel/watch_queue.c                               |   11 +-
 kernel/workqueue.c                                 |   24 +-
 lib/Kconfig.debug                                  |    2 +
 lib/seq_buf.c                                      |   52 +-
 lib/test_kprobes.c                                 |   28 +-
 mm/damon/core.c                                    |   32 +-
 mm/filemap.c                                       |    2 +-
 mm/huge_memory.c                                   |   17 +
 mm/hugetlb.c                                       |   56 +-
 mm/kasan/quarantine.c                              |   39 +-
 mm/kasan/report.c                                  |    4 +-
 mm/kasan/shadow.c                                  |  111 +-
 mm/khugepaged.c                                    |    3 +
 mm/kmemleak.c                                      |  190 +-
 mm/memcontrol.c                                    |    2 +-
 mm/memory_hotplug.c                                |    3 +-
 mm/mempolicy.c                                     |    2 +
 mm/migrate.c                                       |   27 +-
 mm/mlock.c                                         |    2 +-
 mm/mmap.c                                          |  100 +-
 mm/mremap.c                                        |   70 +-
 mm/page_alloc.c                                    |   14 +-
 mm/page_table_check.c                              |   20 +-
 mm/pagewalk.c                                      |    8 +
 mm/ptdump.c                                        |    7 +
 mm/readahead.c                                     |   13 -
 mm/rmap.c                                          |    6 +-
 mm/secretmem.c                                     |  119 +-
 mm/shmem.c                                         |   13 +-
 mm/slab.h                                          |    5 +
 mm/slub.c                                          |    9 +-
 mm/userfaultfd.c                                   |   22 +-
 mm/vmalloc.c                                       |    4 +-
 mm/vmscan.c                                        |   18 +-
 net/8021q/vlan.c                                   |    7 +-
 net/8021q/vlan_dev.c                               |   65 +-
 net/9p/trans_fd.c                                  |    1 +
 net/9p/trans_xen.c                                 |   79 +-
 net/ax25/af_ax25.c                                 |   30 +-
 net/ax25/ax25_route.c                              |   74 -
 net/bluetooth/6lowpan.c                            |   49 +-
 net/bluetooth/af_bluetooth.c                       |   10 +-
 net/bluetooth/hci_conn.c                           |   98 +-
 net/bluetooth/hci_core.c                           |   45 +-
 net/bluetooth/hci_debugfs.c                        |    2 +-
 net/bluetooth/hci_event.c                          |  129 +-
 net/bluetooth/hci_request.c                        |    2 +-
 net/bluetooth/hci_sock.c                           |    2 +
 net/bluetooth/hci_sync.c                           |   43 +-
 net/bluetooth/iso.c                                |  129 +-
 net/bluetooth/l2cap_core.c                         |   64 +-
 net/bluetooth/l2cap_sock.c                         |   59 +-
 net/bluetooth/mgmt.c                               |  273 +-
 net/bluetooth/mgmt_util.c                          |   46 +
 net/bluetooth/mgmt_util.h                          |    3 +
 net/bluetooth/rfcomm/core.c                        |  134 +-
 net/bluetooth/rfcomm/sock.c                        |    5 +-
 net/bluetooth/rfcomm/tty.c                         |    9 +-
 net/bluetooth/sco.c                                |    6 +-
 net/bridge/br_arp_nd_proxy.c                       |   24 +-
 net/bridge/br_cfm.c                                |   11 +-
 net/bridge/br_device.c                             |    1 -
 net/bridge/br_input.c                              |   35 +-
 net/bridge/br_mrp.c                                |   13 +-
 net/bridge/br_multicast.c                          |   45 +-
 net/bridge/br_private.h                            |   26 +-
 net/bridge/netfilter/ebt_dnat.c                    |    4 +-
 net/bridge/netfilter/ebt_redirect.c                |   16 +-
 net/bridge/netfilter/ebtable_broute.c              |    2 +-
 net/bridge/netfilter/ebtable_filter.c              |    2 +-
 net/bridge/netfilter/ebtable_nat.c                 |    2 +-
 net/bridge/netfilter/ebtables.c                    |   71 +-
 net/can/af_can.c                                   |    6 +-
 net/can/bcm.c                                      |    2 +
 net/can/isotp.c                                    |   11 +-
 net/can/j1939/socket.c                             |    1 +
 net/can/j1939/transport.c                          |    2 +
 net/can/raw.c                                      |    7 +-
 net/ceph/auth_x.c                                  |    5 +
 net/ceph/messenger.c                               |    1 +
 net/core/bpf_sk_storage.c                          |    2 -
 net/core/dev.c                                     |   75 +-
 net/core/dst.c                                     |    8 +
 net/core/filter.c                                  |    4 +-
 net/core/flow_dissector.c                          |   26 +-
 net/core/netpoll.c                                 |   10 +-
 net/core/page_pool.c                               |    3 +-
 net/core/pktgen.c                                  |    5 +-
 net/core/secure_seq.c                              |   80 +-
 net/core/skmsg.c                                   |   22 +-
 net/core/sock.c                                    |   30 +-
 net/dccp/timer.c                                   |    4 +-
 net/dsa/dsa2.c                                     |   35 +-
 net/ethtool/channels.c                             |    9 +-
 net/ethtool/ioctl.c                                |   11 +-
 net/hsr/hsr_framereg.c                             |    4 +-
 net/ieee802154/core.c                              |    8 +-
 net/ife/ife.c                                      |   14 +-
 net/ipv4/af_inet.c                                 |    1 +
 net/ipv4/esp4.c                                    |    8 +-
 net/ipv4/fib_semantics.c                           |    5 +-
 net/ipv4/fib_trie.c                                |    2 -
 net/ipv4/igmp.c                                    |   14 +-
 net/ipv4/inet_connection_sock.c                    |   10 +-
 net/ipv4/inet_diag.c                               |    4 +-
 net/ipv4/ipconfig.c                                |   90 +-
 net/ipv4/ipmr.c                                    |    6 +-
 net/ipv4/ipmr_base.c                               |    2 +-
 net/ipv4/netfilter/iptable_nat.c                   |    4 +-
 net/ipv4/netfilter/nft_dup_ipv4.c                  |    3 +-
 net/ipv4/nexthop.c                                 |  115 +-
 net/ipv4/route.c                                   |    9 +-
 net/ipv4/syncookies.c                              |   10 +-
 net/ipv4/tcp.c                                     |   18 +-
 net/ipv4/tcp_cong.c                                |    4 +-
 net/ipv4/tcp_dctcp.c                               |    4 +-
 net/ipv4/tcp_fastopen.c                            |    7 +-
 net/ipv4/tcp_input.c                               |   70 +-
 net/ipv4/tcp_ipv4.c                                |   43 +-
 net/ipv4/tcp_metrics.c                             |    6 +-
 net/ipv4/tcp_minisocks.c                           |   16 +-
 net/ipv4/tcp_output.c                              |    8 +-
 net/ipv4/tcp_timer.c                               |    5 +-
 net/ipv4/udp.c                                     |   65 +
 net/ipv4/udp_bpf.c                                 |    9 +
 net/ipv4/udp_tunnel_nic.c                          |   32 +-
 net/ipv4/xfrm4_input.c                             |    5 +-
 net/ipv6/esp6.c                                    |    8 +-
 net/ipv6/exthdrs.c                                 |   26 +-
 net/ipv6/ioam6.c                                   |   32 +-
 net/ipv6/ioam6_iptunnel.c                          |    9 +-
 net/ipv6/ip6_flowlabel.c                           |   20 +
 net/ipv6/ip6_gre.c                                 |    5 -
 net/ipv6/ip6_input.c                               |    1 +
 net/ipv6/ip6_output.c                              |   30 +-
 net/ipv6/ip6mr.c                                   |    5 +-
 net/ipv6/netfilter/ip6table_nat.c                  |    4 +-
 net/ipv6/netfilter/nft_dup_ipv6.c                  |    3 +-
 net/ipv6/route.c                                   |    6 +-
 net/ipv6/rpl_iptunnel.c                            |    9 +-
 net/ipv6/seg6_iptunnel.c                           |    2 +-
 net/ipv6/syncookies.c                              |   11 +-
 net/ipv6/tcp_ipv6.c                                |   43 +-
 net/ipv6/udp.c                                     |   50 +
 net/ipv6/xfrm6_input.c                             |    5 +-
 net/iucv/af_iucv.c                                 |   42 +-
 net/kcm/kcmsock.c                                  |   21 +-
 net/l2tp/l2tp_core.c                               |   16 +-
 net/l2tp/l2tp_core.h                               |    3 +-
 net/l2tp/l2tp_debugfs.c                            |    4 +
 net/l2tp/l2tp_netlink.c                            |   20 +-
 net/l2tp/l2tp_ppp.c                                |  151 +-
 net/mac80211/agg-rx.c                              |    2 +-
 net/mac80211/chan.c                                |   37 +-
 net/mac80211/fils_aead.c                           |    8 +
 net/mac80211/ibss.c                                |    9 +-
 net/mac80211/mesh_pathtbl.c                        |   16 +-
 net/mac80211/mlme.c                                |   10 +-
 net/mac80211/rc80211_minstrel_ht.c                 |   30 +-
 net/mac80211/sta_info.c                            |   85 +-
 net/mac80211/tx.c                                  |   11 +
 net/mctp/device.c                                  |   21 +-
 net/mctp/route.c                                   |   43 +-
 net/mpls/af_mpls.c                                 |   40 +-
 net/mptcp/options.c                                |   70 +-
 net/mptcp/pm_netlink.c                             |   10 +-
 net/mptcp/pm_userspace.c                           |   37 +-
 net/mptcp/protocol.c                               |   45 +-
 net/mptcp/protocol.h                               |   11 +-
 net/ncsi/ncsi-manage.c                             |    2 +
 net/netfilter/core.c                               |    6 +-
 net/netfilter/ipset/ip_set_bitmap_gen.h            |    2 +-
 net/netfilter/ipvs/ip_vs_conn.c                    |    3 +
 net/netfilter/ipvs/ip_vs_core.c                    |   11 +-
 net/netfilter/ipvs/ip_vs_lblc.c                    |    4 +
 net/netfilter/ipvs/ip_vs_lblcr.c                   |    3 +
 net/netfilter/ipvs/ip_vs_sync.c                    |   33 +-
 net/netfilter/ipvs/ip_vs_xmit.c                    |   49 +-
 net/netfilter/nf_conntrack_bpf.c                   |   85 +-
 net/netfilter/nf_conntrack_core.c                  |   39 +-
 net/netfilter/nf_conntrack_expect.c                |  148 +-
 net/netfilter/nf_conntrack_h323_main.c             |    4 +-
 net/netfilter/nf_conntrack_helper.c                |   10 +-
 net/netfilter/nf_conntrack_netlink.c               |   24 +-
 net/netfilter/nf_conntrack_sip.c                   |   13 +-
 net/netfilter/nf_conntrack_timeout.c               |   27 +-
 net/netfilter/nf_flow_table_ip.c                   |    3 +
 net/netfilter/nf_nat_bpf.c                         |    3 +
 net/netfilter/nf_nat_core.c                        |   15 +-
 net/netfilter/nf_synproxy_core.c                   |   40 +-
 net/netfilter/nf_tables_api.c                      |  149 +-
 net/netfilter/nf_tables_core.c                     |    6 +-
 net/netfilter/nf_tables_trace.c                    |    2 +-
 net/netfilter/nfnetlink_cttimeout.c                |  114 +-
 net/netfilter/nfnetlink_log.c                      |   23 +-
 net/netfilter/nfnetlink_queue.c                    |  186 +-
 net/netfilter/nft_bitwise.c                        |   21 +-
 net/netfilter/nft_byteorder.c                      |   16 +-
 net/netfilter/nft_cmp.c                            |    9 +-
 net/netfilter/nft_compat.c                         |   33 +-
 net/netfilter/nft_connlimit.c                      |    3 +-
 net/netfilter/nft_counter.c                        |    3 +-
 net/netfilter/nft_ct.c                             |   24 +-
 net/netfilter/nft_dup_netdev.c                     |    3 +-
 net/netfilter/nft_dynset.c                         |   28 +-
 net/netfilter/nft_exthdr.c                         |    9 +-
 net/netfilter/nft_fib.c                            |   11 +-
 net/netfilter/nft_fib_netdev.c                     |   29 +-
 net/netfilter/nft_flow_offload.c                   |   14 +-
 net/netfilter/nft_fwd_netdev.c                     |    6 +-
 net/netfilter/nft_hash.c                           |    4 +-
 net/netfilter/nft_immediate.c                      |    3 +-
 net/netfilter/nft_last.c                           |    3 +-
 net/netfilter/nft_limit.c                          |    5 +-
 net/netfilter/nft_log.c                            |    3 +-
 net/netfilter/nft_lookup.c                         |   17 +-
 net/netfilter/nft_masq.c                           |    3 +-
 net/netfilter/nft_meta.c                           |    5 +-
 net/netfilter/nft_nat.c                            |    3 +-
 net/netfilter/nft_numgen.c                         |    6 +-
 net/netfilter/nft_objref.c                         |    6 +-
 net/netfilter/nft_osf.c                            |    3 +-
 net/netfilter/nft_payload.c                        |    6 +-
 net/netfilter/nft_queue.c                          |    6 +-
 net/netfilter/nft_quota.c                          |    3 +-
 net/netfilter/nft_range.c                          |    3 +-
 net/netfilter/nft_redir.c                          |    3 +-
 net/netfilter/nft_reject.c                         |    3 +-
 net/netfilter/nft_rt.c                             |    2 +-
 net/netfilter/nft_set_bitmap.c                     |    4 +-
 net/netfilter/nft_set_hash.c                       |    8 +-
 net/netfilter/nft_set_pipapo.c                     |   26 +-
 net/netfilter/nft_set_rbtree.c                     |   10 +-
 net/netfilter/nft_socket.c                         |    2 +-
 net/netfilter/nft_synproxy.c                       |    3 +-
 net/netfilter/nft_tproxy.c                         |    2 +-
 net/netfilter/nft_tunnel.c                         |    2 +-
 net/netfilter/nft_xfrm.c                           |    2 +-
 net/netfilter/xt_CT.c                              |    2 +-
 net/netfilter/xt_IDLETIMER.c                       |   52 +-
 net/netlink/af_netlink.c                           |    6 +-
 net/netlink/genetlink.c                            |   28 +-
 net/nfc/nci/core.c                                 |    9 +
 net/openvswitch/actions.c                          |    7 +-
 net/openvswitch/conntrack.c                        |   71 +-
 net/openvswitch/datapath.c                         |    8 +
 net/packet/af_packet.c                             |  103 +-
 net/phonet/socket.c                                |   10 +-
 net/qrtr/mhi.c                                     |   61 +-
 net/rds/rdma_transport.c                           |   38 +-
 net/rds/tcp.c                                      |   66 +-
 net/rxrpc/ar-internal.h                            |    9 +-
 net/rxrpc/call_accept.c                            |    5 +
 net/rxrpc/conn_event.c                             |   34 +-
 net/rxrpc/output.c                                 |   12 +-
 net/rxrpc/peer_event.c                             |   17 +-
 net/rxrpc/proc.c                                   |    4 +-
 net/rxrpc/recvmsg.c                                |   16 +-
 net/rxrpc/rxkad.c                                  |    5 +-
 net/sched/act_api.c                                |   46 +-
 net/sched/act_ife.c                                |   32 +-
 net/sched/act_mirred.c                             |   14 +-
 net/sched/act_pedit.c                              |   11 +-
 net/sched/cls_api.c                                |   93 +-
 net/sched/cls_basic.c                              |    6 +-
 net/sched/cls_bpf.c                                |    8 +-
 net/sched/cls_cgroup.c                             |    2 +-
 net/sched/cls_flow.c                               |    2 +-
 net/sched/cls_flower.c                             |   34 +-
 net/sched/cls_fw.c                                 |    4 +-
 net/sched/cls_matchall.c                           |    6 +-
 net/sched/cls_route.c                              |    4 +-
 net/sched/cls_u32.c                                |   23 +-
 net/sched/em_text.c                                |    3 +
 net/sched/sch_cake.c                               |    2 +-
 net/sched/sch_codel.c                              |   14 +-
 net/sched/sch_drr.c                                |    2 +-
 net/sched/sch_ets.c                                |    2 +-
 net/sched/sch_fifo.c                               |   13 +-
 net/sched/sch_fq.c                                 |   18 +-
 net/sched/sch_fq_codel.c                           |   18 +-
 net/sched/sch_fq_pie.c                             |   14 +-
 net/sched/sch_generic.c                            |   47 +-
 net/sched/sch_gred.c                               |    4 +-
 net/sched/sch_hfsc.c                               |    2 +-
 net/sched/sch_hhf.c                                |   12 +-
 net/sched/sch_htb.c                                |    2 +-
 net/sched/sch_multiq.c                             |    2 +-
 net/sched/sch_netem.c                              |    5 +-
 net/sched/sch_pie.c                                |   12 +-
 net/sched/sch_plug.c                               |    2 +-
 net/sched/sch_prio.c                               |    2 +-
 net/sched/sch_qfq.c                                |    2 +-
 net/sched/sch_sfb.c                                |    2 +-
 net/sched/sch_sfq.c                                |    2 +-
 net/sctp/bind_addr.c                               |   11 +-
 net/sctp/inqueue.c                                 |    6 +-
 net/sctp/ipv6.c                                    |   10 +-
 net/sctp/protocol.c                                |    5 +-
 net/sctp/sm_make_chunk.c                           |   17 +-
 net/sctp/sm_statefuns.c                            |   36 +-
 net/sctp/socket.c                                  |   39 +-
 net/smc/af_smc.c                                   |  117 +-
 net/smc/smc.h                                      |    6 +-
 net/strparser/strparser.c                          |    6 +-
 net/sunrpc/auth_gss/gss_krb5_mech.c                |   17 +-
 net/sunrpc/auth_gss/gss_krb5_unseal.c              |    3 +
 net/sunrpc/auth_gss/gss_rpc_xdr.c                  |   15 +-
 net/sunrpc/auth_gss/svcauth_gss.c                  |  193 +-
 net/sunrpc/clnt.c                                  |   22 +-
 net/sunrpc/svc.c                                   |   13 +-
 net/sunrpc/svcsock.c                               |    3 +
 net/sunrpc/xdr.c                                   |    7 -
 net/sunrpc/xprtrdma/svc_rdma_pcl.c                 |    2 +-
 net/sunrpc/xprtrdma/svc_rdma_recvfrom.c            |   22 +-
 net/sunrpc/xprtrdma/svc_rdma_rw.c                  |   36 +-
 net/sunrpc/xprtrdma/svc_rdma_sendto.c              |   47 +-
 net/sunrpc/xprtrdma/svc_rdma_transport.c           |  125 +-
 net/sunrpc/xprtsock.c                              |   29 +-
 net/tipc/core.c                                    |    4 +-
 net/tipc/crypto.c                                  |   20 +-
 net/tipc/node.c                                    |   12 +-
 net/tipc/topsrv.c                                  |   80 +-
 net/tipc/udp_media.c                               |   75 +-
 net/tls/tls_device.c                               |    4 +-
 net/tls/tls_sw.c                                   |    2 +
 net/vmw_vsock/af_vsock.c                           |   55 +-
 net/vmw_vsock/virtio_transport_common.c            |    3 +-
 net/wireless/core.c                                |   39 +-
 net/wireless/core.h                                |    4 +-
 net/wireless/lib80211_crypt_tkip.c                 |   13 +-
 net/wireless/nl80211.c                             |   13 +-
 net/wireless/pmsr.c                                |    6 +-
 net/wireless/scan.c                                |   38 +-
 net/wireless/sme.c                                 |    6 +-
 net/xfrm/espintcp.c                                |    1 +
 net/xfrm/xfrm_device.c                             |   19 +-
 net/xfrm/xfrm_input.c                              |   15 +-
 net/xfrm/xfrm_policy.c                             |   21 +-
 net/xfrm/xfrm_state.c                              |  144 +-
 net/xfrm/xfrm_user.c                               |   10 +-
 samples/ftrace/ftrace-direct-multi-modify.c        |   13 +-
 samples/pidfd/Makefile                             |    2 +-
 security/apparmor/domain.c                         |   27 +-
 security/apparmor/include/cred.h                   |    6 +-
 security/apparmor/include/label.h                  |    6 +-
 security/apparmor/include/match.h                  |   12 +-
 security/apparmor/include/policy.h                 |    2 +
 security/apparmor/include/task.h                   |   17 +-
 security/apparmor/match.c                          |   22 +-
 security/apparmor/policy.c                         |   21 +-
 security/apparmor/task.c                           |   32 +-
 security/integrity/ima/ima_appraise.c              |   21 +-
 security/integrity/ima/ima_kexec.c                 |   35 +
 security/keys/key.c                                |   19 +-
 security/keys/keyctl.c                             |   15 +-
 security/keys/keyring.c                            |  150 +-
 security/keys/persistent.c                         |   55 +-
 security/keys/process_keys.c                       |    5 +-
 security/keys/trusted-keys/trusted_tpm1.c          |    6 +-
 security/keys/trusted-keys/trusted_tpm2.c          |    2 +-
 security/landlock/fs.c                             |   10 +-
 security/selinux/avc.c                             |    5 +-
 security/selinux/hooks.c                           |    9 +-
 security/selinux/selinuxfs.c                       |   40 +-
 security/selinux/ss/policydb.c                     |    4 +
 sound/core/oss/mixer_oss.c                         |   32 +
 sound/core/oss/pcm_oss.c                           |   29 +-
 sound/core/seq/oss/seq_oss_event.c                 |    6 +-
 sound/core/seq/oss/seq_oss_event.h                 |    3 +-
 sound/core/seq/oss/seq_oss_ioctl.c                 |    5 +-
 sound/core/seq/oss/seq_oss_midi.c                  |    6 +-
 sound/core/seq/oss/seq_oss_midi.h                  |    2 +-
 sound/core/seq/oss/seq_oss_readq.c                 |   85 +-
 sound/core/seq/oss/seq_oss_rw.c                    |    5 +-
 sound/core/seq/seq_clientmgr.c                     |   60 +-
 sound/core/seq/seq_compat.c                        |    4 +-
 sound/core/seq/seq_fifo.c                          |   98 +-
 sound/core/seq/seq_fifo.h                          |    1 +
 sound/drivers/mtpav.c                              |    6 +-
 sound/pci/hda/cs35l41_hda.c                        |   74 +-
 sound/pci/hda/cs35l41_hda.h                        |    4 +
 sound/soc/amd/acp/acp-mach-common.c                |  371 ++-
 sound/soc/amd/yc/acp6x-mach.c                      |    7 +
 sound/soc/codecs/adau1372.c                        |   18 +-
 sound/soc/codecs/cs42l52.c                         |    2 +-
 sound/soc/codecs/cs42l56.c                         |    2 +-
 sound/soc/codecs/hdac_hda.c                        |    4 +-
 sound/soc/codecs/max98371.c                        |    2 +-
 sound/soc/codecs/nau8822.c                         |    4 +-
 sound/soc/codecs/pcm3168a.c                        |    2 +-
 sound/soc/codecs/rt274.c                           |    4 +-
 sound/soc/codecs/rt286.c                           |    2 +-
 sound/soc/codecs/tas2562.c                         |    8 +-
 sound/soc/codecs/wm8903.c                          |    2 +-
 sound/soc/codecs/wm8978.c                          |    4 +-
 sound/soc/intel/avs/pcm.c                          |    6 +-
 sound/soc/qcom/lpass-cdc-dma.c                     |    2 +-
 sound/soc/qcom/lpass-cpu.c                         |    4 +-
 sound/soc/qcom/qdsp6/q6asm.c                       |    5 +
 sound/soc/samsung/i2s.c                            |    8 +
 sound/soc/soc-topology.c                           |   37 +-
 sound/soc/sof/intel/hda.c                          |    5 +
 sound/soc/sof/ipc4-pcm.c                           |   17 +-
 sound/soc/sof/ipc4-topology.c                      |    7 +-
 sound/soc/stm/stm32_spdifrx.c                      |    2 +-
 sound/soc/tegra/tegra186_asrc.c                    |    2 +-
 sound/usb/caiaq/device.c                           |    3 +
 sound/usb/card.h                                   |    3 +-
 sound/usb/endpoint.c                               |   16 +-
 sound/usb/line6/playback.c                         |    7 +
 sound/usb/misc/ua101.c                             |    9 +
 sound/usb/pcm.c                                    |    3 +-
 sound/usb/quirks.c                                 |    4 +-
 tools/gpio/Makefile                                |    6 +
 tools/perf/tests/bpf.c                             |    3 +-
 tools/perf/util/parse-events.c                     |    2 +-
 tools/testing/cxl/test/cxl.c                       |   14 +-
 tools/testing/selftests/bpf/progs/bpf_iter_tcp4.c  |    4 +-
 tools/testing/selftests/bpf/progs/bpf_iter_tcp6.c  |    4 +-
 .../selftests/bpf/progs/test_global_func16.c       |    2 +-
 .../selftests/bpf/verifier/atomic_cmpxchg.c        |   11 -
 tools/testing/selftests/bpf/verifier/basic_stack.c |   12 +-
 tools/testing/selftests/bpf/verifier/calls.c       |    4 +-
 tools/testing/selftests/bpf/verifier/raw_stack.c   |    8 +-
 tools/testing/selftests/bpf/verifier/var_off.c     |   57 +-
 .../test.d/filter/event-filter-incomplete.tc       |   24 +
 .../testing/selftests/net/forwarding/tc_actions.sh |    3 -
 tools/testing/selftests/net/tls.c                  |  584 ++++
 tools/testing/selftests/vm/memfd_secret.c          |   30 +-
 virt/kvm/kvm_main.c                                |    3 +-
 1911 files changed, 31056 insertions(+), 45393 deletions(-)
author maintainer
#15 lore raw

PATCH 15/1887 io_uring/sqpoll: let the thread sleep on disabled rings

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit d492dcbb3b81c1c2d0aabef41fa1307093f3a556 upstream.

__io_sq_thread() doesn't submit anything as long as the ring has IORING_SETUP_R_DISABLED set. The check that keeps the SQPOLL thread from going to sleep while the SQ ring holds entries doesn't know about that. If an application fills in SQEs first and enables the ring later, the thread finds that there is work each time it is about to sleep, goes around, doesn't submit it, and so on. It uses up a CPU until the ring gets enabled.

Entries in the SQ ring of a disabled ring are no reason to stay awake. io_register_enable_rings() clears the flag and then wakes the thread, and the flag is looked at after prepare_to_wait(), so the thread can't miss that.

Fixes 0298ef969a11 ("io_uring: clean R_DISABLED startup mess")
Assisted-by LLM
---
 io_uring/sqpoll.c |    7 +++++++
 1 file changed, 7 insertions(+)
io_uring/sqpoll.c +7 -0
@@ -293,6 +293,13 @@ static int io_sq_thread(void *data)
 				 */
 				smp_mb__after_atomic();
 
+				/*
+				 * Nothing gets submitted before the ring is
+				 * enabled, which comes with a wake up.
+				 */
+				if (READ_ONCE(ctx->flags) & IORING_SETUP_R_DISABLED)
+					continue;
+
 				if (io_sqring_entries(ctx)) {
 					needs_sched = false;
 					break;
author maintainer
#24 lore raw

PATCH 24/1887 apparmor: fix out-of-bounds write when null terminating a label vec

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Hyunwoo Kim <[email protected]>

[ Upstream commit 9f1e40193eef7f047e6b77cfb4b4cafdecd7a123 ]

aa_vec_unique() null terminates at vec[n - dups] when VEC_FLAG_TERMINATE is passed. If the components are all distinct no duplicates are dropped, dups is 0 and the terminator goes to vec[n], so the caller has to provide room for n + 1 entries.

aa_label_strn_parse() sets up its vector with vec_setup(profile, vec, len, gfp) and then calls aa_vec_unique(vec, len, VEC_FLAG_TERMINATE), but vec_setup() does not reserve the terminator entry. Up to LOCAL_VEC_ENTRIES it uses the local array of LOCAL_VEC_ENTRIES pointers, above that it allocates exactly len pointers. The terminator therefore lands one entry past the end of the local array when len is LOCAL_VEC_ENTRIES, and one entry past the end of the allocation when len is larger.

len comes from the number of "//&" separated components in the label name and label_count_strn_entries() does not bound it. An unprivileged task reaches the parse by writing to /proc/self/attr/apparmor/current or through lsm_set_self_attr(2), both of which go through do_setattr(), and the name is parsed before the change_profile permission is checked.
The query_label() path behind the securityfs .access file, which is mode 0666, performs no permission check at all. Every component has to resolve to a loaded profile, so a system with policy loaded is required.

The other two VEC_FLAG_TERMINATE users work on a label vec that aa_label_alloc() has already sized with "+ 1 for null terminator entry on vec". Reserve the same entry in vec_setup() and DEFINE_VEC(). Passing len + 1 from the caller instead would move len == LOCAL_VEC_ENTRIES out of the local array and into kzalloc().

Fixes f1bd904175e8 ("apparmor: add the base fns() for domain labels")
[ replaced unavailable kzalloc_objs() with equivalent kcalloc() allocation ]
---
 security/apparmor/include/label.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
security/apparmor/include/label.h +3 -3
index 9887bfbab0f3d..43565faae2ba5 100644
@@ -22,7 +22,7 @@ struct aa_ns;
 
 #define LOCAL_VEC_ENTRIES 8
 #define DEFINE_VEC(T, V)						\
-	struct aa_ ## T *(_ ## V ## _localtmp)[LOCAL_VEC_ENTRIES];	\
+	struct aa_ ## T *(_ ## V ## _localtmp)[LOCAL_VEC_ENTRIES + 1];	\
 	struct aa_ ## T **(V)
 
 #define vec_setup(T, V, N, GFP)						\
@@ -30,10 +30,10 @@ struct aa_ns;
 	if ((N) <= LOCAL_VEC_ENTRIES) {					\
 		typeof(N) i;						\
 		(V) = (_ ## V ## _localtmp);				\
-		for (i = 0; i < (N); i++)				\
+		for (i = 0; i <= (N); i++)				\
 			(V)[i] = NULL;					\
 	} else								\
-		(V) = kzalloc(sizeof(struct aa_ ## T *) * (N), (GFP));	\
+		(V) = kcalloc((N) + 1, sizeof(struct aa_ ## T *), (GFP)); \
 	(V) ? 0 : -ENOMEM;						\
 })
 
Signature · 1 line
2.53.0
author maintainer
#25 lore raw

PATCH 25/1887 nfsd: fix nfsd_file leak on inter-server COPY setup failure

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Jeff Layton <[email protected]>

[ Upstream commit 88a76145451d703eedd867b5989bf73d17340399 ]

When nfsd4_setup_inter_ssc() fails, nfsd4_copy() returns nfserr_offload_denied directly, bypassing the out: label where release_copy_files() would drop the nf_dst reference taken by nfs4_preprocess_stateid_op(). Each failed inter-server COPY leaks one nfsd_file, pinning file/inode/dentry/vfsmount.

Fix by setting status and jumping to out: instead of returning directly.

Fixes ce0887ac96d3 ("NFSD add nfs4 inter ssc to nfsd4_copy")
Assisted-by kres:claude-opus-4-7
[ adjusted cleanup paths to omit unavailable trace_nfsd_copy_*() calls ]
---
 fs/nfsd/nfs4proc.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
fs/nfsd/nfs4proc.c +5 -3
index 20c3869a9ab91..7486c470fe6f1 100644
@@ -1777,12 +1777,14 @@ nfsd4_copy(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
 			goto out;
 		}
 		status = nfsd4_setup_inter_ssc(rqstp, cstate, copy);
-		if (status)
-			return nfserr_offload_denied;
+		if (status) {
+			status = nfserr_offload_denied;
+			goto out;
+		}
 	} else {
 		status = nfsd4_setup_intra_ssc(rqstp, cstate, copy);
 		if (status)
-			return status;
+			goto out;
 	}
 
 	memcpy(&copy->fh, &cstate->current_fh.fh_handle,
Signature · 1 line
2.53.0
author maintainer
#26 lore raw

PATCH 26/1887 ceph: bound copied dentry name length in NFS export get_name

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Michael Bommarito <[email protected]>

[ Upstream commit eff8013c5a8916613c742ae5a2cc341cb605c0ae ]

ceph_get_name() copies the MDS-supplied name into the caller's NAME_MAX-sized buffer with memcpy(name, rinfo->dname, rinfo->dname_len) and then writes name[rinfo->dname_len] = 0, without checking dname_len against NAME_MAX. A malicious or buggy MDS that returns a LOOKUPNAME reply with dname_len > NAME_MAX overflows the buffer. __get_snap_name() copies rde->name / rde->name_len the same unchecked way.

Impact: a malicious or compromised Ceph MDS overflows the NAME_MAX name buffer in a client's NFS-export get_name path, a slab out-of-bounds write reported by KASAN. Reachable when a CephFS mount is re-exported over NFS.

Add ceph_export_copy_name(), which rejects lengths above NAME_MAX with -ENAMETOOLONG before the copy, and use it in both ceph_get_name() and __get_snap_name().

Fixes 19913b4eac4a ("ceph: add get_name() NFS export callback")
Assisted-by Claude:claude-opus-4-8
[ adapted the bounds check to the older ceph_get_name() flow without encrypted-name handling. ]
---
 fs/ceph/export.c | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)
fs/ceph/export.c +18 -5
index 23b945320c554..c2d3ca5417e9c 100644
@@ -433,6 +433,16 @@ static struct dentry *ceph_fh_to_parent(struct super_block *sb,
 	return dentry;
 }
 
+static int ceph_export_copy_name(char *name, const char *src, u32 len)
+{
+	if (len > NAME_MAX)
+		return -ENAMETOOLONG;
+
+	memcpy(name, src, len);
+	name[len] = '\0';
+	return 0;
+}
+
 static int __get_snap_name(struct dentry *parent, char *name,
 			   struct dentry *child)
 {
@@ -498,9 +508,8 @@ static int __get_snap_name(struct dentry *parent, char *name,
 			BUG_ON(!rde->inode.in);
 			if (ceph_snap(inode) ==
 			    le64_to_cpu(rde->inode.in->snapid)) {
-				memcpy(name, rde->name, rde->name_len);
-				name[rde->name_len] = '\0';
-				err = 0;
+				err = ceph_export_copy_name(name, rde->name,
+							    rde->name_len);
 				goto out;
 			}
 		}
@@ -562,8 +571,12 @@ static int ceph_get_name(struct dentry *parent, char *name,
 
 	if (!err) {
 		struct ceph_mds_reply_info_parsed *rinfo = &req->r_reply_info;
-		memcpy(name, rinfo->dname, rinfo->dname_len);
-		name[rinfo->dname_len] = 0;
+
+		err = ceph_export_copy_name(name, rinfo->dname,
+					    rinfo->dname_len);
+	}
+
+	if (!err) {
 		dout("get_name %p ino %llx.%llx name %s\n",
 		     child, ceph_vinop(inode), name);
 	} else {
Signature · 1 line
2.53.0
author maintainer
#27 lore raw

PATCH 27/1887 smb: client: fix OOB read/write from unvalidated DataOffset in coalesce_t2()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Frank Sorenson <[email protected]>

[ Upstream commit 6343c1da561962688f203362d80d6a3bfa39fa1b ]

coalesce_t2() computes data pointers directly from server-supplied DataOffset fields with no validation against buffer bounds:

  data_area_of_tgt = (char *)&pSMBt->hdr.Protocol +
                     get_unaligned_le16(&pSMBt->t2_rsp.DataOffset);
  data_area_of_src = (char *)&pSMBs->hdr.Protocol +
                     get_unaligned_le16(&pSMBs->t2_rsp.DataOffset);
  data_area_of_tgt += total_in_tgt;
  ...
  memcpy(data_area_of_tgt, data_area_of_src, total_in_src);

A small DataOffset can push a pointer below the actual byte area, overwriting header fields; a large one can push it past the buffer end, causing out-of-bounds heap reads (source) or writes (target). The BCC overflow guard does not prevent this: BCC reflects how much data is present, while DataOffset controls where in the buffer it starts.

The "validate target area" comment present since the function was first written in 2005 was a placeholder that was never implemented.

Add lower- and upper-bound checks for both data pointers before the memcpy, and before any target header fields are modified.

Fixes e4eb295d38b5 ("[PATCH] cifs: Handle multiple response transact2 part 1 of 2")
[ transplanted the bounds validation to coalesce_t2() in smb1ops.c due to code relocation ]
---
 fs/smb/client/smb1ops.c | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)
fs/smb/client/smb1ops.c +20 -1
index 1489b9d21b609..5c570cd238845 100644
@@ -325,12 +325,31 @@ coalesce_t2(char *second_buf, struct smb_hdr *target_hdr)
 	data_area_of_tgt = (char *)&pSMBt->hdr.Protocol +
 				get_unaligned_le16(&pSMBt->t2_rsp.DataOffset);
 
-	/* validate target area */
 	data_area_of_src = (char *)&pSMBs->hdr.Protocol +
 				get_unaligned_le16(&pSMBs->t2_rsp.DataOffset);
 
 	data_area_of_tgt += total_in_tgt;
 
+	/*
+	 * DataOffset fields are server-supplied and not validated against
+	 * buffer bounds; check both data pointers before mutating the
+	 * target header.
+	 */
+	if (data_area_of_tgt < (char *)target_hdr +
+				sizeof(struct smb_t2_rsp) + sizeof(__le16) ||
+	    data_area_of_tgt + total_in_src >
+	    (char *)target_hdr + CIFSMaxBufSize + MAX_CIFS_HDR_SIZE) {
+		cifs_dbg(VFS, "%s: target data area out of bounds\n", __func__);
+		return -EPROTO;
+	}
+	if (data_area_of_src < second_buf +
+				sizeof(struct smb_t2_rsp) + sizeof(__le16) ||
+	    data_area_of_src + total_in_src >
+	    second_buf + smbCalcSize((struct smb_hdr *)second_buf)) {
+		cifs_dbg(VFS, "%s: secondary data area out of bounds\n", __func__);
+		return -EPROTO;
+	}
+
 	total_in_tgt += total_in_src;
 	/* is the result too big for the field? */
 	if (total_in_tgt > USHRT_MAX) {
Signature · 1 line
2.53.0
author maintainer
#28 lore raw

PATCH 28/1887 HID: sony: fix UAF of ghl_poke_timer / ghl_urb at driver unbind

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Doruk Tan Ozturk <[email protected]>

[ Upstream commit a26705bd2e2728833e7a538ce91e58a5eeff496a ]

For GHL (Guitar Hero Live) dongles, sony_probe() arms a periodic timer:
ghl_magic_poke() (the timer callback) submits sc->ghl_urb, and the URB completion ghl_magic_poke_cb() re-arms the timer with mod_timer().

sony_remove() drained the timer with timer_delete_sync() and then freed the URB with usb_free_urb():

	timer_delete_sync(&sc->ghl_poke_timer);
	usb_free_urb(sc->ghl_urb);

timer_delete_sync() does not block re-arming, and while the URB is in flight the timer is not pending, so the sync delete is a no-op. A URB completion that runs after the delete re-arms the timer, and usb_free_urb() only drops a reference -- it does not kill an in-flight URB. sc is allocated with devm_kzalloc() and freed once sony_remove() returns, so the re-armed ghl_poke_timer (embedded in sc) then fires on freed memory, a use-after-free from timer softirq. This is a disconnect/rmmod race.

Poison the URB first, then shut the timer down, before freeing the URB. usb_poison_urb() kills any in-flight URB and permanently rejects further submissions, so a poke timer that is still pending cannot re-submit the URB from ghl_magic_poke() in the window before timer_shutdown_sync() runs. usb_kill_urb() would not suffice: it only cancels the in-flight URB and leaves it submittable once it returns, so the pending timer could re-submit it and put a fresh URB in flight over the freed sc. timer_shutdown_sync() then drains any last callback and blocks re-arming. The probe error path is unaffected: it is only reached before the timer is armed.

Reproduced under KASAN on next-20260710 via dummy_hcd + raw-gadget emulation of the GHL PS4 dongle (VID 0x1430 / PID 0x07bb): hid-sony binds and arms the poke timer, the poke URB is held in flight, the driver is unbound (freeing sc), then the URB is released. The completion re-arms the timer on the freed sc, and the re-armed timer fires ~8 s later:

  BUG: KASAN: slab-use-after-free in ghl_magic_poke+0x98/0xb0
  Read of size 8 at addr ffff88810b02fd50 by task swapper/0/0
   ghl_magic_poke+0x98/0xb0
   call_timer_fn+0x35/0x2b0
   __run_timers+0x69c/0x9a0
   run_timer_softirq+0x173/0x2a0
  Allocated by task 169:  sony_probe
  Freed by task 338:      devres_release_group <- hid_device_remove (sony_remove)

Found by 0sec (https://0sec.ai) using automated source analysis.

Fixes cc894ac55360 ("HID: sony: support for ghlive ps3/wii u dongles")
Assisted-by 0sec:multi-model
[ changed the old del_timer_sync() call to timer_shutdown_sync() ]
---
 drivers/hid/hid-sony.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/hid/hid-sony.c +3 -1
index f7f7252d839ee..01745b5df2e4e 100644
@@ -3085,7 +3085,9 @@ static void sony_remove(struct hid_device *hdev)
 	struct sony_sc *sc = hid_get_drvdata(hdev);
 
 	if (sc->quirks & (GHL_GUITAR_PS3WIIU | GHL_GUITAR_PS4)) {
-		del_timer_sync(&sc->ghl_poke_timer);
+		/* poison, not kill: a pending timer must not re-submit during teardown */
+		usb_poison_urb(sc->ghl_urb);
+		timer_shutdown_sync(&sc->ghl_poke_timer);
 		usb_free_urb(sc->ghl_urb);
 	}
 
Signature · 1 line
2.53.0
author maintainer
#29 lore raw

PATCH 29/1887 nouveau/gem: reserve the bo in the info ioctl around the vma lookup

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Dave Airlie <[email protected]>

[ Upstream commit 5e17160d41d92823f3379c1982e1369680c5ce4d ]

In the non-uvmm path, there could be a race between the info lookup finding the vma, and the gem close path closing the vma leading to a use-after-free.

Spotted with the help of Opus 4.6.

Fixes e758a3111914 ("drm/nouveau: fixup gem_info ioctl to return client-specific bo virtual")
[ adapted VMM and UVMM handling to the legacy direct VMM selection and condition. ]
---
 drivers/gpu/drm/nouveau/nouveau_gem.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)
drivers/gpu/drm/nouveau/nouveau_gem.c +10 -1
index cde21cc0083b1..4c9942f651b6f 100644
@@ -277,11 +277,20 @@ nouveau_gem_info(struct drm_file *file_priv, struct drm_gem_object *gem,
 		rep->domain = NOUVEAU_GEM_DOMAIN_VRAM;
 	rep->offset = nvbo->offset;
 	if (vmm->vmm.object.oclass >= NVIF_CLASS_VMM_NV50) {
+		int ret;
+
+		ret = ttm_bo_reserve(&nvbo->bo, false, false, NULL);
+		if (ret)
+			return ret;
+
 		vma = nouveau_vma_find(nvbo, vmm);
-		if (!vma)
+		if (!vma) {
+			ttm_bo_unreserve(&nvbo->bo);
 			return -EINVAL;
+		}
 
 		rep->offset = vma->addr;
+		ttm_bo_unreserve(&nvbo->bo);
 	}
 
 	rep->size = nvbo->bo.base.size;
Signature · 1 line
2.53.0
author maintainer
#30 lore raw

PATCH 30/1887 ocfs2: validate dx_root extent list fields during block read

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Joseph Qi <[email protected]>

[ Upstream commit 775c17386a6fd695f999d4cda90e3931386570dd ]

Patch series "ocfs2: consolidate extent list validation into block read callbacks".

ocfs2 validates extent list fields (l_count, l_next_free_rec) at various points during extent tree traversal. This is fragile because each caller must remember to check for corrupted on-disk data before using it.

This series moves those checks into the block read validation callbacks (ocfs2_validate_dx_root and ocfs2_validate_extent_block), so corrupted fields are caught early at block read time. Redundant post-read checks are then removed.

This patch (of 4):

Move the extent list l_count validation from ocfs2_dx_dir_lookup_rec() into ocfs2_validate_dx_root(), so that corrupted on-disk fields are caught early at block read time rather than during directory lookups.

Additionally, add a l_next_free_rec <= l_count check to prevent out-of-bounds access when iterating over extent records.

Both checks are skipped for inline dx roots (OCFS2_DX_FLAG_INLINE), which use dr_entries instead of dr_list.

Stable-dep-of: bc70726ddad5 ("ocfs2: validate directory-index entry counts when reading metadata")

---
 fs/ocfs2/dir.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)
fs/ocfs2/dir.c +25 -1
index c85ad5999e848..b758f11738c65 100644
@@ -580,7 +580,7 @@ static int ocfs2_validate_dx_root(struct super_block *sb,
 		mlog(ML_ERROR,
 		     "Checksum failed for dir index root block %llu\n",
 		     (unsigned long long)bh->b_blocknr);
-		return ret;
+		goto bail;
 	}
 
 	if (!OCFS2_IS_VALID_DX_ROOT(dx_root)) {
@@ -588,8 +588,32 @@ static int ocfs2_validate_dx_root(struct super_block *sb,
 				  "Dir Index Root # %llu has bad signature %.*s\n",
 				  (unsigned long long)le64_to_cpu(dx_root->dr_blkno),
 				  7, dx_root->dr_signature);
+		goto bail;
+	}
+
+	if (!(dx_root->dr_flags & OCFS2_DX_FLAG_INLINE)) {
+		struct ocfs2_extent_list *el = &dx_root->dr_list;
+
+		if (le16_to_cpu(el->l_count) != ocfs2_extent_recs_per_dx_root(sb)) {
+			ret = ocfs2_error(sb,
+					  "Dir Index Root # %llu has invalid l_count %u (expected %u)\n",
+					  (unsigned long long)le64_to_cpu(dx_root->dr_blkno),
+					  le16_to_cpu(el->l_count),
+					  ocfs2_extent_recs_per_dx_root(sb));
+			goto bail;
+		}
+
+		if (le16_to_cpu(el->l_next_free_rec) > le16_to_cpu(el->l_count)) {
+			ret = ocfs2_error(sb,
+					  "Dir Index Root # %llu has invalid l_next_free_rec %u (l_count %u)\n",
+					  (unsigned long long)le64_to_cpu(dx_root->dr_blkno),
+					  le16_to_cpu(el->l_next_free_rec),
+					  le16_to_cpu(el->l_count));
+			goto bail;
+		}
 	}
 
+bail:
 	return ret;
 }
 
Signature · 1 line
2.53.0
author maintainer
#31 lore raw

PATCH 31/1887 ocfs2: validate directory-index entry counts when reading metadata

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Doruk Tan Ozturk <[email protected]>

[ Upstream commit bc70726ddad53c7e9a9a85915bf2415b0d4f42f9 ]

ocfs2_validate_dx_leaf() and ocfs2_validate_dx_root() check the ECC and signature of an indexed-directory block before it reaches higher-level callers, but neither validator bounds the ocfs2_dx_entry_list counts against the capacity of the block that holds them.

ocfs2_dx_dir_search() then walks

	for (i = 0; i < le16_to_cpu(entry_list->de_num_used); i++)
		dx_entry = &entry_list->de_entries[i];

over de_num_used entries with no bounds check. entry_list is either dx_leaf->dl_list (from ocfs2_read_dx_leaf) or, for an inline root, dx_root->dr_entries. A crafted on-disk image can set de_num_used (and de_count, which is the __counted_by_le() bound of de_entries) to 0xffff and make the walk read far past the end of the 4KB metadata block, giving a slab out-of-bounds read reachable from any path lookup, stat() or open() on an indexed directory once the image is mounted.

Commit 775c17386a6f ("ocfs2: validate dx_root extent list fields during block read") already bounds dr_list for the non-inline dx_root, but left the inline dr_entries path and the dx_leaf dl_list unchecked. Add the same read-time validation for both entry lists: de_count must equal the capacity of the block (ocfs2_dx_entries_per_leaf()/per_root()) and de_num_used must not exceed de_count, rejecting corrupted metadata with -EFSCORRUPTED before ocfs2_dx_dir_search() can walk an out-of-range entry array.

de_count is always written as exactly the block capacity when a leaf or inline root is formatted, so the equality check does not reject any valid image.

Found by 0sec automated security-research tooling (https://0sec.ai).

Fixes 9b7895efac90 ("ocfs2: Add a name indexed b-tree to directory inodes")
Fixes 4ed8a6bb083b ("ocfs2: Store dir index records inline")
Assisted-by 0sec:claude-opus-4-8
Cc Joel Becker <[email protected]>
Cc Kees Cook <[email protected]>
Cc Mark Fasheh <[email protected]>
Cc Junxiao Bi <[email protected]>
Cc Changwei Ge <[email protected]>
Cc Jun Piao <[email protected]>
Cc Heming Zhao <[email protected]>
---
 fs/ocfs2/dir.c | 45 +++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 41 insertions(+), 4 deletions(-)
fs/ocfs2/dir.c +41 -4
index b758f11738c65..bb3a67b9edff0 100644
@@ -611,6 +611,28 @@ static int ocfs2_validate_dx_root(struct super_block *sb,
 					  le16_to_cpu(el->l_count));
 			goto bail;
 		}
+	} else {
+		struct ocfs2_dx_entry_list *dl_list = &dx_root->dr_entries;
+
+		if (le16_to_cpu(dl_list->de_count) !=
+		    ocfs2_dx_entries_per_root(sb)) {
+			ret = ocfs2_error(sb,
+					  "Dir Index Root # %llu has invalid de_count %u (expected %u)\n",
+					  (unsigned long long)le64_to_cpu(dx_root->dr_blkno),
+					  le16_to_cpu(dl_list->de_count),
+					  ocfs2_dx_entries_per_root(sb));
+			goto bail;
+		}
+
+		if (le16_to_cpu(dl_list->de_num_used) >
+		    le16_to_cpu(dl_list->de_count)) {
+			ret = ocfs2_error(sb,
+					  "Dir Index Root # %llu has invalid de_num_used %u (de_count %u)\n",
+					  (unsigned long long)le64_to_cpu(dx_root->dr_blkno),
+					  le16_to_cpu(dl_list->de_num_used),
+					  le16_to_cpu(dl_list->de_count));
+			goto bail;
+		}
 	}
 
 bail:
@@ -650,10 +672,25 @@ static int ocfs2_validate_dx_leaf(struct super_block *sb,
 		return ret;
 	}
 
-	if (!OCFS2_IS_VALID_DX_LEAF(dx_leaf)) {
-		ret = ocfs2_error(sb, "Dir Index Leaf has bad signature %.*s\n",
-				  7, dx_leaf->dl_signature);
-	}
+	if (!OCFS2_IS_VALID_DX_LEAF(dx_leaf))
+		return ocfs2_error(sb, "Dir Index Leaf has bad signature %.*s\n",
+				   7, dx_leaf->dl_signature);
+
+	if (le16_to_cpu(dx_leaf->dl_list.de_count) !=
+	    ocfs2_dx_entries_per_leaf(sb))
+		return ocfs2_error(sb,
+				   "Dir Index Leaf # %llu has invalid de_count %u (expected %u)\n",
+				   (unsigned long long)le64_to_cpu(dx_leaf->dl_blkno),
+				   le16_to_cpu(dx_leaf->dl_list.de_count),
+				   ocfs2_dx_entries_per_leaf(sb));
+
+	if (le16_to_cpu(dx_leaf->dl_list.de_num_used) >
+	    le16_to_cpu(dx_leaf->dl_list.de_count))
+		return ocfs2_error(sb,
+				   "Dir Index Leaf # %llu has invalid de_num_used %u (de_count %u)\n",
+				   (unsigned long long)le64_to_cpu(dx_leaf->dl_blkno),
+				   le16_to_cpu(dx_leaf->dl_list.de_num_used),
+				   le16_to_cpu(dx_leaf->dl_list.de_count));
 
 	return ret;
 }
Signature · 1 line
2.53.0
author maintainer
#32 lore raw

PATCH 32/1887 wifi: rtl8xxxu: fix use-after-free from rx_urb_wq on stop

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Fan Wu <[email protected]>

[ Upstream commit 6c080026ecc17eecb103f8927c64ea73a74bb818 ]

rtl8xxxu arms rx_urb_wq from the RX completion path:
rtl8xxxu_rx_complete() hands the URB to rtl8xxxu_queue_rx_urb(), which queues it on rx_urb_pending_list and, once the list grows past RTL8XXXU_RX_URB_PENDING_WATER, schedules rx_urb_wq. The worker rtl8xxxu_rx_urb_work() drains rx_urb_pending_list, recovers priv through container_of, and resubmits each URB through rtl8xxxu_submit_rx_urb(), which anchors it on rx_anchor and dereferences priv->udev.

rtl8xxxu_stop() cancels the sibling work items (c2hcmd_work, ra_watchdog, update_beacon_work) but never cancels rx_urb_wq, so a worker armed during the last burst of RX traffic can run rtl8xxxu_rx_urb_work() after rtl8xxxu_disconnect() has called ieee80211_free_hw(), which frees priv, producing a use-after-free. The window opens under active RX traffic (pending count above the watermark) followed by a disconnect.

There are two teardown races to close:

* rtl8xxxu_queue_rx_urb() decided whether to enqueue under rx_urb_lock but called schedule_work() after dropping the lock. A completion that observed shutdown == false and released the lock could then call schedule_work() after rtl8xxxu_stop() had set shutdown and cancel_work_sync() had already returned, arming the worker to run after the teardown. Move schedule_work() under the same !shutdown branch so the arming decision is atomic with the shutdown check.

* rtl8xxxu_rx_urb_work() anchors every URB it drained back onto rx_anchor through rtl8xxxu_submit_rx_urb(). A worker still running when usb_kill_anchored_urbs(&priv->rx_anchor) returned would submit a URB that escaped the kill. In rtl8xxxu_stop(), call cancel_work_sync(&priv->rx_urb_wq) before the kill so the worker is drained first.

After priv->shutdown is set under rx_urb_lock, completions can no longer queue rx_urb_wq. cancel_work_sync() then drains the last queued or running worker, and the following usb_kill_anchored_urbs() kills the URBs it may have submitted.

rtl8xxxu_disconnect() is covered because ieee80211_unregister_hw() guarantees .stop() runs for a live interface before ieee80211_free_hw() frees priv. The probe error path needs no cancel: rx_urb_wq is INIT_WORK()'d there but cannot have been scheduled, since no URB is submitted before ieee80211_register_hw() succeeds.

This bug was found by static analysis.

---
 .../wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c +14 -5
index c1bc55f0e4c01..20a7537d2cae8 100644
@@ -5263,14 +5263,19 @@ static void rtl8xxxu_queue_rx_urb(struct rtl8xxxu_priv *priv,
 {
 	struct sk_buff *skb;
 	unsigned long flags;
-	int pending = 0;
 
 	spin_lock_irqsave(&priv->rx_urb_lock, flags);
 
 	if (!priv->shutdown) {
 		list_add_tail(&rx_urb->list, &priv->rx_urb_pending_list);
 		priv->rx_urb_pending_count++;
-		pending = priv->rx_urb_pending_count;
+		/*
+		 * Arm the worker under rx_urb_lock so this is atomic with the
+		 * shutdown check: moving it out of the lock would let a
+		 * completion arm the work after rtl8xxxu_stop() canceled it.
+		 */
+		if (priv->rx_urb_pending_count > RTL8XXXU_RX_URB_PENDING_WATER)
+			schedule_work(&priv->rx_urb_wq);
 	} else {
 		skb = (struct sk_buff *)rx_urb->urb.context;
 		dev_kfree_skb_irq(skb);
@@ -5278,9 +5283,6 @@ static void rtl8xxxu_queue_rx_urb(struct rtl8xxxu_priv *priv,
 	}
 
 	spin_unlock_irqrestore(&priv->rx_urb_lock, flags);
-
-	if (pending > RTL8XXXU_RX_URB_PENDING_WATER)
-		schedule_work(&priv->rx_urb_wq);
 }
 
 static void rtl8xxxu_rx_urb_work(struct work_struct *work)
@@ -6529,6 +6531,13 @@ static void rtl8xxxu_stop(struct ieee80211_hw *hw)
 	priv->shutdown = true;
 	spin_unlock_irqrestore(&priv->rx_urb_lock, flags);
 
+	/*
+	 * Cancel before killing rx_anchor: the worker re-anchors every URB
+	 * it drained via rtl8xxxu_submit_rx_urb(), so a worker still running
+	 * after the kill could submit a URB that escapes it.
+	 */
+	cancel_work_sync(&priv->rx_urb_wq);
+
 	usb_kill_anchored_urbs(&priv->rx_anchor);
 	usb_kill_anchored_urbs(&priv->tx_anchor);
 	if (priv->usb_interrupts)
Signature · 1 line
2.53.0
author maintainer
#33 lore raw

PATCH 33/1887 usb: storage: realtek_cr: fix use-after-free on disconnect

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Myeonghun Pak <[email protected]>

[ Upstream commit 4ffee1aebb0c0ffcda9faffd17834ea9b00d42cc ]

realtek_cr_destructor() calls timer_delete() before the chip containing the timer is freed. The timer callback may still be running and can rearm itself, resulting in a use-after-free.

Use timer_shutdown_sync() to wait for the callback and prevent further rearming. Do this unconditionally because ss_en may be changed after the timer is armed.

Move timer_setup() into init_realtek_cr() so the timer is initialized before any failure path can invoke the destructor.

Found by static analysis.

Fixes e931830bb877 ("Realtek cr: Add autosuspend function.")
Cc stable <[email protected]>
[ adapted the timer_delete() removal to the branch’s del_timer() spelling. ]
---
 drivers/usb/storage/realtek_cr.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
drivers/usb/storage/realtek_cr.c +4 -5
index a026c6cb6e684..de82d8260d729 100644
@@ -915,7 +915,6 @@ static int realtek_cr_autosuspend_setup(struct us_data *us)
 	us->proto_handler = rts51x_invoke_transport;
 
 	chip->timer_expires = 0;
-	timer_setup(&chip->rts51x_suspend_timer, rts51x_suspend_timer_fn, 0);
 	fw5895_init(us);
 
 	/* enable autosuspend function of the usb device */
@@ -933,10 +932,7 @@ static void realtek_cr_destructor(void *extra)
 		return;
 
 #ifdef CONFIG_REALTEK_AUTOPM
-	if (ss_en) {
-		del_timer(&chip->rts51x_suspend_timer);
-		chip->timer_expires = 0;
-	}
+	timer_shutdown_sync(&chip->rts51x_suspend_timer);
 #endif
 	kfree(chip->status);
 }
@@ -981,6 +977,9 @@ static int init_realtek_cr(struct us_data *us)
 
 	us->extra = chip;
 	us->extra_destructor = realtek_cr_destructor;
+#ifdef CONFIG_REALTEK_AUTOPM
+	timer_setup(&chip->rts51x_suspend_timer, rts51x_suspend_timer_fn, 0);
+#endif
 	us->max_lun = chip->max_lun = rts51x_get_max_lun(us);
 	chip->us = us;
 
Signature · 1 line
2.53.0
author maintainer
#16 lore raw

PATCH 16/1887 io_uring: dont pass restart error codes to userspace

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit e1a64bc64897f4c2fe460922c345f2ed8f889b5f upstream.

-ERESTARTSYS and friends are instructions for the system call exit code, which either restarts the call or turns them into -EINTR. They are not supposed to be seen by applications. A request isn't a system call, nobody looks at what it returns before that is put into a CQE.

The read/write and the networking opcodes convert these codes to -EINTR by hand. The others don't. An io-wq worker that is blocked in the open of a FIFO, a tty or some other device, or in a splice from an empty pipe, and that gets interrupted because the request is cancelled, completes it with -512:

IORING_OP_OPENAT, IOSQE_ASYNC // FIFO without a writer
IORING_OP_ASYNC_CANCEL // -EALREADY, worker is signalled
CQE of the open: res == -512

There are more candidates, like whatever a file system or driver returns from ->flush(), ->fsync(), ->fallocate() or ->uring_cmd(), or breaking a lease or delegation.

Take care of it in io_issue_sqe(), which all of them go through. The helper is moved from rw.c as is. The cost is a compare and a branch that is not taken per request.

[ 6.1: io_issue_sqe() returns IOU_OK and an error straight away ]
Fixes 15b71abe7b52 ("io_uring: add support for IORING_OP_OPENAT")
Assisted-by LLM
---
 io_uring/io_uring.c |    8 +++++++-
 io_uring/io_uring.h |   18 ++++++++++++++++++
 io_uring/rw.c       |   18 ------------------
 3 files changed, 25 insertions(+), 19 deletions(-)
io_uring/io_uring.c +7 -1
@@ -1741,12 +1741,18 @@ static int io_issue_sqe(struct io_kiocb
 	}
 
 	if (ret == IOU_OK) {
+		/* not all handlers take care of the internal restart codes */
+		if (unlikely(req->cqe.res <= -ERESTARTSYS))
+			req->cqe.res = io_fixup_restart_res(req->cqe.res);
 		if (issue_flags & IO_URING_F_COMPLETE_DEFER)
 			io_req_complete_defer(req);
 		else
 			io_req_complete_post(req);
-	} else if (ret != IOU_ISSUE_SKIP_COMPLETE)
+	} else if (ret != IOU_ISSUE_SKIP_COMPLETE) {
+		if (unlikely(ret <= -ERESTARTSYS))
+			ret = io_fixup_restart_res(ret);
 		return ret;
+	}
 
 	/* If the op doesn't have a file, we're not polling for it */
 	if ((req->ctx->flags & IORING_SETUP_IOPOLL) && def->iopoll_queue)
io_uring/io_uring.h +18 -0
@@ -155,6 +155,24 @@ static inline bool __io_fill_cqe_req(str
 	return true;
 }
 
+static inline ssize_t io_fixup_restart_res(ssize_t ret)
+{
+	switch (ret) {
+	case -ERESTARTSYS:
+	case -ERESTARTNOINTR:
+	case -ERESTARTNOHAND:
+	case -ERESTART_RESTARTBLOCK:
+		/*
+		 * We can't just restart the syscall, since previously
+		 * submitted sqes may already be in progress. Just fail
+		 * this IO with EINTR.
+		 */
+		return -EINTR;
+	default:
+		return ret;
+	}
+}
+
 static inline void req_set_fail(struct io_kiocb *req)
 {
 	req->flags |= REQ_F_FAIL;
io_uring/rw.c +0 -18
@@ -129,24 +129,6 @@ void io_readv_writev_cleanup(struct io_k
 	kfree(io->free_iovec);
 }
 
-static inline ssize_t io_fixup_restart_res(ssize_t ret)
-{
-	switch (ret) {
-	case -ERESTARTSYS:
-	case -ERESTARTNOINTR:
-	case -ERESTARTNOHAND:
-	case -ERESTART_RESTARTBLOCK:
-		/*
-		 * We can't just restart the syscall, since previously
-		 * submitted sqes may already be in progress. Just fail
-		 * this IO with EINTR.
-		 */
-		return -EINTR;
-	default:
-		return ret;
-	}
-}
-
 static inline void io_rw_done(struct kiocb *kiocb, ssize_t ret)
 {
 	/* IO was queued async, completion will happen later */
author maintainer
#34 lore raw

PATCH 34/1887 staging: rtl8723bs: fix spacing around operators

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Vivek BalachandharTN <[email protected]>

[ Upstream commit 2038fe84b8bdf894b634f777096685e78e8f3774 ]

Fix several instances where operators lacked spaces around them. This improves readability and brings the driver closer to kernel coding-style guidelines. No functional change.

For this stable dependency, retain only the spacing change to the IE advance in rtw_restruct_wmm_ie(). This supplies the exact context needed by target commit 28a289beaf226 ("staging: rtl8723bs: fix OOB read in rtw_restruct_wmm_ie()"). Drop the unrelated operator-spacing hunks.

Keep the existing bounds-first WMM match condition from stable commit 4dd2d9cf563c5 (upstream a75281626fc8f); applying the older condition would undo its out-of-bounds-read fix. No functional change.

Stable-dep-of: 28a289beaf22 ("staging: rtl8723bs: fix OOB read in rtw_restruct_wmm_ie()")

---
 drivers/staging/rtl8723bs/core/rtw_mlme.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/staging/rtl8723bs/core/rtw_mlme.c +1 -1
index d7fdac14e73dc..0c8b1541f243e 100644
@@ -2025,7 +2025,7 @@ int rtw_restruct_wmm_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_
 			break;
 		}
 
-		i += (in_ie[i+1]+2); /*  to the next IE element */
+		i += (in_ie[i + 1] + 2); /*  to the next IE element */
 	}
 
 	return ielength;
Signature · 1 line
2.53.0
author maintainer
#35 lore raw

PATCH 35/1887 staging: rtl8723bs: fix OOB read in rtw_restruct_wmm_ie()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Muhammad Bilal <[email protected]>

[ Upstream commit 28a289beaf226b30b1e6e7d7b1a2946fe2d6e852 ]

rtw_restruct_wmm_ie() scans in_ie for a WMM IE with:

	while (i < in_len) {
		...
		if (i + 5 < in_len && in_ie[i] == 0xDD && ...) {
			...
			break;
		}
		i += (in_ie[i + 1] + 2); /* to the next IE element */
	}

When the "i + 5 < in_len" match check fails simply because i is within 5 bytes of the end of the buffer (i.e. no WMM IE was found near the tail of in_ie), execution falls through to
"i += (in_ie[i + 1] + 2)", which reads in_ie[i + 1]. If i == in_len
- 1 at that point, this is a 1-byte out-of-bounds read of an attacker-influenced IE buffer built from association/scan data.

Commit a75281626fc8f ("staging: rtl8723bs: fix potential out-of-bounds read in rtw_restruct_wmm_ie") added the "i + 5 < in_len" guard to the match condition itself, but did not add an equivalent guard before the fallthrough advance, so the same class of OOB read remained reachable through the non-matching path.

Add an explicit bounds check before advancing to the next IE.

---
 drivers/staging/rtl8723bs/core/rtw_mlme.c | 3 +++
 1 file changed, 3 insertions(+)
drivers/staging/rtl8723bs/core/rtw_mlme.c +3 -0
index 0c8b1541f243e..258972f6de3fa 100644
@@ -2025,6 +2025,9 @@ int rtw_restruct_wmm_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_
 			break;
 		}
 
+		if (i + 1 >= in_len)
+			break;
+
 		i += (in_ie[i + 1] + 2); /*  to the next IE element */
 	}
 
Signature · 1 line
2.53.0
author maintainer
#36 lore raw

PATCH 36/1887 ftrace: Take trace_array reference before accessing its ftrace_ops

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Steven Rostedt <[email protected]>

[ Upstream commit 9100191e5acb2e5ea2313f436667bb5fce129f47 ]

The trace instance files set_ftrace_filter and set_ftrace_notrace was updated to work with specific trace instances (trace_arrays). The issue is that when these files are opened, there is a small race window where it will use the ftrace_ops from the inode->private pointer to get a reference to the trace_array and then take its reference. The problem is that the ftrace_ops itself could be freed. If the rmdir on the instance happens at the same time the set_ftrace_filter file is opened, the rmdir could have also freed the ftrace_ops and referencing it will cause a use-after-free bug and crash the kernel.

Instead, pass in the trace_array as the file private data (NULL for the top level instance), and then pass both the trace_array and the ftrace_ops to the ftrace_regex_open() function. If the trace_array is NULL, then it just uses the ftrace_ops without the need to take its reference (like normal). If the ftrace_ops is NULL, that is only the case for the top level instance and the global_ops can be used.

This allows the trace_array to have its reference incremented before touching the ftrace_ops that could also be freed when the instance is.

Fixes 591dffdade9f0 ("ftrace: Allow for function tracing instance to filter functions")
[ Replaced kzalloc_obj(*iter) with kzalloc(sizeof(*iter), GFP_KERNEL). ]
---
 include/linux/ftrace.h         |  5 +--
 kernel/trace/ftrace.c          | 59 ++++++++++++++++++++++------------
 kernel/trace/trace.h           |  4 +--
 kernel/trace/trace_functions.c |  2 +-
 kernel/trace/trace_stack.c     |  2 +-
 5 files changed, 46 insertions(+), 26 deletions(-)
include/linux/ftrace.h +3 -2
index d29b74e4e7c3d..07003b68b7b28 100644
@@ -644,8 +644,9 @@ unsigned long ftrace_get_addr_new(struct dyn_ftrace *rec);
 unsigned long ftrace_get_addr_curr(struct dyn_ftrace *rec);
 
 extern ftrace_func_t ftrace_trace_function;
+struct trace_array;
 
-int ftrace_regex_open(struct ftrace_ops *ops, int flag,
+int ftrace_regex_open(struct trace_array *tr, struct ftrace_ops *ops, int flag,
 		  struct inode *inode, struct file *file);
 ssize_t ftrace_filter_write(struct file *file, const char __user *ubuf,
 			    size_t cnt, loff_t *ppos);
@@ -859,7 +860,7 @@ static inline unsigned long ftrace_location(unsigned long ip)
  * have them defined when ftrace is not enabled, but these
  * functions may still be called. Use a macro instead of inline.
  */
-#define ftrace_regex_open(ops, flag, inod, file) ({ -ENODEV; })
+#define ftrace_regex_open(tr, ops, flag, inode, file) ({ -ENODEV; })
 #define ftrace_set_early_filter(ops, buf, enable) do { } while (0)
 #define ftrace_set_filter_ip(ops, ip, remove, reset) ({ -ENODEV; })
 #define ftrace_set_filter_ips(ops, ips, cnt, remove, reset) ({ -ENODEV; })
kernel/trace/ftrace.c +39 -20

121 lines not on this page · raw message

kernel/trace/trace.h +2 -2
index 8cdb8e1a33c1e..f86b6f263ddf6 100644
@@ -1092,7 +1092,7 @@ extern void clear_ftrace_function_probes(struct trace_array *tr);
 int register_ftrace_command(struct ftrace_func_command *cmd);
 int unregister_ftrace_command(struct ftrace_func_command *cmd);
 
-void ftrace_create_filter_files(struct ftrace_ops *ops,
+void ftrace_create_filter_files(struct trace_array *tr,
 				struct dentry *parent);
 void ftrace_destroy_filter_files(struct ftrace_ops *ops);
 
@@ -1115,11 +1115,11 @@ static inline void clear_ftrace_function_probes(struct trace_array *tr)
 {
 }
 
+#define ftrace_create_filter_files(tr, parent) do { } while (0)
 /*
  * The ops parameter passed in is usually undefined.
  * This must be a macro.
  */
-#define ftrace_create_filter_files(ops, parent) do { } while (0)
 #define ftrace_destroy_filter_files(ops) do { } while (0)
 #endif /* CONFIG_FUNCTION_TRACER && CONFIG_DYNAMIC_FTRACE */
 
kernel/trace/trace_functions.c +1 -1
index 44ae51d1dc45d..eecac19a2bcbb 100644
@@ -90,7 +90,7 @@ int ftrace_create_function_files(struct trace_array *tr,
 	if (!tr->ops)
 		return -EINVAL;
 
-	ftrace_create_filter_files(tr->ops, parent);
+	ftrace_create_filter_files(tr, parent);
 
 	return 0;
 }
kernel/trace/trace_stack.c +1 -1
index 5a48dba912eae..c6b2f622ffa12 100644
@@ -499,7 +499,7 @@ stack_trace_filter_open(struct inode *inode, struct file *file)
 	struct ftrace_ops *ops = inode->i_private;
 
 	/* Checks for tracefs lockdown */
-	return ftrace_regex_open(ops, FTRACE_ITER_FILTER,
+	return ftrace_regex_open(NULL, ops, FTRACE_ITER_FILTER,
 				 inode, file);
 }
 
Signature · 1 line
2.53.0
author maintainer
#37 lore raw

PATCH 37/1887 nvme: add missing SRCU grace period in error path

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Tristan Madani <[email protected]>

[ Upstream commit ef248d5de4469fb6bbaf8dbe0c4c47800080d648 ]

nvme_alloc_ns() error path at out_unlink_ns removes ns from the namespace head siblings list with list_del_rcu(&ns->siblings) but does not wait for SRCU readers before freeing the namespace struct. Multipath code iterates the head->list under srcu_read_lock() in nvme_find_path() and nvme_mpath_revalidate_paths(), so a concurrent reader can still hold a reference to ns when kfree(ns) runs.

The normal removal path in nvme_ns_remove() correctly calls synchronize_srcu(&ns->head->srcu) after list_del_rcu() to wait for in-progress readers. Add the same grace period in the error path.

Fixes ed754e5deeb1 ("nvme: track shared namespaces")
[ Adjusted patch context to account for missing last_path reference-counting code. ]
---
 drivers/nvme/host/core.c | 3 +++
 1 file changed, 3 insertions(+)
drivers/nvme/host/core.c +3 -0
index 66600341bd6aa..1faef93ce4ba6 100644
@@ -4437,6 +4437,9 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, struct nvme_ns_info *info)
 	if (list_empty(&ns->head->list))
 		list_del_init(&ns->head->entry);
 	mutex_unlock(&ctrl->subsys->lock);
+
+	/* guarantee not available in head->list */
+	synchronize_srcu(&ns->head->srcu);
 	nvme_put_ns_head(ns->head);
  out_cleanup_disk:
 	put_disk(disk);
Signature · 1 line
2.53.0
author maintainer
#38 lore raw

PATCH 38/1887 KVM: s390: Zero initialize data structures for inject_pfault_token

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Christian Borntraeger <[email protected]>

[ Upstream commit 4e2c7f7cbc27418f9a290399b986c1b85ff93b90 ]

__kvm_inject_pfault_token() only sets .type and .u.ext.ext_params2 of the on-stack struct kvm_s390_irq but the full ext substructure is copied into the cpu local variable on inject. ext_params and pad contain stale stack values.

Interrupt delivery only uses ext_params2, so nothing leaks to the guest, but a host user can use the migration ioctls to get to the data.

Fix by zero-initializing the irq struct.
Do the same for the inti data structure.

Fixes 383d0b050106 ("KVM: s390: handle pending local interrupts via bitmap")

Message-ID: <[email protected]>

[ Adjusted context for missing inti_mem and ret declarations in __kvm_inject_pfault_token(). ]
---
 arch/s390/kvm/kvm-s390.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
arch/s390/kvm/kvm-s390.c +2 -2
index c7b4c0d37c87b..9b9d8d37bcc41 100644
@@ -4430,8 +4430,8 @@ long kvm_arch_fault_in_page(struct kvm_vcpu *vcpu, gpa_t gpa, int writable)
 static void __kvm_inject_pfault_token(struct kvm_vcpu *vcpu, bool start_token,
 				      unsigned long token)
 {
-	struct kvm_s390_interrupt inti;
-	struct kvm_s390_irq irq;
+	struct kvm_s390_interrupt inti = {};
+	struct kvm_s390_irq irq = {};
 
 	if (start_token) {
 		irq.u.ext.ext_params2 = token;
Signature · 1 line
2.53.0
author maintainer
#39 lore raw

PATCH 39/1887 scsi: qla2xxx: Zero dport diagnostics buffer to avoid info leak

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Nilesh Javali <[email protected]>

[ Upstream commit a152edab3854f01dd2daf3eaf8f32cbabdb3834e ]

qla2x00_do_dport_diagnostics() allocates the qla_dport_diag response buffer with kmalloc_obj() (non-zeroing) and, on success, copies the full sizeof(*dd) back to user space via sg_copy_from_buffer(). The inbound sg_copy_to_buffer() only fills as many bytes as the user request payload provides, and qla26xx_dport_diagnostics() zeroes only dd->buf. The options and unused[] fields are therefore copied out uninitialized, leaking kernel heap contents to user space.

Allocate with kzalloc_obj(), matching qla2x00_do_dport_diagnostics_v2().

Fixes ec89146215d1 ("qla2xxx: Add bsg interface to support D_Port Diagnostics.")
[ Adapted kzalloc_obj(*dd) to kzalloc(sizeof(*dd), GFP_KERNEL) to match the branch’s allocation syntax. ]
---
 drivers/scsi/qla2xxx/qla_bsg.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/scsi/qla2xxx/qla_bsg.c +1 -1
index 3982f7d576a83..8e859d79bdee1 100644
@@ -2412,7 +2412,7 @@ qla2x00_do_dport_diagnostics(struct bsg_job *bsg_job)
 	    !IS_QLA28XX(vha->hw))
 		return -EPERM;
 
-	dd = kmalloc(sizeof(*dd), GFP_KERNEL);
+	dd = kzalloc(sizeof(*dd), GFP_KERNEL);
 	if (!dd) {
 		ql_log(ql_log_warn, vha, 0x70db,
 		    "Failed to allocate memory for dport.\n");
Signature · 1 line
2.53.0
author maintainer
#40 lore raw

PATCH 40/1887 scsi: qla2xxx: Fix queue teardown NULL dma_free and bitmap locking

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Nilesh Javali <[email protected]>

[ Upstream commit 34a40e0dff940ac5eba494a69b553ea571e24873 ]

qla25xx_free_req_que() and qla25xx_free_rsp_que() have two pre-existing bugs exposed on the error path of qla25xx_create_{req,rsp}_que():

1. When dma_alloc_coherent() fails during queue creation, the error path calls the free function with req->ring / rsp->ring still NULL (from kzalloc). The unconditional dma_free_coherent() with a NULL cpu_addr is undefined behavior and can panic.

2. The free functions clear req_qid_map / rsp_qid_map under vport_lock, but the create functions protect the same bitmaps with mq_lock. This provides no mutual exclusion. Additionally, the create error path clears the bit and releases mq_lock before calling the free function, creating a window where another thread can allocate the same que_id and have its ha->req_q_map entry clobbered by the subsequent lockless NULL assignment in the free function.

Fix by:

- Guarding dma_free_coherent() with a NULL check on the ring pointer.

- Using mq_lock (the lock held by all creators) in the free functions to atomically NULL the map entry and clear the bitmap bit.

- Removing the now-redundant clear_bit blocks from the create error paths since the free functions handle it atomically.

Backport adaptation for the stable tree: the 29xx IOCB size-selection helpers are absent, and queue creation still allocates fixed-size entries. Initialize the local req_entry_size and rsp_entry_size values with sizeof(request_t) and sizeof(response_t), respectively, so DMA freeing continues to match allocation without adding helper functions or 29xx support. Retain all NULL-ring guards, mq_lock protection, and removal of the premature bitmap clears.

Keep the response-ring cleanup layout used by upstream so target commit 19788a55cab61d78e33e0914a5a31d27843e8a4a applies unchanged.

Stable-dep-of: 19788a55cab6 ("scsi: qla2xxx: Fix use-after-free of qpair work on queue teardown")

---
 drivers/scsi/qla2xxx/qla_mid.c | 29 +++++++++++++++--------------
 1 file changed, 15 insertions(+), 14 deletions(-)
drivers/scsi/qla2xxx/qla_mid.c +15 -14
index 79e4319bbbd28..b25439db6867d 100644
@@ -583,16 +583,19 @@ qla25xx_free_req_que(struct scsi_qla_host *vha, struct req_que *req)
 {
 	struct qla_hw_data *ha = vha->hw;
 	uint16_t que_id = req->id;
+	size_t req_entry_size = sizeof(request_t);
 
-	dma_free_coherent(&ha->pdev->dev, (req->length + 1) *
-		sizeof(request_t), req->ring, req->dma);
+	if (req->ring)
+		dma_free_coherent(&ha->pdev->dev,
+				  (req->length + 1) * req_entry_size,
+				  req->ring, req->dma);
 	req->ring = NULL;
 	req->dma = 0;
 	if (que_id) {
+		mutex_lock(&ha->mq_lock);
 		ha->req_q_map[que_id] = NULL;
-		mutex_lock(&ha->vport_lock);
 		clear_bit(que_id, ha->req_qid_map);
-		mutex_unlock(&ha->vport_lock);
+		mutex_unlock(&ha->mq_lock);
 	}
 	kfree(req->outstanding_cmds);
 	kfree(req);
@@ -603,6 +606,7 @@ qla25xx_free_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
 {
 	struct qla_hw_data *ha = vha->hw;
 	uint16_t que_id = rsp->id;
+	size_t rsp_entry_size = sizeof(response_t);
 
 	if (rsp->msix && rsp->msix->have_irq) {
 		free_irq(rsp->msix->vector, rsp->msix->handle);
@@ -610,15 +614,18 @@ qla25xx_free_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
 		rsp->msix->in_use = 0;
 		rsp->msix->handle = NULL;
 	}
-	dma_free_coherent(&ha->pdev->dev, (rsp->length + 1) *
-		sizeof(response_t), rsp->ring, rsp->dma);
+
+	if (rsp->ring)
+		dma_free_coherent(&ha->pdev->dev,
+				  (rsp->length + 1) * rsp_entry_size,
+				  rsp->ring, rsp->dma);
 	rsp->ring = NULL;
 	rsp->dma = 0;
 	if (que_id) {
+		mutex_lock(&ha->mq_lock);
 		ha->rsp_q_map[que_id] = NULL;
-		mutex_lock(&ha->vport_lock);
 		clear_bit(que_id, ha->rsp_qid_map);
-		mutex_unlock(&ha->vport_lock);
+		mutex_unlock(&ha->mq_lock);
 	}
 	kfree(rsp);
 }
@@ -803,9 +810,6 @@ qla25xx_create_req_que(struct qla_hw_data *ha, uint16_t options,
 		if (ret != QLA_SUCCESS) {
 			ql_log(ql_log_fatal, base_vha, 0x00df,
 			    "%s failed.\n", __func__);
-			mutex_lock(&ha->mq_lock);
-			clear_bit(que_id, ha->req_qid_map);
-			mutex_unlock(&ha->mq_lock);
 			goto que_failed;
 		}
 		vha->flags.qpairs_req_created = 1;
@@ -917,9 +921,6 @@ qla25xx_create_rsp_que(struct qla_hw_data *ha, uint16_t options,
 		if (ret != QLA_SUCCESS) {
 			ql_log(ql_log_fatal, base_vha, 0x00e7,
 			    "%s failed.\n", __func__);
-			mutex_lock(&ha->mq_lock);
-			clear_bit(que_id, ha->rsp_qid_map);
-			mutex_unlock(&ha->mq_lock);
 			goto que_failed;
 		}
 		vha->flags.qpairs_rsp_created = 1;
Signature · 1 line
2.53.0
author maintainer
#41 lore raw

PATCH 41/1887 scsi: qla2xxx: Fix use-after-free of qpair work on queue teardown

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Nilesh Javali <[email protected]>

[ Upstream commit 19788a55cab61d78e33e0914a5a31d27843e8a4a ]

The response queue MSI-X handler qla2xxx_msix_rsp_q() schedules qla_do_work() via queue_work(ha->wq, &qpair->q_work). qla_do_work() dereferences the qpair (vha, rsp) and takes qpair->qp_lock.

During teardown, qla2xxx_delete_qpair() deletes the response queue, which calls free_irq() in qla25xx_free_rsp_que(), and then frees the queue and the qpair. free_irq() waits for running hardirq handlers but does not cancel work already placed on ha->wq. A still-pending q_work then runs qla_do_work() against the freed qpair and response queue, causing a use-after-free. This is especially likely during full adapter teardown, where destroy_workqueue(ha->wq) forces pending work to run after the queue pairs have been freed.

Flush the work item with cancel_work_sync() in qla25xx_free_rsp_que() after free_irq() has released the interrupt (so no new work can be queued) and before the response queue and qpair memory are freed (so the flushed handler still sees valid memory). Guard on rsp->qpair and ha->wq to match the INIT_WORK() condition and avoid operating on an uninitialized work_struct.

---
 drivers/scsi/qla2xxx/qla_mid.c | 4 ++++
 1 file changed, 4 insertions(+)
drivers/scsi/qla2xxx/qla_mid.c +4 -0
index b25439db6867d..11434b695b037 100644
@@ -615,6 +615,10 @@ qla25xx_free_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
 		rsp->msix->handle = NULL;
 	}
 
+	/* Flush any queued response work before freeing the queue/qpair. */
+	if (rsp->qpair && ha->wq)
+		cancel_work_sync(&rsp->qpair->q_work);
+
 	if (rsp->ring)
 		dma_free_coherent(&ha->pdev->dev,
 				  (rsp->length + 1) * rsp_entry_size,
Signature · 1 line
2.53.0
author maintainer
#42 lore raw

PATCH 42/1887 scsi: qla2xxx: Validate BSG request_len before reading vendor_cmd[]

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Nilesh Javali <[email protected]>

[ Upstream commit 4cf38dd9465736141263ebb63375868311a0ec81 ]

The FC BSG transport allocates job->request via memdup_user() using the exact user-supplied request_len. For FC_BSG_HST_VENDOR, fc_bsg_host_dispatch() only guarantees request_len covers msgcode and vendor_id; it does not account for the vendor_cmd[] flexible array.

qla2xxx then reads the command selector vendor_cmd[0] and, in several sub-handlers, vendor_cmd[1]/[2] or structures overlaid on the vendor command area without verifying request_len. A caller holding CAP_SYS_RAWIO can submit a short request whose vendor_id matches the host, triggering out-of-bounds heap reads (KASAN-detectable, and able to mis-select a command or panic).

Add a central guard in qla2x00_process_vendor_specific() so the selector is always in bounds, restrict the early vendor_cmd[0] read in qla24xx_bsg_request() to sufficiently long vendor messages, and add request_len checks to the sub-handlers that read further:
qla24xx_proc_fcp_prio_cfg_cmd(), qla2x00_process_loopback(), qla84xx_reset(), qla84xx_updatefw(), qla2x00_read_optrom(), qla2x00_update_optrom(), qlafx00_mgmt_cmd() and qla28xx_validate_flash_image().

Fixes 01e0e15c8b3b ("scsi: don't use fc_bsg_job::request and fc_bsg_job::reply directly")
[ adapted hunks to the existing OPTROM helper and absence of qla28xx_validate_flash_image(). ]
---
 drivers/scsi/qla2xxx/qla_bsg.c | 45 ++++++++++++++++++++++++++++++++--
 1 file changed, 43 insertions(+), 2 deletions(-)
drivers/scsi/qla2xxx/qla_bsg.c +43 -2
index 8e859d79bdee1..0fbf6dba5a368 100644
@@ -158,6 +158,12 @@ qla24xx_proc_fcp_prio_cfg_cmd(struct bsg_job *bsg_job)
 		goto exit_fcp_prio_cfg;
 	}
 
+	if (bsg_job->request_len <
+	    sizeof(struct fc_bsg_request) + 2 * sizeof(uint32_t)) {
+		ret = -EINVAL;
+		goto exit_fcp_prio_cfg;
+	}
+
 	/* Get the sub command */
 	oper = bsg_request->rqst_data.h_vendor.vendor_cmd[1];
 
@@ -756,6 +762,10 @@ qla2x00_process_loopback(struct bsg_job *bsg_job)
 		return -EIO;
 	}
 
+	if (bsg_job->request_len <
+	    sizeof(struct fc_bsg_request) + 3 * sizeof(uint32_t))
+		return -EINVAL;
+
 	memset(&elreq, 0, sizeof(elreq));
 
 	elreq.req_sg_cnt = dma_map_sg(&ha->pdev->dev,
@@ -988,6 +998,10 @@ qla84xx_reset(struct bsg_job *bsg_job)
 		return -EINVAL;
 	}
 
+	if (bsg_job->request_len <
+	    sizeof(struct fc_bsg_request) + 2 * sizeof(uint32_t))
+		return -EINVAL;
+
 	flag = bsg_request->rqst_data.h_vendor.vendor_cmd[1];
 
 	rval = qla84xx_reset_chip(vha, flag == A84_ISSUE_RESET_DIAG_FW);
@@ -1032,6 +1046,10 @@ qla84xx_updatefw(struct bsg_job *bsg_job)
 		return -EINVAL;
 	}
 
+	if (bsg_job->request_len <
+	    sizeof(struct fc_bsg_request) + 2 * sizeof(uint32_t))
+		return -EINVAL;
+
 	sg_cnt = dma_map_sg(&ha->pdev->dev, bsg_job->request_payload.sg_list,
 		bsg_job->request_payload.sg_cnt, DMA_TO_DEVICE);
 	if (!sg_cnt) {
@@ -1482,6 +1500,10 @@ qla2x00_read_optrom(struct bsg_job *bsg_job)
 	struct qla_hw_data *ha = vha->hw;
 	int rval = 0;
 
+	if (bsg_job->request_len <
+	    sizeof(struct fc_bsg_request) + 2 * sizeof(uint32_t))
+		return -EINVAL;
+
 	if (ha->flags.nic_core_reset_hdlr_active)
 		return -EBUSY;
 
@@ -1519,6 +1541,10 @@ qla2x00_update_optrom(struct bsg_job *bsg_job)
 	struct qla_hw_data *ha = vha->hw;
 	int rval = 0;
 
+	if (bsg_job->request_len <
+	    sizeof(struct fc_bsg_request) + 2 * sizeof(uint32_t))
+		return -EINVAL;
+
 	mutex_lock(&ha->optrom_mutex);
 	rval = qla2x00_optrom_setup(bsg_job, vha, 1);
 	if (rval) {
@@ -2010,6 +2036,11 @@ qlafx00_mgmt_cmd(struct bsg_job *bsg_job)
 	struct fc_port *fcport;
 	char  *type = "FC_BSG_HST_FX_MGMT";
 
+	if (bsg_job->request_len <
+	    sizeof(struct fc_bsg_request) + sizeof(uint32_t) +
+	    sizeof(struct qla_mt_iocb_rqst_fx00))
+		return -EINVAL;
+
 	/* Copy the IOCB specific information */
 	piocb_rqst = (struct qla_mt_iocb_rqst_fx00 *)
 	    &bsg_request->rqst_data.h_vendor.vendor_cmd[1];
@@ -2899,6 +2930,13 @@ qla2x00_process_vendor_specific(struct scsi_qla_host *vha, struct bsg_job *bsg_j
 {
 	struct fc_bsg_request *bsg_request = bsg_job->request;
 
+	if (bsg_job->request_len <
+	    sizeof(struct fc_bsg_request) + sizeof(uint32_t)) {
+		ql_log(ql_log_warn, vha, 0x7000,
+		       "BSG request too small for vendor cmd.\n");
+		return -EINVAL;
+	}
+
 	ql_dbg(ql_dbg_edif, vha, 0x911b, "%s FC_BSG_HST_VENDOR cmd[0]=0x%x\n",
 	    __func__, bsg_request->rqst_data.h_vendor.vendor_cmd[0]);
 
@@ -3024,8 +3062,11 @@ qla24xx_bsg_request(struct bsg_job *bsg_job)
 	}
 
 	/* Disable port will bring down the chip, allow enable command */
-	if (bsg_request->rqst_data.h_vendor.vendor_cmd[0] == QL_VND_MANAGE_HOST_PORT ||
-	    bsg_request->rqst_data.h_vendor.vendor_cmd[0] == QL_VND_GET_HOST_STATS)
+	if (bsg_request->msgcode == FC_BSG_HST_VENDOR &&
+	    bsg_job->request_len >=
+		sizeof(struct fc_bsg_request) + sizeof(uint32_t) &&
+	    (bsg_request->rqst_data.h_vendor.vendor_cmd[0] == QL_VND_MANAGE_HOST_PORT ||
+	     bsg_request->rqst_data.h_vendor.vendor_cmd[0] == QL_VND_GET_HOST_STATS))
 		goto skip_chip_chk;
 
 	if (vha->hw->flags.port_isolated) {
Signature · 1 line
2.53.0
author maintainer
#43 lore raw

PATCH 43/1887 f2fs: embed f2fs_gc_kthread in f2fs_sb_info

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Chao Yu <[email protected]>

[ Upstream commit 3d7bca9d583793bb7d0bac0d95a24ddd2e129eed ]

Instead of allocating f2fs_gc_kthread dynamically, embed it in f2fs_sb_info. This simplifies lifetime management and prepares for fixing race conditions during teardown.

- __sbi_store - remount|shutdown
- f2fs_stop_gc_thread
- access sbi->gc_thread
- sbi->gc_thread = NULL
- access sbi->gc_thread->f2fs_gc_task

Fixes 52190933c37a ("f2fs: sysfs: introduce critical_task_priority")
Fixes 7950e9ac638e ("f2fs: stop gc/discard thread after fs shutdown")
[ adapted to the 6.1 GC-thread structure without newer zoned-GC fields. ]
---
 fs/f2fs/debug.c   |  4 ----
 fs/f2fs/f2fs.h    | 22 +++++++++++++++++++++-
 fs/f2fs/gc.c      | 33 ++++++++++++---------------------
 fs/f2fs/gc.h      | 20 --------------------
 fs/f2fs/segment.c |  9 ++++-----
 fs/f2fs/super.c   |  4 ++--
 fs/f2fs/sysfs.c   | 14 +++++++-------
 7 files changed, 46 insertions(+), 60 deletions(-)
fs/f2fs/debug.c +0 -4
index dd6e8a10193b4..711b4262a0c75 100644
@@ -280,10 +280,6 @@ static void update_mem_info(struct f2fs_sb_info *sbi)
 get_cache:
 	si->cache_mem = 0;
 
-	/* build gc */
-	if (sbi->gc_thread)
-		si->cache_mem += sizeof(struct f2fs_gc_kthread);
-
 	/* build merge flush thread */
 	if (SM_I(sbi)->fcc_info)
 		si->cache_mem += sizeof(struct flush_cmd_control);
fs/f2fs/f2fs.h +21 -1
index cbf4032b5b7ee..3b1d99d03ab1b 100644
@@ -1599,6 +1599,26 @@ struct decompress_io_ctx {
 #define MAX_COMPRESS_LOG_SIZE		8
 #define MAX_COMPRESS_WINDOW_SIZE(log_size)	((PAGE_SIZE) << (log_size))
 
+struct f2fs_gc_kthread {
+	struct task_struct *f2fs_gc_task;
+	wait_queue_head_t gc_wait_queue_head;
+
+	/* for gc sleep time */
+	unsigned int urgent_sleep_time;
+	unsigned int min_sleep_time;
+	unsigned int max_sleep_time;
+	unsigned int no_gc_sleep_time;
+
+	/* for changing gc mode */
+	unsigned int gc_wake;
+
+	/* for GC_MERGE mount option */
+	wait_queue_head_t fggc_wq;		/*
+						 * caller of f2fs_balance_fs()
+						 * will wait on this wait queue.
+						 */
+};
+
 struct f2fs_sb_info {
 	struct super_block *sb;			/* pointer to VFS super block */
 	struct proc_dir_entry *s_proc;		/* proc entry */
@@ -1715,7 +1735,7 @@ struct f2fs_sb_info {
 						 * semaphore for GC, avoid
 						 * race between GC and GC or CP
 						 */
-	struct f2fs_gc_kthread	*gc_thread;	/* GC thread */
+	struct f2fs_gc_kthread gc_thread;	/* GC thread */
 	struct atgc_management am;		/* atgc management */
 	unsigned int cur_victim_sec;		/* current victim section num */
 	unsigned int gc_mode;			/* current GC state */
fs/f2fs/gc.c +12 -21
index 687b2ce82c854..0254e3116e552 100644
@@ -31,9 +31,9 @@ static unsigned int count_bits(const unsigned long *addr,
 static int gc_thread_func(void *data)
 {
 	struct f2fs_sb_info *sbi = data;
-	struct f2fs_gc_kthread *gc_th = sbi->gc_thread;
-	wait_queue_head_t *wq = &sbi->gc_thread->gc_wait_queue_head;
-	wait_queue_head_t *fggc_wq = &sbi->gc_thread->fggc_wq;
+	struct f2fs_gc_kthread *gc_th = &sbi->gc_thread;
+	wait_queue_head_t *wq = &sbi->gc_thread.gc_wait_queue_head;
+	wait_queue_head_t *fggc_wq = &sbi->gc_thread.fggc_wq;
 	unsigned int wait_ms;
 	struct f2fs_gc_control gc_control = {
 		.victim_segno = NULL_SEGNO,
@@ -169,16 +169,10 @@ static int gc_thread_func(void *data)
 
 int f2fs_start_gc_thread(struct f2fs_sb_info *sbi)
 {
-	struct f2fs_gc_kthread *gc_th;
+	struct f2fs_gc_kthread *gc_th = &sbi->gc_thread;
 	dev_t dev = sbi->sb->s_bdev->bd_dev;
 	int err = 0;
 
-	gc_th = f2fs_kmalloc(sbi, sizeof(struct f2fs_gc_kthread), GFP_KERNEL);
-	if (!gc_th) {
-		err = -ENOMEM;
-		goto out;
-	}
-
 	gc_th->urgent_sleep_time = DEF_GC_THREAD_URGENT_SLEEP_TIME;
 	gc_th->min_sleep_time = DEF_GC_THREAD_MIN_SLEEP_TIME;
 	gc_th->max_sleep_time = DEF_GC_THREAD_MAX_SLEEP_TIME;
@@ -186,30 +180,27 @@ int f2fs_start_gc_thread(struct f2fs_sb_info *sbi)
 
 	gc_th->gc_wake = 0;
 
-	sbi->gc_thread = gc_th;
-	init_waitqueue_head(&sbi->gc_thread->gc_wait_queue_head);
-	init_waitqueue_head(&sbi->gc_thread->fggc_wq);
-	sbi->gc_thread->f2fs_gc_task = kthread_run(gc_thread_func, sbi,
+	init_waitqueue_head(&gc_th->gc_wait_queue_head);
+	init_waitqueue_head(&gc_th->fggc_wq);
+	gc_th->f2fs_gc_task = kthread_run(gc_thread_func, sbi,
 			"f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev));
 	if (IS_ERR(gc_th->f2fs_gc_task)) {
 		err = PTR_ERR(gc_th->f2fs_gc_task);
-		kfree(gc_th);
-		sbi->gc_thread = NULL;
+		gc_th->f2fs_gc_task = NULL;
 	}
-out:
 	return err;
 }
 
 void f2fs_stop_gc_thread(struct f2fs_sb_info *sbi)
 {
-	struct f2fs_gc_kthread *gc_th = sbi->gc_thread;
+	struct f2fs_gc_kthread *gc_th = &sbi->gc_thread;
 
-	if (!gc_th)
+	if (!gc_th->f2fs_gc_task)
 		return;
+
 	kthread_stop(gc_th->f2fs_gc_task);
+	gc_th->f2fs_gc_task = NULL;
 	wake_up_all(&gc_th->fggc_wq);
-	kfree(gc_th);
-	sbi->gc_thread = NULL;
 }
 
 static int select_gc_type(struct f2fs_sb_info *sbi, int gc_type)
fs/f2fs/gc.h +0 -20
index 47357101b03cd..0ff8138f0174f 100644
@@ -32,26 +32,6 @@
 
 #define NR_GC_CHECKPOINT_SECS (3)	/* data/node/dentry sections */
 
-struct f2fs_gc_kthread {
-	struct task_struct *f2fs_gc_task;
-	wait_queue_head_t gc_wait_queue_head;
-
-	/* for gc sleep time */
-	unsigned int urgent_sleep_time;
-	unsigned int min_sleep_time;
-	unsigned int max_sleep_time;
-	unsigned int no_gc_sleep_time;
-
-	/* for changing gc mode */
-	unsigned int gc_wake;
-
-	/* for GC_MERGE mount option */
-	wait_queue_head_t fggc_wq;		/*
-						 * caller of f2fs_balance_fs()
-						 * will wait on this wait queue.
-						 */
-};
-
 struct gc_inode_list {
 	struct list_head ilist;
 	struct radix_tree_root iroot;
fs/f2fs/segment.c +4 -5
index d185b209f89a5..db126347ca057 100644
@@ -415,15 +415,14 @@ void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need)
 		f2fs_submit_merged_write(sbi, DATA);
 		f2fs_submit_all_merged_ipu_writes(sbi);
 
-		if (test_opt(sbi, GC_MERGE) && sbi->gc_thread &&
-					sbi->gc_thread->f2fs_gc_task) {
+		if (test_opt(sbi, GC_MERGE) && sbi->gc_thread.f2fs_gc_task) {
 			DEFINE_WAIT(wait);
 
-			prepare_to_wait(&sbi->gc_thread->fggc_wq, &wait,
+			prepare_to_wait(&sbi->gc_thread.fggc_wq, &wait,
 						TASK_UNINTERRUPTIBLE);
-			wake_up(&sbi->gc_thread->gc_wait_queue_head);
+			wake_up(&sbi->gc_thread.gc_wait_queue_head);
 			io_schedule();
-			finish_wait(&sbi->gc_thread->fggc_wq, &wait);
+			finish_wait(&sbi->gc_thread.fggc_wq, &wait);
 		} else {
 			struct f2fs_gc_control gc_control = {
 				.victim_segno = NULL_SEGNO,
fs/f2fs/super.c +2 -2
index 9d1b5699f5bf1..dc06771fb1e9e 100644
@@ -2393,11 +2393,11 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
 	if ((*flags & SB_RDONLY) ||
 			(F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_OFF &&
 			!test_opt(sbi, GC_MERGE))) {
-		if (sbi->gc_thread) {
+		if (sbi->gc_thread.f2fs_gc_task) {
 			f2fs_stop_gc_thread(sbi);
 			need_restart_gc = true;
 		}
-	} else if (!sbi->gc_thread) {
+	} else if (!sbi->gc_thread.f2fs_gc_task) {
 		err = f2fs_start_gc_thread(sbi);
 		if (err)
 			goto restore_opts;
fs/f2fs/sysfs.c +7 -7
index 503a50542ac53..b0607fdd5ad40 100644
@@ -68,7 +68,7 @@ static ssize_t f2fs_sbi_show(struct f2fs_attr *a,
 static unsigned char *__struct_ptr(struct f2fs_sb_info *sbi, int struct_type)
 {
 	if (struct_type == GC_THREAD)
-		return (unsigned char *)sbi->gc_thread;
+		return (unsigned char *)&sbi->gc_thread;
 	else if (struct_type == SM_INFO)
 		return (unsigned char *)SM_I(sbi);
 	else if (struct_type == DCC_INFO)
@@ -543,20 +543,20 @@ static ssize_t __sbi_store(struct f2fs_attr *a,
 			sbi->gc_mode = GC_NORMAL;
 		} else if (t == 1) {
 			sbi->gc_mode = GC_URGENT_HIGH;
-			if (sbi->gc_thread) {
-				sbi->gc_thread->gc_wake = 1;
+			if (sbi->gc_thread.f2fs_gc_task) {
+				sbi->gc_thread.gc_wake = 1;
 				wake_up_interruptible_all(
-					&sbi->gc_thread->gc_wait_queue_head);
+					&sbi->gc_thread.gc_wait_queue_head);
 				wake_up_discard_thread(sbi, true);
 			}
 		} else if (t == 2) {
 			sbi->gc_mode = GC_URGENT_LOW;
 		} else if (t == 3) {
 			sbi->gc_mode = GC_URGENT_MID;
-			if (sbi->gc_thread) {
-				sbi->gc_thread->gc_wake = 1;
+			if (sbi->gc_thread.f2fs_gc_task) {
+				sbi->gc_thread.gc_wake = 1;
 				wake_up_interruptible_all(
-					&sbi->gc_thread->gc_wait_queue_head);
+					&sbi->gc_thread.gc_wait_queue_head);
 			}
 		} else {
 			return -EINVAL;
Signature · 1 line
2.53.0
author maintainer
#17 lore raw

PATCH 17/1887 io_uring: look up the file before queueing to io-wq

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit 98bc044d5a5374f8d3605fe55a8e2df6d6fc3f82 upstream.

io_prep_async_work() decides by the file of a request what kind of work it is for io-wq. I/O on regular files and block devices is bounded work, limited to min(SQ entries, 4 * CPUs) workers, for anything else that may block indefinitely the limit is RLIMIT_NPROC. Writes to a regular file are hashed by the inode, so that they are run one after the other instead of having a bunch of workers fight for the inode lock.

Since the file is only assigned when a request is issued, a request that is queued without an attempt to issue it, REQ_F_FORCE_ASYNC, doesn't have one at that point. io_prep_async_work() takes that for "not a regular file or block device":

- Reads and writes end up as unbound work. 32 reads with IOSQE_ASYNC from a slow block device on a ring with 4 SQ entries get 32 workers, not 4.
- Writes aren't hashed. Four buffered writes to one file get four workers, three of which do nothing but wait for the lock.

The late assignment is for the benefit of links, where a request may use a fixed file that one of its predecessors installs. By the time a request gets to io_queue_iowq() these are done, it is as good as issued. Assign the file there.

io_assign_file() moves up and is forced inline. With a third caller the compiler may stop inlining it, and every request that is issued would pay for a call.

IORING_OP_SPLICE is left as it is, unbound and not hashed. The file of the request is where it writes to, which says nothing about how long it
takes: a splice from an empty pipe or a socket into a regular file waits for its input. As bounded work, four of these on a ring with 4 SQ entries keep all other bounded work of the task from running, and as hashed work one of them blocks all writes to that file.

REQ_F_FORCE_ASYNC is not only set for IOSQE_ASYNC. What changes, and brings back what was the case before the file assignment was deferred:

- Requests with IOSQE_ASYNC or IOSQE_IO_DRAIN, and all requests that are submitted while a drain is active: reads and writes on regular files and block devices count against the limit for bounded workers, including the one set with IORING_REGISTER_IOWQ_MAX_WORKERS, so fewer of them run at the same time.
- Of these, writes to one regular file are run one at a time, unless they are O_DIRECT and the filesystem has FOP_DIO_PARALLEL_WRITE.
- IORING_OP_FALLOCATE and IORING_OP_FTRUNCATE, which always go to io-wq, are run one at a time per file, and in turn with these writes.
- The descriptor or the fixed file slot is looked up when the request is queued, not when a worker gets around to it, so closing or replacing it in between no longer has an effect on the request.

[ 6.1: io_assign_file() takes no def argument here ]
Fixes 6bf9c47a3989 ("io_uring: defer file assignment")
Assisted-by LLM
---
 io_uring/io_uring.c |   41 ++++++++++++++++++++++++++++-------------
 1 file changed, 28 insertions(+), 13 deletions(-)
io_uring/io_uring.c +28 -13
@@ -417,17 +417,45 @@ static void io_prep_async_link(struct io
 	}
 }
 
+/* Called for every request that is issued: keep it inline */
+static __always_inline bool io_assign_file(struct io_kiocb *req,
+					   unsigned int issue_flags)
+{
+	if (req->file || !io_op_defs[req->opcode].needs_file)
+		return true;
+
+	if (req->flags & REQ_F_FIXED_FILE)
+		req->file = io_file_get_fixed(req, req->cqe.fd, issue_flags);
+	else
+		req->file = io_file_get_normal(req, req->cqe.fd);
+
+	return !!req->file;
+}
+
 static void io_queue_iowq(struct io_kiocb *req)
 {
 	struct io_uring_task *tctx = req->task->io_uring;
 
 	BUG_ON(!tctx);
+	lockdep_assert_held(&req->ctx->uring_lock);
 
 	if ((current->flags & PF_KTHREAD) || !tctx->io_wq) {
 		io_req_task_queue_fail(req, -ECANCELED);
 		return;
 	}
 
+	/*
+	 * The file is looked up as late as possible, as it may be the result
+	 * of an earlier request of the link. This one is up now, and what kind
+	 * of work it is depends on the file. If that fails, leave the error
+	 * handling to the worker.
+	 *
+	 * Not for a splice: whatever it writes to, it may wait for its input
+	 * for ever. It has to remain unbound work that isn't hashed.
+	 */
+	if (req->opcode != IORING_OP_SPLICE)
+		io_assign_file(req, 0);
+
 	/* init ->work of the whole link before punting */
 	io_prep_async_link(req);
 
@@ -1693,19 +1721,6 @@ static void io_clean_op(struct io_kiocb
 	req->flags &= ~IO_REQ_CLEAN_FLAGS;
 }
 
-static bool io_assign_file(struct io_kiocb *req, unsigned int issue_flags)
-{
-	if (req->file || !io_op_defs[req->opcode].needs_file)
-		return true;
-
-	if (req->flags & REQ_F_FIXED_FILE)
-		req->file = io_file_get_fixed(req, req->cqe.fd, issue_flags);
-	else
-		req->file = io_file_get_normal(req, req->cqe.fd);
-
-	return !!req->file;
-}
-
 #define REQ_ISSUE_SLOW_FLAGS	(REQ_F_CREDS | REQ_F_ARM_LTIMEOUT)
 
 static int io_issue_sqe(struct io_kiocb *req, unsigned int issue_flags)
author maintainer
#44 lore raw

PATCH 44/1887 Bluetooth: btqcomsmd: Convert to platform remove callback returning void

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Uwe Kleine-König <[email protected]>

[ Upstream commit 4a62832f565c950d645a4f7b199a0a7985815940 ]

The .remove() callback for a platform driver returns an int which makes many driver authors wrongly assume it's possible to do error handling by returning an error code. However the value returned is ignored (apart from emitting a warning) and this typically results in resource leaks.

To improve here there is a quest to make the remove callback return void. In the first step of this quest all drivers are converted to .remove_new(), which already returns void. Eventually after all drivers are converted, .remove_new() will be renamed to .remove().

Trivially convert this driver from always returning zero in the remove callback to the void returning variant.

Stable-dep-of: f5a427b16e45 ("Bluetooth: btqcomsmd: destroy RPMsg endpoints before freeing hci_dev")

---
 drivers/bluetooth/btqcomsmd.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/bluetooth/btqcomsmd.c +2 -4
index 11c7e04bf3947..88dbb2f3fabf9 100644
@@ -197,7 +197,7 @@ static int btqcomsmd_probe(struct platform_device *pdev)
 	return ret;
 }
 
-static int btqcomsmd_remove(struct platform_device *pdev)
+static void btqcomsmd_remove(struct platform_device *pdev)
 {
 	struct btqcomsmd *btq = platform_get_drvdata(pdev);
 
@@ -206,8 +206,6 @@ static int btqcomsmd_remove(struct platform_device *pdev)
 
 	rpmsg_destroy_ept(btq->cmd_channel);
 	rpmsg_destroy_ept(btq->acl_channel);
-
-	return 0;
 }
 
 static const struct of_device_id btqcomsmd_of_match[] = {
@@ -218,7 +216,7 @@ MODULE_DEVICE_TABLE(of, btqcomsmd_of_match);
 
 static struct platform_driver btqcomsmd_driver = {
 	.probe = btqcomsmd_probe,
-	.remove = btqcomsmd_remove,
+	.remove_new = btqcomsmd_remove,
 	.driver  = {
 		.name  = "btqcomsmd",
 		.of_match_table = btqcomsmd_of_match,
Signature · 1 line
2.53.0
author maintainer
#45 lore raw

PATCH 45/1887 Bluetooth: btqcomsmd: destroy RPMsg endpoints before freeing hci_dev

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Xu Rao <[email protected]>

[ Upstream commit f5a427b16e45210dee656b0860728f3d496dee85 ]

The command and ACL RPMsg endpoints store struct btqcomsmd as their callback private data. The receive callbacks dereference btq->hdev without taking an hci_dev reference.

The current teardown order frees the hci_dev before destroying the RPMsg endpoints in both the hci_register_dev() error path and the driver remove path. If WCNSS delivers data in that window, the endpoint callback can run with an already freed hci_dev and pass it to the Bluetooth core.

For qcom_smd endpoints, rpmsg_destroy_ept() closes the channel and clears the callback under the channel recv_lock. The receive path holds the same lock while invoking the callback, so destroying the endpoints first both prevents new callbacks and serializes with any callback already running.

Destroy the command and ACL endpoints before hci_free_dev(). Keep hci_unregister_dev() first during remove so the HCI core stops issuing operations before the transport endpoints are shut down. In the full registration-error cleanup path, return directly after freeing the hci_dev to avoid falling through to the partial-construction labels and destroying the endpoints twice.

Fixes 5052de8deff5 ("soc: qcom: smd: Transition client drivers from smd to rpmsg")
Fixes 9a39a927be01 ("Bluetooth: btqcomsmd: Fix a resource leak in error handling paths in the probe function")
---
 drivers/bluetooth/btqcomsmd.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/bluetooth/btqcomsmd.c +5 -1
index 88dbb2f3fabf9..4ce8354ebb86b 100644
@@ -188,7 +188,10 @@ static int btqcomsmd_probe(struct platform_device *pdev)
 	return 0;
 
 hci_free_dev:
+	rpmsg_destroy_ept(btq->cmd_channel);
+	rpmsg_destroy_ept(btq->acl_channel);
 	hci_free_dev(hdev);
+	return ret;
 destroy_cmd_channel:
 	rpmsg_destroy_ept(btq->cmd_channel);
 destroy_acl_channel:
@@ -202,10 +205,11 @@ static void btqcomsmd_remove(struct platform_device *pdev)
 	struct btqcomsmd *btq = platform_get_drvdata(pdev);
 
 	hci_unregister_dev(btq->hdev);
-	hci_free_dev(btq->hdev);
 
 	rpmsg_destroy_ept(btq->cmd_channel);
 	rpmsg_destroy_ept(btq->acl_channel);
+
+	hci_free_dev(btq->hdev);
 }
 
 static const struct of_device_id btqcomsmd_of_match[] = {
Signature · 1 line
2.53.0
author maintainer
#46 lore raw

PATCH 46/1887 genetlink: pin family module during policy dump

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: XingWang Xiang <[email protected]>

[ Upstream commit 6a1094c34d176827b2b173e163dcc964a13af93f ]

The generic netlink controller's policy dump keeps pointers to the target family's operation and policy tables in its callback state. A dump may be split across multiple skbs and remain pending after the initial request.

Netlink pins the module which owns the dump callback, but in this case that is the controller's owner rather than the target family's owner. The target family can consequently be unregistered and its module unloaded while a policy dump is pending. Advancing the dump then dereferences policy memory from the unloaded module.

Take a reference to the target family's module when the dump starts. Drop it from the error and done paths. This matches the lifetime for which the dump context retains the family and policy pointers.

Fixes d07dcf9aadd6 ("netlink: add infrastructure to expose policies to userspace")
[ adapted split-operation iterator handling to the older genl_ops and opidx interfaces. ]
---
 net/netlink/genetlink.c | 28 +++++++++++++++++++++-------
 1 file changed, 21 insertions(+), 7 deletions(-)
net/netlink/genetlink.c +21 -7
index 3a3b29ff63b31..4ededd793767c 100644
@@ -1159,6 +1159,7 @@ static int genl_ctrl_event(int event, const struct genl_family *family,
 struct ctrl_dump_policy_ctx {
 	struct netlink_policy_dump_state *state;
 	const struct genl_family *rt;
+	struct module *owner;
 	unsigned int opidx;
 	u32 op;
 	u16 fam_id;
@@ -1202,6 +1203,9 @@ static int ctrl_dumppolicy_start(struct netlink_callback *cb)
 		return -ENOENT;
 
 	ctx->rt = rt;
+	ctx->owner = rt->module;
+	if (!try_module_get(ctx->owner))
+		return -ENOENT;
 
 	if (tb[CTRL_ATTR_OP]) {
 		ctx->single_op = true;
@@ -1210,14 +1214,19 @@ static int ctrl_dumppolicy_start(struct netlink_callback *cb)
 		err = genl_get_cmd(ctx->op, rt, &op);
 		if (err) {
 			NL_SET_BAD_ATTR(cb->extack, tb[CTRL_ATTR_OP]);
-			return err;
+			goto err_put_owner;
 		}
 
-		if (!op.policy)
-			return -ENODATA;
+		if (!op.policy) {
+			err = -ENODATA;
+			goto err_put_owner;
+		}
 
-		return netlink_policy_dump_add_policy(&ctx->state, op.policy,
-						      op.maxattr);
+		err = netlink_policy_dump_add_policy(&ctx->state, op.policy,
+						     op.maxattr);
+		if (err)
+			goto err_free_state;
+		return 0;
 	}
 
 	for (i = 0; i < genl_get_cmd_cnt(rt); i++) {
@@ -1232,12 +1241,16 @@ static int ctrl_dumppolicy_start(struct netlink_callback *cb)
 		}
 	}
 
-	if (!ctx->state)
-		return -ENODATA;
+	if (!ctx->state) {
+		err = -ENODATA;
+		goto err_put_owner;
+	}
 	return 0;
 
 err_free_state:
 	netlink_policy_dump_free(ctx->state);
+err_put_owner:
+	module_put(ctx->owner);
 	return err;
 }
 
@@ -1372,6 +1385,7 @@ static int ctrl_dumppolicy_done(struct netlink_callback *cb)
 	struct ctrl_dump_policy_ctx *ctx = (void *)cb->ctx;
 
 	netlink_policy_dump_free(ctx->state);
+	module_put(ctx->owner);
 	return 0;
 }
 
Signature · 1 line
2.53.0
author maintainer
#47 lore raw

PATCH 47/1887 net: bridge: use option bits for CFM/MRP frame handlers

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Zhiling Zou <[email protected]>

[ Upstream commit 7a49e6b16f36b8e085521699adbca3e321b6dd0c ]

CFM and MRP register a global br_frame_type whose hlist_node is linked into the per-bridge frame_type_list when the first MEP/MRP instance is created. Enabling the protocol on multiple bridges therefore inserts the same node into multiple lists. Unregistering it on one bridge then corrupts list state belonging to another.

These handlers can only be installed once per bridge, and they are uncommon. Track their per-bridge enable state with net_bridge option bits, which already live on the Rx hot cache line, and dispatch the matching handler directly from the receive path. Check both bits together first as an unlikely case.

Remove the generic frame_type_list and br_frame_type helpers, which have had no other users since CFM and MRP were added. That shrinks struct net_bridge by 8 bytes and drops the list walk from the fast path. When neither protocol is compiled in, BR_CFM_MRP_OPTS is 0 and the compiler prunes the branch.

Fixes 90c628dd47ff ("net: bridge: extend the process of special frames")
Fixes dc32cbb3dbd7 ("bridge: cfm: Kernel space implementation of CFM. CCM frame RX added.")
[ Adjusted bridge option enum context because BROPT_MDB_OFFLOAD_FAIL_NOTIFICATION and BROPT_FDB_LOCAL_VLAN_0 are absent. ]
---
 net/bridge/br_cfm.c     | 11 +++--------
 net/bridge/br_device.c  |  1 -
 net/bridge/br_input.c   | 35 ++++++++++++++---------------------
 net/bridge/br_mrp.c     | 13 +++----------
 net/bridge/br_private.h | 26 +++++++++++++++-----------
 5 files changed, 35 insertions(+), 51 deletions(-)
net/bridge/br_cfm.c +3 -8
index a89aec8314164..b9a3546fb4b44 100644
@@ -367,7 +367,7 @@ static u32 ccm_tlv_extract(struct sk_buff *skb, u32 index,
 }
 
 /* note: already called with rcu_read_lock */
-static int br_cfm_frame_rx(struct net_bridge_port *port, struct sk_buff *skb)
+int br_cfm_frame_rx(struct net_bridge_port *port, struct sk_buff *skb)
 {
 	u32 mdlevel, interval, size, index, max;
 	const struct br_cfm_common_hdr *hdr;
@@ -489,11 +489,6 @@ static int br_cfm_frame_rx(struct net_bridge_port *port, struct sk_buff *skb)
 	return 1;
 }
 
-static struct br_frame_type cfm_frame_type __read_mostly = {
-	.type = cpu_to_be16(ETH_P_CFM),
-	.frame_handler = br_cfm_frame_rx,
-};
-
 int br_cfm_mep_create(struct net_bridge *br,
 		      const u32 instance,
 		      struct br_cfm_mep_create *const create,
@@ -559,7 +554,7 @@ int br_cfm_mep_create(struct net_bridge *br,
 	INIT_DELAYED_WORK(&mep->ccm_tx_dwork, ccm_tx_work_expired);
 
 	if (hlist_empty(&br->mep_list))
-		br_add_frame(br, &cfm_frame_type);
+		br_opt_toggle(br, BROPT_CFM_ENABLED, true);
 
 	hlist_add_tail_rcu(&mep->head, &br->mep_list);
 
@@ -588,7 +583,7 @@ static void mep_delete_implementation(struct net_bridge *br,
 	kfree_rcu(mep, rcu);
 
 	if (hlist_empty(&br->mep_list))
-		br_del_frame(br, &cfm_frame_type);
+		br_opt_toggle(br, BROPT_CFM_ENABLED, false);
 }
 
 int br_cfm_mep_delete(struct net_bridge *br,
net/bridge/br_device.c +0 -1
index 052986e05e620..9966a3e093232 100644
@@ -508,7 +508,6 @@ void br_dev_setup(struct net_device *dev)
 	spin_lock_init(&br->lock);
 	INIT_LIST_HEAD(&br->port_list);
 	INIT_HLIST_HEAD(&br->fdb_list);
-	INIT_HLIST_HEAD(&br->frame_type_list);
 #if IS_ENABLED(CONFIG_BRIDGE_MRP)
 	INIT_HLIST_HEAD(&br->mrp_list);
 #endif
net/bridge/br_input.c +14 -21
index aca6db6f95355..bfc7de46a7054 100644
@@ -286,17 +286,25 @@ static int nf_hook_bridge_pre(struct sk_buff *skb, struct sk_buff **pskb)
 	return RX_HANDLER_CONSUMED;
 }
 
+#define BR_CFM_MRP_OPTS \
+	((IS_ENABLED(CONFIG_BRIDGE_CFM) ? BIT(BROPT_CFM_ENABLED) : 0UL) | \
+	 (IS_ENABLED(CONFIG_BRIDGE_MRP) ? BIT(BROPT_MRP_ENABLED) : 0UL))
+
 /* Return 0 if the frame was not processed otherwise 1
  * note: already called with rcu_read_lock
  */
 static int br_process_frame_type(struct net_bridge_port *p,
 				 struct sk_buff *skb)
 {
-	struct br_frame_type *tmp;
+	struct net_bridge *br = p->br;
+
+	if (skb->protocol == htons(ETH_P_CFM) &&
+	    br_opt_get(br, BROPT_CFM_ENABLED))
+		return br_cfm_frame_rx(p, skb);
 
-	hlist_for_each_entry_rcu(tmp, &p->br->frame_type_list, list)
-		if (unlikely(tmp->type == skb->protocol))
-			return tmp->frame_handler(p, skb);
+	if (skb->protocol == htons(ETH_P_MRP) &&
+	    br_opt_get(br, BROPT_MRP_ENABLED))
+		return br_mrp_process(p, skb);
 
 	return 0;
 }
@@ -389,7 +397,8 @@ static rx_handler_result_t br_handle_frame(struct sk_buff **pskb)
 		}
 	}
 
-	if (unlikely(br_process_frame_type(p, skb)))
+	if (unlikely((READ_ONCE(p->br->options) & BR_CFM_MRP_OPTS) &&
+		     br_process_frame_type(p, skb)))
 		return RX_HANDLER_PASS;
 
 forward:
@@ -430,19 +439,3 @@ rx_handler_func_t *br_get_rx_handler(const struct net_device *dev)
 
 	return br_handle_frame;
 }
-
-void br_add_frame(struct net_bridge *br, struct br_frame_type *ft)
-{
-	hlist_add_head_rcu(&ft->list, &br->frame_type_list);
-}
-
-void br_del_frame(struct net_bridge *br, struct br_frame_type *ft)
-{
-	struct br_frame_type *tmp;
-
-	hlist_for_each_entry(tmp, &br->frame_type_list, list)
-		if (ft == tmp) {
-			hlist_del_rcu(&ft->list);
-			return;
-		}
-}
net/bridge/br_mrp.c +3 -10
index a837ff7d6f36d..79d6bc62179e2 100644
@@ -6,13 +6,6 @@
 static const u8 mrp_test_dmac[ETH_ALEN] = { 0x1, 0x15, 0x4e, 0x0, 0x0, 0x1 };
 static const u8 mrp_in_test_dmac[ETH_ALEN] = { 0x1, 0x15, 0x4e, 0x0, 0x0, 0x3 };
 
-static int br_mrp_process(struct net_bridge_port *p, struct sk_buff *skb);
-
-static struct br_frame_type mrp_frame_type __read_mostly = {
-	.type = cpu_to_be16(ETH_P_MRP),
-	.frame_handler = br_mrp_process,
-};
-
 static bool br_mrp_is_ring_port(struct net_bridge_port *p_port,
 				struct net_bridge_port *s_port,
 				struct net_bridge_port *port)
@@ -486,7 +479,7 @@ static void br_mrp_del_impl(struct net_bridge *br, struct br_mrp *mrp)
 	kfree_rcu(mrp, rcu);
 
 	if (hlist_empty(&br->mrp_list))
-		br_del_frame(br, &mrp_frame_type);
+		br_opt_toggle(br, BROPT_MRP_ENABLED, false);
 }
 
 /* Adds a new MRP instance.
@@ -536,7 +529,7 @@ int br_mrp_add(struct net_bridge *br, struct br_mrp_instance *instance)
 	rcu_assign_pointer(mrp->s_port, p);
 
 	if (hlist_empty(&br->mrp_list))
-		br_add_frame(br, &mrp_frame_type);
+		br_opt_toggle(br, BROPT_MRP_ENABLED, true);
 
 	INIT_DELAYED_WORK(&mrp->test_work, br_mrp_test_work_expired);
 	INIT_DELAYED_WORK(&mrp->in_test_work, br_mrp_in_test_work_expired);
@@ -1241,7 +1234,7 @@ static int br_mrp_rcv(struct net_bridge_port *p,
  * normal forwarding.
  * note: already called with rcu_read_lock
  */
-static int br_mrp_process(struct net_bridge_port *p, struct sk_buff *skb)
+int br_mrp_process(struct net_bridge_port *p, struct sk_buff *skb)
 {
 	/* If there is no MRP instance do normal forwarding */
 	if (likely(!(p->flags & BR_MRP_AWARE)))
net/bridge/br_private.h +15 -11
index 617e636a8a4c2..8c0912283df79 100644
@@ -459,12 +459,13 @@ enum net_bridge_opts {
 	BROPT_VLAN_BRIDGE_BINDING,
 	BROPT_MCAST_VLAN_SNOOPING_ENABLED,
 	BROPT_MST_ENABLED,
+	BROPT_CFM_ENABLED,
+	BROPT_MRP_ENABLED,
 };
 
 struct net_bridge {
 	spinlock_t			lock;
 	spinlock_t			hash_lock;
-	struct hlist_head		frame_type_list;
 	struct net_device		*dev;
 	unsigned long			options;
 	/* These fields are accessed on each packet */
@@ -861,16 +862,6 @@ int nbp_backup_change(struct net_bridge_port *p, struct net_device *backup_dev);
 int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb);
 rx_handler_func_t *br_get_rx_handler(const struct net_device *dev);
 
-struct br_frame_type {
-	__be16			type;
-	int			(*frame_handler)(struct net_bridge_port *port,
-						 struct sk_buff *skb);
-	struct hlist_node	list;
-};
-
-void br_add_frame(struct net_bridge *br, struct br_frame_type *ft);
-void br_del_frame(struct net_bridge *br, struct br_frame_type *ft);
-
 static inline bool br_rx_handler_check_rcu(const struct net_device *dev)
 {
 	return rcu_dereference(dev->rx_handler) == br_get_rx_handler(dev);
@@ -1931,6 +1922,7 @@ int br_mrp_parse(struct net_bridge *br, struct net_bridge_port *p,
 bool br_mrp_enabled(struct net_bridge *br);
 void br_mrp_port_del(struct net_bridge *br, struct net_bridge_port *p);
 int br_mrp_fill_info(struct sk_buff *skb, struct net_bridge *br);
+int br_mrp_process(struct net_bridge_port *p, struct sk_buff *skb);
 #else
 static inline int br_mrp_parse(struct net_bridge *br, struct net_bridge_port *p,
 			       struct nlattr *attr, int cmd,
@@ -1954,6 +1946,11 @@ static inline int br_mrp_fill_info(struct sk_buff *skb, struct net_bridge *br)
 	return 0;
 }
 
+static inline int br_mrp_process(struct net_bridge_port *p, struct sk_buff *skb)
+{
+	return 0;
+}
+
 #endif
 
 /* br_cfm.c */
@@ -1962,6 +1959,7 @@ int br_cfm_parse(struct net_bridge *br, struct net_bridge_port *p,
 		 struct nlattr *attr, int cmd, struct netlink_ext_ack *extack);
 bool br_cfm_created(struct net_bridge *br);
 void br_cfm_port_del(struct net_bridge *br, struct net_bridge_port *p);
+int br_cfm_frame_rx(struct net_bridge_port *port, struct sk_buff *skb);
 int br_cfm_config_fill_info(struct sk_buff *skb, struct net_bridge *br);
 int br_cfm_status_fill_info(struct sk_buff *skb,
 			    struct net_bridge *br,
@@ -1986,6 +1984,12 @@ static inline void br_cfm_port_del(struct net_bridge *br,
 {
 }
 
+static inline int br_cfm_frame_rx(struct net_bridge_port *port,
+				  struct sk_buff *skb)
+{
+	return 0;
+}
+
 static inline int br_cfm_config_fill_info(struct sk_buff *skb, struct net_bridge *br)
 {
 	return -EOPNOTSUPP;
Signature · 1 line
2.53.0
author maintainer
#48 lore raw

PATCH 48/1887 landlock: Fix use-after-free of the sources parent directory

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Norbert Szetei <[email protected]>

[ Upstream commit 2c6dc792538260a8087ac5b22c31b3b8e47c85d6 ]

current_check_refer_path() reads old_dentry->d_parent without holding a reference nor a lock on it, and then dereferences it in collect_domain_accesses() and in the audit record.

A reference on a child does not pin its parent: __d_move() reassigns dentry->d_parent and drops the reference the child held on its former parent. hook_path_rename() is not affected because the rename path calls lock_rename() before the hook, so the source cannot be reparented under it. hook_path_link() has no such protection: filename_linkat() holds a reference on the source dentry but neither locks nor references its parent, so a concurrent rename(2) can reparent the source while security_path_link() runs, and the former parent can then be removed and freed while the hook walks it.

A process can trigger this after entering a Landlock domain that handles at least one filesystem access right. The process can then race a linkat(2) loop against rename(2) and rmdir(2):

  BUG: KASAN: slab-use-after-free in collect_domain_accesses+0x278/0x290
  Read of size 4 at addr ffff888160bd53f4 by task llrepro2/549
   collect_domain_accesses+0x278/0x290
   current_check_refer_path+0x952/0x1120
   security_path_link+0x1be/0x320
   filename_linkat+0x342/0x6d0
   __x64_sys_linkat+0xfa/0x150
  Freed by task 562:
   kmem_cache_free+0x139/0x4c0
   i_callback+0x4b/0x80
   rcu_core+0x7dc/0x10a0

Take a reference on the dentry selected as the source parent, using dget() for the common-mount-root case and dget_parent() otherwise. Release it after the hierarchy walk and synchronous audit logging.

Fixes b91c3e4ea756 ("landlock: Add support for file reparenting with LANDLOCK_ACCESS_FS_REFER")
[mic: Clarify the caller, reachability, and reference handling]
[ consolidated dput(old_parent) into one release after the hierarchy walks because the older branch lacks audit logging. ]
---
 security/landlock/fs.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
security/landlock/fs.c +6 -4
index 8f20a146648cf..4e03da721e633 100644
@@ -911,17 +911,19 @@ static int current_check_refer_path(struct dentry *const old_dentry,
 	/*
 	 * old_dentry may be the root of the common mount point and
 	 * !IS_ROOT(old_dentry) at the same time (e.g. with open_tree() and
-	 * OPEN_TREE_CLONE).  We do not need to call dget(old_parent) because
-	 * we keep a reference to old_dentry.
+	 * OPEN_TREE_CLONE).  Pin the dentry used as old_parent in either case.
+	 * Otherwise, dget_parent() safely fetches and pins the current parent
+	 * against a concurrent rename(2).
 	 */
-	old_parent = (old_dentry == mnt_dir.dentry) ? old_dentry :
-						      old_dentry->d_parent;
+	old_parent = (old_dentry == mnt_dir.dentry) ? dget(old_dentry) :
+						      dget_parent(old_dentry);
 
 	/* new_dir->dentry is equal to new_dentry->d_parent */
 	allow_parent1 = collect_domain_accesses(dom, mnt_dir.dentry, old_parent,
 						&layer_masks_parent1);
 	allow_parent2 = collect_domain_accesses(
 		dom, mnt_dir.dentry, new_dir->dentry, &layer_masks_parent2);
+	dput(old_parent);
 
 	if (allow_parent1 && allow_parent2)
 		return 0;
Signature · 1 line
2.53.0
author maintainer
#49 lore raw

PATCH 49/1887 smb: client: fix heap overflow in DACL owner/group rewrite

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Bjoern Doebel <[email protected]>

[ Upstream commit 0ee150794c75bcd0be0e24ff3394f433cbae18cc ]

When id_mode_to_cifs_acl rewrites an existing DACL, it allocates a buffer sized according to the on-disk DACL length reported by dacl_ptr->size. However, replace_sids_and_copy_aces may rewrite each ACE with a new owner/group SID obtained from the cifs.idmap upcall. Those SIDs can have up to SID_MAX_SUB_AUTHORITIES (15) sub-authorities, making each ACE up to 76 bytes (sizeof(struct smb_ace)).

If the original DACL contains short SIDs (e.g., 1 sub-authority) while the replacement SIDs are long, the rewritten ACEs overflow the allocation.

Fix this by always budgeting for worst-case SID expansion: allocate sizeof(struct smb_acl) plus num_aces * sizeof(struct smb_ace), which covers the smb_acl header and room for every ACE at maximum SID size. This replaces the previous split logic that used dacl_ptr->size for cifsacl mounts but num_aces * sizeof(struct smb_ace) for mode_from_sid
mounts: both paths can trigger the same rewrite and need the same headroom.

KASAN reports this as:

  BUG: KASAN: slab-out-of-bounds in build_sec_desc+0x1e8a/0x2680 [cifs]
  Write of size 4 at addr ffff8881a5e25374 by task chown/5298
  ...
  The buggy address is located 0 bytes to the right of
   allocated 884-byte region [ffff8881a5e25000, ffff8881a5e25374)
Fixes bc3e9dd9d104 ("cifs: Change SIDs in ACEs while transferring file ownership.")
Assisted-by Kiro:claude-opus-4.6
Fixes 5c3564852c58 ("cifs: Minimize the number of cifs_acl memory allocations")
[ changed smb_acl/smb_ace to cifs_acl/cifs_ace and le16_to_cpu() to le32_to_cpu() for the branch’s 32-bit num_aces field. ]
---
 fs/smb/client/cifsacl.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)
fs/smb/client/cifsacl.c +7 -5
index 93e3f0bcecace..39179e639b943 100644
@@ -1751,11 +1751,13 @@ id_mode_to_cifs_acl(struct inode *inode, const char *path, __u64 *pnmode,
 				cifs_put_tlink(tlink);
 				return rc;
 			}
-			if (mode_from_sid)
-				nsecdesclen +=
-					le32_to_cpu(dacl_ptr->num_aces) * sizeof(struct cifs_ace);
-			else /* cifsacl */
-				nsecdesclen += le16_to_cpu(dacl_ptr->size);
+			/*
+			 * Worst case: every ACE is rewritten with a new SID of
+			 * SID_MAX_SUB_AUTHORITIES sub-auths -> sizeof(cifs_ace) each,
+			 * plus the cifs_acl header replace_sids_and_copy_aces() emits.
+			 */
+			nsecdesclen += sizeof(struct cifs_acl) +
+				le32_to_cpu(dacl_ptr->num_aces) * sizeof(struct cifs_ace);
 		}
 	}
 
Signature · 1 line
2.53.0
author maintainer
#50 lore raw

PATCH 50/1887 ALSA: usb-audio: Optimize the copy of packet sizes for implicit fb handling

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Takashi Iwai <[email protected]>

[ Upstream commit 36adb51ac0b19edb32ffeea3fe66b174bad25ead ]

We did manual copies over loop for the packet data update of the implicit feedback, but this can be optimized with a simple memcpy().

Along with it, change the data type of snd_usb_packet_info struct to align with other (from uint32_t to int).

No functional changes but only code optimizations.

Stable-dep-of: 76a986c980bb ("ALSA: usb-audio: Clamp implicit feedback packet count to URB capacity")

---
 sound/usb/card.h     | 2 +-
 sound/usb/endpoint.c | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)
sound/usb/card.h +1 -1
index 6ec95b2edf863..ac5505ce046de 100644
@@ -89,7 +89,7 @@ struct snd_usb_endpoint {
 	struct snd_urb_ctx urb[MAX_URBS];
 
 	struct snd_usb_packet_info {
-		uint32_t packet_size[MAX_PACKS_HS];
+		int packet_size[MAX_PACKS_HS];
 		int packets;
 	} next_packet[MAX_URBS];
 	unsigned int next_packet_head;	/* ring buffer offset to read */
sound/usb/endpoint.c +3 -3
index 778466624f030..6cde8455da37b 100644
@@ -478,7 +478,7 @@ int snd_usb_queue_pending_output_urbs(struct snd_usb_endpoint *ep,
 		unsigned long flags;
 		struct snd_usb_packet_info *packet;
 		struct snd_urb_ctx *ctx = NULL;
-		int err, i;
+		int err;
 
 		spin_lock_irqsave(&ep->lock, flags);
 		if ((!implicit_fb || ep->next_packet_queued > 0) &&
@@ -498,8 +498,8 @@ int snd_usb_queue_pending_output_urbs(struct snd_usb_endpoint *ep,
 		/* copy over the length information */
 		if (implicit_fb) {
 			ctx->packets = packet->packets;
-			for (i = 0; i < packet->packets; i++)
-				ctx->packet_size[i] = packet->packet_size[i];
+			memcpy(ctx->packet_size, packet->packet_size,
+			       packet->packets * sizeof(packet->packet_size[0]));
 		}
 
 		/* call the data handler to fill in playback data */
Signature · 1 line
2.53.0
author maintainer
#51 lore raw

PATCH 51/1887 ALSA: usb-audio: Clamp implicit feedback packet count to URB capacity

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Xiang Mei <[email protected]>

[ Upstream commit 76a986c980bb502c7688d605ac7a67fd257a9a1b ]

data_ep_set_params() allocates each data URB for exactly u->packets isochronous frames, so urb->iso_frame_desc[] has u->packets slots and ctx->packets is the driver's only record of that limit. For an implicit feedback sink, snd_usb_queue_pending_output_urbs() overwrites it with the sync source's packet count, which is calculated independently from the capture endpoint's parameters. When that count is larger, prepare_playback_urb() and prepare_silent_urb() can write iso_frame_desc[] past the allocation; their existing bounds limit payload bytes, not the descriptor index.

The reproducer uses a high-speed UAC2 device declaring bInterval 1 for implicit feedback capture (8 packets) and bInterval 4 for playback (1 packet). On the first capture completion after the stream starts, it accesses seven descriptors spanning 112 bytes beyond the one-packet URB:

  BUG: KASAN: slab-out-of-bounds in prepare_playback_urb (sound/usb/pcm.c:1560)
  Write of size 4 at addr ffff88801e696ad0 by task vhci_rx/178
   prepare_playback_urb (sound/usb/pcm.c:1560)
   prepare_outbound_urb (sound/usb/endpoint.c:340)
   snd_usb_queue_pending_output_urbs (sound/usb/endpoint.c:501)
   snd_complete_urb (sound/usb/endpoint.c:1834)
   __usb_hcd_giveback_urb (drivers/usb/core/hcd.c:1657)
   usb_hcd_giveback_urb (drivers/usb/core/hcd.c:1741)
   vhci_rx_loop (drivers/usb/usbip/vhci_rx.c:107)
   kthread (kernel/kthread.c:436)
  The buggy address belongs to the object at ffff88801e696a00
   which belongs to the cache kmalloc-256 of size 256
  The buggy address is located 0 bytes to the right of
   allocated 208-byte region [ffff88801e696a00, ffff88801e696ad0)

Record the allocated packet count per endpoint and clamp both the adopted count and the packet-size copy to it. Fold the Format Type II delimiter into urb_packs before the allocation loop so the recorded limit matches every URB.

Fixes cf044e441902 ("ALSA: usb-audio: Update the number of packets properly at receiving")
Reported-by [email protected]
Assisted-by Claude:claude-opus-5
---
 sound/usb/card.h     |  1 +
 sound/usb/endpoint.c | 12 +++++++-----
 2 files changed, 8 insertions(+), 5 deletions(-)
sound/usb/card.h +1 -0
index ac5505ce046de..0d860c57d9d9d 100644
@@ -115,6 +115,7 @@ struct snd_usb_endpoint {
 	unsigned int phase;		/* phase accumulator */
 	unsigned int maxpacksize;	/* max packet size in bytes */
 	unsigned int maxframesize;      /* max packet size in frames */
+	unsigned int max_urb_packs;	/* packets allocated per data URB */
 	unsigned int max_urb_frames;	/* max URB size in frames */
 	unsigned int curpacksize;	/* current packet size in bytes (for capture) */
 	unsigned int curframesize;      /* current packet size in frames (for capture) */
sound/usb/endpoint.c +7 -5
index 6cde8455da37b..dd81c94cbb520 100644
@@ -497,9 +497,10 @@ int snd_usb_queue_pending_output_urbs(struct snd_usb_endpoint *ep,
 
 		/* copy over the length information */
 		if (implicit_fb) {
-			ctx->packets = packet->packets;
+			ctx->packets = min_t(int, packet->packets,
+					     ep->max_urb_packs);
 			memcpy(ctx->packet_size, packet->packet_size,
-			       packet->packets * sizeof(packet->packet_size[0]));
+			       ctx->packets * sizeof(packet->packet_size[0]));
 		}
 
 		/* call the data handler to fill in playback data */
@@ -1252,15 +1253,16 @@ static int data_ep_set_params(struct snd_usb_endpoint *ep)
 		ep->nurbs = min(max_urbs, urbs_per_period * ep->cur_buffer_periods);
 	}
 
+	if (fmt->fmt_type == UAC_FORMAT_TYPE_II)
+		urb_packs++; /* for transfer delimiter */
+	ep->max_urb_packs = urb_packs;
+
 	/* allocate and initialize data urbs */
 	for (i = 0; i < ep->nurbs; i++) {
 		struct snd_urb_ctx *u = &ep->urb[i];
 		u->index = i;
 		u->ep = ep;
 		u->packets = urb_packs;
-
-		if (fmt->fmt_type == UAC_FORMAT_TYPE_II)
-			u->packets++; /* for transfer delimiter */
 		u->buffer_size = maxsize * u->packets;
 		u->urb = usb_alloc_urb(u->packets, GFP_KERNEL);
 		if (!u->urb)
Signature · 1 line
2.53.0
author maintainer
#52 lore raw

PATCH 52/1887 exec: Cleanup POSIX timers right after de_thread()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Hyunwoo Kim <[email protected]>

[ Upstream commit acb03d3881818581052924a9bbbe92b8741ed448 ]

A per-thread CPU timer holds a reference to the PID of the thread it is attached to and, while it is armed, its node is queued in that thread's posix_cputimers. The task is looked up by that PID.

When a non-leader thread exec()s, de_thread() changes which task owns that PID. pid_task(timer->it.cpu.pid, PIDTYPE_PID) then returns NULL, but the node is still queued on tsk, which is alive. timer_lock_sighand() takes a failed lookup to mean that the node is already dequeued, so it has nothing to undo.

begin_new_exec() calls posix_cpu_timers_exit(me) right after exec_task_namespaces() and that removes the leftover node, so the state normally stays invisible. But bprm->point_of_no_return is set before de_thread(), so if unshare_files(), set_mm_exe_file(), exec_mmap() or exec_task_namespaces() fails, the task dies before it gets there. exit_itimers() then frees the k_itimer while its node is still queued, and reaping tsk later erases that freed node from the rbtree.

In short:

the non-leader thread B the parent

timer_create(CLOCK_THREAD_CPUTIME_ID)
timer_settime()
arm_timer() // the node is queued on B
execve()
de_thread(B)
exchange_tids(B, leader) // B's PID now belongs to the leader release_task(leader)
__exit_signal(leader)
posix_cpu_timers_exit(leader) // cleans leader's queue, not B's __unhash_process(leader) // that PID has no task anymore
exec_mmap()
mmap_read_lock_killable(old_mm)
kill(B, SIGKILL)
// -EINTR
get_signal()
do_exit()
exit_itimers()
posix_timer_delete()
posix_cpu_timer_del()
posix_timer_unhash_and_free() // freed while still queued
wait4()
release_task(B)
posix_cpu_timers_exit(B)
cleanup_timerqueue()
timerqueue_del() // use-after-free

Move the POSIX timer cleanup right after de_thread() before any of the later failure conditions brings the task into do_exit().

[ tglx: Move the cleanup right after de_thread() ]

Fixes 55e8c8eb2c7b ("posix-cpu-timers: Store a reference to a pid not a task")
[ kept timer cleanup inline instead of introducing upstream’s posixtimer_exec() helper. ]
---
 fs/exec.c | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)
fs/exec.c +15 -8
index 6ff6367793b9e..7391ec00a1cc1 100644
@@ -1268,6 +1268,21 @@ int begin_new_exec(struct linux_binprm * bprm)
 	if (retval)
 		goto out;
 
+	/*
+	 * This must be done here to ensure that POSIX CPU timers which were
+	 * armed on the current task are dequeued from me::posix_cputimers.
+	 * Otherwise in case of a TID switch the deletion of the related POSIX
+	 * timer would not remove an enqueued timer because the TID lookup
+	 * of the old TID fails.
+	 */
+#ifdef CONFIG_POSIX_TIMERS
+	spin_lock_irq(&me->sighand->siglock);
+	posix_cpu_timers_exit(me);
+	spin_unlock_irq(&me->sighand->siglock);
+	exit_itimers(me);
+	flush_itimer_signals();
+#endif
+
 	/*
 	 * Cancel any io_uring activity across execve
 	 */
@@ -1316,14 +1331,6 @@ int begin_new_exec(struct linux_binprm * bprm)
 
 	bprm->mm = NULL;
 
-#ifdef CONFIG_POSIX_TIMERS
-	spin_lock_irq(&me->sighand->siglock);
-	posix_cpu_timers_exit(me);
-	spin_unlock_irq(&me->sighand->siglock);
-	exit_itimers(me);
-	flush_itimer_signals();
-#endif
-
 	/*
 	 * Make the signal table private.
 	 */
Signature · 1 line
2.53.0
author maintainer
#53 lore raw

PATCH 53/1887 wifi: libipw: reject TKIP frames without a full MIC

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Daehyeon Ko <[email protected]>

[ Upstream commit 06f42accaf3c6aecab1dcc57f68dde6c06c8b380 ]

libipw_michael_mic_verify() assumes that an skb contains an eight-byte Michael MIC. A short TKIP frame makes the unsigned payload length wrap, causing michael_mic() to read past the skb.

Check that the MIC is present before verifying it, and use the existing MICHAEL_MIC_LEN constant for all MIC lengths in the verifier.

Fixes b453872c35cf ("[NET] ieee80211 subsystem")
Assisted-by LLM
[ adapted libipw changes to the older lib80211 implementation and Michael MIC helper interface. ]
---
 net/wireless/lib80211_crypt_tkip.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)
net/wireless/lib80211_crypt_tkip.c +8 -5
index 1b4d6c87a5c5d..823274728711a 100644
@@ -38,6 +38,7 @@ MODULE_DESCRIPTION("lib80211 crypt: TKIP");
 MODULE_LICENSE("GPL");
 
 #define TKIP_HDR_LEN 8
+#define MICHAEL_MIC_LEN 8
 
 struct lib80211_tkip_data {
 #define TKIP_KEY_LEN 32
@@ -585,16 +586,18 @@ static int lib80211_michael_mic_verify(struct sk_buff *skb, int keyidx,
 					int hdr_len, void *priv)
 {
 	struct lib80211_tkip_data *tkey = priv;
-	u8 mic[8];
+	u8 mic[MICHAEL_MIC_LEN];
 
-	if (!tkey->key_set)
+	if (!tkey->key_set || skb->len < hdr_len + MICHAEL_MIC_LEN)
 		return -1;
 
 	michael_mic_hdr(skb, tkey->rx_hdr);
 	if (michael_mic(tkey->rx_tfm_michael, &tkey->key[24], tkey->rx_hdr,
-			skb->data + hdr_len, skb->len - 8 - hdr_len, mic))
+			skb->data + hdr_len,
+			skb->len - MICHAEL_MIC_LEN - hdr_len, mic))
 		return -1;
-	if (memcmp(mic, skb->data + skb->len - 8, 8) != 0) {
+	if (memcmp(mic, skb->data + skb->len - MICHAEL_MIC_LEN,
+		   MICHAEL_MIC_LEN) != 0) {
 		struct ieee80211_hdr *hdr;
 		hdr = (struct ieee80211_hdr *)skb->data;
 		printk(KERN_DEBUG "%s: Michael MIC verification failed for "
@@ -612,7 +615,7 @@ static int lib80211_michael_mic_verify(struct sk_buff *skb, int keyidx,
 	tkey->rx_iv32 = tkey->rx_iv32_new;
 	tkey->rx_iv16 = tkey->rx_iv16_new;
 
-	skb_trim(skb, skb->len - 8);
+	skb_trim(skb, skb->len - MICHAEL_MIC_LEN);
 
 	return 0;
 }
Signature · 1 line
2.53.0
author maintainer
#18 lore raw

PATCH 18/1887 io_uring/poll: avoid retry wakeup loss when dropping ownership

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Juanlu Herrero <[email protected]>

Commit 937d38dcacd675dc0572d6c9b6743960df3128ed upstream.

If a wakeup sets IO_POLL_RETRY_FLAG between the owning task consuming the existing instance of IO_POLL_RETRY_FLAG and the loop check of io_poll_check_events(), then we stall on processing the request until an unrelated wakeup comes along.

Using atomic_cmpxchg instead of atomic_sub_return to guarantee both the count v and poll_refs are 0 and no wake-ups are missed.

---
 io_uring/poll.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
io_uring/poll.c +2 -2
@@ -325,8 +325,8 @@ static int io_poll_check_events(struct i
 		 * Release all references, retry if someone tried to restart
 		 * task_work while we were executing it.
 		 */
-	} while (atomic_sub_return(v & IO_POLL_REF_MASK, &req->poll_refs) &
-					IO_POLL_REF_MASK);
+		v &= IO_POLL_REF_MASK;
+	} while (atomic_cmpxchg(&req->poll_refs, v, 0) != v);
 
 	return IOU_POLL_NO_ACTION;
 }
author maintainer
#54 lore raw

PATCH 54/1887 smb: client: fix use-after-free of iface in cifs_try_adding_channels()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Joseph Qi <[email protected]>

[ Upstream commit d034e836eefd7ce75e588f7031cffbeec594f5ac ]

cifs_try_adding_channels() iterates ses->iface_list with list_for_each_entry_safe_from(), which captures the next entry (niface) under iface_lock. The loop body then drops iface_lock for the whole duration of cifs_ses_add_channel().

A concurrent interface refresh (SMB3_request_interfaces() -> parse_server_interfaces()) marks all ifaces inactive and removes and frees any that are not re-advertised via list_del() + kref_put(), where release_iface() is a bare kfree(). Since niface typically has no channel holding a reference, the list reference is its last and it can be freed inside the unlocked window. On continue, the iterator advance step then dereferences niface->iface_head.next, and the loop body reads iface->rdma_capable/is_active, both on freed memory.

Fix this by never keeping an unreferenced list pointer across the unlocked window. Each channel attempt now re-scans the list from the head under iface_lock, takes a kref on the selected candidate, and passes only that referenced candidate to cifs_ses_add_channel(). weight_fulfilled still tracks selection progress, so restarting the scan preserves the original weighted distribution and the weight_fulfilled-before-kref_put ordering on the failure path.

Add a per-pass attempts cap so a flapping interface refresh cannot keep the inner loop spinning within a single tries increment.

Fixes aa45dadd34e4 ("cifs: change iface_list from array to sorted linked list")
Assisted-by Qoder:Qwen3.8-Max
[ adapted calls to retain the cifs_sb argument and use cifs_dbg(VFS, ...) instead of cifs_info(). ]
---
 fs/smb/client/sess.c | 106 ++++++++++++++++++++++++++-----------------
 1 file changed, 64 insertions(+), 42 deletions(-)
fs/smb/client/sess.c +64 -42
index ffeb3e7d34d5c..1f1043e47c5cf 100644
@@ -163,9 +163,9 @@ int cifs_try_adding_channels(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses)
 	int old_chan_count, new_chan_count;
 	int left;
 	int rc = 0;
-	int tries = 0;
+	int tries = 0, attempts;
 	size_t iface_weight = 0, iface_min_speed = 0;
-	struct cifs_server_iface *iface = NULL, *niface = NULL;
+	struct cifs_server_iface *iface = NULL, *candidate = NULL;
 	struct cifs_server_iface *last_iface = NULL;
 
 	spin_lock(&ses->chan_lock);
@@ -211,67 +211,89 @@ int cifs_try_adding_channels(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses)
 			break;
 		}
 
-		if (!iface)
-			iface = list_first_entry(&ses->iface_list, struct cifs_server_iface,
-						 iface_head);
 		last_iface = list_last_entry(&ses->iface_list, struct cifs_server_iface,
 					     iface_head);
 		iface_min_speed = last_iface->speed;
+		spin_unlock(&ses->iface_lock);
 
-		list_for_each_entry_safe_from(iface, niface, &ses->iface_list,
-				    iface_head) {
-			/* do not mix rdma and non-rdma interfaces */
-			if (iface->rdma_capable != ses->server->rdma)
-				continue;
-
-			/* skip ifaces that are unusable */
-			if (!iface->is_active ||
-			    (is_ses_using_iface(ses, iface) &&
-			     !iface->rss_capable))
-				continue;
+		attempts = 0;
+		while (left > 0) {
+			spin_lock(&ses->iface_lock);
 
-			/* check if we already allocated enough channels */
-			iface_weight = iface->speed / iface_min_speed;
+			/*
+			 * iface_lock must be dropped while opening a channel,
+			 * and a concurrent interface refresh may remove and
+			 * free entries during that window, so no list entry
+			 * may be kept across it without a reference.  Scan
+			 * the list from the beginning each time and only pass
+			 * a referenced candidate to cifs_ses_add_channel();
+			 * weight_fulfilled tracks the progress so that no
+			 * iface is selected beyond its weight.
+			 */
+			candidate = NULL;
+			list_for_each_entry(iface, &ses->iface_list, iface_head) {
+				/* do not mix rdma and non-rdma interfaces */
+				if (iface->rdma_capable != ses->server->rdma)
+					continue;
+
+				/* skip ifaces that are unusable */
+				if (!iface->is_active ||
+				    (is_ses_using_iface(ses, iface) &&
+				     !iface->rss_capable))
+					continue;
+
+				/* check if we already allocated enough channels */
+				iface_weight = iface->speed / iface_min_speed;
+
+				if (iface->weight_fulfilled >= iface_weight)
+					continue;
+
+				/* take ref before unlock */
+				kref_get(&iface->refcount);
+				candidate = iface;
+				break;
+			}
 
-			if (iface->weight_fulfilled >= iface_weight)
-				continue;
+			if (!candidate) {
+				/* no usable iface. reset weight_fulfilled and start over */
+				list_for_each_entry(iface, &ses->iface_list, iface_head)
+					iface->weight_fulfilled = 0;
+				spin_unlock(&ses->iface_lock);
+				break;
+			}
 
-			/* take ref before unlock */
-			kref_get(&iface->refcount);
+			attempts++;
+			if (attempts > 3 * ses->chan_max) {
+				kref_put(&candidate->refcount, release_iface);
+				spin_unlock(&ses->iface_lock);
+				break;
+			}
 
 			spin_unlock(&ses->iface_lock);
-			rc = cifs_ses_add_channel(cifs_sb, ses, iface);
+			rc = cifs_ses_add_channel(cifs_sb, ses, candidate);
 			spin_lock(&ses->iface_lock);
 
 			if (rc) {
 				cifs_dbg(VFS, "failed to open extra channel on iface:%pIS rc=%d\n",
-					 &iface->sockaddr,
+					 &candidate->sockaddr,
 					 rc);
 				/* failure to add chan should increase weight */
-				iface->weight_fulfilled++;
-				kref_put(&iface->refcount, release_iface);
+				candidate->weight_fulfilled++;
+				kref_put(&candidate->refcount, release_iface);
+				spin_unlock(&ses->iface_lock);
 				continue;
 			}
 
-			iface->num_channels++;
-			iface->weight_fulfilled++;
+			candidate->num_channels++;
+			candidate->weight_fulfilled++;
 			cifs_dbg(VFS, "successfully opened new channel on iface:%pIS\n",
-				 &iface->sockaddr);
-			break;
-		}
-
-		/* reached end of list. reset weight_fulfilled and start over */
-		if (list_entry_is_head(iface, &ses->iface_list, iface_head)) {
-			list_for_each_entry(iface, &ses->iface_list, iface_head)
-				iface->weight_fulfilled = 0;
+				 &candidate->sockaddr);
 			spin_unlock(&ses->iface_lock);
-			iface = NULL;
-			continue;
-		}
-		spin_unlock(&ses->iface_lock);
 
-		left--;
-		new_chan_count++;
+			left--;
+			new_chan_count++;
+			break;
+		}
 	}
 
 	return new_chan_count - old_chan_count;
Signature · 1 line
2.53.0
author maintainer
#55 lore raw

PATCH 55/1887 smb: client: fix OOB struct field reads in move_smb2_ea_to_cifs()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Frank Sorenson <[email protected]>

[ Upstream commit eeb5ef6083e1cefa2ef75041b5597ff228b8d7bb ]

In move_smb2_ea_to_cifs(), the while (src_size > 0) loop condition is insufficient. It allows iteration to continue even if the remaining src_size is too small to contain a complete smb2_ea_info structure. Consequently, reads of ea_name_length and ea_value_length can occur out-of-bounds.

Fix this by ensuring src_size >= sizeof(*src) before attempting to read any structure fields. Additionally, reject any next_entry_offset that is smaller than sizeof(*src) or that would advance the pointer beyond the available buffer.

Note that for calls where the server returns a malformed EA list, the error returned to userspace changes from -ENODATA (getxattr) or -ERANGE (listxattr) to -EIO. This correctly signals a server protocol error rather than misleadingly indicating "attribute not present" or "output buffer too small".

Fixes 95907fea4fd8 ("cifs: Add support for reading attributes on SMB2+")
[ Replaced unavailable smb_EIO2() tracing calls with -EIO. ]
---
 fs/smb/client/smb2ops.c | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)
fs/smb/client/smb2ops.c +16 -8
index 3de0f2f385b58..07e003163d66b 100644
@@ -1005,8 +1005,9 @@ move_smb2_ea_to_cifs(char *dst, size_t dst_size,
 	char *name, *value;
 	size_t buf_size = dst_size;
 	size_t name_len, value_len, user_name_len;
+	u32 next_off;
 
-	while (src_size > 0) {
+	while (src_size >= sizeof(*src)) {
 		name_len = (size_t)src->ea_name_length;
 		value_len = (size_t)le16_to_cpu(src->ea_value_length);
 
@@ -1061,14 +1062,21 @@ move_smb2_ea_to_cifs(char *dst, size_t dst_size,
 		if (!src->next_entry_offset)
 			break;
 
-		if (src_size < le32_to_cpu(src->next_entry_offset)) {
-			/* stop before overrun buffer */
-			rc = -ERANGE;
-			break;
+		next_off = le32_to_cpu(src->next_entry_offset);
+		if (next_off < sizeof(*src) || src_size < next_off) {
+			cifs_dbg(FYI, "EA next_entry_offset %u out of range [%zu, %zu]\n",
+				 next_off, sizeof(*src), src_size);
+			rc = -EIO;
+			goto out;
+		}
+		src_size -= next_off;
+		src = (void *)((char *)src + next_off);
+		if (src_size > 0 && src_size < sizeof(*src)) {
+			cifs_dbg(FYI, "EA next_entry_offset %u left truncated entry (%zu bytes)\n",
+				 next_off, src_size);
+			rc = -EIO;
+			goto out;
 		}
-		src_size -= le32_to_cpu(src->next_entry_offset);
-		src = (void *)((char *)src +
-			       le32_to_cpu(src->next_entry_offset));
 	}
 
 	/* didn't find the named attribute */
Signature · 1 line
2.53.0
author maintainer
#56 lore raw

PATCH 56/1887 vlan: require the MAC header to be present in __vlan_insert_inner_tag()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Xiang Mei <[email protected]>

[ Upstream commit ab888242fce4f16f6c4d4c6ec53939ad36aa3b3a ]

__vlan_insert_inner_tag() only guarantees head room via skb_cow_head(), never that mac_len bytes of MAC header are present. Its ETH_HLEN wrappers - __vlan_insert_tag() under skb_vlan_push(), and vlan_insert_tag() under validate_xmit_vlan() on the generic transmit path - therefore rewrite the first 16 bytes at skb->data: a 12-byte memmove plus two 2-byte stores at +12 and +14. No caller supplies the bound, while the pop helpers use skb_ensure_writable()/pskb_may_pull().

An IFF_TUN device has hard_header_len == 0, so packet_snd() accepts a one-byte AF_PACKET/SOCK_RAW frame. The first vlan push only sets a hwaccel tag; the next - clsact "action vlan push" or bpf_skb_vlan_push() - enters the helper with skb->len still 1. The head comes from skbuff_small_head without __GFP_ZERO, so each push drags bytes from beyond skb->tail into the frame. After three the one-byte send leaves as 13 bytes carrying 11 bytes of uninitialised slab:

0000: 5a b3 62 12 80 88 ff ff 00 b3 62 12 81

           `------------------------------'

only 0x5a was sent; the rest is slab, here the top 56 bits of a linear-map address

Require the MAC header the helper rewrites to be present, so such a frame is dropped rather than transmitted.

Fixes 1da177e4c3f4 ("Linux-2.6.12-rc2")
Reported-by [email protected]
[ adjusted context around skb_cow_head(skb, VLAN_HLEN) because the branch lacks upstream meta_len handling. ]
---
 include/linux/if_vlan.h | 3 +++
 1 file changed, 3 insertions(+)
include/linux/if_vlan.h +3 -0
index f4eb8dd7308a2..e63081a9d7db8 100644
@@ -351,6 +351,9 @@ static inline int __vlan_insert_inner_tag(struct sk_buff *skb,
 {
 	struct vlan_ethhdr *veth;
 
+	if (unlikely(!pskb_may_pull(skb, mac_len)))
+		return -EINVAL;
+
 	if (skb_cow_head(skb, VLAN_HLEN) < 0)
 		return -ENOMEM;
 
Signature · 1 line
2.53.0
author maintainer
#57 lore raw

PATCH 57/1887 pinctrl: sunxi: keep a shadow copy of the data register output latches

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Ilya Titov <[email protected]>

[ Upstream commit a13f7f5d14af9baf34eb12c25962f8d3542b281d ]

On Allwinner SoCs, reading a bank's data register returns the pin level, not the output latch, for pins that are muxed as inputs. Writing a GPIO therefore corrupts the output latches of all input-muxed pins in the same bank: the read-modify-write in sunxi_pinctrl_gpio_set() reads back their pin levels and writes those into their latches.

This breaks emulated open-drain lines (e.g. a bit-banged I2C bus from i2c-gpio). Such a line is released high by muxing it as input and letting the pull-up raise it, so any concurrent GPIO write in the same bank stores 1 into its latch. Driving the line low afterwards is a non-atomic data-then-mux sequence in sunxi_pinctrl_gpio_direction_output(); if the poisoning write lands between the two steps, the pin actively drives high (push-pull) instead of low.

Observed in practice as sporadic glitches on a T507 board bit-banging I2C on port E while other PE GPIOs are toggled. On a scope the failure is unmistakable: on a clock pulse where SCL should fall to GND, the line instead steps *above* its idle high level for the whole low phase — the pad drives a strong push-pull 3.3 V high, higher than the level the pull-up sustains on the loaded bus — before the next transition recovers it. The same can hit SDA, corrupting data instead of clocks.

Steps to reproduce on any sunxi board with a bit-banged (i2c-gpio) bus:

  # background: toggle any other GPIO of the same bank, e.g. line 21
  gpioset -c <chip> --toggle 100us 21=0 &

# foreground: keep the bit-banged bus busy
while :; do i2cdetect -y <bus> 0x50 0x57; done

  # watch SCL/SDA with a scope or logic analyzer: sporadic clock-low
  # phases driven high (above the pull-up level) instead of low

The bank spinlock cannot help: the racing write is a perfectly valid whole-register RMW that faithfully writes back what the hardware returned. There are no set/clear registers on this IP to write a single bit atomically.

Fix it the same way gpio-mmio handles hardware whose data register read does not return the output latch: keep a shadow copy of each bank's latches, base the read-modify-write on the shadow, and only write the register. The shadow is seeded from the hardware at probe time so pins left in output mode by the bootloader keep their state. Pins that reach output mode through the gpiolib paths write their value (and thereby their shadow bit) before the mux switch in sunxi_pinctrl_gpio_direction_output(); pins muxed to gpio_out directly through a pinmux node bypass that path, so sunxi_pmx_set() refreshes their shadow bit from the latch (readable once the pin is in output mode) to keep them driving their pre-existing level.

Seeding the shadow reads the PIO registers at probe time, which requires the bus clock to be enabled. The clock was only requested at the very end of probe, after devm_pinctrl_register() had already claimed the pin hogs described in the device tree - which mux pins, and thus access registers, with the clock still gated. Move the request ahead of both. Boards whose bootloader leaves the PIO clock running are unaffected, which is why the pre-existing hog problem has gone unnoticed since commit 950707c0eb5c ("pinctrl: sunxi: add clock support").

Fixes df7b34f4c3d2 ("pinctrl: sunxi: Fix gpio_set behaviour")
---
 drivers/pinctrl/sunxi/pinctrl-sunxi.c | 88 +++++++++++++++++++--------
 drivers/pinctrl/sunxi/pinctrl-sunxi.h |  7 +++
 2 files changed, 71 insertions(+), 24 deletions(-)
drivers/pinctrl/sunxi/pinctrl-sunxi.c +64 -24
index 508aa911c8d99..c7001f0eb6765 100644
@@ -793,6 +793,21 @@ static void sunxi_pmx_set(struct pinctrl_dev *pctldev,
 	writel((readl(pctl->membase + reg) & ~mask) | config << shift,
 	       pctl->membase + reg);
 
+	/*
+	 * A pin muxed to gpio_out directly through a pinmux node bypasses
+	 * sunxi_pinctrl_gpio_set() and drives whatever its output latch
+	 * holds.  Now that the pin is in output mode the data register
+	 * reads back the latch, so refresh the shadow to keep such pins
+	 * driving their pre-existing level.
+	 */
+	if (config == SUN4I_FUNC_OUTPUT) {
+		u32 *shadow = &pctl->dat_shadow[pin / PINS_PER_BANK];
+
+		sunxi_data_reg(pctl, pin, &reg, &shift, &mask);
+		*shadow = (*shadow & ~mask) |
+			  (readl(pctl->membase + reg) & mask);
+	}
+
 	raw_spin_unlock_irqrestore(&pctl->lock, flags);
 }
 
@@ -946,21 +961,29 @@ static void sunxi_pinctrl_gpio_set(struct gpio_chip *chip,
 				unsigned offset, int value)
 {
 	struct sunxi_pinctrl *pctl = gpiochip_get_data(chip);
-	u32 reg, shift, mask, val;
+	u32 *shadow = &pctl->dat_shadow[offset / PINS_PER_BANK];
+	u32 reg, shift, mask;
 	unsigned long flags;
 
 	sunxi_data_reg(pctl, offset, &reg, &shift, &mask);
 
 	raw_spin_lock_irqsave(&pctl->lock, flags);
 
-	val = readl(pctl->membase + reg);
-
+	/*
+	 * Reading the data register returns the pin level, not the output
+	 * latch, for pins muxed as inputs.  A read-modify-write based on
+	 * the register would therefore corrupt the latches of input-muxed
+	 * pins in the same bank (e.g. an emulated open-drain I2C line
+	 * released high), making them drive the wrong level once switched
+	 * to output.  Base the read-modify-write on a shadow copy of the
+	 * latches instead.
+	 */
 	if (value)
-		val |= mask;
+		*shadow |= mask;
 	else
-		val &= ~mask;
+		*shadow &= ~mask;
 
-	writel(val, pctl->membase + reg);
+	writel(*shadow, pctl->membase + reg);
 
 	raw_spin_unlock_irqrestore(&pctl->lock, flags);
 }
@@ -1484,7 +1507,7 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,
 	struct pinctrl_pin_desc *pins;
 	struct sunxi_pinctrl *pctl;
 	struct pinmux_ops *pmxops;
-	int i, ret, last_pin, pin_idx;
+	int i, ret, last_pin, pin_idx, nbanks;
 	struct clk *clk;
 
 	pctl = devm_kzalloc(&pdev->dev, sizeof(*pctl), GFP_KERNEL);
@@ -1518,6 +1541,37 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,
 	if (!pctl->irq_array)
 		return -ENOMEM;
 
+	/*
+	 * The bus clock has to be enabled before the pinctrl device
+	 * registers, as the pin hogs claimed from there access registers.
+	 */
+	ret = of_clk_get_parent_count(node);
+	clk = devm_clk_get_enabled(&pdev->dev, ret == 1 ? NULL : "apb");
+	if (IS_ERR(clk))
+		return PTR_ERR(clk);
+
+	/*
+	 * Seed the output latch shadow from the hardware so pins the
+	 * bootloader left in output mode keep their state; see
+	 * sunxi_pinctrl_gpio_set() for why a shadow is needed.  This must
+	 * happen before the pinctrl device registers, as pin hogs can mux
+	 * pins to gpio_out and thereby update the shadow.
+	 */
+	last_pin = pctl->desc->pins[pctl->desc->npins - 1].pin.number;
+	nbanks = DIV_ROUND_UP(last_pin + 1 - pctl->desc->pin_base,
+			      PINS_PER_BANK);
+	pctl->dat_shadow = devm_kcalloc(&pdev->dev, nbanks,
+					sizeof(*pctl->dat_shadow), GFP_KERNEL);
+	if (!pctl->dat_shadow)
+		return -ENOMEM;
+
+	for (i = 0; i < nbanks; i++) {
+		u32 reg, shift, mask;
+
+		sunxi_data_reg(pctl, i * PINS_PER_BANK, &reg, &shift, &mask);
+		pctl->dat_shadow[i] = readl(pctl->membase + reg);
+	}
+
 	ret = sunxi_pinctrl_build_state(pdev);
 	if (ret) {
 		dev_err(&pdev->dev, "dt probe failed: %d\n", ret);
@@ -1572,7 +1626,6 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,
 	if (!pctl->chip)
 		return -ENOMEM;
 
-	last_pin = pctl->desc->pins[pctl->desc->npins - 1].pin.number;
 	pctl->chip->owner = THIS_MODULE;
 	pctl->chip->request = gpiochip_generic_request;
 	pctl->chip->free = gpiochip_generic_free;
@@ -1605,31 +1658,20 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,
 			goto gpiochip_error;
 	}
 
-	ret = of_clk_get_parent_count(node);
-	clk = devm_clk_get(&pdev->dev, ret == 1 ? NULL : "apb");
-	if (IS_ERR(clk)) {
-		ret = PTR_ERR(clk);
-		goto gpiochip_error;
-	}
-
-	ret = clk_prepare_enable(clk);
-	if (ret)
-		goto gpiochip_error;
-
 	pctl->irq = devm_kcalloc(&pdev->dev,
 				 pctl->desc->irq_banks,
 				 sizeof(*pctl->irq),
 				 GFP_KERNEL);
 	if (!pctl->irq) {
 		ret = -ENOMEM;
-		goto clk_error;
+		goto gpiochip_error;
 	}
 
 	for (i = 0; i < pctl->desc->irq_banks; i++) {
 		pctl->irq[i] = platform_get_irq(pdev, i);
 		if (pctl->irq[i] < 0) {
 			ret = pctl->irq[i];
-			goto clk_error;
+			goto gpiochip_error;
 		}
 	}
 
@@ -1640,7 +1682,7 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,
 	if (!pctl->domain) {
 		dev_err(&pdev->dev, "Couldn't register IRQ domain\n");
 		ret = -ENOMEM;
-		goto clk_error;
+		goto gpiochip_error;
 	}
 
 	for (i = 0; i < (pctl->desc->irq_banks * IRQ_PER_BANK); i++) {
@@ -1672,8 +1714,6 @@ int sunxi_pinctrl_init_with_variant(struct platform_device *pdev,
 
 	return 0;
 
-clk_error:
-	clk_disable_unprepare(clk);
 gpiochip_error:
 	gpiochip_remove(pctl->chip);
 	return ret;
drivers/pinctrl/sunxi/pinctrl-sunxi.h +7 -0
index a87a2f944d609..244b0039480a0 100644
@@ -80,6 +80,7 @@
 #define IO_BIAS_MASK		GENMASK(3, 0)
 
 #define SUN4I_FUNC_INPUT	0
+#define SUN4I_FUNC_OUTPUT	1
 #define SUN4I_FUNC_IRQ		6
 
 #define PINCTRL_SUN5I_A10S	BIT(1)
@@ -173,6 +174,12 @@ struct sunxi_pinctrl {
 	int				*irq;
 	unsigned			*irq_array;
 	raw_spinlock_t			lock;
+	/*
+	 * Output latch shadow, one word per bank.  Seeded lockless at
+	 * probe before the pinctrl device registers, protected by @lock
+	 * afterwards.
+	 */
+	u32				*dat_shadow;
 	struct pinctrl_dev		*pctl_dev;
 	unsigned long			variant;
 	u32				bank_mem_size;
Signature · 1 line
2.53.0
author maintainer
#58 lore raw

PATCH 58/1887 perf tools: Fix a asan issue in parse_events_multi_pmu_add()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Namhyung Kim <[email protected]>

commit 66c9598bd8916c6c1319d0100ac916cac89d4b0e upstream

In the parse_events_multi_pmu_add() it passes the 'config' variable twice to parse_events_term__num() - one for config and another for loc_term. I'm not sure about the second one as it's converted to YYLTYPE variable. Asan reports it like below:

In function ‘parse_events_term__num’,
inlined from ‘parse_events_multi_pmu_add’ at util/parse-events.c:1602:6:
util/parse-events.c:2653:64: error: array subscript ‘YYLTYPE[0]’ is partly outside
array bounds of ‘char[8]’ [-Werror=array-bounds]
2653 | .err_term = loc_term ? loc_term->first_column : 0,

        |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
  util/parse-events.c: In function ‘parse_events_multi_pmu_add’:
  util/parse-events.c:1587:15: note: object ‘config’ of size 8
   1587 |         char *config;
        |               ^~~~~~

cc1: all warnings being treated as errors

---
 tools/perf/util/parse-events.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/parse-events.c +1 -1
index 5973f46c23755..b77686a7bd26c 100644
@@ -1585,7 +1585,7 @@ int parse_events_multi_pmu_add(struct parse_events_state *parse_state,
 
 	if (parse_events_term__num(&term,
 				   PARSE_EVENTS__TERM_TYPE_USER,
-				   config, 1, false, &config,
+				   config, 1, false, NULL,
 					NULL) < 0) {
 		free(config);
 		goto out_err;
Signature · 1 line
2.53.0
author maintainer
#59 lore raw

PATCH 59/1887 perf test bpf: Address error about non-null argument for epoll_pwait 2nd arg

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Arnaldo Carvalho de Melo <[email protected]>

commit ed847e30f001b207013b6136c264454d7560557f upstream

First noticed on Fedora Rawhide:

tests/bpf.c: In function ‘epoll_pwait_loop’:
tests/bpf.c:36:17: error: argument 2 null where non-null expected [-Werror=nonnull]

     36 |                 epoll_pwait(-(i + 1), NULL, 0, 0, NULL);
        |                 ^~~~~~~~~~~

In file included from tests/bpf.c:5:
/usr/include/sys/epoll.h:134:12: note: in a call to function ‘epoll_pwait’ declared ‘nonnull’
134 | extern int epoll_pwait (int __epfd, struct epoll_event *__events,
| ^~~~~~~~~~~

[perfbuilder@27cfe44d67ed perf-6.5.0-rc2]$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/13/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-13.2.1-20230728/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none --without-cuda-driver --enable-offload-defaulted --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 13.2.1 20230728 (Red Hat 13.2.1-1) (GCC)
[perfbuilder@27cfe44d67ed perf-6.5.0-rc2]$

Just add that argument to address this compiler warning.

---
 tools/perf/tests/bpf.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
tools/perf/tests/bpf.c +2 -1
index 6a4235a9cf57e..d5bf0e47a48a0 100644
@@ -29,11 +29,12 @@
 
 static int epoll_pwait_loop(void)
 {
+	struct epoll_event events;
 	int i;
 
 	/* Should fail NR_ITERS times */
 	for (i = 0; i < NR_ITERS; i++)
-		epoll_pwait(-(i + 1), NULL, 0, 0, NULL);
+		epoll_pwait(-(i + 1), &events, 0, 0, NULL);
 	return 0;
 }
 
Signature · 1 line
2.53.0
author maintainer
#60 lore raw

PATCH 60/1887 usb: xhci: bail out of setup if the controller is inaccessible

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Breno Leitao <[email protected]>

[ Upstream commit 78203d5b54a40f0e36196ebf31c9c7a380fc8811 ]

xhci_gen_setup() locates the operational registers using the capability length read from the very first register:

	xhci->op_regs = hcd->regs +
		HC_LENGTH(readl(&xhci->cap_regs->hc_capbase));

If the controller is dead or has dropped off the bus, that read returns ~0, HC_LENGTH() truncates it to 0xff, and op_regs ends up 0xff bytes past the page-aligned MMIO base, i.e. unaligned. The first access through it, xhci_halt() -> xhci_handshake() reading op_regs->status, is then an unaligned readl() on device memory. arm64 faults on unaligned device accesses, so instead of xhci_handshake() catching the all-ones value and returning -ENODEV, setup oopses:

xhci-pci-renesas 0005:08:00.0: Unable to change power state from D3cold to D0, device inaccessible xhci-pci-renesas 0005:08:00.0: xHCI Host Controller
xhci-pci-renesas 0005:08:00.0: new USB bus registered, assigned bus number 1

  Unable to handle kernel paging request at virtual address ffff80030a770103
    ESR = 0x0000000096000021
    FSC = 0x21: alignment fault
  Internal error: Oops: 0000000096000021 [#1]  SMP
  pc : xhci_halt [xhci_hcd]
  Call trace:
   xhci_halt
   xhci_gen_setup
   xhci_pci_setup
   usb_add_hcd
   usb_hcd_pci_probe
   xhci_pci_common_probe
   xhci_pci_renesas_probe

This was hit with a Renesas uPD720201 that failed to power up ("Unable to change power state from D3cold to D0, device inaccessible") yet still reached the HCD probe path.

Read the capability register once, and if it reads back the all-ones value (as xhci_handshake() and xhci_reset() already test for), abort setup with -ENODEV before op_regs is derived from it. Reading it once also avoids re-reading a register that may change under a concurrent hot-removal.

Fixes 66d4eadd8d06 ("USB: xhci: BIOS handoff and HW initialization.")
[ dropped the phantom hcs_params1 local declaration since this tree lacks the later refactor that introduced it ]
---
 drivers/usb/host/xhci.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)
drivers/usb/host/xhci.c +8 -3
index 104ee26b27aa4..6cfc8205d10db 100644
@@ -5365,6 +5365,7 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
 	 */
 	struct device		*dev = hcd->self.sysdev;
 	int			retval;
+	u32			hc_capbase;
 
 	/* Accept arbitrarily long scatter-gather lists */
 	hcd->self.sg_tablesize = ~0;
@@ -5385,15 +5386,19 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
 	mutex_init(&xhci->mutex);
 	xhci->main_hcd = hcd;
 	xhci->cap_regs = hcd->regs;
-	xhci->op_regs = hcd->regs +
-		HC_LENGTH(readl(&xhci->cap_regs->hc_capbase));
+	hc_capbase = readl(&xhci->cap_regs->hc_capbase);
+	if (hc_capbase == U32_MAX) {
+		xhci_warn(xhci, "Host controller not accessible, removed?\n");
+		return -ENODEV;
+	}
+	xhci->op_regs = hcd->regs + HC_LENGTH(hc_capbase);
 	xhci->run_regs = hcd->regs +
 		(readl(&xhci->cap_regs->run_regs_off) & RTSOFF_MASK);
 	/* Cache read-only capability registers */
 	xhci->hcs_params1 = readl(&xhci->cap_regs->hcs_params1);
 	xhci->hcs_params2 = readl(&xhci->cap_regs->hcs_params2);
 	xhci->hcs_params3 = readl(&xhci->cap_regs->hcs_params3);
-	xhci->hci_version = HC_VERSION(readl(&xhci->cap_regs->hc_capbase));
+	xhci->hci_version = HC_VERSION(hc_capbase);
 	xhci->hcc_params = readl(&xhci->cap_regs->hcc_params);
 	if (xhci->hci_version > 0x100)
 		xhci->hcc_params2 = readl(&xhci->cap_regs->hcc_params2);
Signature · 1 line
2.53.0
author maintainer
#19 lore raw

PATCH 19/1887 io_uring/timeout: dont put a sequence target behind the last flush

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Jens Axboe <[email protected]>

Commit fdfce905a58edea053ee7b68b5bd4348dd1b36e0 upstream.

io_timeout_fn() and io_kill_timeout() bump ->cq_timeouts when a timeout fires, but its CQE is only posted later from task_work. Until then the sequence io_timeout() computes is one below the last flush per fired timeout. Now that ->cq_last_tm_flush is kept while sequence timeouts are pending, a timeout armed in that window with a small offset gets a target behind the base. Its distance from the base wraps, and it's never completed by events, only by its timer. With DEFER_TASKRUN that window is as wide as the application makes it, as submission runs before the local task_work.

Nothing but those in flight CQEs separates the two, so use the last flush as the base for the target when the sequence is behind it.

Fixes c6c0b3eba88c ("io_uring/timeout: don't skip over reached sequences")
---
 io_uring/timeout.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
io_uring/timeout.c +9 -1
@@ -551,7 +551,6 @@ int io_timeout(struct io_kiocb *req, uns
 	}
 
 	tail = data_race(ctx->cached_cq_tail) - atomic_read(&ctx->cq_timeouts);
-	timeout->target_seq = tail + off;
 
 	/*
 	 * Update the last seq here in case io_flush_timeouts() hasn't, it only
@@ -566,6 +565,15 @@ int io_timeout(struct io_kiocb *req, uns
 	base = ctx->cq_last_tm_flush;
 
 	/*
+	 * A fired timeout bumps ->cq_timeouts before its CQE is posted, which
+	 * leaves the sequence behind the last flush until it is. Nothing else
+	 * separates the two then, so count from the flush.
+	 */
+	if ((s32)(tail - base) < 0)
+		tail = base;
+	timeout->target_seq = tail + off;
+
+	/*
 	 * Insertion sort, ensuring the first entry in the list is always
 	 * the one we need first.
 	 */
author maintainer
#20 lore raw

PATCH 20/1887 io_uring/timeout: dont flush with the sequence behind the last flush

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Jens Axboe <[email protected]>

Commit 85f85d573ffa7772e1ad4504d0cec5113a5c5cf1 upstream.

io_flush_timeouts() measures the events since the last flush as the distance of the current sequence from ->cq_last_tm_flush. A fired timeout bumps ->cq_timeouts before its CQE is posted, so until it is the sequence can be behind the last flush, and the distance wraps:

last flush: seq 100, cq_last_tm_flush = 100
Y: IORING_OP_TIMEOUT, off 50, target_seq 150 pure timeout A fires, cq_timeouts = 1 task_work posts A's CQE, cached_cq_tail = 101 pure timeout B fires before the flush, cq_timeouts = 2 io_flush_timeouts(): seq = 99, events_got = 0xffffffff

Y, and every sequence timeout behind it, is ended with -ETIME although no event happened. Two timeouts expiring close together is all it takes, a completion with IOSQE_CQE_SKIP_SUCCESS after a single one does it too.

Nothing but those in flight CQEs separates the two, so count from the last flush when the sequence is behind it, as io_timeout() does.

Fixes f010505b78a4 ("io_uring: flush timeouts that should already have expired")
---
 io_uring/timeout.c |    8 ++++++++
 1 file changed, 8 insertions(+)
io_uring/timeout.c +8 -0
@@ -78,6 +78,14 @@ __cold void io_flush_timeouts(struct io_
 	spin_lock_irq(&ctx->timeout_lock);
 	seq = ctx->cached_cq_tail - atomic_read(&ctx->cq_timeouts);
 
+	/*
+	 * A fired timeout bumps ->cq_timeouts before its CQE is posted, which
+	 * leaves the sequence behind the last flush until it is. No event has
+	 * happened then, see io_timeout().
+	 */
+	if ((s32)(seq - ctx->cq_last_tm_flush) < 0)
+		seq = ctx->cq_last_tm_flush;
+
 	list_for_each_entry_safe(timeout, tmp, &ctx->timeout_list, list) {
 		struct io_kiocb *req = cmd_to_io_kiocb(timeout);
 		u32 events_needed, events_got;
author maintainer
#21 lore raw

PATCH 21/1887 io_uring/timeout: dont lose a cancel as io-wq arms a timeout

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Jens Axboe <[email protected]>

Commit 89f193dc3ef462059387e9691bf6af4b1808379a upstream.

An IORING_OP_TIMEOUT run by io-wq, because of IOSQE_ASYNC, has the same problem as poll, futex and waitid. io_wq_submit_work() looks at IO_WQ_WORK_CANCEL once, before it issues the request. A cancel in between flags the work, gets -EALREADY, and searches ->timeout_list in vain, while the worker then adds the request and starts the timer:

io-wq worker io_try_cancel()
io_wq_submit_work()
IO_WQ_WORK_CANCEL isn't set
io_async_cancel_one()
sets IO_WQ_WORK_CANCEL = -EALREADY
io_timeout_cancel() = -ENOENT
io_timeout()
adds the request to ->timeout_list
hrtimer_start()
= IOU_ISSUE_SKIP_COMPLETE

Nobody looks at the flag again, and the timeout runs its course. At ring exit, io_uring_try_cancel_requests() cancels io-wq work and then kills the timeouts the same way, so an exiting task can get stuck for the full duration of such a timeout.

Look at the flag under ->timeout_lock, which the search takes as well, and fail the request if it is set. If the search came first, the flag is visible. If it comes later, it finds the request on the list.

[ 6.1: adds IO_URING_F_IOWQ, which io_wq_submit_work() didn't pass yet,
and the __io_wq_cancel_seen()/io_wq_cancel_seen() helpers that the futex/waitid fix 5cb049d2203d brought upstream; work->flags is not atomic and ->timeout_lock isn't raw here ]

Fixes ce35a47a3a02 ("io_uring: add IOSQE_ASYNC")
---
 include/linux/io_uring.h |    2 ++
 io_uring/io_uring.c      |    2 +-
 io_uring/io_uring.h      |   23 +++++++++++++++++++++++
 io_uring/timeout.c       |    7 +++++++
 4 files changed, 33 insertions(+), 1 deletion(-)
include/linux/io_uring.h +2 -0
@@ -19,6 +19,8 @@ enum io_uring_cmd_flags {
 
 	/* the request is executed from poll, it should not be freed */
 	IO_URING_F_MULTISHOT		= 32,
+	/* executed by io-wq */
+	IO_URING_F_IOWQ			= 64,
 };
 
 struct io_uring_cmd {
io_uring/io_uring.c +1 -1
@@ -1816,7 +1816,7 @@ void io_wq_submit_work(struct io_wq_work
 {
 	struct io_kiocb *req = container_of(work, struct io_kiocb, work);
 	const struct io_op_def *def = &io_op_defs[req->opcode];
-	unsigned int issue_flags = IO_URING_F_UNLOCKED;
+	unsigned int issue_flags = IO_URING_F_UNLOCKED | IO_URING_F_IOWQ;
 	bool needs_poll = false;
 	int ret = 0, err = -ECANCELED;
 
io_uring/io_uring.h +23 -0
@@ -221,6 +221,29 @@ static inline void io_ring_submit_lock(s
 	lockdep_assert_held(&ctx->uring_lock);
 }
 
+/*
+ * For a handler that is run by io-wq and parks the request on a list where
+ * cancellations find it, rather than completing it. Whoever tried to cancel
+ * the request before that found it running. It has flagged the work item,
+ * has searched the list in vain, and won't come back. To be called with
+ * the lock the search takes held: if the search came first, the flag is
+ * visible. For most lists that is ->uring_lock, timeouts use ->timeout_lock.
+ */
+static inline bool __io_wq_cancel_seen(struct io_kiocb *req,
+				       unsigned int issue_flags)
+{
+	return (issue_flags & IO_URING_F_IOWQ) &&
+	       (req->work.flags & IO_WQ_WORK_CANCEL);
+}
+
+static inline bool io_wq_cancel_seen(struct io_kiocb *req,
+				     unsigned int issue_flags)
+{
+	lockdep_assert_held(&req->ctx->uring_lock);
+
+	return __io_wq_cancel_seen(req, issue_flags);
+}
+
 static inline void io_commit_cqring(struct io_ring_ctx *ctx)
 {
 	/* order cqe stores with ring update */
io_uring/timeout.c +7 -0
@@ -548,6 +548,13 @@ int io_timeout(struct io_kiocb *req, uns
 
 	spin_lock_irq(&ctx->timeout_lock);
 
+	/* the list is searched under ->timeout_lock, see io_wq_cancel_seen() */
+	if (__io_wq_cancel_seen(req, issue_flags)) {
+		spin_unlock_irq(&ctx->timeout_lock);
+		io_req_task_queue_fail(req, -ECANCELED);
+		return IOU_ISSUE_SKIP_COMPLETE;
+	}
+
 	/*
 	 * sqe->off holds how many events that need to occur for this
 	 * timeout event to be satisfied. If it isn't set, then this is
author maintainer
#22 lore raw

PATCH 22/1887 io_uring/poll: dont loop on HUP with multiple references

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Jens Axboe <[email protected]>

Commit cf1d5c9d335e2c673811da641531da82cb01393a upstream.

io_poll_check_events() drops down to one reference when a multishot request sees HUP with more than one, so that the loop goes around once more. It did so by subtracting one less than it had. With the cmpxchg that only takes the local count down: the exchange fails, the next pass reads the unchanged count, and goes through the same motions again. The loop then only ends once io_poll_issue() stops the request.

Drop the extra references from the counter instead, and loop once more without trying the exchange. The next pass sees one reference, like it did before, and ends unless a wake up came in.

[ 6.1: v still carries the flag bits here, mask it for the subtraction ]
Fixes 937d38dcacd6 ("io_uring/poll: avoid retry wakeup loss when dropping ownership")
---
 io_uring/poll.c |   17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)
io_uring/poll.c +13 -4
@@ -239,12 +239,14 @@ enum {
 static int io_poll_check_events(struct io_kiocb *req, bool *locked)
 {
 	struct io_ring_ctx *ctx = req->ctx;
+	bool again;
 	int v;
 
 	if (unlikely(io_should_terminate_tw(ctx)))
 		return -ECANCELED;
 
 	do {
+		again = false;
 		v = atomic_read(&req->poll_refs);
 
 		/* tw handler should be the owner, and so have some references */
@@ -305,10 +307,17 @@ static int io_poll_check_events(struct i
 		} else {
 			int ret;
 
-			/* multiple refs and HUP, ensure we loop once more */
+			/*
+			 * Multiple refs and HUP, ensure we loop once more. Drop
+			 * down to one ref now, so the next pass ends unless a
+			 * wake up came in.
+			 */
 			if ((req->cqe.res & (POLLHUP | POLLRDHUP)) &&
-			    (v & IO_POLL_REF_MASK) != 1)
-				v--;
+			    (v & IO_POLL_REF_MASK) != 1) {
+				atomic_sub((v & IO_POLL_REF_MASK) - 1,
+					   &req->poll_refs);
+				again = true;
+			}
 			ret = io_poll_issue(req, locked);
 			io_kbuf_recycle(req, 0);
 
@@ -326,7 +335,7 @@ static int io_poll_check_events(struct i
 		 * task_work while we were executing it.
 		 */
 		v &= IO_POLL_REF_MASK;
-	} while (atomic_cmpxchg(&req->poll_refs, v, 0) != v);
+	} while (again || atomic_cmpxchg(&req->poll_refs, v, 0) != v);
 
 	return IOU_POLL_NO_ACTION;
 }
author maintainer
#23 lore raw

PATCH 23/1887 mips: unhide uasm_in_compat_space_p() declaration

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <[email protected]>

commit e9f98feb17207addcd66435d8211ccf9c0a563dd upstream.

uasm_in_compat_space_p() has a conditional declaration but is defined unconditionally because of another local user, which causes a warning:

arch/mips/mm/uasm.c:421:5: error: no previous prototype for 'uasm_in_compat_space_p' [-Werror=missing-prototypes]

Make the declaration unconditional to avoid this.

---
 arch/mips/include/asm/uasm.h |    2 --
 1 file changed, 2 deletions(-)
arch/mips/include/asm/uasm.h +0 -2
@@ -193,9 +193,7 @@ struct uasm_label {
 
 void uasm_build_label(struct uasm_label **lab, u32 *addr,
 			int lid);
-#ifdef CONFIG_64BIT
 int uasm_in_compat_space_p(long addr);
-#endif
 int uasm_rel_hi(long val);
 int uasm_rel_lo(long val);
 void UASM_i_LA_mostly(u32 **buf, unsigned int rs, long addr);
author maintainer
#14 lore raw

PATCH 14/1887 io_uring/timeout: dont skip over reached sequences

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Josef Bacik <[email protected]>

Commit c6c0b3eba88c3b13ca11ea112404982e86d58f7a upstream.

io_flush_timeouts() copes with the wrap of the CQ sequence by looking at the distance from ->cq_last_tm_flush. That relies on the target of each pending timeout being at or ahead of the last flush.

io_timeout() breaks that. It sets ->cq_last_tm_flush to the current sequence, on the assumption that nothing has been posted since the last flush. That isn't true. A multishot request posts its CQEs right when it is issued or retried, but they are committed, and the timeouts flushed, at the end of the submission or task_work run:

X: IORING_OP_TIMEOUT, off == 1 target_seq == N + 1
io_submit_sqes()

    multishot recv, posts two CQEs     sequence == N + 2
    Y: IORING_OP_TIMEOUT, off == 100   ->cq_last_tm_flush = N + 2

io_flush_timeouts()
X: events_needed = N + 1 - (N + 2) // 0xffffffff
events_got = 0 // not yet

X isn't completed although the completions it was waiting for have happened, only its timer can end it now. And as the list is sorted and the walk ends at the first timeout that isn't due, it gets in the way of the ones behind it. The insertion sort has the same problem, it measures the distance of the pending targets from the current sequence.

->cq_last_tm_flush only needs to be brought up to date if no timeout is waiting for a sequence, as io_flush_timeouts() isn't called before the first one is set up. Otherwise it is current enough. Timeouts with a sequence come first in the list, so looking at the first entry will do. Use the last flush as the base for the insertion sort as well.

Fixes f010505b78a4 ("io_uring: flush timeouts that should already have expired")
Assisted-by LLM
---
 io_uring/timeout.c |   21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)
io_uring/timeout.c +14 -7
@@ -534,8 +534,9 @@ int io_timeout(struct io_kiocb *req, uns
 	struct io_timeout *timeout = io_kiocb_to_cmd(req, struct io_timeout);
 	struct io_ring_ctx *ctx = req->ctx;
 	struct io_timeout_data *data = req->async_data;
+	struct io_timeout *first;
 	struct list_head *entry;
-	u32 tail, off = timeout->off;
+	u32 tail, base, off = timeout->off;
 
 	spin_lock_irq(&ctx->timeout_lock);
 
@@ -552,11 +553,17 @@ int io_timeout(struct io_kiocb *req, uns
 	tail = data_race(ctx->cached_cq_tail) - atomic_read(&ctx->cq_timeouts);
 	timeout->target_seq = tail + off;
 
-	/* Update the last seq here in case io_flush_timeouts() hasn't.
-	 * This is safe because ->completion_lock is held, and submissions
-	 * and completions are never mixed in the same ->completion_lock section.
+	/*
+	 * Update the last seq here in case io_flush_timeouts() hasn't, it only
+	 * gets called once sequences are in use. Leave it alone if there are
+	 * timeouts waiting for one. CQEs may have been posted since the last
+	 * flush, and a target that has been reached must not fall behind it.
 	 */
-	ctx->cq_last_tm_flush = tail;
+	first = list_first_entry_or_null(&ctx->timeout_list, struct io_timeout,
+					 list);
+	if (!first || io_is_timeout_noseq(cmd_to_io_kiocb(first)))
+		ctx->cq_last_tm_flush = tail;
+	base = ctx->cq_last_tm_flush;
 
 	/*
 	 * Insertion sort, ensuring the first entry in the list is always
@@ -568,8 +575,8 @@ int io_timeout(struct io_kiocb *req, uns
 
 		if (io_is_timeout_noseq(nxt))
 			continue;
-		/* nxt.seq is behind @tail, otherwise would've been completed */
-		if (off >= nextt->target_seq - tail)
+		/* no target is behind the last flush, see io_flush_timeouts() */
+		if (timeout->target_seq - base >= nextt->target_seq - base)
 			break;
 	}
 add:
author maintainer
#62 lore raw

PATCH 62/1887 KEYS: trusted: Fix TPM teardown ordering

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Chengfeng Ye <[email protected]>

[ Upstream commit 5e2d672280d97d83de43031d93761b12dadd7b8a ]

trusted_tpm_exit() drops the TPM chip reference and frees the digest array before unregistering the trusted key type. key_type_lookup() holds key_types_sem for reading until the key operation finishes, while unregister_key_type() takes it for writing. It therefore provides the synchronization point that must precede backend teardown.

The current order permits this interleaving:

CPU 0 CPU 1
trusted_tpm_exit() key_type_lookup("trusted")
put_device(&chip->dev) trusted_tpm_seal()
kfree(digests) pcrlock()
unregister_key_type() tpm_pcr_extend(..., digests)

CPU 1 can consequently dereference the freed digest array. The chip can also be released before callbacks stop using it.

KASAN reported:

  BUG: KASAN: slab-use-after-free in tpm_pcr_extend+0x1f0/0x200
  Read of size 2 at addr ffff88810872d000 by task poc/89
  Call Trace:
    tpm_pcr_extend+0x1f0/0x200
    pcrlock+0x42/0x70 [trusted]
    trusted_tpm_seal+0x1b6/0x570 [trusted]
    trusted_instantiate+0x293/0x340 [trusted]
    __key_instantiate_and_link+0xb2/0x2b0
    __key_create_or_update+0x61e/0xb50
    __do_sys_add_key+0x1b8/0x310
  Allocated by task 88:
    __kmalloc_noprof+0x1a7/0x490
    do_one_initcall+0xa1/0x390
    do_init_module+0x2df/0x840
  Freed by task 90:
    kfree+0x131/0x3c0
    trusted_tpm_exit+0x59/0xa0 [trusted]
    __do_sys_delete_module+0x346/0x510

Move unregister_key_type() before releasing either resource. This stops new lookups and waits for in-flight key operations to finish before the backend state is destroyed.

Fixes 0b6cf6b97b7e ("tpm: pass an array of tpm_extend_digest structures to tpm_pcr_extend()")
[ preserved the additional trusted_shash_release() cleanup after unregister_key_type() ]
---
 security/keys/trusted-keys/trusted_tpm1.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
security/keys/trusted-keys/trusted_tpm1.c +1 -1
index 4863ee08b7b11..c482c54be918c 100644
@@ -1058,10 +1058,10 @@ static int __init trusted_tpm_init(void)
 static void trusted_tpm_exit(void)
 {
 	if (chip) {
+		unregister_key_type(&key_type_trusted);
 		put_device(&chip->dev);
 		kfree(digests);
 		trusted_shash_release();
-		unregister_key_type(&key_type_trusted);
 	}
 }
 
Signature · 1 line
2.53.0
author maintainer
#71 lore raw

PATCH 71/1887 kasan: fix lockdep report invalid wait context

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Zqiang <[email protected]>

[ Upstream commit be41d814c6c7bbf3ffa66faeefa01f6cea8e3c98 ]

For kernels built with the following options and booting

CONFIG_SLUB=y
CONFIG_DEBUG_LOCKDEP=y
CONFIG_PROVE_LOCKING=y
CONFIG_PROVE_RAW_LOCK_NESTING=y

[    0.523115] [ BUG: Invalid wait context ]
[    0.523315] 6.3.0-rc1-yocto-standard+ #739 Not tainted
[    0.523649] -----------------------------
[    0.523663] swapper/0/0 is trying to lock:
[    0.523663] ffff888035611360 (&c->lock){....}-{3:3}, at: put_cpu_partial+0x2e/0x1e0
[    0.523663] other info that might help us debug this:
[    0.523663] context-{2:2}
[    0.523663] no locks held by swapper/0/0.
[    0.523663] stack backtrace:
[    0.523663] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.3.0-rc1-yocto-standard+ #739
[    0.523663] Call Trace:
[    0.523663]  <IRQ>
[    0.523663]  dump_stack_lvl+0x64/0xb0
[    0.523663]  dump_stack+0x10/0x20
[    0.523663]  __lock_acquire+0x6c4/0x3c10
[    0.523663]  lock_acquire+0x188/0x460
[    0.523663]  put_cpu_partial+0x5a/0x1e0
[    0.523663]  __slab_free+0x39a/0x520
[    0.523663]  ___cache_free+0xa9/0xc0
[    0.523663]  qlist_free_all+0x7a/0x160
[    0.523663]  per_cpu_remove_cache+0x5c/0x70
[    0.523663]  __flush_smp_call_function_queue+0xfc/0x330
[    0.523663]  generic_smp_call_function_single_interrupt+0x13/0x20
[    0.523663]  __sysvec_call_function+0x86/0x2e0
[    0.523663]  sysvec_call_function+0x73/0x90
[    0.523663]  </IRQ>
[    0.523663]  <TASK>
[    0.523663]  asm_sysvec_call_function+0x1b/0x20
[    0.523663] RIP: 0010:default_idle+0x13/0x20
[    0.523663] RSP: 0000:ffffffff83e07dc0 EFLAGS: 00000246
[    0.523663] RAX: 0000000000000000 RBX: ffffffff83e1e200 RCX: ffffffff82a83293
[    0.523663] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffffff8119a6b1
[    0.523663] RBP: ffffffff83e07dc8 R08: 0000000000000001 R09: ffffed1006ac0d66
[    0.523663] R10: ffff888035606b2b R11: ffffed1006ac0d65 R12: 0000000000000000
[    0.523663] R13: ffffffff83e1e200 R14: ffffffff84a7d980 R15: 0000000000000000
[    0.523663]  default_idle_call+0x6c/0xa0
[    0.523663]  do_idle+0x2e1/0x330
[    0.523663]  cpu_startup_entry+0x20/0x30
[    0.523663]  rest_init+0x152/0x240
[    0.523663]  arch_call_rest_init+0x13/0x40
[    0.523663]  start_kernel+0x331/0x470
[    0.523663]  x86_64_start_reservations+0x18/0x40
[    0.523663]  x86_64_start_kernel+0xbb/0x120
[    0.523663]  secondary_startup_64_no_verify+0xe0/0xeb
[    0.523663]  </TASK>

The local_lock_irqsave() is invoked in put_cpu_partial() and happens in IPI context, due to the CONFIG_PROVE_RAW_LOCK_NESTING=y (the LD_WAIT_CONFIG not equal to LD_WAIT_SPIN), so acquire local_lock in IPI context will trigger above calltrace.

This commit therefore moves qlist_free_all() from hard-irq context to task context.

Stable-dep-of: 8790303cbaac ("kasan: fix cache shrink race with CPU hotplug")

---
 mm/kasan/quarantine.c | 34 ++++++++--------------------------
 1 file changed, 8 insertions(+), 26 deletions(-)
mm/kasan/quarantine.c +8 -26
index 75585077eb6dd..152dca73f3984 100644
@@ -99,7 +99,6 @@ static unsigned long quarantine_size;
 static DEFINE_RAW_SPINLOCK(quarantine_lock);
 DEFINE_STATIC_SRCU(remove_cache_srcu);
 
-#ifdef CONFIG_PREEMPT_RT
 struct cpu_shrink_qlist {
 	raw_spinlock_t lock;
 	struct qlist_head qlist;
@@ -108,7 +107,6 @@ struct cpu_shrink_qlist {
 static DEFINE_PER_CPU(struct cpu_shrink_qlist, shrink_qlist) = {
 	.lock = __RAW_SPIN_LOCK_UNLOCKED(shrink_qlist.lock),
 };
-#endif
 
 /* Maximum size of the global queue. */
 static unsigned long quarantine_max_size;
@@ -319,16 +317,6 @@ static void qlist_move_cache(struct qlist_head *from,
 	}
 }
 
-#ifndef CONFIG_PREEMPT_RT
-static void __per_cpu_remove_cache(struct qlist_head *q, void *arg)
-{
-	struct kmem_cache *cache = arg;
-	struct qlist_head to_free = QLIST_INIT;
-
-	qlist_move_cache(q, &to_free, cache);
-	qlist_free_all(&to_free, cache);
-}
-#else
 static void __per_cpu_remove_cache(struct qlist_head *q, void *arg)
 {
 	struct kmem_cache *cache = arg;
@@ -340,7 +328,6 @@ static void __per_cpu_remove_cache(struct qlist_head *q, void *arg)
 	qlist_move_cache(q, &sq->qlist, cache);
 	raw_spin_unlock_irqrestore(&sq->lock, flags);
 }
-#endif
 
 static void per_cpu_remove_cache(void *arg)
 {
@@ -362,6 +349,8 @@ void kasan_quarantine_remove_cache(struct kmem_cache *cache)
 {
 	unsigned long flags, i;
 	struct qlist_head to_free = QLIST_INIT;
+	int cpu;
+	struct cpu_shrink_qlist *sq;
 
 	/*
 	 * Must be careful to not miss any objects that are being moved from
@@ -372,20 +361,13 @@ void kasan_quarantine_remove_cache(struct kmem_cache *cache)
 	 */
 	on_each_cpu(per_cpu_remove_cache, cache, 1);
 
-#ifdef CONFIG_PREEMPT_RT
-	{
-		int cpu;
-		struct cpu_shrink_qlist *sq;
-
-		for_each_online_cpu(cpu) {
-			sq = per_cpu_ptr(&shrink_qlist, cpu);
-			raw_spin_lock_irqsave(&sq->lock, flags);
-			qlist_move_cache(&sq->qlist, &to_free, cache);
-			raw_spin_unlock_irqrestore(&sq->lock, flags);
-		}
-		qlist_free_all(&to_free, cache);
+	for_each_online_cpu(cpu) {
+		sq = per_cpu_ptr(&shrink_qlist, cpu);
+		raw_spin_lock_irqsave(&sq->lock, flags);
+		qlist_move_cache(&sq->qlist, &to_free, cache);
+		raw_spin_unlock_irqrestore(&sq->lock, flags);
 	}
-#endif
+	qlist_free_all(&to_free, cache);
 
 	raw_spin_lock_irqsave(&quarantine_lock, flags);
 	for (i = 0; i < QUARANTINE_BATCHES; i++) {
Signature · 1 line
2.53.0
author maintainer
#72 lore raw

PATCH 72/1887 kasan: fix cache shrink race with CPU hotplug

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Hui Su <[email protected]>

[ Upstream commit 8790303cbaac52a11dfed4aab261f8ea60682525 ]

kasan_quarantine_remove_cache() first invokes per_cpu_remove_cache() on all online CPUs. Each callback moves objects belonging to the cache from cpu_quarantine to the CPU's shrink_qlist, where they can later be freed from task context.

kmem_cache_destroy() invokes the quarantine removal path while holding cpus_read_lock(), but kmem_cache_shrink() does not. The latter can therefore race with CPU offlining as follows:

kmem_cache_shrink() CPU hotplug
------------------- -----------
on_each_cpu()
CPU1 moves objects to
CPU1's shrink_qlist
on_each_cpu() returns
CPU1 goes offline kasan_cpu_offline()
drains cpu_quarantine leaves shrink_qlist untouched
for_each_online_cpu()
skips CPU1

The objects left on CPU1's shrink_qlist are not returned to the slab allocator. This may prevent kmem_cache_shrink() from releasing slabs that would otherwise become empty. If CPU1 remains offline, a later kmem_cache_destroy() also skips the list and can report that the cache still contains objects.

An intermittent occurrence was observed with a virtio-9p filesystem. The mount and umount commands both returned 0, but the kernel logged the following during the userspace-triggered teardown:

  [  2994.380134][  T111] BUG 9p-fcall-cache-1 (Tainted: G    B              ): Objects remaining on __kmem_cache_shutdown()
  [  2994.381140][  T111] Object 0xff11000004361118 @offset=4376
  [  2994.381607][  T111] Allocated in p9_fcall_init+0x201/0x400 age=19564 cpu=1 pid=104
  [  2994.382591][  T111]  p9_fcall_init+0x201/0x400
  [  2994.382810][  T111]  p9_tag_alloc+0x12f/0x700
  [  2994.382982][  T111]  p9_client_prepare_req+0x102/0x3e0
  [  2994.383165][  T111]  p9_client_rpc+0x1ab/0xa50
  [  2994.383334][  T111]  p9_client_getattr_dotl+0xb0/0x1a0
  [  2994.383515][  T111]  v9fs_vfs_getattr_dotl+0x115/0x360
  [  2994.383719][  T111]  vfs_getattr_nosec+0x22c/0x3a0
  [  2994.383910][  T111]  vfs_statx+0xd7/0x170
  [  2994.384062][  T111]  vfs_fstatat+0x45/0x80
  [  2994.384215][  T111]  __do_sys_newfstatat+0x84/0xe0
  [  2994.384386][  T111]  do_syscall_64+0x115/0x6a0
  [  2994.384566][  T111]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
  [  2994.399720][  T111] WARNING: mm/slub.c:1244 at __kmem_cache_shutdown+0x363/0x500, CPU#0: busybox/111
  [  2994.405655][  T111] Call Trace:
  [  2994.406325][  T111]  kmem_cache_destroy+0x73/0x1b0
  [  2994.406630][  T111]  p9_client_destroy+0x271/0x3c0
  [  2994.407210][  T111]  v9fs_session_close+0x3c/0x260
  [  2994.407409][  T111]  v9fs_kill_super+0x48/0x90
  [  2994.407584][  T111]  deactivate_locked_super+0xa3/0x160
  [  2994.407778][  T111]  cleanup_mnt+0x1dd/0x3e0

Thus, a successful umount left objects in the 9p fcall cache and prevented the cache from being destroyed cleanly.

Per-CPU shrink_qlist storage exists for every possible CPU, and each list is protected by its own raw spinlock. Iterate over possible CPUs so that a list populated before its CPU went offline is drained as well.

for_each_possible_cpu() can do more work than for_each_online_cpu(), but this change only affects CONFIG_KASAN_GENERIC kernels. The extra work is limited to cache shrink and cache destruction paths and does not affect the normal allocation/free fast path. It adds one raw-spinlock-protected scan of each possible CPU's shrink list. These lists are normally empty; a non-empty list is traversed to remove objects belonging to the cache being shrunk or destroyed.

Fixes 07d067e4f2ce ("kasan: fix sleeping function called from invalid context on RT kernel")
Cc Alexander Potapenko <[email protected]>
Cc Andrey Konovalov <[email protected]>
Cc Dmitry Vyukov <[email protected]>
Cc Vincenzo Frascino <[email protected]>
Cc "Zhang, Qiang1" <[email protected]>
---
 mm/kasan/quarantine.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
mm/kasan/quarantine.c +6 -1
index 152dca73f3984..11bd18e851a02 100644
@@ -361,7 +361,12 @@ void kasan_quarantine_remove_cache(struct kmem_cache *cache)
 	 */
 	on_each_cpu(per_cpu_remove_cache, cache, 1);
 
-	for_each_online_cpu(cpu) {
+	/*
+	 * A CPU can go offline after on_each_cpu() returns, leaving cache
+	 * objects on that CPU's shrink list. Scan all possible CPUs to
+	 * drain those lists.
+	 */
+	for_each_possible_cpu(cpu) {
 		sq = per_cpu_ptr(&shrink_qlist, cpu);
 		raw_spin_lock_irqsave(&sq->lock, flags);
 		qlist_move_cache(&sq->qlist, &to_free, cache);
Signature · 1 line
2.53.0
author maintainer
#73 lore raw

PATCH 73/1887 ACPI: TAD: Rearrange RT data validation checking

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Rafael J. Wysocki <[email protected]>

[ Upstream commit 3329a1416c3350449081ca5daaa94802a65b2992 ]

Move RT data validation checks from acpi_tad_set_real_time() to a separate function called acpi_tad_rt_is_invalid() and use it also in acpi_tad_get_real_time() to validate data coming from the platform firmware.

Also make acpi_tad_set_real_time() return -EINVAL when the RT data passed to it is invalid (instead of -ERANGE which is somewhat confusing) and introduce ACPI_TAD_TZ_UNSPEC to represent the "unspecified timezone" value.

Stable-dep-of: a3df8bbe0a70 ("ACPI: TAD: Add locking around AML evaluations")

---
 drivers/acpi/acpi_tad.c | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)
drivers/acpi/acpi_tad.c +20 -6
index 8383d6329c645..664281d7f4259 100644
@@ -48,6 +48,9 @@ MODULE_AUTHOR("Rafael J. Wysocki");
 /* Special value for disabled timer or expired timer wake policy. */
 #define ACPI_TAD_WAKE_DISABLED	(~(u32)0)
 
+/* ACPI TAD RTC */
+#define ACPI_TAD_TZ_UNSPEC	2047
+
 struct acpi_tad_driver_data {
 	u32 capabilities;
 };
@@ -66,6 +69,16 @@ struct acpi_tad_rt {
 	u8 padding[3]; /* must be 0 */
 } __packed;
 
+static bool acpi_tad_rt_is_invalid(struct acpi_tad_rt *rt)
+{
+	return rt->year < 1900 || rt->year > 9999 ||
+	    rt->month < 1 || rt->month > 12 ||
+	    rt->hour > 23 || rt->minute > 59 || rt->second > 59 ||
+	    rt->tz < -1440 ||
+	    (rt->tz > 1440 && rt->tz != ACPI_TAD_TZ_UNSPEC) ||
+	    rt->daylight > 3;
+}
+
 static int acpi_tad_set_real_time(struct device *dev, struct acpi_tad_rt *rt)
 {
 	acpi_handle handle = ACPI_HANDLE(dev);
@@ -79,12 +92,8 @@ static int acpi_tad_set_real_time(struct device *dev, struct acpi_tad_rt *rt)
 	unsigned long long retval;
 	acpi_status status;
 
-	if (rt->year < 1900 || rt->year > 9999 ||
-	    rt->month < 1 || rt->month > 12 ||
-	    rt->hour > 23 || rt->minute > 59 || rt->second > 59 ||
-	    rt->tz < -1440 || (rt->tz > 1440 && rt->tz != 2047) ||
-	    rt->daylight > 3)
-		return -ERANGE;
+	if (acpi_tad_rt_is_invalid(rt))
+		return -EINVAL;
 
 	args[0].buffer.pointer = (u8 *)rt;
 	args[0].buffer.length = sizeof(*rt);
@@ -131,6 +140,11 @@ static int acpi_tad_get_real_time(struct device *dev, struct acpi_tad_rt *rt)
 		goto out_free;
 
 	memcpy(rt, data, sizeof(*rt));
+	if (acpi_tad_rt_is_invalid(rt)) {
+		ret = -ENODATA;
+		goto out_free;
+	}
+
 	ret = 0;
 
 out_free:
Signature · 1 line
2.53.0
author maintainer
#74 lore raw

PATCH 74/1887 ACPI: TAD: Split three functions to untangle runtime PM handling

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Rafael J. Wysocki <[email protected]>

[ Upstream commit b14b77bbea0a82cb66f1538824783e63d4128510 ]

Move the core functionality of acpi_tad_get_real_time(), acpi_tad_wake_set(), and acpi_tad_wake_read() into separate functions called __acpi_tad_get_real_time(), __acpi_tad_wake_set(), and __acpi_tad_wake_read(), respectively, which can be called from code blocks following a single runtime resume of the device.

This will facilitate adding alarm support to the RTC class device interface of the driver going forward.

No intentional functional impact.

Stable-dep-of: a3df8bbe0a70 ("ACPI: TAD: Add locking around AML evaluations")

---
 drivers/acpi/acpi_tad.c | 128 ++++++++++++++++++++++++++--------------
 1 file changed, 84 insertions(+), 44 deletions(-)
drivers/acpi/acpi_tad.c +84 -44
index 664281d7f4259..5f8fc254fc4f3 100644
@@ -110,7 +110,7 @@ static int acpi_tad_set_real_time(struct device *dev, struct acpi_tad_rt *rt)
 	return 0;
 }
 
-static int acpi_tad_get_real_time(struct device *dev, struct acpi_tad_rt *rt)
+static int acpi_tad_evaluate_grt(struct device *dev, struct acpi_tad_rt *rt)
 {
 	acpi_handle handle = ACPI_HANDLE(dev);
 	struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER };
@@ -119,12 +119,7 @@ static int acpi_tad_get_real_time(struct device *dev, struct acpi_tad_rt *rt)
 	acpi_status status;
 	int ret = -EIO;
 
-	pm_runtime_get_sync(dev);
-
 	status = acpi_evaluate_object(handle, "_GRT", NULL, &output);
-
-	pm_runtime_put_sync(dev);
-
 	if (ACPI_FAILURE(status))
 		goto out_free;
 
@@ -140,11 +135,6 @@ static int acpi_tad_get_real_time(struct device *dev, struct acpi_tad_rt *rt)
 		goto out_free;
 
 	memcpy(rt, data, sizeof(*rt));
-	if (acpi_tad_rt_is_invalid(rt)) {
-		ret = -ENODATA;
-		goto out_free;
-	}
-
 	ret = 0;
 
 out_free:
@@ -152,6 +142,82 @@ static int acpi_tad_get_real_time(struct device *dev, struct acpi_tad_rt *rt)
 	return ret;
 }
 
+static int __acpi_tad_get_real_time(struct device *dev, struct acpi_tad_rt *rt)
+{
+	int ret;
+
+	ret = acpi_tad_evaluate_grt(dev, rt);
+	if (ret)
+		return ret;
+
+	if (acpi_tad_rt_is_invalid(rt))
+		return -ENODATA;
+
+	return 0;
+}
+
+static int acpi_tad_get_real_time(struct device *dev, struct acpi_tad_rt *rt)
+{
+	int ret;
+
+	pm_runtime_get_sync(dev);
+
+	ret = __acpi_tad_get_real_time(dev, rt);
+
+	pm_runtime_put_sync(dev);
+
+	return ret;
+}
+
+static int __acpi_tad_wake_set(struct device *dev, char *method, u32 timer_id,
+			       u32 value)
+{
+	acpi_handle handle = ACPI_HANDLE(dev);
+	union acpi_object args[] = {
+		{ .type = ACPI_TYPE_INTEGER, },
+		{ .type = ACPI_TYPE_INTEGER, },
+	};
+	struct acpi_object_list arg_list = {
+		.pointer = args,
+		.count = ARRAY_SIZE(args),
+	};
+	unsigned long long retval;
+	acpi_status status;
+
+	args[0].integer.value = timer_id;
+	args[1].integer.value = value;
+
+	status = acpi_evaluate_integer(handle, method, &arg_list, &retval);
+	if (ACPI_FAILURE(status) || retval)
+		return -EIO;
+
+	return 0;
+}
+
+static int __acpi_tad_wake_read(struct device *dev, char *method, u32 timer_id,
+				unsigned long long *retval)
+{
+	acpi_handle handle = ACPI_HANDLE(dev);
+	union acpi_object args[] = {
+		{ .type = ACPI_TYPE_INTEGER, },
+	};
+	struct acpi_object_list arg_list = {
+		.pointer = args,
+		.count = ARRAY_SIZE(args),
+	};
+	acpi_status status;
+
+	args[0].integer.value = timer_id;
+
+	status = acpi_evaluate_integer(handle, method, &arg_list, retval);
+	if (ACPI_FAILURE(status))
+		return -EIO;
+
+	return 0;
+}
+
+/* sysfs interface */
+
 static char *acpi_tad_rt_next_field(char *s, int *val)
 {
 	char *p;
@@ -264,31 +330,15 @@ static const struct attribute_group acpi_tad_time_attr_group = {
 static int acpi_tad_wake_set(struct device *dev, char *method, u32 timer_id,
 			     u32 value)
 {
-	acpi_handle handle = ACPI_HANDLE(dev);
-	union acpi_object args[] = {
-		{ .type = ACPI_TYPE_INTEGER, },
-		{ .type = ACPI_TYPE_INTEGER, },
-	};
-	struct acpi_object_list arg_list = {
-		.pointer = args,
-		.count = ARRAY_SIZE(args),
-	};
-	unsigned long long retval;
-	acpi_status status;
-
-	args[0].integer.value = timer_id;
-	args[1].integer.value = value;
+	int ret;
 
 	pm_runtime_get_sync(dev);
 
-	status = acpi_evaluate_integer(handle, method, &arg_list, &retval);
+	ret = __acpi_tad_wake_set(dev, method, timer_id, value);
 
 	pm_runtime_put_sync(dev);
 
-	if (ACPI_FAILURE(status) || retval)
-		return -EIO;
-
-	return 0;
+	return ret;
 }
 
 static int acpi_tad_wake_write(struct device *dev, const char *buf, char *method,
@@ -314,27 +364,17 @@ static int acpi_tad_wake_write(struct device *dev, const char *buf, char *method
 static ssize_t acpi_tad_wake_read(struct device *dev, char *buf, char *method,
 				  u32 timer_id, const char *specval)
 {
-	acpi_handle handle = ACPI_HANDLE(dev);
-	union acpi_object args[] = {
-		{ .type = ACPI_TYPE_INTEGER, },
-	};
-	struct acpi_object_list arg_list = {
-		.pointer = args,
-		.count = ARRAY_SIZE(args),
-	};
 	unsigned long long retval;
-	acpi_status status;
-
-	args[0].integer.value = timer_id;
+	int ret;
 
 	pm_runtime_get_sync(dev);
 
-	status = acpi_evaluate_integer(handle, method, &arg_list, &retval);
+	ret = __acpi_tad_wake_read(dev, method, timer_id, &retval);
 
 	pm_runtime_put_sync(dev);
 
-	if (ACPI_FAILURE(status))
-		return -EIO;
+	if (ret)
+		return ret;
 
 	if ((u32)retval == ACPI_TAD_WAKE_DISABLED)
 		return sprintf(buf, "%s\n", specval);
Signature · 1 line
2.53.0
author maintainer
#75 lore raw

PATCH 75/1887 ACPI: TAD: Add locking around AML evaluations

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Rafael J. Wysocki <[email protected]>

[ Upstream commit a3df8bbe0a704fa5c1609b9666b594f350558fe0 ]

In the ACPI TAD driver, there are hidden assumptions that the ACPI control methods used by it will not be evaluated concurrently due to ACPICA namespace and interpreter locking.

However, that may not be the case since ACPICA may drop and re-acquire the namespace and interpreter locks during the evaluation of a given object in a few cases, including the one in which the AML in question sleeps causing acpi_ex_system_do_sleep() to be called. In that case, the evaluation of one control method may be started while the evaluation of another one is still in progress.

For this reason, add a global lock to the ACPI TAD driver and acquire it every time before evaluating an ACPI control method, except for the initial evaluation of _GCP in acpi_tad_probe().

Fixes 95c513ec84f7 ("ACPI: Add Time and Alarm Device (TAD) driver")
Cc All applicable <[email protected]>
---
 drivers/acpi/acpi_tad.c | 50 ++++++++++++++++++++++++-----------------
 1 file changed, 30 insertions(+), 20 deletions(-)
drivers/acpi/acpi_tad.c +30 -20
index 5f8fc254fc4f3..3ee041d5df59e 100644
@@ -23,6 +23,7 @@
 #include <linux/acpi.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/mutex.h>
 #include <linux/platform_device.h>
 #include <linux/pm_runtime.h>
 #include <linux/suspend.h>
@@ -79,6 +80,8 @@ static bool acpi_tad_rt_is_invalid(struct acpi_tad_rt *rt)
 	    rt->daylight > 3;
 }
 
+static DEFINE_MUTEX(acpi_tad_aml_lock);
+
 static int acpi_tad_set_real_time(struct device *dev, struct acpi_tad_rt *rt)
 {
 	acpi_handle handle = ACPI_HANDLE(dev);
@@ -100,6 +103,8 @@ static int acpi_tad_set_real_time(struct device *dev, struct acpi_tad_rt *rt)
 
 	pm_runtime_get_sync(dev);
 
+	guard(mutex)(&acpi_tad_aml_lock);
+
 	status = acpi_evaluate_integer(handle, "_SRT", &arg_list, &retval);
 
 	pm_runtime_put_sync(dev);
@@ -114,30 +119,27 @@ static int acpi_tad_evaluate_grt(struct device *dev, struct acpi_tad_rt *rt)
 {
 	acpi_handle handle = ACPI_HANDLE(dev);
 	struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER };
-	union acpi_object *out_obj;
-	struct acpi_tad_rt *data;
 	acpi_status status;
 	int ret = -EIO;
 
-	status = acpi_evaluate_object(handle, "_GRT", NULL, &output);
-	if (ACPI_FAILURE(status))
-		goto out_free;
-
-	out_obj = output.pointer;
-	if (out_obj->type != ACPI_TYPE_BUFFER)
-		goto out_free;
+	guard(mutex)(&acpi_tad_aml_lock);
 
-	if (out_obj->buffer.length != sizeof(*rt))
-		goto out_free;
-
-	data = (struct acpi_tad_rt *)(out_obj->buffer.pointer);
-	if (!data->valid)
-		goto out_free;
-
-	memcpy(rt, data, sizeof(*rt));
-	ret = 0;
-
-out_free:
+	status = acpi_evaluate_object(handle, "_GRT", NULL, &output);
+	if (ACPI_SUCCESS(status)) {
+		union acpi_object *out_obj;
+
+		out_obj = output.pointer;
+		if (out_obj->type == ACPI_TYPE_BUFFER &&
+		    out_obj->buffer.length == sizeof(*rt)) {
+			struct acpi_tad_rt *data;
+
+			data = (struct acpi_tad_rt *)(out_obj->buffer.pointer);
+			if (data->valid) {
+				memcpy(rt, data, sizeof(*rt));
+				ret = 0;
+			}
+		}
+	}
 	ACPI_FREE(output.pointer);
 	return ret;
 }
@@ -187,6 +189,8 @@ static int __acpi_tad_wake_set(struct device *dev, char *method, u32 timer_id,
 	args[0].integer.value = timer_id;
 	args[1].integer.value = value;
 
+	guard(mutex)(&acpi_tad_aml_lock);
+
 	status = acpi_evaluate_integer(handle, method, &arg_list, &retval);
 	if (ACPI_FAILURE(status) || retval)
 		return -EIO;
@@ -209,6 +213,8 @@ static int __acpi_tad_wake_read(struct device *dev, char *method, u32 timer_id,
 
 	args[0].integer.value = timer_id;
 
+	guard(mutex)(&acpi_tad_aml_lock);
+
 	status = acpi_evaluate_integer(handle, method, &arg_list, retval);
 	if (ACPI_FAILURE(status))
 		return -EIO;
@@ -425,6 +431,8 @@ static int acpi_tad_clear_status(struct device *dev, u32 timer_id)
 
 	pm_runtime_get_sync(dev);
 
+	guard(mutex)(&acpi_tad_aml_lock);
+
 	status = acpi_evaluate_integer(handle, "_CWS", &arg_list, &retval);
 
 	pm_runtime_put_sync(dev);
@@ -466,6 +474,8 @@ static ssize_t acpi_tad_status_read(struct device *dev, char *buf, u32 timer_id)
 
 	pm_runtime_get_sync(dev);
 
+	guard(mutex)(&acpi_tad_aml_lock);
+
 	status = acpi_evaluate_integer(handle, "_GWS", &arg_list, &retval);
 
 	pm_runtime_put_sync(dev);
Signature · 1 line
2.53.0
author maintainer
#76 lore raw

PATCH 76/1887 kernel/params.c: Use kstrtobool() instead of strtobool()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Christophe JAILLET <[email protected]>

[ Upstream commit def7b92efd868a6c78da86770704c1a03506016e ]

strtobool() is the same as kstrtobool(). However, the latter is more used within the kernel.

In order to remove strtobool() and slightly simplify kstrtox.h, switch to the other function name.

While at it, include the corresponding header file (<linux/kstrtox.h>)

Stable-dep-of: 3dfaae04243c ("params: fix charp corruption on allocation failure")

---
 kernel/params.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
kernel/params.c +2 -1
index 82109c0cf9918..e6df4c2ef097c 100644
@@ -4,6 +4,7 @@
 
 */
 #include <linux/kernel.h>
+#include <linux/kstrtox.h>
 #include <linux/string.h>
 #include <linux/errno.h>
 #include <linux/module.h>
@@ -310,7 +311,7 @@ int param_set_bool(const char *val, const struct kernel_param *kp)
 	if (!val) val = "1";
 
 	/* One of =[yYnN01] */
-	return strtobool(val, kp->arg);
+	return kstrtobool(val, kp->arg);
 }
 EXPORT_SYMBOL(param_set_bool);
 
Signature · 1 line
2.53.0
author maintainer
#77 lore raw

PATCH 77/1887 params: Do not go over the limit when getting the string length

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Andy Shevchenko <[email protected]>

[ Upstream commit fd0cd057a1b7351604daa6ffc91dfe28adf7225d ]

We can use strnlen() even on early stages and it prevents from going over the string boundaries in case it's already too long.

Stable-dep-of: 3dfaae04243c ("params: fix charp corruption on allocation failure")

---
 kernel/params.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
kernel/params.c +6 -3
index e6df4c2ef097c..89c139e861faf 100644
@@ -264,7 +264,10 @@ EXPORT_SYMBOL_GPL(param_set_uint_minmax);
 
 int param_set_charp(const char *val, const struct kernel_param *kp)
 {
-	if (strlen(val) > 1024) {
+	size_t len, maxlen = 1024;
+
+	len = strnlen(val, maxlen + 1);
+	if (len == maxlen + 1) {
 		pr_err("%s: string parameter too long\n", kp->name);
 		return -ENOSPC;
 	}
@@ -274,7 +277,7 @@ int param_set_charp(const char *val, const struct kernel_param *kp)
 	/* This is a hack.  We can't kmalloc in early boot, and we
 	 * don't need to; this mangled commandline is preserved. */
 	if (slab_is_available()) {
-		*(char **)kp->arg = kmalloc_parameter(strlen(val)+1);
+		*(char **)kp->arg = kmalloc_parameter(len + 1);
 		if (!*(char **)kp->arg)
 			return -ENOMEM;
 		strcpy(*(char **)kp->arg, val);
@@ -512,7 +515,7 @@ int param_set_copystring(const char *val, const struct kernel_param *kp)
 {
 	const struct kparam_string *kps = kp->str;
 
-	if (strlen(val)+1 > kps->maxlen) {
+	if (strnlen(val, kps->maxlen) == kps->maxlen) {
 		pr_err("%s: string doesn't fit in %u chars.\n",
 		       kp->name, kps->maxlen-1);
 		return -ENOSPC;
Signature · 1 line
2.53.0
author maintainer
#78 lore raw

PATCH 78/1887 params: Use size_add() for kmalloc()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Andy Shevchenko <[email protected]>

[ Upstream commit 0fc79cbc937f2a754a302a710a94b68c61d0a89a ]

Prevent allocations from integer overflow by using size_add().

Stable-dep-of: 3dfaae04243c ("params: fix charp corruption on allocation failure")

---
 kernel/params.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
kernel/params.c +2 -1
index 89c139e861faf..4d021ba9c677a 100644
@@ -11,6 +11,7 @@
 #include <linux/moduleparam.h>
 #include <linux/device.h>
 #include <linux/err.h>
+#include <linux/overflow.h>
 #include <linux/slab.h>
 #include <linux/ctype.h>
 #include <linux/security.h>
@@ -48,7 +49,7 @@ static void *kmalloc_parameter(unsigned int size)
 {
 	struct kmalloced_param *p;
 
-	p = kmalloc(sizeof(*p) + size, GFP_KERNEL);
+	p = kmalloc(size_add(sizeof(*p), size), GFP_KERNEL);
 	if (!p)
 		return NULL;
 
Signature · 1 line
2.53.0
author maintainer
#79 lore raw

PATCH 79/1887 params: Sort headers

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Andy Shevchenko <[email protected]>

[ Upstream commit a05f096c2c0ca52e8fd34740c7d4b53ab3e7123e ]

Sort the headers in alphabetic order in order to ease the maintenance for this part.

Stable-dep-of: 3dfaae04243c ("params: fix charp corruption on allocation failure")

---
 kernel/params.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
kernel/params.c +6 -6
index 4d021ba9c677a..8c51ce17862ca 100644
@@ -3,18 +3,18 @@
    Copyright (C) 2001 Rusty Russell.
 
 */
+#include <linux/ctype.h>
+#include <linux/device.h>
+#include <linux/err.h>
+#include <linux/errno.h>
 #include <linux/kernel.h>
 #include <linux/kstrtox.h>
-#include <linux/string.h>
-#include <linux/errno.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
-#include <linux/device.h>
-#include <linux/err.h>
 #include <linux/overflow.h>
-#include <linux/slab.h>
-#include <linux/ctype.h>
 #include <linux/security.h>
+#include <linux/slab.h>
+#include <linux/string.h>
 
 #ifdef CONFIG_SYSFS
 /* Protects all built-in parameters, modules use their own param_lock */
Signature · 1 line
2.53.0
author maintainer
#80 lore raw

PATCH 80/1887 params: Fix multi-line comment style

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Andy Shevchenko <[email protected]>

[ Upstream commit b5e3f86a47d34f7b8af899f8cc70520f6daf8b53 ]

The multi-line comment style in the file is rather arbitrary. Make it follow the standard one.

Stable-dep-of: 3dfaae04243c ("params: fix charp corruption on allocation failure")

---
 kernel/params.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)
kernel/params.c +12 -8
index 8c51ce17862ca..03443c99496c6 100644
@@ -1,8 +1,8 @@
 // SPDX-License-Identifier: GPL-2.0-or-later
-/* Helpers for initial module or kernel cmdline parsing
-   Copyright (C) 2001 Rusty Russell.
-
-*/
+/*
+ * Helpers for initial module or kernel cmdline parsing
+ * Copyright (C) 2001 Rusty Russell.
+ */
 #include <linux/ctype.h>
 #include <linux/device.h>
 #include <linux/err.h>
@@ -275,8 +275,10 @@ int param_set_charp(const char *val, const struct kernel_param *kp)
 
 	maybe_kfree_parameter(*(char **)kp->arg);
 
-	/* This is a hack.  We can't kmalloc in early boot, and we
-	 * don't need to; this mangled commandline is preserved. */
+	/*
+	 * This is a hack. We can't kmalloc() in early boot, and we
+	 * don't need to; this mangled commandline is preserved.
+	 */
 	if (slab_is_available()) {
 		*(char **)kp->arg = kmalloc_parameter(len + 1);
 		if (!*(char **)kp->arg)
@@ -741,8 +743,10 @@ void module_param_sysfs_remove(struct module *mod)
 {
 	if (mod->mkobj.mp) {
 		sysfs_remove_group(&mod->mkobj.kobj, &mod->mkobj.mp->grp);
-		/* We are positive that no one is using any param
-		 * attrs at this point.  Deallocate immediately. */
+		/*
+		 * We are positive that no one is using any param
+		 * attrs at this point. Deallocate immediately.
+		 */
 		free_module_param_attrs(&mod->mkobj);
 	}
 }
Signature · 1 line
2.53.0
author maintainer
#63 lore raw

PATCH 63/1887 zram: fixup read_block_state()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Sergey Senozhatsky <[email protected]>

[ Upstream commit 8b05d2d8af817c6a1e23032df51e7ad83030d543 ]

ac_time is now in seconds, do not use ktime_to_timespec64()

[ Stable tree note: The ac_time conversion described above is not present
here, so retain the ktime_t conversion and microsecond output. Move the timespec64 temporary into the scan loop instead, allowing the follow-up bounds fix to move nr_pages initialization under init_lock cleanly. ]

Stable-dep-of: 391f057f44a5 ("zram: fix out-of-bounds access in read_block_state()")

---
 drivers/block/zram/zram_drv.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/block/zram/zram_drv.c +1 -1
index bef5388e4e28e..de5533fadc675 100644
@@ -904,7 +904,6 @@ static ssize_t read_block_state(struct file *file, char __user *buf,
 	ssize_t index, written = 0;
 	struct zram *zram = file->private_data;
 	unsigned long nr_pages = zram->disksize >> PAGE_SHIFT;
-	struct timespec64 ts;
 
 	kbuf = kvmalloc(count, GFP_KERNEL);
 	if (!kbuf)
@@ -919,6 +918,7 @@ static ssize_t read_block_state(struct file *file, char __user *buf,
 
 	for (index = *ppos; index < nr_pages; index++) {
 		int copied;
+		struct timespec64 ts;
 
 		zram_slot_lock(zram, index);
 		if (!zram_allocated(zram, index))
Signature · 1 line
2.53.0
author maintainer
#81 lore raw

PATCH 81/1887 params: fix charp corruption on allocation failure

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Jiacheng Yu <[email protected]>

[ Upstream commit 3dfaae04243cde460d82dfc2a7dd0bb6664d20ae ]

param_set_charp() stores charp parameters in allocated memory after slab is available, and releases the previous value when the parameter is updated.

The previous value is released before the replacement allocation succeeds. If kmalloc_parameter() fails, the setter returns -ENOMEM with the parameter left as NULL.

Failing zswap's compressor update before zswap is initialized can later trigger:

  BUG: kernel NULL pointer dereference, address: 0000000000000000
  RIP: 0010:strcmp+0x10/0x30
  Call Trace:
    zswap_setup+0x3b1/0x490
    zswap_enabled_param_set+0x5b/0xa0
    param_attr_store+0x93/0xe0
    module_attr_store+0x1c/0x30
    kernfs_fop_write_iter+0x116/0x1f0

Allocate and copy the replacement first, then replace the parameter value only after allocation succeeds.

Fixes e180a6b7759a ("param: fix charp parameters set via sysfs")
---
 kernel/params.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)
kernel/params.c +8 -6
index 03443c99496c6..1b699c7632598 100644
@@ -265,6 +265,7 @@ EXPORT_SYMBOL_GPL(param_set_uint_minmax);
 
 int param_set_charp(const char *val, const struct kernel_param *kp)
 {
+	char *tmp;
 	size_t len, maxlen = 1024;
 
 	len = strnlen(val, maxlen + 1);
@@ -273,19 +274,20 @@ int param_set_charp(const char *val, const struct kernel_param *kp)
 		return -ENOSPC;
 	}
 
-	maybe_kfree_parameter(*(char **)kp->arg);
-
 	/*
 	 * This is a hack. We can't kmalloc() in early boot, and we
 	 * don't need to; this mangled commandline is preserved.
 	 */
 	if (slab_is_available()) {
-		*(char **)kp->arg = kmalloc_parameter(len + 1);
-		if (!*(char **)kp->arg)
+		tmp = kmalloc_parameter(len + 1);
+		if (!tmp)
 			return -ENOMEM;
-		strcpy(*(char **)kp->arg, val);
+		memcpy(tmp, val, len + 1);
 	} else
-		*(const char **)kp->arg = val;
+		tmp = (char *)val;
+
+	maybe_kfree_parameter(*(char **)kp->arg);
+	*(char **)kp->arg = tmp;
 
 	return 0;
 }
Signature · 1 line
2.53.0
author maintainer
#82 lore raw

PATCH 82/1887 dmaengine: Add devm_dma_request_chan()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Bence Csókás <[email protected]>

[ Upstream commit 08bf1663c21a3e815eda28fa242d84c945ca3b94 ]

Expand the arsenal of devm functions for DMA devices, this time for requesting channels.

Stable-dep-of: 777979e62711 ("i2c: mxs: fix DMA channel leak on probe error")

---
 drivers/dma/dmaengine.c   | 30 ++++++++++++++++++++++++++++++
 include/linux/dmaengine.h |  7 +++++++
 2 files changed, 37 insertions(+)
drivers/dma/dmaengine.c +30 -0
index 53e755c03f414..96c3f455b7bd7 100644
@@ -933,6 +933,36 @@ void dma_release_channel(struct dma_chan *chan)
 }
 EXPORT_SYMBOL_GPL(dma_release_channel);
 
+static void dmaenginem_release_channel(void *chan)
+{
+	dma_release_channel(chan);
+}
+
+/**
+ * devm_dma_request_chan - try to allocate an exclusive slave channel
+ * @dev:	pointer to client device structure
+ * @name:	slave channel name
+ *
+ * Returns pointer to appropriate DMA channel on success or an error pointer.
+ *
+ * The operation is managed and will be undone on driver detach.
+ */
+
+struct dma_chan *devm_dma_request_chan(struct device *dev, const char *name)
+{
+	struct dma_chan *chan = dma_request_chan(dev, name);
+	int ret = 0;
+
+	if (!IS_ERR(chan))
+		ret = devm_add_action_or_reset(dev, dmaenginem_release_channel, chan);
+
+	if (ret)
+		return ERR_PTR(ret);
+
+	return chan;
+}
+EXPORT_SYMBOL_GPL(devm_dma_request_chan);
+
 /**
  * dmaengine_get - register interest in dma_channels
  */
include/linux/dmaengine.h +7 -0
index 3576c6e89fea4..368a03920c928 100644
@@ -1489,6 +1489,7 @@ struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
 
 struct dma_chan *dma_request_chan(struct device *dev, const char *name);
 struct dma_chan *dma_request_chan_by_mask(const dma_cap_mask_t *mask);
+struct dma_chan *devm_dma_request_chan(struct device *dev, const char *name);
 
 void dma_release_channel(struct dma_chan *chan);
 int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps);
@@ -1525,6 +1526,12 @@ static inline struct dma_chan *dma_request_chan_by_mask(
 {
 	return ERR_PTR(-ENODEV);
 }
+
+static inline struct dma_chan *devm_dma_request_chan(struct device *dev, const char *name)
+{
+	return ERR_PTR(-ENODEV);
+}
+
 static inline void dma_release_channel(struct dma_chan *chan)
 {
 }
Signature · 1 line
2.53.0
author maintainer
#83 lore raw

PATCH 83/1887 i2c: mxs: fix DMA channel leak on probe error

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Ruoyu Wang <[email protected]>

[ Upstream commit 777979e627115734052b323d2721cdb500e81dcf ]

mxs_i2c_probe() requests an exclusive DMA channel before resetting the controller and registering the I2C adapter. If either later operation fails, probe returns without releasing the channel because the remove callback is not invoked after a failed probe.

Use devm_dma_request_chan() so the device core releases the channel on probe failure and driver detach. Remove the manual release from the remove callback because the channel is now device-managed.

This issue was found by a static analysis checker and confirmed by manual source review.

Fixes 62885f59a261 ("MXS: Implement DMA support into mxs-i2c")
Assisted-by unnamed:claude-opus-4.8 typestate
Cc <[email protected]> # v3.7+
---
 drivers/i2c/busses/i2c-mxs.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
drivers/i2c/busses/i2c-mxs.c +1 -4
index e0f3b3545cfe4..d792bcc11a895 100644
@@ -832,7 +832,7 @@ static int mxs_i2c_probe(struct platform_device *pdev)
 	}
 
 	/* Setup the DMA */
-	i2c->dmach = dma_request_chan(dev, "rx-tx");
+	i2c->dmach = devm_dma_request_chan(dev, "rx-tx");
 	if (IS_ERR(i2c->dmach)) {
 		return dev_err_probe(dev, PTR_ERR(i2c->dmach),
 				     "Failed to request dma\n");
@@ -870,9 +870,6 @@ static int mxs_i2c_remove(struct platform_device *pdev)
 
 	i2c_del_adapter(&i2c->adapter);
 
-	if (i2c->dmach)
-		dma_release_channel(i2c->dmach);
-
 	writel(MXS_I2C_CTRL0_SFTRST, i2c->regs + MXS_I2C_CTRL0_SET);
 
 	return 0;
Signature · 1 line
2.53.0
author maintainer
#84 lore raw

PATCH 84/1887 lockd: fix swapped arguments in nlmsvc_match_ip()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Oscar Ou <[email protected]>

[ Upstream commit b9060689f49dc663e9a3d069c4a65ff63a836e66 ]

When releasing locks by server IP address via /proc/fs/nfsd/unlock_ip, nlmsvc_unlock_all_by_ip() calls nlm_traverse_files() with the server sockaddr as the opaque @data argument:

	nlm_traverse_files(server_addr, nlmsvc_match_ip, NULL);

The match callback is later invoked from nlm_traverse_locks() as:

	match(lockhost, host);

where the first argument is the nlm_host that owns the lock, and the second argument is the @data that was originally passed down (here the server sockaddr). This is the convention every other match callback relies on (nlmsvc_mark_host(), nlmsvc_same_host(), nlmsvc_is_client()):
arg1 is the real nlm_host, arg2 is the caller-supplied reference value.

nlmsvc_match_ip() has had these two arguments reversed ever since the unlock-by-IP feature was introduced in commit 4373ea84c84d ("lockd:
unlock lockd locks associated with a given server ip"):

	return rpc_cmp_addr(nlm_srcaddr(host), datap);

Here @host is actually the server sockaddr, so nlm_srcaddr(host) dereferences a struct sockaddr as a struct nlm_host and reads garbage at the offset of h_srcaddr; meanwhile @datap is actually the lock owner's nlm_host but is compared as a sockaddr. As a result the comparison practically never matches and locks are not released for the requested IP.

Swap the arguments so the lock owner's source address is compared against the requested server address:

	return rpc_cmp_addr(nlm_srcaddr(datap), (struct sockaddr *)host);
Fixes 4373ea84c84d ("lockd: unlock lockd locks associated with a given server ip")
[ cel: fix the misleading typedef parameter names too ]
---
 fs/lockd/svcsubs.c          | 2 +-
 include/linux/lockd/lockd.h | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
fs/lockd/svcsubs.c +1 -1
index 9e2a67bfd0702..bba701e1a6089 100644
@@ -493,7 +493,7 @@ EXPORT_SYMBOL_GPL(nlmsvc_unlock_all_by_sb);
 static int
 nlmsvc_match_ip(void *datap, struct nlm_host *host)
 {
-	return rpc_cmp_addr(nlm_srcaddr(host), datap);
+	return rpc_cmp_addr(nlm_srcaddr(datap), (struct sockaddr *)host);
 }
 
 /**
include/linux/lockd/lockd.h +1 -1
index 70ce419e27093..d6034b8bbb7dc 100644
@@ -265,7 +265,7 @@ void		  nsm_release(struct nsm_handle *nsm);
  * This is used in garbage collection and resource reclaim
  * A return value != 0 means destroy the lock/block/share
  */
-typedef int	  (*nlm_host_match_fn_t)(void *cur, struct nlm_host *ref);
+typedef int	  (*nlm_host_match_fn_t)(void *owner, struct nlm_host *ref);
 
 /*
  * Server-side lock handling
Signature · 1 line
2.53.0
author maintainer
#85 lore raw

PATCH 85/1887 power: supply: rt9455: Convert to i2cs .probe_new()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Uwe Kleine-König <[email protected]>

[ Upstream commit 2adfc4370ebb745380a44c3e5418486a32a9ba67 ]

The probe function doesn't make use of the i2c_device_id * parameter so it can be trivially converted.

Stable-dep-of: 3e7a1ebc32fa ("power: supply: rt9455: quiesce delayed work before teardown")

---
 drivers/power/supply/rt9455_charger.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/power/supply/rt9455_charger.c +2 -3
index 566243a423c8f..dd4ff038814f4 100644
@@ -1583,8 +1583,7 @@ static const struct regmap_config rt9455_regmap_config = {
 	.cache_type	= REGCACHE_RBTREE,
 };
 
-static int rt9455_probe(struct i2c_client *client,
-			const struct i2c_device_id *id)
+static int rt9455_probe(struct i2c_client *client)
 {
 	struct i2c_adapter *adapter = client->adapter;
 	struct device *dev = &client->dev;
@@ -1741,7 +1740,7 @@ MODULE_DEVICE_TABLE(acpi, rt9455_i2c_acpi_match);
 #endif
 
 static struct i2c_driver rt9455_driver = {
-	.probe		= rt9455_probe,
+	.probe_new	= rt9455_probe,
 	.remove		= rt9455_remove,
 	.id_table	= rt9455_i2c_id_table,
 	.driver = {
Signature · 1 line
2.53.0
author maintainer
#86 lore raw

PATCH 86/1887 power: supply: rt9455: quiesce delayed work before teardown

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Fan Wu <[email protected]>

[ Upstream commit 3e7a1ebc32fad5a558254a478efd401c17a24381 ]

The threaded IRQ handler can queue pwr_rdy_work, max_charging_time_work and batt_presence_work. pwr_rdy_work and batt_presence_work can also queue max_charging_time_work, while batt_presence_work can requeue itself.

rt9455_remove() cancels max_charging_time_work before batt_presence_work. The latter can therefore queue max_charging_time_work after it has already been cancelled:

rt9455_remove() workqueue
cancel pwr_rdy_work
cancel max_charging_time_work
batt_presence_work queues
max_charging_time_work
cancel batt_presence_work
return
devres frees rt9455_info
max_charging_time_work dereferences
rt9455_info

The IRQ also remains registered until devres cleanup and can queue more work after any of the cancellation calls. If rt9455_hw_init() fails after the IRQ has been requested, probe returns without cancelling work that may already have been queued. A pending callback can then access rt9455_info after it has been freed.

Register rt9455_cancel_all_delayed_works() through devm_add_action_or_reset() right after devm_power_supply_register(). devres invokes the action in reverse registration order, after the managed IRQ has been freed and before rt9455_info is released, so the delayed works are drained in both rt9455_remove() and the probe error path. Cancel pwr_rdy_work and batt_presence_work before max_charging_time_work because both can queue the latter.

This issue was found by an in-house static analysis tool.

Fixes e86d69dd786e ("power_supply: Add support for Richtek RT9455 battery charger")
Assisted-by Codex:gpt-5.6
---
 drivers/power/supply/rt9455_charger.c | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)
drivers/power/supply/rt9455_charger.c +17 -4
index dd4ff038814f4..62ffc3acc2aec 100644
@@ -1583,6 +1583,19 @@ static const struct regmap_config rt9455_regmap_config = {
 	.cache_type	= REGCACHE_RBTREE,
 };
 
+static void rt9455_cancel_all_delayed_works(void *data)
+{
+	struct rt9455_info *info = data;
+
+	/*
+	 * Both pwr_rdy_work and batt_presence_work can queue
+	 * max_charging_time_work, so cancel them first.
+	 */
+	cancel_delayed_work_sync(&info->pwr_rdy_work);
+	cancel_delayed_work_sync(&info->batt_presence_work);
+	cancel_delayed_work_sync(&info->max_charging_time_work);
+}
+
 static int rt9455_probe(struct i2c_client *client)
 {
 	struct i2c_adapter *adapter = client->adapter;
@@ -1673,6 +1686,10 @@ static int rt9455_probe(struct i2c_client *client)
 		goto put_usb_notifier;
 	}
 
+	ret = devm_add_action_or_reset(dev, rt9455_cancel_all_delayed_works, info);
+	if (ret)
+		goto put_usb_notifier;
+
 	ret = devm_request_threaded_irq(dev, client->irq, NULL,
 					rt9455_irq_handler_thread,
 					IRQF_TRIGGER_LOW | IRQF_ONESHOT,
@@ -1713,10 +1730,6 @@ static void rt9455_remove(struct i2c_client *client)
 	if (info->nb.notifier_call)
 		usb_unregister_notifier(info->usb_phy, &info->nb);
 #endif
-
-	cancel_delayed_work_sync(&info->pwr_rdy_work);
-	cancel_delayed_work_sync(&info->max_charging_time_work);
-	cancel_delayed_work_sync(&info->batt_presence_work);
 }
 
 static const struct i2c_device_id rt9455_i2c_id_table[] = {
Signature · 1 line
2.53.0
author maintainer
#87 lore raw

PATCH 87/1887 i2c: core: Introduce i2c_client_get_device_id helper function

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Angel Iglesias <[email protected]>

[ Upstream commit 662233731d66cf41e7494e532e702849c8ce18f3 ]

Introduces new helper function to aid in .probe_new() refactors. In order to use existing i2c_get_device_id() on the probe callback, the device match table needs to be accessible in that function, which would require bigger refactors in some drivers using the deprecated .probe callback.

This issue was discussed in more detail in the IIO mailing list.

Stable-dep-of: 4e4b9f5ce9df ("power: supply: max17040: drop incorrect I2C functionality check")

---
 drivers/i2c/i2c-core-base.c | 14 ++++++++++++++
 include/linux/i2c.h         |  1 +
 2 files changed, 15 insertions(+)
drivers/i2c/i2c-core-base.c +14 -0
index e8fb84c7cfd85..cfb1454c48b9f 100644
@@ -2432,6 +2432,20 @@ int i2c_get_device_id(const struct i2c_client *client,
 }
 EXPORT_SYMBOL_GPL(i2c_get_device_id);
 
+/**
+ * i2c_client_get_device_id - get the driver match table entry of a device
+ * @client: the device to query. The device must be bound to a driver
+ *
+ * Returns a pointer to the matching entry if found, NULL otherwise.
+ */
+const struct i2c_device_id *i2c_client_get_device_id(const struct i2c_client *client)
+{
+	const struct i2c_driver *drv = to_i2c_driver(client->dev.driver);
+
+	return i2c_match_id(drv->id_table, client);
+}
+EXPORT_SYMBOL_GPL(i2c_client_get_device_id);
+
 /* ----------------------------------------------------
  * the i2c address scanning function
  * Will not work for 10-bit addresses!
include/linux/i2c.h +1 -0
index 87b403a6d7e41..60c5bc674dcce 100644
@@ -189,6 +189,7 @@ s32 i2c_smbus_read_i2c_block_data_or_emulated(const struct i2c_client *client,
 					      u8 *values);
 int i2c_get_device_id(const struct i2c_client *client,
 		      struct i2c_device_identity *id);
+const struct i2c_device_id *i2c_client_get_device_id(const struct i2c_client *client);
 #endif /* I2C */
 
 /**
Signature · 1 line
2.53.0
author maintainer
#88 lore raw

PATCH 88/1887 power: supply: max17040: Convert to i2cs .probe_new()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Uwe Kleine-König <[email protected]>

[ Upstream commit a07fca69378c26ea034826feb0011256e25ad237 ]

.probe_new() doesn't get the i2c_device_id * parameter, so determine that explicitly in the probe function.

Stable-dep-of: 4e4b9f5ce9df ("power: supply: max17040: drop incorrect I2C functionality check")

---
 drivers/power/supply/max17040_battery.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/power/supply/max17040_battery.c +3 -3
index 04b61692da300..8e913f92af9cd 100644
@@ -430,9 +430,9 @@ static const struct power_supply_desc max17040_battery_desc = {
 	.num_properties		= ARRAY_SIZE(max17040_battery_props),
 };
 
-static int max17040_probe(struct i2c_client *client,
-			const struct i2c_device_id *id)
+static int max17040_probe(struct i2c_client *client)
 {
+	const struct i2c_device_id *id = i2c_client_get_device_id(client);
 	struct i2c_adapter *adapter = client->adapter;
 	struct power_supply_config psy_cfg = {};
 	struct max17040_chip *chip;
@@ -599,7 +599,7 @@ static struct i2c_driver max17040_i2c_driver = {
 		.of_match_table = max17040_of_match,
 		.pm	= MAX17040_PM_OPS,
 	},
-	.probe		= max17040_probe,
+	.probe_new	= max17040_probe,
 	.id_table	= max17040_id,
 };
 module_i2c_driver(max17040_i2c_driver);
Signature · 1 line
2.53.0
author maintainer
#89 lore raw

PATCH 89/1887 power: supply: max17040: drop incorrect I2C functionality check

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Jianing Li <[email protected]>

[ Upstream commit 4e4b9f5ce9dfb8ed4b8d1262a504b8043ac09d87 ]

max17040_probe() rejects adapters that do not advertise I2C_FUNC_SMBUS_BYTE. The driver does not issue SMBus byte transactions, however. Its regmap has 8-bit registers and 16-bit big-endian values, for which regmap-i2c supports either raw I2C transfers or SMBus word-data transactions.

Consequently, an adapter providing raw I2C transfers or SMBus word data but not SMBus byte transactions is rejected even though regmap can access the device. Conversely, the current check can pass an adapter that regmap cannot use.

Drop the stale check and let devm_regmap_init_i2c() validate and select the supported transfer method.

Fixes 6455a8a84bdfd ("power: supply: max17040: Use regmap i2c")
[Fixed Fixes tag, so that it points to the regmap introduction instead of the initial driver addition]
---
 drivers/power/supply/max17040_battery.c | 4 ----
 1 file changed, 4 deletions(-)
drivers/power/supply/max17040_battery.c +0 -4
index 8e913f92af9cd..2017acf67a32c 100644
@@ -433,16 +433,12 @@ static const struct power_supply_desc max17040_battery_desc = {
 static int max17040_probe(struct i2c_client *client)
 {
 	const struct i2c_device_id *id = i2c_client_get_device_id(client);
-	struct i2c_adapter *adapter = client->adapter;
 	struct power_supply_config psy_cfg = {};
 	struct max17040_chip *chip;
 	enum chip_id chip_id;
 	bool enable_irq = false;
 	int ret;
 
-	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
-		return -EIO;
-
 	chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
 	if (!chip)
 		return -ENOMEM;
Signature · 1 line
2.53.0
author maintainer
#90 lore raw

PATCH 90/1887 mmc: via-sdmmc: cancel card-detect work on remove

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Fan Wu <[email protected]>

[ Upstream commit 57e5d877f898d5e5c9d672a77bb6bdd24f0d9bf5 ]

Disabling the device interrupt and freeing the IRQ prevents new card-detect work from being queued, but carddet_work already queued by the handler can still run after via_sd_remove() returns. via_sdc_card_detect() recovers the host through container_of() and dereferences its MMIO base; once remove() returns the host can be freed, so that work would touch freed memory.

Cancel carddet_work after freeing the IRQ and before cancelling finish_bh_work, which the card-detect handler can also queue. carddet_work can re-enable the interrupt through via_reset_pcictrl(); mask it again afterwards.

This issue was found by an in-house static analysis tool and confirmed by manual code review.

Fixes f0bf7f61b840 ("mmc: Add new via-sdmmc host controller driver")
Assisted-by Codex:gpt-5.6
[ adjusted context to retain del_timer_sync() instead of timer_delete_sync(). ]
---
 drivers/mmc/host/via-sdmmc.c | 4 ++++
 1 file changed, 4 insertions(+)
drivers/mmc/host/via-sdmmc.c +4 -0
index 5bf508b6db0e3..3ae8f005f8fe0 100644
@@ -1208,6 +1208,10 @@ static void via_sd_remove(struct pci_dev *pcidev)
 
 	free_irq(pcidev->irq, sdhost);
 
+	cancel_work_sync(&sdhost->carddet_work);
+	/* carddet_work may re-enable the interrupt via via_reset_pcictrl(). */
+	writeb(0x0, sdhost->pcictrl_mmiobase + VIA_CRDR_PCIINTCTRL);
+
 	del_timer_sync(&sdhost->timer);
 
 	tasklet_kill(&sdhost->finish_tasklet);
Signature · 1 line
2.53.0
author maintainer
#64 lore raw

PATCH 64/1887 zram: fix out-of-bounds access in read_block_state()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Longlong Xia <[email protected]>

[ Upstream commit 391f057f44a51cc9418da5cba78b014324174264 ]

read_block_state() calculates nr_pages before taking dev_lock. If the device is reset and reinitialized with a smaller disksize before lock acquisition, nr_pages still describes the old table. The subsequent loop can then call slot_lock() past the end of the newly allocated table.

Read disksize after acquiring dev_lock and checking that the device is initialized. The read lock then keeps the table and its bound stable for the duration of the scan.

Fixes c0265342bff4 ("zram: introduce zram memory tracking")
Assisted-by Codex:gpt-5.6-sol
Cc Jens Axboe <[email protected]>
Cc Minchan Kim <[email protected]>
---
 drivers/block/zram/zram_drv.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/block/zram/zram_drv.c +3 -1
index de5533fadc675..740ca88bb6733 100644
@@ -903,7 +903,7 @@ static ssize_t read_block_state(struct file *file, char __user *buf,
 	char *kbuf;
 	ssize_t index, written = 0;
 	struct zram *zram = file->private_data;
-	unsigned long nr_pages = zram->disksize >> PAGE_SHIFT;
+	unsigned long nr_pages;
 
 	kbuf = kvmalloc(count, GFP_KERNEL);
 	if (!kbuf)
@@ -916,6 +916,8 @@ static ssize_t read_block_state(struct file *file, char __user *buf,
 		return -EINVAL;
 	}
 
+	nr_pages = zram->disksize >> PAGE_SHIFT;
+
 	for (index = *ppos; index < nr_pages; index++) {
 		int copied;
 		struct timespec64 ts;
Signature · 1 line
2.53.0
author maintainer
#91 lore raw

PATCH 91/1887 hwrng: stm32 - Fix runtime PM cleanup on registration failure

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Can Peng <[email protected]>

[ Upstream commit 1163a476a568f6c0f852d469c8e4c5a5f805adac ]

stm32_rng_probe() enables autosuspend and runtime PM before registering the hwrng. If devm_hwrng_register() fails, probe returns with runtime PM left enabled and autosuspend still selected.

The remove callback also only disables runtime PM and does not undo pm_runtime_use_autosuspend().

Use devm_pm_runtime_enable() so runtime PM is unwound automatically on probe failure and driver detach. Since the managed cleanup also disables runtime PM,drop the remove callback.

Fixes c6a97c42e399 ("hwrng: stm32 - add support for STM32 HW RNG")
[ adapted to the older driver’s relocated int-returning remove callback and existing err variable. ]
---
 drivers/char/hw_random/stm32-rng.c | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)
drivers/char/hw_random/stm32-rng.c +3 -9
index bc22178f83e83..440c001c746b1 100644
@@ -156,18 +156,13 @@ static int stm32_rng_probe(struct platform_device *ofdev)
 
 	pm_runtime_set_autosuspend_delay(dev, 100);
 	pm_runtime_use_autosuspend(dev);
-	pm_runtime_enable(dev);
+	err = devm_pm_runtime_enable(dev);
+	if (err)
+		return err;
 
 	return devm_hwrng_register(dev, &priv->rng);
 }
 
-static int stm32_rng_remove(struct platform_device *ofdev)
-{
-	pm_runtime_disable(&ofdev->dev);
-
-	return 0;
-}
-
 #ifdef CONFIG_PM
 static int stm32_rng_runtime_suspend(struct device *dev)
 {
@@ -209,7 +204,6 @@ static struct platform_driver stm32_rng_driver = {
 		.of_match_table = stm32_rng_match,
 	},
 	.probe = stm32_rng_probe,
-	.remove = stm32_rng_remove,
 };
 
 module_platform_driver(stm32_rng_driver);
Signature · 1 line
2.53.0
author maintainer
#92 lore raw

PATCH 92/1887 i3c: master: Do not treat master device as a duplicate target

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Adrian Hunter <[email protected]>

[ Upstream commit 4dc1b3eeba7991905a5b5b8129ebea51be7d87b7 ]

i3c_master_search_i3c_dev_duplicate() searches the bus for another I3C device with the same PID as the reference device. The search can match master->this, causing the controller itself to be returned as a duplicate.

Since the controller is not a target device, it cannot be a duplicate of one. Exclude master->this from matching so that the function only returns real duplicate target devices.

Fixes 3a379bbcea0a ("i3c: Add core I3C infrastructure")
[ adjusted the duplicate-device comparison to match the older branch’s PID handling without nonzero-PID checks. ]
---
 drivers/i3c/master.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/i3c/master.c +2 -1
index 059ddd50e8590..d0f5ae21ea1f3 100644
@@ -1978,7 +1978,8 @@ i3c_master_search_i3c_dev_duplicate(struct i3c_dev_desc *refdev)
 	struct i3c_dev_desc *i3cdev;
 
 	i3c_bus_for_each_i3cdev(&master->bus, i3cdev) {
-		if (i3cdev != refdev && i3cdev->info.pid == refdev->info.pid)
+		if (i3cdev != refdev && i3cdev->info.pid == refdev->info.pid &&
+		    i3cdev != master->this)
 			return i3cdev;
 	}
 
Signature · 1 line
2.53.0
author maintainer
#93 lore raw

PATCH 93/1887 i3c: master: Fix use-after-free of master->this

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Adrian Hunter <[email protected]>

[ Upstream commit feb0ed76601f3c2f91f08688c5a7d8b9d382f720 ]

sysfs attribute callbacks for the master controller device dereference master->this. However, master->this is freed in i3c_master_detach_free_devs() before the master device itself is released.

As a result, sysfs accesses can dereference a freed master->this pointer, leading to a use-after-free.

Keep master->this alive until i3c_masterdev_release(), which is called after the master device and its sysfs state are being torn down. Do not free master->this as part of the normal device detach path.

On the error path in i3c_master_set_info(), reset master->this and bus.cur_master to NULL before freeing the allocated device.

Fixes 3a379bbcea0a ("i3c: Add core I3C infrastructure")
[ retained of_node_put(dev->of_node) instead of upstream’s fwnode_handle_put(dev->fwnode). ]
---
 drivers/i3c/master.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)
drivers/i3c/master.c +11 -6
index d0f5ae21ea1f3..cbc3f2d24b618 100644
@@ -667,6 +667,11 @@ static struct attribute *i3c_masterdev_attrs[] = {
 };
 ATTRIBUTE_GROUPS(i3c_masterdev);
 
+static void i3c_master_free_i3c_dev(struct i3c_dev_desc *dev)
+{
+	kfree(dev);
+}
+
 static void i3c_masterdev_release(struct device *dev)
 {
 	struct i3c_master_controller *master = dev_to_i3cmaster(dev);
@@ -679,6 +684,8 @@ static void i3c_masterdev_release(struct device *dev)
 	i3c_bus_cleanup(bus);
 
 	of_node_put(dev->of_node);
+
+	i3c_master_free_i3c_dev(master->this);
 }
 
 static const struct device_type i3c_masterdev_type = {
@@ -866,11 +873,6 @@ static void i3c_device_release(struct device *dev)
 	kfree(i3cdev);
 }
 
-static void i3c_master_free_i3c_dev(struct i3c_dev_desc *dev)
-{
-	kfree(dev);
-}
-
 static struct i3c_dev_desc *
 i3c_master_alloc_i3c_dev(struct i3c_master_controller *master,
 			 const struct i3c_device_info *info)
@@ -1738,6 +1740,8 @@ int i3c_master_set_info(struct i3c_master_controller *master,
 	return 0;
 
 err_free_dev:
+	master->bus.cur_master = NULL;
+	master->this = NULL;
 	i3c_master_free_i3c_dev(i3cdev);
 
 	return ret;
@@ -1758,7 +1762,8 @@ static void i3c_master_detach_free_devs(struct i3c_master_controller *master)
 					i3cdev->boardinfo->init_dyn_addr,
 					I3C_ADDR_SLOT_FREE);
 
-		i3c_master_free_i3c_dev(i3cdev);
+		if (i3cdev != master->this)
+			i3c_master_free_i3c_dev(i3cdev);
 	}
 
 	list_for_each_entry_safe(i2cdev, i2ctmp, &master->bus.devs.i2c,
Signature · 1 line
2.53.0
author maintainer
#94 lore raw

PATCH 94/1887 usb: gadget: f_mass_storage: fix null pointer dereference in fsg_common_set_num_buffers()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Jeffin Philip <[email protected]>

[ Upstream commit 2c0f5ca48674a5b5f9fa4a9c3325aa48053af0bc ]

Previously fsg_num_buffers_validate() was removed as it was not necessary due to Kconfig setting the limits for n from 2 to 256 with default as 2. However, setting the page content in such a way that kstrtou8() reflects n value as either 0 or 1 bypasses these restrictions leading to a null pointer dereference if n is 0. Fix this by adding a check for n < 2 and returning -EINVAL if n is either 0 or 1 consistent with Kconfig logic.

Reported-by [email protected]
Fixes fe5a6c48fd95 ("usb: gadget: storage: get rid of fsg_num_buffers_validate()")
Cc stable <[email protected]>
[ adjusted context to retain the branch’s existing kcalloc() call instead of kzalloc_objs(). ]
---
 drivers/usb/gadget/function/f_mass_storage.c | 3 +++
 1 file changed, 3 insertions(+)
drivers/usb/gadget/function/f_mass_storage.c +3 -0
index a40be63aca291..5618ca904f5d0 100644
@@ -2747,6 +2747,9 @@ int fsg_common_set_num_buffers(struct fsg_common *common, unsigned int n)
 	struct fsg_buffhd *bh, *buffhds;
 	int i;
 
+	if (n < 2)
+		return -EINVAL;
+
 	buffhds = kcalloc(n, sizeof(*buffhds), GFP_KERNEL);
 	if (!buffhds)
 		return -ENOMEM;
Signature · 1 line
2.53.0
author maintainer
#95 lore raw

PATCH 95/1887 spi: bcm63xx: switch to use modern name

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Yang Yingliang <[email protected]>

[ Upstream commit 1a9e76190f72e4e3aaf7eb89da22876846ff9b3d ]

Change legacy name master to modern name host or controller.

No functional changed.

Stable-dep-of: 2b62c2c134fa ("spi: bcm63xx: disable clock on resume failure")

---
 drivers/spi/spi-bcm63xx.c | 68 +++++++++++++++++++--------------------
 1 file changed, 34 insertions(+), 34 deletions(-)
drivers/spi/spi-bcm63xx.c +34 -34
index e57e1f75cd9f9..80a88d38ec00d 100644
@@ -196,7 +196,7 @@ static const unsigned int bcm63xx_spi_freq_table[SPI_CLK_MASK][2] = {
 static void bcm63xx_spi_setup_transfer(struct spi_device *spi,
 				      struct spi_transfer *t)
 {
-	struct bcm63xx_spi *bs = spi_master_get_devdata(spi->master);
+	struct bcm63xx_spi *bs = spi_controller_get_devdata(spi->controller);
 	u8 clk_cfg, reg;
 	int i;
 
@@ -227,7 +227,7 @@ static void bcm63xx_spi_setup_transfer(struct spi_device *spi,
 static int bcm63xx_txrx_bufs(struct spi_device *spi, struct spi_transfer *first,
 				unsigned int num_transfers)
 {
-	struct bcm63xx_spi *bs = spi_master_get_devdata(spi->master);
+	struct bcm63xx_spi *bs = spi_controller_get_devdata(spi->controller);
 	u16 msg_ctl;
 	u16 cmd;
 	unsigned int i, timeout = 0, prepend_len = 0, len = 0;
@@ -336,10 +336,10 @@ static int bcm63xx_txrx_bufs(struct spi_device *spi, struct spi_transfer *first,
 	return 0;
 }
 
-static int bcm63xx_spi_transfer_one(struct spi_master *master,
+static int bcm63xx_spi_transfer_one(struct spi_controller *host,
 					struct spi_message *m)
 {
-	struct bcm63xx_spi *bs = spi_master_get_devdata(master);
+	struct bcm63xx_spi *bs = spi_controller_get_devdata(host);
 	struct spi_transfer *t, *first = NULL;
 	struct spi_device *spi = m->spi;
 	int status = 0;
@@ -409,18 +409,18 @@ static int bcm63xx_spi_transfer_one(struct spi_master *master,
 	}
 exit:
 	m->status = status;
-	spi_finalize_current_message(master);
+	spi_finalize_current_message(host);
 
 	return 0;
 }
 
-/* This driver supports single master mode only. Hence
+/* This driver supports single host mode only. Hence
  * CMD_DONE is the only interrupt we care about
  */
 static irqreturn_t bcm63xx_spi_interrupt(int irq, void *dev_id)
 {
-	struct spi_master *master = (struct spi_master *)dev_id;
-	struct bcm63xx_spi *bs = spi_master_get_devdata(master);
+	struct spi_controller *host = (struct spi_controller *)dev_id;
+	struct bcm63xx_spi *bs = spi_controller_get_devdata(host);
 	u8 intr;
 
 	/* Read interupts and clear them immediately */
@@ -437,7 +437,7 @@ static irqreturn_t bcm63xx_spi_interrupt(int irq, void *dev_id)
 
 static size_t bcm63xx_spi_max_length(struct spi_device *spi)
 {
-	struct bcm63xx_spi *bs = spi_master_get_devdata(spi->master);
+	struct bcm63xx_spi *bs = spi_controller_get_devdata(spi->controller);
 
 	return bs->fifo_size;
 }
@@ -505,7 +505,7 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
 	const unsigned long *bcm63xx_spireg;
 	struct device *dev = &pdev->dev;
 	int irq, bus_num;
-	struct spi_master *master;
+	struct spi_controller *host;
 	struct clk *clk;
 	struct bcm63xx_spi *bs;
 	int ret;
@@ -551,16 +551,16 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
 	if (IS_ERR(reset))
 		return PTR_ERR(reset);
 
-	master = spi_alloc_master(dev, sizeof(*bs));
-	if (!master) {
+	host = spi_alloc_host(dev, sizeof(*bs));
+	if (!host) {
 		dev_err(dev, "out of memory\n");
 		return -ENOMEM;
 	}
 
-	bs = spi_master_get_devdata(master);
+	bs = spi_controller_get_devdata(host);
 	init_completion(&bs->done);
 
-	platform_set_drvdata(pdev, master);
+	platform_set_drvdata(pdev, host);
 	bs->pdev = pdev;
 
 	r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -576,21 +576,21 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
 	bs->fifo_size = bs->reg_offsets[SPI_MSG_DATA_SIZE];
 
 	ret = devm_request_irq(&pdev->dev, irq, bcm63xx_spi_interrupt, 0,
-							pdev->name, master);
+			       pdev->name, host);
 	if (ret) {
 		dev_err(dev, "unable to request irq\n");
 		goto out_err;
 	}
 
-	master->dev.of_node = dev->of_node;
-	master->bus_num = bus_num;
-	master->num_chipselect = num_cs;
-	master->transfer_one_message = bcm63xx_spi_transfer_one;
-	master->mode_bits = MODEBITS;
-	master->bits_per_word_mask = SPI_BPW_MASK(8);
-	master->max_transfer_size = bcm63xx_spi_max_length;
-	master->max_message_size = bcm63xx_spi_max_length;
-	master->auto_runtime_pm = true;
+	host->dev.of_node = dev->of_node;
+	host->bus_num = bus_num;
+	host->num_chipselect = num_cs;
+	host->transfer_one_message = bcm63xx_spi_transfer_one;
+	host->mode_bits = MODEBITS;
+	host->bits_per_word_mask = SPI_BPW_MASK(8);
+	host->max_transfer_size = bcm63xx_spi_max_length;
+	host->max_message_size = bcm63xx_spi_max_length;
+	host->auto_runtime_pm = true;
 	bs->msg_type_shift = bs->reg_offsets[SPI_MSG_TYPE_SHIFT];
 	bs->msg_ctl_width = bs->reg_offsets[SPI_MSG_CTL_WIDTH];
 	bs->tx_io = (u8 *)(bs->regs + bs->reg_offsets[SPI_MSG_DATA]);
@@ -614,7 +614,7 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
 		goto out_clk_disable;
 
 	/* register and we are done */
-	ret = devm_spi_register_master(dev, master);
+	ret = devm_spi_register_controller(dev, host);
 	if (ret) {
 		dev_err(dev, "spi register failed\n");
 		goto out_clk_disable;
@@ -628,14 +628,14 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
 out_clk_disable:
 	clk_disable_unprepare(clk);
 out_err:
-	spi_master_put(master);
+	spi_controller_put(host);
 	return ret;
 }
 
 static int bcm63xx_spi_remove(struct platform_device *pdev)
 {
-	struct spi_master *master = platform_get_drvdata(pdev);
-	struct bcm63xx_spi *bs = spi_master_get_devdata(master);
+	struct spi_controller *host = platform_get_drvdata(pdev);
+	struct bcm63xx_spi *bs = spi_controller_get_devdata(host);
 
 	/* reset spi block */
 	bcm_spi_writeb(bs, 0, SPI_INT_MASK);
@@ -649,10 +649,10 @@ static int bcm63xx_spi_remove(struct platform_device *pdev)
 #ifdef CONFIG_PM_SLEEP
 static int bcm63xx_spi_suspend(struct device *dev)
 {
-	struct spi_master *master = dev_get_drvdata(dev);
-	struct bcm63xx_spi *bs = spi_master_get_devdata(master);
+	struct spi_controller *host = dev_get_drvdata(dev);
+	struct bcm63xx_spi *bs = spi_controller_get_devdata(host);
 
-	spi_master_suspend(master);
+	spi_controller_suspend(host);
 
 	clk_disable_unprepare(bs->clk);
 
@@ -661,15 +661,15 @@ static int bcm63xx_spi_suspend(struct device *dev)
 
 static int bcm63xx_spi_resume(struct device *dev)
 {
-	struct spi_master *master = dev_get_drvdata(dev);
-	struct bcm63xx_spi *bs = spi_master_get_devdata(master);
+	struct spi_controller *host = dev_get_drvdata(dev);
+	struct bcm63xx_spi *bs = spi_controller_get_devdata(host);
 	int ret;
 
 	ret = clk_prepare_enable(bs->clk);
 	if (ret)
 		return ret;
 
-	spi_master_resume(master);
+	spi_controller_resume(host);
 
 	return 0;
 }
Signature · 1 line
2.53.0
author maintainer
#96 lore raw

PATCH 96/1887 spi: bcm63xx: disable clock on resume failure

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Can Peng <[email protected]>

[ Upstream commit 2b62c2c134fa32d9d3a9e7323c8ac74518eeb4ac ]

bcm63xx_spi_resume() enables the controller clock before restarting the SPI controller queue.

If spi_controller_resume() fails, the function currently reports success and leaves the clock enabled. Propagate the error and disable the clock before returning.

Fixes b42dfed83d95 ("spi: add Broadcom BCM63xx SPI controller driver")
---
 drivers/spi/spi-bcm63xx.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/spi/spi-bcm63xx.c +5 -1
index 80a88d38ec00d..cf0456f41a379 100644
@@ -669,7 +669,11 @@ static int bcm63xx_spi_resume(struct device *dev)
 	if (ret)
 		return ret;
 
-	spi_controller_resume(host);
+	ret = spi_controller_resume(host);
+	if (ret) {
+		clk_disable_unprepare(bs->clk);
+		return ret;
+	}
 
 	return 0;
 }
Signature · 1 line
2.53.0
author maintainer
#97 lore raw

PATCH 97/1887 staging: sm750fb: fix mono image source stride mismatch in lynxfb_ops_imageblit()

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Muhammad Bilal <[email protected]>

[ Upstream commit cc7cd2a9228175c975f62ad56ed7c767701cb4fa ]

sm750_hw_imageblit() advances its monochrome source pointer by src_delta per scanline, and computes the correct rounded-up stride internally as:

        bytes_per_scan = (width + start_bit + 7) / 8;

Its only caller, lynxfb_ops_imageblit(), instead passed src_delta as image->width >> 3. For widths not a multiple of 8 this under-counted the stride, so the source pointer fell further behind the real per-scanline layout on every line, corrupting the rendered image.

Rather than just fixing the caller's calculation, remove src_delta as a parameter entirely and have sm750_hw_imageblit() advance by the bytes_per_scan it already computes for itself. There has only ever been one caller, and that caller was passing an out-of-sync derivative of the same width/start_bit values sm750_hw_imageblit() already has, so keeping stride as a separate parameter served no purpose beyond letting the two calculations drift apart, which is exactly what happened here.

Rounding up, rather than down, is the direction consistent with the rest of the fbdev core: struct fb_image mono bitmap data (the same image->data this driver receives) is walked elsewhere with byte strides derived from a ceiling division of width by 8. The generic mono bit iterator in drivers/video/fbdev/core/fb_imageblit.h advances scanlines with "iter->data += BITS_TO_BYTES(iter->width)", and BITS_TO_BYTES() (include/linux/bitops.h) is a ceiling division. sm750_hw_imageblit()'s own "(width + start_bit + 7) / 8" is that same ceiling division with an added start_bit offset, so the caller's ">> 3" (floor) was the one calculation out of step with how this data layout is handled everywhere else.

Found by code review of sm750_hw_imageblit()'s internal stride calculation against what its only caller was passing in, and confirmed with a clean -Werror build. I do not have this hardware, so this has not been exercised at runtime on real sm750 silicon.

---
 drivers/staging/sm750fb/sm750.c       | 2 +-
 drivers/staging/sm750fb/sm750.h       | 2 +-
 drivers/staging/sm750fb/sm750_accel.c | 6 ++----
 drivers/staging/sm750fb/sm750_accel.h | 4 +---
 4 files changed, 5 insertions(+), 9 deletions(-)
drivers/staging/sm750fb/sm750.c +1 -1
index 758759b706d47..ad41ba284a3af 100644
@@ -276,7 +276,7 @@ static void lynxfb_ops_imageblit(struct fb_info *info,
 	spin_lock(&sm750_dev->slock);
 
 	sm750_dev->accel.de_imageblit(&sm750_dev->accel,
-				      image->data, image->width >> 3, 0,
+				      image->data, 0,
 				      base, pitch, Bpp,
 				      image->dx, image->dy,
 				      image->width, image->height,
drivers/staging/sm750fb/sm750.h +1 -1
index aff69661c8e62..a693d9f1d0d5e 100644
@@ -73,7 +73,7 @@ struct lynx_accel {
 			   u32 rop2);
 
 	int (*de_imageblit)(struct lynx_accel *accel, const char *p_srcbuf,
-			    u32 src_delta, u32 start_bit, u32 d_base, u32 d_pitch,
+			    u32 start_bit, u32 d_base, u32 d_pitch,
 			    u32 byte_per_pixel, u32 dx, u32 dy, u32 width,
 			    u32 height, u32 f_color, u32 b_color, u32 rop2);
 
drivers/staging/sm750fb/sm750_accel.c +2 -4
index 24b9077a634a6..eb47c18a585d0 100644
@@ -301,8 +301,6 @@ static unsigned int deGetTransparency(struct lynx_accel *accel)
  * sm750_hw_imageblit
  * @accel: Acceleration device data
  * @pSrcbuf: pointer to start of source buffer in system memory
- * @srcDelta: Pitch value (in bytes) of the source buffer, +ive means top down
- *	      and -ive mean button up
  * @startBit: Mono data can start at any bit in a byte, this value should be
  *	      0 to 7
  * @dBase: Address of destination: offset in frame buffer
@@ -317,7 +315,7 @@ static unsigned int deGetTransparency(struct lynx_accel *accel)
  * @rop2: ROP value
  */
 int sm750_hw_imageblit(struct lynx_accel *accel, const char *pSrcbuf,
-		       u32 srcDelta, u32 startBit, u32 dBase, u32 dPitch,
+		       u32 startBit, u32 dBase, u32 dPitch,
 		       u32 bytePerPixel, u32 dx, u32 dy, u32 width,
 		       u32 height, u32 fColor, u32 bColor, u32 rop2)
 {
@@ -406,7 +404,7 @@ int sm750_hw_imageblit(struct lynx_accel *accel, const char *pSrcbuf,
 			write_dpPort(accel, *(unsigned int *)ajRemain);
 		}
 
-		pSrcbuf += srcDelta;
+		pSrcbuf += ulBytesPerScan;
 	}
 
 	return 0;
drivers/staging/sm750fb/sm750_accel.h +1 -3
index 2c79cb730a0a6..df48ed57a054e 100644
@@ -220,8 +220,6 @@ int sm750_hw_copyarea(struct lynx_accel *accel,
 /**
  * sm750_hw_imageblit
  * @pSrcbuf: pointer to start of source buffer in system memory
- * @srcDelta: Pitch value (in bytes) of the source buffer, +ive means top down
- *>-----      and -ive mean button up
  * @startBit: Mono data can start at any bit in a byte, this value should be
  *>-----      0 to 7
  * @dBase: Address of destination: offset in frame buffer
@@ -236,7 +234,7 @@ int sm750_hw_copyarea(struct lynx_accel *accel,
  * @rop2: ROP value
  */
 int sm750_hw_imageblit(struct lynx_accel *accel, const char *pSrcbuf,
-		       u32 srcDelta, u32 startBit, u32 dBase, u32 dPitch,
+		       u32 startBit, u32 dBase, u32 dPitch,
 		       u32 bytePerPixel, u32 dx, u32 dy, u32 width,
 		       u32 height, u32 fColor, u32 bColor, u32 rop2);
 
Signature · 1 line
2.53.0
author maintainer
#98 lore raw

PATCH 98/1887 ftrace: Synchronize the initialization of ftrace_ops

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Steven Rostedt <[email protected]>

[ Upstream commit 4617721c502b2ddaa4e324e86da4997edf738fa5 ]

There's some internal state that ftrace_ops needs to have set, but since it can be declared outside of the ftrace.c code, it calls ftrace_ops_init() on the ops in every global function. The issue is that if two tasks call it on the same ops at the same time it is possible to have the initialization of one corrupt the initialization of the other call.

Create a ops_mutex to use to synchronize every initialization of the ftrace_ops. The mutex is taken within checking the ftrace_ops flag that states it was initializied but the flag is checked again after the mutex has been taken. Checking first outside the mutex allows it to shortcut having to take the mutex. But then the check needs to be done again after the mute is taken in case of races.

Fixes f04f24fb7e48d ("ftrace, kprobes: Fix a deadlock on ftrace_regex_lock")
Reported-by [email protected]

Close: https://lore.kernel.org/all/[email protected]/

[ adjusted INIT_OPS_HASH macro context for the missing subop_list member. ]
---
 kernel/trace/ftrace.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)
kernel/trace/ftrace.c +11 -2
index eee7bb2843940..359cea3478b65 100644
@@ -71,6 +71,8 @@
 #define INIT_OPS_HASH(opsname)	\
 	.func_hash		= &opsname.local_hash,			\
 	.local_hash.regex_lock	= __MUTEX_INITIALIZER(opsname.local_hash.regex_lock),
+/* Used only to synchronize the initialization of ftrace_ops */
+static DEFINE_MUTEX(ops_mutex);
 #else
 #define INIT_OPS_HASH(opsname)
 #endif
@@ -128,10 +130,17 @@ void ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip,
 static inline void ftrace_ops_init(struct ftrace_ops *ops)
 {
 #ifdef CONFIG_DYNAMIC_FTRACE
-	if (!(ops->flags & FTRACE_OPS_FL_INITIALIZED)) {
+	unsigned long flags = smp_load_acquire(&ops->flags);
+
+	if (!(flags & FTRACE_OPS_FL_INITIALIZED)) {
+		guard(mutex)(&ops_mutex);
+		/* Could have been initialized before lock taken */
+		if (unlikely(ops->flags & FTRACE_OPS_FL_INITIALIZED))
+			return;
 		mutex_init(&ops->local_hash.regex_lock);
 		ops->func_hash = &ops->local_hash;
-		ops->flags |= FTRACE_OPS_FL_INITIALIZED;
+		flags = ops->flags | FTRACE_OPS_FL_INITIALIZED;
+		smp_store_release(&ops->flags, flags);
 	}
 #endif
 }
Signature · 1 line
2.53.0
author maintainer
#99 lore raw

PATCH 99/1887 rtc: rzn1: Handle unset alarm weekday in rzn1_rtc_read_alarm

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Lad Prabhakar <[email protected]>

[ Upstream commit 457b5dbce31209e65e1184716ed3af59cb1c0372 ]

RZN1_RTC_ALW is a weekday bitmask where bit N represents weekday N. When no alarm has been configured, the register has its power-on-reset value of zero.

rzn1_rtc_read_alarm() uses fls() to convert the weekday bitmask into a weekday number. When RZN1_RTC_ALW is zero, fls(0) returns zero and fls(wday) - 1 evaluates to -1. This invalid weekday is then used to calculate the alarm date and can either leave tm_wday set to -1 or produce a fabricated alarm date.

Treat a zero RZN1_RTC_ALW value as an unset alarm weekday and return without calculating the alarm date. Move reading RZN1_RTC_CTL1 before this check so that alrm->enabled is updated for both configured and unconfigured alarms.

Fixes b5ad1bf00d2c4 ("rtc: rzn1: Add alarm support")
[ retained the ALME-only enable check because RZN1_RTC_CTL1_1SE is absent. ]
---
 drivers/rtc/rtc-rzn1.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)
drivers/rtc/rtc-rzn1.c +12 -4
index 36381385d2628..cf9154a62d463 100644
@@ -193,13 +193,24 @@ static int rzn1_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
 	if (ret)
 		return ret;
 
+	ctl1 = readl(rtc->base + RZN1_RTC_CTL1);
+	alrm->enabled = !!(ctl1 & RZN1_RTC_CTL1_ALME);
+
 	min = readl(rtc->base + RZN1_RTC_ALM);
 	hour = readl(rtc->base + RZN1_RTC_ALH);
-	wday = readl(rtc->base + RZN1_RTC_ALW);
 
 	tm->tm_sec = 0;
 	tm->tm_min = bcd2bin(min);
 	tm->tm_hour = bcd2bin(hour);
+
+	/*
+	 * If wday is zero, no bit is set in RZN1_RTC_ALW. This is the
+	 * register's power-on reset value.
+	 */
+	wday = readl(rtc->base + RZN1_RTC_ALW);
+	if (!wday)
+		return 0;
+
 	delta_days = ((fls(wday) - 1) - tm->tm_wday + 7) % 7;
 	tm->tm_wday = fls(wday) - 1;
 
@@ -208,9 +219,6 @@ static int rzn1_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
 		rtc_time64_to_tm(alarm, tm);
 	}
 
-	ctl1 = readl(rtc->base + RZN1_RTC_CTL1);
-	alrm->enabled = !!(ctl1 & RZN1_RTC_CTL1_ALME);
-
 	return 0;
 }
 
Signature · 1 line
2.53.0
author maintainer
#100 lore raw

PATCH 100/1887 arm64: allow pte_offset_map() to fail

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Hugh Dickins <[email protected]>

[ Upstream commit 52924726f4c06b3f77de75fb665e6efd8e777d07 ]

In rare transient cases, not yet made possible, pte_offset_map() and pte_offset_map_lock() may not find a page table: handle appropriately.

Cc Alexander Gordeev <[email protected]>
Cc Alexandre Ghiti <[email protected]>
Cc Aneesh Kumar K.V <[email protected]>
Cc Christian Borntraeger <[email protected]>
Cc Chris Zankel <[email protected]>
Cc Claudio Imbrenda <[email protected]>
Cc David Hildenbrand <[email protected]>
Cc "David S. Miller" <[email protected]>
Cc Geert Uytterhoeven <[email protected]>
Cc Greg Ungerer <[email protected]>
Cc Heiko Carstens <[email protected]>
Cc Helge Deller <[email protected]>
Cc "H. Peter Anvin" <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc John David Anglin <[email protected]>
Cc John Paul Adrian Glaubitz <[email protected]>
Cc Kirill A. Shutemov <[email protected]>
Cc Matthew Wilcox (Oracle) <[email protected]>
Cc Max Filippov <[email protected]>
Cc Michael Ellerman <[email protected]>
Cc Michal Simek <[email protected]>
Cc Mike Kravetz <[email protected]>
Cc Mike Rapoport (IBM) <[email protected]>
Cc Palmer Dabbelt <[email protected]>
Cc Peter Zijlstra <[email protected]>
Cc Qi Zheng <[email protected]>
Cc Russell King <[email protected]>
Cc Suren Baghdasaryan <[email protected]>
Cc Thomas Bogendoerfer <[email protected]>
Cc Thomas Gleixner <[email protected]>
Cc Will Deacon <[email protected]>

Stable-dep-of: a77644d009de ("arm64: mm: Fix the lockless page-table walk in show_pte()")

---
 arch/arm64/mm/fault.c | 3 +++
 1 file changed, 3 insertions(+)
arch/arm64/mm/fault.c +3 -0
index 0776c98ad27f1..c4120bd80a9b4 100644
@@ -177,6 +177,9 @@ static void show_pte(unsigned long addr)
 			break;
 
 		ptep = pte_offset_map(pmdp, addr);
+		if (!ptep)
+			break;
+
 		pte = READ_ONCE(*ptep);
 		pr_cont(", pte=%016llx", pte_val(pte));
 		pte_unmap(ptep);
Signature · 1 line
2.53.0
author maintainer
#65 lore raw

PATCH 65/1887 nfsd: release path refs on follow_down() error

In reply to Greg Kroah-Hartman

6.1-stable review patch. If anyone has any objections, please let me know.

------------------

From: Chris Mason <[email protected]>

[ Upstream commit 6cba08dc1922140d260cfeb30bbda4ee1bf869d8 ]

nfsd_cross_mnt() initializes a local struct path with mntget() and dget() before calling follow_down(). On a negative return the error arm jumps to out without releasing those references:

    err = follow_down(&path, follow_flags);
    if (err < 0)
            goto out;

follow_down() never drops the caller's entry-time refs on any error sub-case; for example a pre-cross d_manage() failure leaves path untouched, so the mntget()/dget() taken on entry survive the call.

Every other early-exit arm in nfsd_cross_mnt() (other-namespace return, IS_ERR(exp2), and the success tail after the swap) already calls path_put(&path); the err < 0 arm is the lone omission. The leak inflates mnt_count and d_count on each failed cross-mount, blocking umount and pinning dentries against the shrinker, and is reachable by any authenticated NFS client through nfsd_lookup_dentry or the NFSv4 READDIR encode path.

Fix by calling path_put(&path) before the goto out in the err < 0 arm so the entry-time refs are released on all follow_down() error returns.

Fixes cc53ce53c869 ("Add a dentry op to allow processes to be held during pathwalk transit")
Assisted-by kres:claude-opus-4-7
[ retained the older single-argument follow_down(&path) API ]
---
 fs/nfsd/vfs.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
fs/nfsd/vfs.c +3 -1
index a69287613479b..ec28429c29462 100644
@@ -130,8 +130,10 @@ nfsd_cross_mnt(struct svc_rqst *rqstp, struct dentry **dpp,
 	int err = 0;
 
 	err = follow_down(&path);
-	if (err < 0)
+	if (err < 0) {
+		path_put(&path);
 		goto out;
+	}
 	if (path.mnt == exp->ex_path.mnt && path.dentry == dentry &&
 	    nfsd_mountpoint(dentry, exp) == 2) {
 		/* This is only a mountpoint in some other namespace */
Signature · 1 line
2.53.0