6.1.55-rc1 review
Subsystems (4)
Greg Kroah-Hartman
maintainerPATCH 1/139 autofs: fix memory leak of waitqueues in autofs_catatonic_mode
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Fedor Pchelkin <[email protected]>
[ Upstream commit ccbe77f7e45dfb4420f7f531b650c00c6e9c7507 ]
Syzkaller reports a memory leak:
BUG: memory leak
unreferenced object 0xffff88810b279e00 (size 96):
comm "syz-executor399", pid 3631, jiffies 4294964921 (age 23.870s)
hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 08 9e 27 0b 81 88 ff ff ..........'.....
08 9e 27 0b 81 88 ff ff 00 00 00 00 00 00 00 00 ..'.............
backtrace:
[<ffffffff814cfc90>] kmalloc_trace+0x20/0x90 mm/slab_common.c:1046
[<ffffffff81bb75ca>] kmalloc include/linux/slab.h:576 [inline]
[<ffffffff81bb75ca>] autofs_wait+0x3fa/0x9a0 fs/autofs/waitq.c:378
[<ffffffff81bb88a7>] autofs_do_expire_multi+0xa7/0x3e0 fs/autofs/expire.c:593
[<ffffffff81bb8c33>] autofs_expire_multi+0x53/0x80 fs/autofs/expire.c:619
[<ffffffff81bb6972>] autofs_root_ioctl_unlocked+0x322/0x3b0 fs/autofs/root.c:897
[<ffffffff81bb6a95>] autofs_root_ioctl+0x25/0x30 fs/autofs/root.c:910
[<ffffffff81602a9c>] vfs_ioctl fs/ioctl.c:51 [inline]
[<ffffffff81602a9c>] __do_sys_ioctl fs/ioctl.c:870 [inline]
[<ffffffff81602a9c>] __se_sys_ioctl fs/ioctl.c:856 [inline]
[<ffffffff81602a9c>] __x64_sys_ioctl+0xfc/0x140 fs/ioctl.c:856
[<ffffffff84608225>] do_syscall_x64 arch/x86/entry/common.c:50 [inline]
[<ffffffff84608225>] do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
[<ffffffff84800087>] entry_SYSCALL_64_after_hwframe+0x63/0xcdautofs_wait_queue structs should be freed if their wait_ctr becomes zero. Otherwise they will be lost.
In this case an AUTOFS_IOC_EXPIRE_MULTI ioctl is done, then a new waitqueue struct is allocated in autofs_wait(), its initial wait_ctr equals 2. After that wait_event_killable() is interrupted (it returns -ERESTARTSYS), so that 'wq->name.name == NULL' condition may be not satisfied. Actually, this condition can be satisfied when autofs_wait_release() or autofs_catatonic_mode() is called and, what is also important, wait_ctr is decremented in those places. Upon the exit of autofs_wait(), wait_ctr is decremented to 1. Then the unmounting process
begins: kill_sb calls autofs_catatonic_mode(), which should have freed the waitqueues, but it only decrements its usage counter to zero which is not a correct behaviour.
edit:imk
This description is of course not correct. The umount performed as a result of an expire is a umount of a mount that has been automounted, it's not the autofs mount itself. They happen independently, usually after everything mounted within the autofs file system has been expired away. If everything hasn't been expired away the automount daemon can still exit leaving mounts in place. But expires done in both cases will result in a notification that calls autofs_wait_release() with a result status. The problem case is the summary execution of of the automount daemon. In this case any waiting processes won't be woken up until either they are terminated or the mount is umounted.
end edit: imk
So in catatonic mode we should free waitqueues which counter becomes zero.
edit: imk
Initially I was concerned that the calling of autofs_wait_release() and autofs_catatonic_mode() was not mutually exclusive but that can't be the case (obviously) because the queue entry (or entries) is removed from the list when either of these two functions are called. Consequently the wait entry will be freed by only one of these functions or by the woken process in autofs_wait() depending on the order of the calls.
end edit: imk
Message-Id: <[email protected]>
--- fs/autofs/waitq.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/autofs/waitq.c +2 -1
@@ -32,8 +32,9 @@ void autofs_catatonic_mode(struct autofs_sb_info *sbi) wq->status = -ENOENT ;/* Magic is gone - report failure */ kfree (wq->name.name - wq->offset); wq->name.name =NULL ; - wq->wait_ctr--;wake_up_interruptible (&wq->queue); +if (!--wq->wait_ctr) +kfree (wq); wq = nwq; }fput (sbi->pipe);/* Close the pipe */
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 10/139 perf/imx_ddr: speed up overflow frequency of cycle
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xu Yang <[email protected]>
[ Upstream commit e89ecd8368860bf05437eabd07d292c316221cfc ]
For i.MX8MP, we cannot ensure that cycle counter overflow occurs at least 4 times as often as other events. Due to byte counters will count for any event configured, it will overflow more often. And if byte counters overflow that related counters would stop since they share the COUNTER_CNTL. We can speed up cycle counter overflow frequency by setting counter parameter (CP) field of cycle counter. In this way, we can avoid stop counting byte counters when interrupt didn't come and the byte counters can be fetched or updated from each cycle counter overflow interrupt.
Because we initialize CP filed to shorten counter0 overflow time, the cycle counter will start couting from a fixed/base value each time. We need to remove the base from the result too. Therefore, we could get precise result from cycle counter.
--- drivers/perf/fsl_imx8_ddr_perf.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
drivers/perf/fsl_imx8_ddr_perf.c +21 -0
@@ -28,6 +28,8 @@#define CNTL_CLEAR_MASK 0xFFFFFFFD#define CNTL_OVER_MASK 0xFFFFFFFE +#define CNTL_CP_SHIFT 16 +#define CNTL_CP_MASK (0xFF << CNTL_CP_SHIFT)#define CNTL_CSV_SHIFT 24#define CNTL_CSV_MASK (0xFFU << CNTL_CSV_SHIFT)
@@ -35,6 +37,8 @@#define EVENT_CYCLES_COUNTER 0#define NUM_COUNTERS 4 +/* For removing bias if cycle counter CNTL.CP is set to 0xf0 */ +#define CYCLES_COUNTER_MASK 0x0FFFFFFF#define AXI_MASKING_REVERT 0xffff0000/* AXI_MASKING(MSB 16bits) + AXI_ID(LSB 16bits) */ #define to_ddr_pmu (p) container_of(p, struct ddr_pmu, pmu)
@@ -429,6 +433,17 @@ static void ddr_perf_counter_enable(struct ddr_pmu *pmu, int config,writel (0 , pmu->base + reg); val =CNTL_EN |CNTL_CLEAR ; val |=FIELD_PREP (CNTL_CSV_MASK , config); + +/* +* On i.MX8MP we need to bias the cycle counter to overflow more often. +* We do this by initializing bits [23:16] of the counter value via the +* COUNTER_CTRL Counter Parameter (CP) field. +*/ +if (pmu->devtype_data->quirks &DDR_CAP_AXI_ID_FILTER_ENHANCED ) { +if (counter ==EVENT_CYCLES_COUNTER ) + val |=FIELD_PREP (CNTL_CP_MASK ,0xf0 ); + } +writel (val, pmu->base + reg); }else {/* Disable counter */
@@ -468,6 +483,12 @@ static void ddr_perf_event_update(struct perf_event *event)int ret; new_raw_count =ddr_perf_read_counter (pmu, counter); +/* Remove the bias applied in ddr_perf_counter_enable(). */ +if (pmu->devtype_data->quirks &DDR_CAP_AXI_ID_FILTER_ENHANCED ) { +if (counter ==EVENT_CYCLES_COUNTER ) + new_raw_count &=CYCLES_COUNTER_MASK ; + } +local64_add (new_raw_count, &event->count);/*
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 11/139 hw_breakpoint: fix single-stepping when using bpf_overflow_handler
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tomislav Novak <[email protected]>
[ Upstream commit d11a69873d9a7435fe6a48531e165ab80a8b1221 ]
Arm platforms use is_default_overflow_handler() to determine if the hw_breakpoint code should single-step over the breakpoint trigger or let the custom handler deal with it.
Since bpf_overflow_handler() currently isn't recognized as a default handler, attaching a BPF program to a PERF_TYPE_BREAKPOINT event causes it to keep firing (the instruction triggering the data abort exception is never skipped). For example:
# bpftrace -e 'watchpoint:0x10000:4:w { print("hit") }' -c ./test
Attaching 1 probe...
hit
hit
[...]
^C(./test performs a single 4-byte store to 0x10000)
This patch replaces the check with uses_default_overflow_handler(), which accounts for the bpf_overflow_handler() case by also testing if one of the perf_event_output functions gets invoked indirectly, via orig_default_handler.
--- arch/arm/kernel/hw_breakpoint.c | 8 ++++---- arch/arm64/kernel/hw_breakpoint.c | 4 ++-- include/linux/perf_event.h | 22 +++++++++++++++++++--- 3 files changed, 25 insertions(+), 9 deletions(-)
arch/arm/kernel/hw_breakpoint.c +4 -4
@@ -626,7 +626,7 @@ int hw_breakpoint_arch_parse(struct perf_event *bp, hw->address &= ~alignment_mask; hw->ctrl.len <<= offset; -if (is_default_overflow_handler (bp)) { +if (uses_default_overflow_handler (bp)) {/* * Mismatch breakpoints are required for single-stepping * breakpoints.
@@ -798,7 +798,7 @@ static void watchpoint_handler(unsigned long addr, unsigned int fsr,* Otherwise, insert a temporary mismatch breakpoint so that * we can single-step over the watchpoint trigger. */ -if (!is_default_overflow_handler (wp)) +if (!uses_default_overflow_handler (wp))continue ; step:enable_single_step (wp,instruction_pointer (regs));
@@ -811,7 +811,7 @@ static void watchpoint_handler(unsigned long addr, unsigned int fsr, info->trigger = addr;pr_debug ("watchpoint fired: address = 0x%x\n" , info->trigger);perf_bp_event (wp, regs); -if (is_default_overflow_handler (wp)) +if (uses_default_overflow_handler (wp))enable_single_step (wp,instruction_pointer (regs)); }
@@ -886,7 +886,7 @@ static void breakpoint_handler(unsigned long unknown, struct pt_regs *regs) info->trigger = addr;pr_debug ("breakpoint fired: address = 0x%x\n" , addr);perf_bp_event (bp, regs); -if (is_default_overflow_handler (bp)) +if (uses_default_overflow_handler (bp))enable_single_step (bp, addr); goto unlock; }
arch/arm64/kernel/hw_breakpoint.c +2 -2
@@ -654,7 +654,7 @@ static int breakpoint_handler(unsigned long unused, unsigned long esr,perf_bp_event (bp, regs);/* Do we need to handle the stepping? */ -if (is_default_overflow_handler (bp)) +if (uses_default_overflow_handler (bp)) step =1 ; unlock:rcu_read_unlock ();
@@ -733,7 +733,7 @@ static u64 get_distance_from_watchpoint(unsigned long addr, u64 val,static int watchpoint_report (struct perf_event *wp,unsigned long addr,struct pt_regs *regs) { -int step =is_default_overflow_handler (wp); +int step =uses_default_overflow_handler (wp);struct arch_hw_breakpoint *info =counter_arch_bp (wp); info->trigger = addr;
include/linux/perf_event.h +19 -3
@@ -1139,15 +1139,31 @@ extern int perf_event_output(struct perf_event *event, struct pt_regs *regs);static inline bool -is_default_overflow_handler (struct perf_event *event) +__is_default_overflow_handler (perf_overflow_handler_t overflow_handler) { -if (likely (event->overflow_handler == perf_event_output_forward)) +if (likely (overflow_handler == perf_event_output_forward))return true; -if (unlikely (event->overflow_handler == perf_event_output_backward)) +if (unlikely (overflow_handler == perf_event_output_backward))return true;return false; } +#define is_default_overflow_handler (event) \ + __is_default_overflow_handler((event)->overflow_handler) + +#ifdef CONFIG_BPF_SYSCALL +static inline bool uses_default_overflow_handler (struct perf_event *event) +{ +if (likely (is_default_overflow_handler (event))) +return true; + +return __is_default_overflow_handler (event->orig_overflow_handler); +} +#else +#define uses_default_overflow_handler (event) \ + is_default_overflow_handler(event) +#endif + extern void perf_event_header__init_id(struct perf_event_header *header, struct perf_sample_data *data,
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 12/139 ACPI: x86: s2idle: Catch multiple ACPI_TYPE_PACKAGE objects
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mario Limonciello <[email protected]>
[ Upstream commit 883cf0d4cf288313b71146ddebdf5d647b76c78b ]
If a badly constructed firmware includes multiple ACPI_TYPE_PACKAGE objects while evaluating the AMD LPS0 _DSM, there will be a memory leak. Explicitly guard against this.
--- drivers/acpi/x86/s2idle.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/acpi/x86/s2idle.c +6 -0
@@ -112,6 +112,12 @@ static void lpi_device_get_constraints_amd(void)union acpi_object *package = &out_obj->package.elements[i];if (package->type ==ACPI_TYPE_PACKAGE ) { +if (lpi_constraints_table) { +acpi_handle_err (lps0_device_handle, +"Duplicate constraints list\n" ); + goto free_acpi_buffer; + } + lpi_constraints_table =kcalloc (package->package.count,sizeof (*lpi_constraints_table),GFP_KERNEL );
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 13/139 selftests/nolibc: fix up kernel parameters support
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhangjin Wu <[email protected]>
[ Upstream commit c388c9920da2679f62bec48d00ca9e80e9d0a364 ]
kernel parameters allow pass two types of strings, one type is like 'noapic', another type is like 'panic=5', the first type is passed as arguments of the init program, the second type is passed as environment variables of the init program.
when users pass kernel parameters like this:
noapic NOLIBC_TEST=syscall
our nolibc-test program will use the test setting from argv[1] and ignore the one from NOLIBC_TEST environment variable, and at last, it will print the following line and ignore the whole test setting.
Ignoring unknown test name 'noapic'
reversing the parsing order does solve the above issue:
test = getenv("NOLIBC_TEST");
if (test)
test = argv[1];but it still doesn't work with such kernel parameters (without NOLIBC_TEST environment variable):
noapic FOO=bar
To support all of the potential kernel parameters, let's verify the test setting from both of argv[1] and NOLIBC_TEST environment variable.
--- tools/testing/selftests/nolibc/nolibc-test.c | 33 ++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-)
tools/testing/selftests/nolibc/nolibc-test.c +31 -2
@@ -630,6 +630,35 @@ static struct test test_names[] = { { 0 } }; +int is_setting_valid (char *test) +{ +int idx, len, test_len, valid =0 ; +char delimiter; + +if (!test) +return valid; + + test_len =strlen (test); + +for (idx =0 ; test_names[idx].name; idx++) { + len =strlen (test_names[idx].name); +if (test_len < len) +continue ; + +if (strncmp (test, test_names[idx].name, len) !=0 ) +continue ; + + delimiter = test[len]; +if (delimiter !=':' && delimiter !=',' && delimiter !='\0' ) +continue ; + + valid =1 ; +break ; + } + +return valid; +} +int main (int argc,char **argv,char **envp) {int min =0 ;
@@ -655,10 +684,10 @@ int main(int argc, char **argv, char **envp)* syscall:5-15[:.*],stdlib:8-10 */ test = argv[1 ]; -if (!test) +if (!is_setting_valid (test)) test =getenv ("NOLIBC_TEST" ); -if (test) { +if (is_setting_valid (test)) {char *comma, *colon, *dash, *value; do {
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 14/139 devlink: remove reload failed checks in params get/set callbacks
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiri Pirko <[email protected]>
[ Upstream commit 633d76ad01ad0321a1ace3e5cc4fed06753d7ac4 ]
The checks in question were introduced by:
commit 6b4db2e528f6 ("devlink: Fix use-after-free after a failed reload"). That fixed an issue of reload with mlxsw driver.
Back then, that was a valid fix, because there was a limitation in place that prevented drivers from registering/unregistering params when devlink instance was registered.
It was possible to do the fix differently by changing drivers to register/unregister params in appropriate places making sure the ops operate only on memory which is allocated and initialized. But that, as a dependency, would require to remove the limitation mentioned above.
Eventually, this limitation was lifted by:
commit 1d18bb1a4ddd ("devlink: allow registering parameters after the instance")
Also, the alternative fix (which also fixed another issue) was done by:
commit 74cbc3c03c82 ("mlxsw: spectrum_acl_tcam: Move devlink param to TCAM code").
Therefore, the checks are no longer relevant. Each driver should make sure to have the params registered only when the memory the ops are working with is allocated and initialized.
So remove the checks.
--- net/devlink/leftover.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
net/devlink/leftover.c +2 -2
@@ -5218,7 +5218,7 @@ static int devlink_param_get(struct devlink *devlink, const struct devlink_param *param, struct devlink_param_gset_ctx *ctx) { - if (!param->get || devlink->reload_failed) + if (!param->get) return -EOPNOTSUPP;return param->get (devlink, param->id, ctx); }
@@ -5227,7 +5227,7 @@ static int devlink_param_set(struct devlink *devlink, const struct devlink_param *param, struct devlink_param_gset_ctx *ctx) { - if (!param->set || devlink->reload_failed) + if (!param->set) return -EOPNOTSUPP;return param->set (devlink, param->id, ctx); }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 15/139 crypto: lrw,xts - Replace strlcpy with strscpy
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Azeem Shaikh <[email protected]>
[ Upstream commit babb80b3ecc6f40c962e13c654ebcd27f25ee327 ]
strlcpy() reads the entire source buffer first. This read may exceed the destination size limit. This is both inefficient and can lead to linear read overflows if a source string is not NUL-terminated [1]. In an effort to remove strlcpy() completely [2], replace strlcpy() here with strscpy().
Direct replacement is safe here since return value of -errno is used to check for truncation instead of sizeof(dest).
[1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
[2] https://github.com/KSPP/linux/issues/89
--- crypto/lrw.c | 6 +++--- crypto/xts.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-)
crypto/lrw.c +3 -3
@@ -357,10 +357,10 @@ static int lrw_create(struct crypto_template *tmpl, struct rtattr **tb)* cipher name. */ if (!strncmp (cipher_name,"ecb(" ,4 )) { -unsigned len; +int len; - len =strlcpy (ecb_name, cipher_name +4 ,sizeof (ecb_name)); -if (len <2 || len >=sizeof (ecb_name)) + len =strscpy (ecb_name, cipher_name +4 ,sizeof (ecb_name)); +if (len <2 ) goto err_free_inst;if (ecb_name[len -1 ] !=')' )
crypto/xts.c +3 -3
@@ -396,10 +396,10 @@ static int xts_create(struct crypto_template *tmpl, struct rtattr **tb)* cipher name. */ if (!strncmp (cipher_name,"ecb(" ,4 )) { -unsigned len; +int len; - len =strlcpy (ctx->name, cipher_name +4 ,sizeof (ctx->name)); -if (len <2 || len >=sizeof (ctx->name)) + len =strscpy (ctx->name, cipher_name +4 ,sizeof (ctx->name)); +if (len <2 ) goto err_free_inst;if (ctx->name[len -1 ] !=')' )
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 16/139 ice: Dont tx before switchdev is fully configured
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wojciech Drewek <[email protected]>
[ Upstream commit 7aa529a69e92b9aff585e569d5003f7c15d8d60b ]
There is possibility that ice_eswitch_port_start_xmit might be called while some resources are still not allocated which might cause NULL pointer dereference. Fix this by checking if switchdev configuration was finished.
--- drivers/net/ethernet/intel/ice/ice_eswitch.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/net/ethernet/intel/ice/ice_eswitch.c +3 -0
@@ -361,6 +361,9 @@ ice_eswitch_port_start_xmit(struct sk_buff *skb, struct net_device *netdev) np =netdev_priv (netdev); vsi = np->vsi; +if (!vsi || !ice_is_switchdev_running (vsi->back)) +return NETDEV_TX_BUSY ; +if (ice_is_reset_in_progress (vsi->back->state) ||test_bit (ICE_VF_DIS , vsi->back->state))return NETDEV_TX_BUSY ;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 17/139 wifi: ath9k: fix fortify warnings
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Antipov <[email protected]>
[ Upstream commit 810e41cebb6c6e394f2068f839e1a3fc745a5dcc ]
When compiling with gcc 13.1 and CONFIG_FORTIFY_SOURCE=y, I've noticed the following:
In function ‘fortify_memcpy_chk’,
inlined from ‘ath_tx_complete_aggr’ at drivers/net/wireless/ath/ath9k/xmit.c:556:4, inlined from ‘ath_tx_process_buffer’ at drivers/net/wireless/ath/ath9k/xmit.c:773:3:./include/linux/fortify-string.h:529:25: warning: call to ‘__read_overflow2_field’ declared with attribute warning: detected read beyond size of field (2nd parameter); maybe use struct_group()? [-Wattribute-warning]
529 | __read_overflow2_field(q_size_field, size);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~In function ‘fortify_memcpy_chk’,
inlined from ‘ath_tx_count_frames’ at drivers/net/wireless/ath/ath9k/xmit.c:473:3, inlined from ‘ath_tx_complete_aggr’ at drivers/net/wireless/ath/ath9k/xmit.c:572:2, inlined from ‘ath_tx_process_buffer’ at drivers/net/wireless/ath/ath9k/xmit.c:773:3:./include/linux/fortify-string.h:529:25: warning: call to ‘__read_overflow2_field’ declared with attribute warning: detected read beyond size of field (2nd parameter); maybe use struct_group()? [-Wattribute-warning]
529 | __read_overflow2_field(q_size_field, size);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~In both cases, the compiler complains on:
memcpy(ba, &ts->ba_low, WME_BA_BMP_SIZE >> 3);
which is the legal way to copy both 'ba_low' and following 'ba_high' members of 'struct ath_tx_status' at once (that is, issue one 8-byte 'memcpy()' for two 4-byte fields). Since the fortification logic seems interprets this trick as an attempt to overread 4-byte 'ba_low', silence relevant warnings by using the convenient 'struct_group()' quirk.
--- drivers/net/wireless/ath/ath9k/mac.h | 6 ++++-- drivers/net/wireless/ath/ath9k/xmit.c | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-)
drivers/net/wireless/ath/ath9k/mac.h +4 -2
@@ -115,8 +115,10 @@ struct ath_tx_status {u8 qid;u16 desc_id;u8 tid; -u32 ba_low; -u32 ba_high; +struct_group (ba, + u32 ba_low; + u32 ba_high; + );u32 evm0;u32 evm1;u32 evm2;
drivers/net/wireless/ath/ath9k/xmit.c +2 -2
@@ -462,7 +462,7 @@ static void ath_tx_count_frames(struct ath_softc *sc, struct ath_buf *bf, isaggr =bf_isaggr (bf);if (isaggr) { seq_st = ts->ts_seqnum; -memcpy (ba, &ts->ba_low,WME_BA_BMP_SIZE >>3 ); +memcpy (ba, &ts->ba,WME_BA_BMP_SIZE >>3 ); }while (bf) {
@@ -545,7 +545,7 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,if (isaggr && txok) {if (ts->ts_flags &ATH9K_TX_BA ) { seq_st = ts->ts_seqnum; -memcpy (ba, &ts->ba_low,WME_BA_BMP_SIZE >>3 ); +memcpy (ba, &ts->ba,WME_BA_BMP_SIZE >>3 ); }else {/* * AR5416 can become deaf/mute when BA
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 18/139 wifi: ath9k: fix printk specifier
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dongliang Mu <[email protected]>
[ Upstream commit 061115fbfb2ce5870c9a004d68dc63138c07c782 ]
Smatch reports:
ath_pci_probe() warn: argument 4 to %lx specifier is cast from pointer ath_ahb_probe() warn: argument 4 to %lx specifier is cast from pointer
Fix it by modifying %lx to %p in the printk format string.
Note that with this change, the pointer address will be printed as a hashed value by default. This is appropriate because the kernel should not leak kernel pointers to user space in an informational message. If someone wants to see the real address for debugging purposes, this can be achieved with the no_hash_pointers kernel option.
--- drivers/net/wireless/ath/ath9k/ahb.c | 4 ++-- drivers/net/wireless/ath/ath9k/pci.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
drivers/net/wireless/ath/ath9k/ahb.c +2 -2
@@ -132,8 +132,8 @@ static int ath_ahb_probe(struct platform_device *pdev) ah = sc->sc_ah;ath9k_hw_name (ah, hw_name,sizeof (hw_name)); -wiphy_info (hw->wiphy,"%s mem=0x%lx, irq=%d\n" , - hw_name, (unsigned long )mem, irq); +wiphy_info (hw->wiphy,"%s mem=0x%p, irq=%d\n" , + hw_name, mem, irq);return 0 ;
drivers/net/wireless/ath/ath9k/pci.c +2 -2
@@ -988,8 +988,8 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) sc->sc_ah->msi_reg =0 ;ath9k_hw_name (sc->sc_ah, hw_name,sizeof (hw_name)); -wiphy_info (hw->wiphy,"%s mem=0x%lx, irq=%d\n" , - hw_name, (unsigned long )sc->mem, pdev->irq); +wiphy_info (hw->wiphy,"%s mem=0x%p, irq=%d\n" , + hw_name, sc->mem, pdev->irq);return 0 ;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 19/139 wifi: mwifiex: fix fortify warning
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Antipov <[email protected]>
[ Upstream commit dcce94b80a954a8968ff29fafcfb066d6197fa9a ]
When compiling with gcc 13.1 and CONFIG_FORTIFY_SOURCE=y, I've noticed the following:
In function ‘fortify_memcpy_chk’,
inlined from ‘mwifiex_construct_tdls_action_frame’ at drivers/net/wireless/marvell/mwifiex/tdls.c:765:3, inlined from ‘mwifiex_send_tdls_action_frame’ at drivers/net/wireless/marvell/mwifiex/tdls.c:856:6:./include/linux/fortify-string.h:529:25: warning: call to ‘__read_overflow2_field’ declared with attribute warning: detected read beyond size of field (2nd parameter);
maybe use struct_group()? [-Wattribute-warning]
529 | __read_overflow2_field(q_size_field, size);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~The compiler actually complains on:
memmove(pos + ETH_ALEN, &mgmt->u.action.category,
sizeof(mgmt->u.action.u.tdls_discover_resp));
and it happens because the fortification logic interprets this as an attempt to overread 1-byte 'u.action.category' member of 'struct ieee80211_mgmt'. To silence this warning, it's enough to pass an address of 'u.action' itself instead of an address of its first member.
This also fixes an improper usage of 'sizeof()'. Since 'skb' is extended with 'sizeof(mgmt->u.action.u.tdls_discover_resp) + 1' bytes (where 1 is actually 'sizeof(mgmt->u.action.category)'), I assume that the same number of bytes should be copied.
--- drivers/net/wireless/marvell/mwifiex/tdls.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
drivers/net/wireless/marvell/mwifiex/tdls.c +6 -3
@@ -735,6 +735,7 @@ mwifiex_construct_tdls_action_frame(struct mwifiex_private *priv,int ret;u16 capab;struct ieee80211_ht_cap *ht_cap; +unsigned int extra;u8 radio, *pos; capab = priv->curr_bss_params.bss_descriptor.cap_info_bitmap;
@@ -753,7 +754,10 @@ mwifiex_construct_tdls_action_frame(struct mwifiex_private *priv,switch (action_code) {case WLAN_PUB_ACTION_TDLS_DISCOVER_RES : -skb_put (skb,sizeof (mgmt->u.action.u.tdls_discover_resp) +1 ); +/* See the layout of 'struct ieee80211_mgmt'. */ + extra =sizeof (mgmt->u.action.u.tdls_discover_resp) + +sizeof (mgmt->u.action.category); +skb_put (skb, extra); mgmt->u.action.category =WLAN_CATEGORY_PUBLIC ; mgmt->u.action.u.tdls_discover_resp.action_code =WLAN_PUB_ACTION_TDLS_DISCOVER_RES ;
@@ -762,8 +766,7 @@ mwifiex_construct_tdls_action_frame(struct mwifiex_private *priv, mgmt->u.action.u.tdls_discover_resp.capability =cpu_to_le16 (capab);/* move back for addr4 */ -memmove (pos +ETH_ALEN , &mgmt->u.action.category, -sizeof (mgmt->u.action.u.tdls_discover_resp)); +memmove (pos +ETH_ALEN , &mgmt->u.action, extra);/* init address 4 */ eth_broadcast_addr (pos);
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 2/139 btrfs: output extra debug info if we failed to find an inline backref
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qu Wenruo <[email protected]>
[ Upstream commit 7f72f50547b7af4ddf985b07fc56600a4deba281 ]
[BUG]
Syzbot reported several warning triggered insidelookup_inline_extent_backref().
[CAUSE]
As usual, the reproducer doesn't reliably trigger locally here, but at least we know the WARN_ON() is triggered when an inline backref can not be found, and it can only be triggered when @insert is true. (I.e. inserting a new inline backref, which means the backref should already exist)
[ENHANCEMENT]
After the WARN_ON(), dump all the parameters and the extent tree leaf to help debug.
--- fs/btrfs/extent-tree.c | 5 +++++ 1 file changed, 5 insertions(+)
fs/btrfs/extent-tree.c +5 -0
@@ -863,6 +863,11 @@ int lookup_inline_extent_backref(struct btrfs_trans_handle *trans, err = -ENOENT ; goto out; }else if (WARN_ON (ret)) { +btrfs_print_leaf (path->nodes[0 ]); +btrfs_err (fs_info, +"extent item not found for insert, bytenr %llu num_bytes %llu parent %llu root_objectid %llu owner %llu offset %llu" , + bytenr, num_bytes, parent, root_objectid, owner, + offset); err = -EIO ; goto out; }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 20/139 mt76: mt7921: dont assume adequate headroom for SDIO headers
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matt Whitlock <[email protected]>
[ Upstream commit 98c4d0abf5c478db1ad126ff0c187dbb84c0803c ]
mt7921_usb_sdio_tx_prepare_skb() calls mt7921_usb_sdio_write_txwi() and mt7921_skb_add_usb_sdio_hdr(), both of which blindly assume that adequate headroom will be available in the passed skb. This assumption typically is satisfied when the skb was allocated in the net core for transmission via the mt7921 netdev (although even that is only an optimization and is not strictly guaranteed), but the assumption is sometimes not satisfied when the skb originated in the receive path of another netdev and was passed through to the mt7921, such as by the bridge layer. Blindly prepending bytes to an skb is always wrong.
This commit introduces a call to skb_cow_head() before the call to mt7921_usb_sdio_write_txwi() in mt7921_usb_sdio_tx_prepare_skb() to ensure that at least MT_SDIO_TXD_SIZE + MT_SDIO_HDR_SIZE bytes can be pushed onto the skb.
Without this fix, I can trivially cause kernel panics by bridging an MT7921AU-based USB 802.11ax interface with an Ethernet interface on an Intel Atom-based x86 system using its onboard RTL8169 PCI Ethernet adapter and also on an ARM-based Raspberry Pi 1 using its onboard SMSC9512 USB Ethernet adapter. Note that the panics do not occur in every system configuration, as they occur only if the receiving netdev leaves less headroom in its received skbs than the mt7921 needs for its SDIO headers.
Here is an example stack trace of this panic on Raspberry Pi OS Lite 2023-02-21 running kernel 6.1.24+ [1]:
skb_panic from skb_push+0x44/0x48
skb_push from mt7921_usb_sdio_tx_prepare_skb+0xd4/0x190 [mt7921_common] mt7921_usb_sdio_tx_prepare_skb [mt7921_common] from mt76u_tx_queue_skb+0x94/0x1d0 [mt76_usb] mt76u_tx_queue_skb [mt76_usb] from __mt76_tx_queue_skb+0x4c/0xc8 [mt76] __mt76_tx_queue_skb [mt76] from mt76_txq_schedule.part.0+0x13c/0x398 [mt76] mt76_txq_schedule.part.0 [mt76] from mt76_txq_schedule_all+0x24/0x30 [mt76] mt76_txq_schedule_all [mt76] from mt7921_tx_worker+0x58/0xf4 [mt7921_common] mt7921_tx_worker [mt7921_common] from __mt76_worker_fn+0x9c/0xec [mt76] __mt76_worker_fn [mt76] from kthread+0xbc/0xe0
kthread from ret_from_fork+0x14/0x34
After this fix, bridging the mt7921 interface works fine on both of my previously problematic systems.
[1] https://github.com/raspberrypi/firmware/tree/5c276f55a4b21345cd4d6200a504ee991851ff7a
--- drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/net/wireless/mediatek/mt76/mt7921/mac.c +4 -0
@@ -1167,6 +1167,10 @@ int mt7921_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,if (unlikely (tx_info->skb->len <=ETH_HLEN ))return -EINVAL ; + err =skb_cow_head (skb,MT_SDIO_TXD_SIZE +MT_SDIO_HDR_SIZE ); +if (err) +return err; +if (!wcid) wcid = &dev->mt76.global_wcid;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 21/139 wifi: wil6210: fix fortify warnings
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Antipov <[email protected]>
[ Upstream commit 1ad8237e971630c66a1a6194491e0837b64d00e0 ]
When compiling with gcc 13.1 and CONFIG_FORTIFY_SOURCE=y, I've noticed the following:
In function ‘fortify_memcpy_chk’,
inlined from ‘wil_rx_crypto_check_edma’ at drivers/net/wireless/ath/wil6210/txrx_edma.c:566:2:./include/linux/fortify-string.h:529:25: warning: call to ‘__read_overflow2_field’ declared with attribute warning: detected read beyond size of field (2nd parameter); maybe use struct_group()? [-Wattribute-warning]
529 | __read_overflow2_field(q_size_field, size);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~where the compiler complains on:
const u8 *pn;
...
pn = (u8 *)&st->ext.pn_15_0;
...memcpy(cc->pn, pn, IEEE80211_GCMP_PN_LEN);
and:
In function ‘fortify_memcpy_chk’,
inlined from ‘wil_rx_crypto_check’ at drivers/net/wireless/ath/wil6210/txrx.c:684:2:./include/linux/fortify-string.h:529:25: warning: call to ‘__read_overflow2_field’ declared with attribute warning: detected read beyond size of field (2nd parameter); maybe use struct_group()? [-Wattribute-warning]
529 | __read_overflow2_field(q_size_field, size);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~where the compiler complains on:
const u8 *pn = (u8 *)&d->mac.pn_15_0;
...memcpy(cc->pn, pn, IEEE80211_GCMP_PN_LEN);
In both cases, the fortification logic interprets 'memcpy()' as 6-byte overread of 2-byte field 'pn_15_0' of 'struct wil_rx_status_extension' and 'pn_15_0' of 'struct vring_rx_mac', respectively. To silence these warnings, last two fields of the aforementioned structures are grouped using 'struct_group_attr(pn, __packed' quirk.
--- drivers/net/wireless/ath/wil6210/txrx.c | 2 +- drivers/net/wireless/ath/wil6210/txrx.h | 6 ++++-- drivers/net/wireless/ath/wil6210/txrx_edma.c | 2 +- drivers/net/wireless/ath/wil6210/txrx_edma.h | 6 ++++-- 4 files changed, 10 insertions(+), 6 deletions(-)
drivers/net/wireless/ath/wil6210/txrx.c +1 -1
@@ -666,7 +666,7 @@ static int wil_rx_crypto_check(struct wil6210_priv *wil, struct sk_buff *skb)struct wil_tid_crypto_rx *c = mc ? &s->group_crypto_rx : &s->tid_crypto_rx[tid];struct wil_tid_crypto_rx_single *cc = &c->key_id[key_id]; -const u8 *pn = (u8 *)&d->mac.pn_15_0; +const u8 *pn = (u8 *)&d->mac.pn;if (!cc->key_set) { wil_err_ratelimited(wil,
drivers/net/wireless/ath/wil6210/txrx.h +4 -2
@@ -343,8 +343,10 @@ struct vring_rx_mac {u32 d0;u32 d1;u16 w4; -u16 pn_15_0; -u32 pn_47_16; +struct_group_attr (pn, __packed, + u16 pn_15_0; + u32 pn_47_16; + ); } __packed;/* Rx descriptor - DMA part
drivers/net/wireless/ath/wil6210/txrx_edma.c +1 -1
@@ -548,7 +548,7 @@ static int wil_rx_crypto_check_edma(struct wil6210_priv *wil, s = &wil->sta[cid]; c = mc ? &s->group_crypto_rx : &s->tid_crypto_rx[tid]; cc = &c->key_id[key_id]; - pn = (u8 *)&st->ext.pn_15_0; + pn = (u8 *)&st->ext.pn;if (!cc->key_set) { wil_err_ratelimited(wil,
drivers/net/wireless/ath/wil6210/txrx_edma.h +4 -2
@@ -330,8 +330,10 @@ struct wil_rx_status_extension {u32 d0;u32 d1;__le16 seq_num;/* only lower 12 bits */ -u16 pn_15_0; -u32 pn_47_16; +struct_group_attr (pn, __packed, + u16 pn_15_0; + u32 pn_47_16; + ); } __packed;struct wil_rx_status_extended {
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 22/139 can: sun4i_can: Add acceptance register quirk
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Watts <[email protected]>
[ Upstream commit 8cda0c6dfd42ee6f2586e7dffb553aaf1fcb62ca ]
The Allwinner D1's CAN controllers have the ACPC and ACPM registers moved down. Compensate for this by adding an offset quirk for the acceptance registers.
--- drivers/net/can/sun4i_can.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
drivers/net/can/sun4i_can.c +8 -2
@@ -205,9 +205,11 @@* struct sun4ican_quirks - Differences between SoC variants. * * @has_reset: SoC needs reset deasserted. +* @acp_offset: Offset of ACPC and ACPM registers */ struct sun4ican_quirks {bool has_reset; +int acp_offset; };struct sun4ican_priv {
@@ -216,6 +218,7 @@ struct sun4ican_priv {struct clk *clk;struct reset_control *reset;spinlock_t cmdreg_lock;/* lock for concurrent cmd register writes */ +int acp_offset; };static const struct can_bittiming_const sun4ican_bittiming_const = {
@@ -338,8 +341,8 @@ static int sun4i_can_start(struct net_device *dev) }/* set filters - we accept all */ -writel (0x00000000 , priv->base +SUN4I_REG_ACPC_ADDR ); -writel (0xFFFFFFFF , priv->base +SUN4I_REG_ACPM_ADDR ); +writel (0x00000000 , priv->base +SUN4I_REG_ACPC_ADDR + priv->acp_offset); +writel (0xFFFFFFFF , priv->base +SUN4I_REG_ACPM_ADDR + priv->acp_offset);/* clear error counters and error code capture */ writel (0 , priv->base +SUN4I_REG_ERRC_ADDR );
@@ -768,10 +771,12 @@ static const struct ethtool_ops sun4ican_ethtool_ops = {static const struct sun4ican_quirks sun4ican_quirks_a10 = { .has_reset = false, + .acp_offset =0 , };static const struct sun4ican_quirks sun4ican_quirks_r40 = { .has_reset = true, + .acp_offset =0 , };static const struct of_device_id sun4ican_of_match[] = {
@@ -872,6 +877,7 @@ static int sun4ican_probe(struct platform_device *pdev) priv->base = addr; priv->clk = clk; priv->reset = reset; + priv->acp_offset = quirks->acp_offset;spin_lock_init (&priv->cmdreg_lock);platform_set_drvdata (pdev, dev);
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 23/139 can: sun4i_can: Add support for the Allwinner D1
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Watts <[email protected]>
[ Upstream commit 8abb95250ae6af2d51993da8fcae18da2ce24cc4 ]
The controllers present in the D1 are extremely similar to the R40 and require the same reset quirks, but An extra quirk is needed to support receiving packets.
--- drivers/net/can/Kconfig | 4 ++-- drivers/net/can/sun4i_can.c | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-)
drivers/net/can/Kconfig +2 -2
@@ -174,10 +174,10 @@ config CAN_SLCAN config CAN_SUN4I tristate "Allwinner A10 CAN controller" - depends on MACH_SUN4I || MACH_SUN7I || COMPILE_TEST + depends on MACH_SUN4I || MACH_SUN7I || RISCV || COMPILE_TEST help Say Y here if you want to use CAN controller found on Allwinner - A10/A20 SoCs. + A10/A20/D1 SoCs. To compile this driver as a module, choose M here: the module will be called sun4i_can.
drivers/net/can/sun4i_can.c +11 -1
@@ -91,6 +91,8 @@#define SUN4I_REG_BUF12_ADDR 0x0070/* CAN Tx/Rx Buffer 12 */ #define SUN4I_REG_ACPC_ADDR 0x0040/* CAN Acceptance Code 0 */ #define SUN4I_REG_ACPM_ADDR 0x0044/* CAN Acceptance Mask 0 */ +#define SUN4I_REG_ACPC_ADDR_D1 0x0028/* CAN Acceptance Code 0 on the D1 */ +#define SUN4I_REG_ACPM_ADDR_D1 0x002C/* CAN Acceptance Mask 0 on the D1 */ #define SUN4I_REG_RBUF_RBACK_START_ADDR 0x0180/* CAN transmit buffer start */ #define SUN4I_REG_RBUF_RBACK_END_ADDR 0x01b0/* CAN transmit buffer end */
@@ -779,6 +781,11 @@ static const struct sun4ican_quirks sun4ican_quirks_r40 = { .acp_offset = 0, }; +static const struct sun4ican_quirks sun4ican_quirks_d1 = { + .has_reset = true, + .acp_offset = (SUN4I_REG_ACPC_ADDR_D1 -SUN4I_REG_ACPC_ADDR ), +}; +static const struct of_device_id sun4ican_of_match[] = { { .compatible ="allwinner,sun4i-a10-can" ,
@@ -789,6 +796,9 @@ static const struct of_device_id sun4ican_of_match[] = { }, { .compatible = "allwinner,sun8i-r40-can", .data = &sun4ican_quirks_r40 + }, { + .compatible = "allwinner,sun20i-d1-can", + .data = &sun4ican_quirks_d1 }, {/* sentinel */ },
@@ -915,4 +925,4 @@ module_platform_driver(sun4i_can_driver);MODULE_AUTHOR ("Peter Chen <[email protected]>" );MODULE_AUTHOR ("Gerhard Bertelsmann <[email protected]>" );MODULE_LICENSE ("Dual BSD/GPL" ); -MODULE_DESCRIPTION ("CAN driver for Allwinner SoCs (A10/A20)" ); +MODULE_DESCRIPTION ("CAN driver for Allwinner SoCs (A10/A20/D1)" );
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 24/139 net: Use sockaddr_storage for getsockopt(SO_PEERNAME).
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kuniyuki Iwashima <[email protected]>
[ Upstream commit 8936bf53a091ad6a34b480c22002f1cb2422ab38 ]
Commit df8fc4e934c1 ("kbuild: Enable -fstrict-flex-arrays=3") started applying strict rules to standard string functions.
It does not work well with conventional socket code around each protocol- specific sockaddr_XXX struct, which is cast from sockaddr_storage and has a bigger size than fortified functions expect. See these commits:
commit 06d4c8a80836 ("af_unix: Fix fortify_panic() in unix_bind_bsd().") commit ecb4534b6a1c ("af_unix: Terminate sun_path when bind()ing pathname socket.") commit a0ade8404c3b ("af_packet: Fix warning of fortified memcpy() in packet_getname().")
We must cast the protocol-specific address back to sockaddr_storage to call such functions.
However, in the case of getsockaddr(SO_PEERNAME), the rationale is a bit unclear as the buffer is defined by char[128] which is the same size as sockaddr_storage.
Let's use sockaddr_storage explicitly.
--- net/core/sock.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
net/core/sock.c +3 -3
@@ -1774,14 +1774,14 @@ int sk_getsockopt(struct sock *sk, int level, int optname,case SO_PEERNAME : { -char address[128 ]; +struct sockaddr_storage address; - lv = sock->ops->getname (sock, (struct sockaddr *)address,2 ); + lv = sock->ops->getname (sock, (struct sockaddr *)&address,2 );if (lv <0 )return -ENOTCONN ;if (lv < len)return -EINVAL ; -if (copy_to_sockptr (optval, address, len)) +if (copy_to_sockptr (optval, &address, len))return -EFAULT ; goto lenout; }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 25/139 net/ipv4: return the real errno instead of -EINVAL
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: xu xin <[email protected]>
[ Upstream commit c67180efc507e04a87f22aa68bd7dd832db006b7 ]
For now, No matter what error pointer ip_neigh_for_gw() returns, ip_finish_output2() always return -EINVAL, which may mislead the upper users.
For exemple, an application uses sendto to send an UDP packet, but when the neighbor table overflows, sendto() will get a value of -EINVAL, and it will cause users to waste a lot of time checking parameters for errors.
Return the real errno instead of -EINVAL.
--- net/ipv4/ip_output.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/ipv4/ip_output.c +1 -1
@@ -234,7 +234,7 @@ static int ip_finish_output2(struct net *net, struct sock *sk, struct sk_buff *snet_dbg_ratelimited ("%s: No header cache and no neighbour!\n" , __func__);kfree_skb_reason (skb,SKB_DROP_REASON_NEIGH_CREATEFAIL ); -return -EINVAL ; +return PTR_ERR (neigh); } static int ip_finish_output_gso(struct net *net, struct sock *sk,
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 26/139 crypto: lib/mpi - avoid null pointer deref in mpi_cmp_ui()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark O'Donovan <[email protected]>
[ Upstream commit 9e47a758b70167c9301d2b44d2569f86c7796f2d ]
During NVMeTCP Authentication a controller can trigger a kernel oops by specifying the 8192 bit Diffie Hellman group and passing a correctly sized, but zeroed Diffie Hellamn value. mpi_cmp_ui() was detecting this if the second parameter was 0, but 1 is passed from dh_is_pubkey_valid(). This causes the null pointer u->d to be dereferenced towards the end of mpi_cmp_ui()
--- lib/mpi/mpi-cmp.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
lib/mpi/mpi-cmp.c +6 -2
@@ -25,8 +25,12 @@ int mpi_cmp_ui(MPI u, unsigned long v)mpi_limb_t limb = v;mpi_normalize (u); -if (!u->nlimbs && !limb) -return 0 ; +if (u->nlimbs ==0 ) { +if (v ==0 ) +return 0 ; +else +return -1 ; + }if (u->sign)return -1 ;if (u->nlimbs >1 )
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 27/139 Bluetooth: Fix hci_suspend_sync crash
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ying Hsu <[email protected]>
[ Upstream commit 573ebae162111063eedc6c838a659ba628f66a0f ]
If hci_unregister_dev() frees the hci_dev object but hci_suspend_notifier may still be accessing it, it can cause the program to crash. Here's the call trace:
<4>[102152.653246] Call Trace: <4>[102152.653254] hci_suspend_sync+0x109/0x301 [bluetooth] <4>[102152.653259] hci_suspend_dev+0x78/0xcd [bluetooth] <4>[102152.653263] hci_suspend_notifier+0x42/0x7a [bluetooth] <4>[102152.653268] notifier_call_chain+0x43/0x6b <4>[102152.653271] __blocking_notifier_call_chain+0x48/0x69 <4>[102152.653273] __pm_notifier_call_chain+0x22/0x39 <4>[102152.653276] pm_suspend+0x287/0x57c <4>[102152.653278] state_store+0xae/0xe5 <4>[102152.653281] kernfs_fop_write+0x109/0x173 <4>[102152.653284] __vfs_write+0x16f/0x1a2 <4>[102152.653287] ? selinux_file_permission+0xca/0x16f <4>[102152.653289] ? security_file_permission+0x36/0x109 <4>[102152.653291] vfs_write+0x114/0x21d <4>[102152.653293] __x64_sys_write+0x7b/0xdb <4>[102152.653296] do_syscall_64+0x59/0x194 <4>[102152.653299] entry_SYSCALL_64_after_hwframe+0x5c/0xc1
This patch holds the reference count of the hci_dev object while processing it in hci_suspend_notifier to avoid potential crash caused by the race condition.
--- net/bluetooth/hci_core.c | 4 ++++ 1 file changed, 4 insertions(+)
net/bluetooth/hci_core.c +4 -0
@@ -2436,6 +2436,9 @@ static int hci_suspend_notifier(struct notifier_block *nb, unsigned long action,if (hci_dev_test_flag (hdev,HCI_USER_CHANNEL ))return NOTIFY_DONE ; +/* To avoid a potential race with hci_unregister_dev. */ +hci_dev_hold (hdev); +if (action ==PM_SUSPEND_PREPARE ) ret =hci_suspend_dev (hdev);else if (action ==PM_POST_SUSPEND )
@@ -2445,6 +2448,7 @@ static int hci_suspend_notifier(struct notifier_block *nb, unsigned long action,bt_dev_err (hdev,"Suspend notifier action (%lu) failed: %d" , action, ret); +hci_dev_put (hdev);return NOTIFY_DONE ; }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 28/139 netlink: convert nlk->flags to atomic flags
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric Dumazet <[email protected]>
[ Upstream commit 8fe08d70a2b61b35a0a1235c78cf321e7528351f ]
sk_diag_put_flags(), netlink_setsockopt(), netlink_getsockopt() and others use nlk->flags without correct locking.
Use set_bit(), clear_bit(), test_bit(), assign_bit() to remove data-races.
--- net/netlink/af_netlink.c | 90 ++++++++++++++-------------------------- net/netlink/af_netlink.h | 22 ++++++---- net/netlink/diag.c | 10 ++--- 3 files changed, 48 insertions(+), 74 deletions(-)
net/netlink/af_netlink.c +30 -60
@@ -84,7 +84,7 @@ struct listeners {static inline int netlink_is_kernel (struct sock *sk) { -return nlk_sk (sk)->flags &NETLINK_F_KERNEL_SOCKET ; +return nlk_test_bit (KERNEL_SOCKET , sk); }struct netlink_table *nl_table__read_mostly ;
@@ -349,9 +349,7 @@ static void netlink_deliver_tap_kernel(struct sock *dst, struct sock *src,static void netlink_overrun (struct sock *sk) { -struct netlink_sock *nlk =nlk_sk (sk); - -if (!(nlk->flags &NETLINK_F_RECV_NO_ENOBUFS )) { +if (!nlk_test_bit (RECV_NO_ENOBUFS , sk)) {if (!test_and_set_bit (NETLINK_S_CONGESTED , &nlk_sk (sk)->state)) { sk->sk_err =ENOBUFS ;
@@ -1391,9 +1389,7 @@ EXPORT_SYMBOL_GPL(netlink_has_listeners);bool netlink_strict_get_check (struct sk_buff *skb) { -const struct netlink_sock *nlk =nlk_sk (NETLINK_CB (skb).sk); - -return nlk->flags &NETLINK_F_STRICT_CHK ; +return nlk_test_bit (STRICT_CHK ,NETLINK_CB (skb).sk); }EXPORT_SYMBOL_GPL (netlink_strict_get_check);
@@ -1437,7 +1433,7 @@ static void do_one_broadcast(struct sock *sk,return ;if (!net_eq (sock_net (sk), p->net)) { -if (!(nlk->flags &NETLINK_F_LISTEN_ALL_NSID )) +if (!nlk_test_bit (LISTEN_ALL_NSID , sk))return ;if (!peernet_has_id (sock_net (sk), p->net))
@@ -1470,7 +1466,7 @@ static void do_one_broadcast(struct sock *sk,netlink_overrun (sk);/* Clone failed. Notify ALL listeners. */ p->failure =1 ; -if (nlk->flags &NETLINK_F_BROADCAST_SEND_ERROR ) +if (nlk_test_bit (BROADCAST_SEND_ERROR , sk)) p->delivery_failure =1 ; goto out; }
@@ -1485,7 +1481,7 @@ static void do_one_broadcast(struct sock *sk, val =netlink_broadcast_deliver (sk, p->skb2);if (val <0 ) {netlink_overrun (sk); -if (nlk->flags &NETLINK_F_BROADCAST_SEND_ERROR ) +if (nlk_test_bit (BROADCAST_SEND_ERROR , sk)) p->delivery_failure =1 ; }else { p->congested |= val;
@@ -1565,7 +1561,7 @@ static int do_one_set_err(struct sock *sk, struct netlink_set_err_data *p) !test_bit(p->group - 1, nlk->groups)) goto out; -if (p->code ==ENOBUFS && nlk->flags &NETLINK_F_RECV_NO_ENOBUFS ) { +if (p->code ==ENOBUFS &&nlk_test_bit (RECV_NO_ENOBUFS , sk)) { ret =1 ; goto out; }
@@ -1632,7 +1628,7 @@ static int netlink_setsockopt(struct socket *sock, int level, int optname,struct sock *sk = sock->sk;struct netlink_sock *nlk =nlk_sk (sk);unsigned int val =0 ; -int err; +int nr =-1 ;if (level !=SOL_NETLINK )return -ENOPROTOOPT ;
@@ -1643,14 +1639,12 @@ static int netlink_setsockopt(struct socket *sock, int level, int optname,switch (optname) {case NETLINK_PKTINFO : -if (val) - nlk->flags |=NETLINK_F_RECV_PKTINFO ; -else - nlk->flags &= ~NETLINK_F_RECV_PKTINFO ; - err =0 ; + nr =NETLINK_F_RECV_PKTINFO ;break ;case NETLINK_ADD_MEMBERSHIP :case NETLINK_DROP_MEMBERSHIP : { +int err; +if (!netlink_allowed (sock,NL_CFG_F_NONROOT_RECV ))return -EPERM ; err =netlink_realloc_groups (sk);
@@ -1670,61 +1664,38 @@ static int netlink_setsockopt(struct socket *sock, int level, int optname,if (optname ==NETLINK_DROP_MEMBERSHIP && nlk->netlink_unbind) nlk->netlink_unbind (sock_net (sk), val); - err =0 ;break ; }case NETLINK_BROADCAST_ERROR : -if (val) - nlk->flags |=NETLINK_F_BROADCAST_SEND_ERROR ; -else - nlk->flags &= ~NETLINK_F_BROADCAST_SEND_ERROR ; - err =0 ; + nr =NETLINK_F_BROADCAST_SEND_ERROR ;break ;case NETLINK_NO_ENOBUFS : +assign_bit (NETLINK_F_RECV_NO_ENOBUFS , &nlk->flags, val);if (val) { - nlk->flags |=NETLINK_F_RECV_NO_ENOBUFS ;clear_bit (NETLINK_S_CONGESTED , &nlk->state);wake_up_interruptible (&nlk->wait); - }else { - nlk->flags &= ~NETLINK_F_RECV_NO_ENOBUFS ; } - err =0 ;break ;case NETLINK_LISTEN_ALL_NSID :if (!ns_capable (sock_net (sk)->user_ns,CAP_NET_BROADCAST ))return -EPERM ; - -if (val) - nlk->flags |=NETLINK_F_LISTEN_ALL_NSID ; -else - nlk->flags &= ~NETLINK_F_LISTEN_ALL_NSID ; - err =0 ; + nr =NETLINK_F_LISTEN_ALL_NSID ;break ;case NETLINK_CAP_ACK : -if (val) - nlk->flags |=NETLINK_F_CAP_ACK ; -else - nlk->flags &= ~NETLINK_F_CAP_ACK ; - err =0 ; + nr =NETLINK_F_CAP_ACK ;break ;case NETLINK_EXT_ACK : -if (val) - nlk->flags |=NETLINK_F_EXT_ACK ; -else - nlk->flags &= ~NETLINK_F_EXT_ACK ; - err =0 ; + nr =NETLINK_F_EXT_ACK ;break ;case NETLINK_GET_STRICT_CHK : -if (val) - nlk->flags |=NETLINK_F_STRICT_CHK ; -else - nlk->flags &= ~NETLINK_F_STRICT_CHK ; - err =0 ; + nr =NETLINK_F_STRICT_CHK ;break ;default : - err = -ENOPROTOOPT ; +return -ENOPROTOOPT ; } -return err; +if (nr >=0 ) +assign_bit (nr, &nlk->flags, val); +return 0 ; } static int netlink_getsockopt(struct socket *sock, int level, int optname,
@@ -1791,7 +1762,7 @@ static int netlink_getsockopt(struct socket *sock, int level, int optname,return -EINVAL ; len =sizeof (int ); - val = nlk->flags & flag ?1 :0 ; + val =test_bit (flag, &nlk->flags);if (put_user (len, optlen) ||copy_to_user (optval, &val, len))
@@ -1968,9 +1939,9 @@ static int netlink_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, msg->msg_namelen =sizeof (*addr); } -if (nlk->flags &NETLINK_F_RECV_PKTINFO ) +if (nlk_test_bit (RECV_PKTINFO , sk))netlink_cmsg_recv_pktinfo (msg, skb); -if (nlk->flags &NETLINK_F_LISTEN_ALL_NSID ) +if (nlk_test_bit (LISTEN_ALL_NSID , sk))netlink_cmsg_listen_all_nsid (sk, msg, skb);memset (&scm,0 ,sizeof (scm));
@@ -2047,7 +2018,7 @@ __netlink_kernel_create(struct net *net, int unit, struct module *module, goto out_sock_release; nlk =nlk_sk (sk); - nlk->flags |=NETLINK_F_KERNEL_SOCKET ; +set_bit (NETLINK_F_KERNEL_SOCKET , &nlk->flags);netlink_table_grab ();if (!nl_table[unit].registered) {
@@ -2183,7 +2154,7 @@ static int netlink_dump_done(struct netlink_sock *nlk, struct sk_buff *skb,nl_dump_check_consistent (cb, nlh);memcpy (nlmsg_data (nlh), &nlk->dump_done_errno,sizeof (nlk->dump_done_errno)); -if (extack->_msg && nlk->flags &NETLINK_F_EXT_ACK ) { +if (extack->_msg &&test_bit (NETLINK_F_EXT_ACK , &nlk->flags)) { nlh->nlmsg_flags |=NLM_F_ACK_TLVS ;if (!nla_put_string (skb,NLMSGERR_ATTR_MSG , extack->_msg))nlmsg_end (skb, nlh);
@@ -2312,8 +2283,8 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb,const struct nlmsghdr *nlh, struct netlink_dump_control *control) { - struct netlink_sock *nlk, *nlk2; struct netlink_callback *cb; +struct netlink_sock *nlk;struct sock *sk;int ret;
@@ -2348,8 +2319,7 @@ int __netlink_dump_start(struct sock *ssk, struct sk_buff *skb, cb->min_dump_alloc = control->min_dump_alloc; cb->skb = skb; - nlk2 =nlk_sk (NETLINK_CB (skb).sk); - cb->strict_check = !!(nlk2->flags &NETLINK_F_STRICT_CHK ); + cb->strict_check =nlk_test_bit (STRICT_CHK ,NETLINK_CB (skb).sk);if (control->start) { ret = control->start (cb);
@@ -2391,7 +2361,7 @@ netlink_ack_tlv_len(struct netlink_sock *nlk, int err, {size_t tlvlen; -if (!extack || !(nlk->flags &NETLINK_F_EXT_ACK )) +if (!extack || !test_bit (NETLINK_F_EXT_ACK , &nlk->flags))return 0 ; tlvlen =0 ;
@@ -2463,7 +2433,7 @@ void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err,* requests to cap the error message, and get extra error data if * requested. */ -if (err && !(nlk->flags &NETLINK_F_CAP_ACK )) +if (err && !test_bit (NETLINK_F_CAP_ACK , &nlk->flags)) payload +=nlmsg_len (nlh);else flags |=NLM_F_CAPPED ;
net/netlink/af_netlink.h +13 -9
@@ -8,14 +8,16 @@#include <net/sock.h> /* flags */ -#define NETLINK_F_KERNEL_SOCKET 0x1 -#define NETLINK_F_RECV_PKTINFO 0x2 -#define NETLINK_F_BROADCAST_SEND_ERROR 0x4 -#define NETLINK_F_RECV_NO_ENOBUFS 0x8 -#define NETLINK_F_LISTEN_ALL_NSID 0x10 -#define NETLINK_F_CAP_ACK 0x20 -#define NETLINK_F_EXT_ACK 0x40 -#define NETLINK_F_STRICT_CHK 0x80 +enum { +NETLINK_F_KERNEL_SOCKET , +NETLINK_F_RECV_PKTINFO , +NETLINK_F_BROADCAST_SEND_ERROR , +NETLINK_F_RECV_NO_ENOBUFS , +NETLINK_F_LISTEN_ALL_NSID , +NETLINK_F_CAP_ACK , +NETLINK_F_EXT_ACK , +NETLINK_F_STRICT_CHK , +};#define NLGRPSZ (x) (ALIGN(x, sizeof(unsigned long) * 8) / 8)#define NLGRPLONGS (x) (NLGRPSZ(x)/sizeof(unsigned long))
@@ -23,10 +25,10 @@struct netlink_sock {/* struct sock has to be the first member of netlink_sock */ struct sock sk; +unsigned long flags;u32 portid;u32 dst_portid;u32 dst_group; -u32 flags;u32 subscriptions;u32 ngroups;unsigned long *groups;
@@ -54,6 +56,8 @@ static inline struct netlink_sock *nlk_sk(struct sock *sk) return container_of(sk, struct netlink_sock, sk); } +#define nlk_test_bit (nr, sk) test_bit(NETLINK_F_##nr, &nlk_sk(sk)->flags) +struct netlink_table {struct rhashtable hash;struct hlist_head mc_list;
net/netlink/diag.c +5 -5
@@ -27,15 +27,15 @@ static int sk_diag_put_flags(struct sock *sk, struct sk_buff *skb)if (nlk->cb_running) flags |=NDIAG_FLAG_CB_RUNNING ; -if (nlk->flags &NETLINK_F_RECV_PKTINFO ) +if (nlk_test_bit (RECV_PKTINFO , sk)) flags |=NDIAG_FLAG_PKTINFO ; -if (nlk->flags &NETLINK_F_BROADCAST_SEND_ERROR ) +if (nlk_test_bit (BROADCAST_SEND_ERROR , sk)) flags |=NDIAG_FLAG_BROADCAST_ERROR ; -if (nlk->flags &NETLINK_F_RECV_NO_ENOBUFS ) +if (nlk_test_bit (RECV_NO_ENOBUFS , sk)) flags |=NDIAG_FLAG_NO_ENOBUFS ; -if (nlk->flags &NETLINK_F_LISTEN_ALL_NSID ) +if (nlk_test_bit (LISTEN_ALL_NSID , sk)) flags |=NDIAG_FLAG_LISTEN_ALL_NSID ; -if (nlk->flags &NETLINK_F_CAP_ACK ) +if (nlk_test_bit (CAP_ACK , sk)) flags |=NDIAG_FLAG_CAP_ACK ;return nla_put_u32 (skb,NETLINK_DIAG_FLAGS , flags);
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 29/139 tpm_tis: Resend command to recover from data transfer errors
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexander Steffen <[email protected]>
[ Upstream commit 280db21e153d8810ce3b93640c63ae922bcb9e8e ]
Similar to the transmission of TPM responses, also the transmission of TPM commands may become corrupted. Instead of aborting when detecting such issues, try resending the command again.
--- drivers/char/tpm/tpm_tis_core.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
drivers/char/tpm/tpm_tis_core.c +10 -3
@@ -498,10 +498,17 @@ static int tpm_tis_send_main(struct tpm_chip *chip, const u8 *buf, size_t len)int rc;u32 ordinal;unsigned long dur; +unsigned int try; - rc =tpm_tis_send_data (chip, buf, len); -if (rc <0 ) -return rc; +for (try =0 ; try <TPM_RETRY ; try++) { + rc =tpm_tis_send_data (chip, buf, len); +if (rc >=0 ) +/* Data transfer done successfully */ +break ; +else if (rc != -EIO ) +/* Data transfer failed, not recoverable */ +return rc; + } rc =tpm_tis_verify_crc (priv, len, buf);if (rc <0 ) {
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 3/139 locks: fix KASAN: use-after-free in trace_event_raw_event_filelock_lock
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Will Shiu <[email protected]>
[ Upstream commit 74f6f5912693ce454384eaeec48705646a21c74f ]
As following backtrace, the struct file_lock request , in posix_lock_inode is free before ftrace function using.
Replace the ftrace function ahead free flow could fix the use-after-free issue.
[name:report&]=============================================== BUG:KASAN: use-after-free in trace_event_raw_event_filelock_lock+0x80/0x12c [name:report&]Read at addr f6ffff8025622620 by task NativeThread/16753 [name:report_hw_tags&]Pointer tag: [f6], memory tag: [fe] [name:report&]
BT:
Hardware name: MT6897 (DT) Call trace: dump_backtrace+0xf8/0x148 show_stack+0x18/0x24 dump_stack_lvl+0x60/0x7c print_report+0x2c8/0xa08 kasan_report+0xb0/0x120 __do_kernel_fault+0xc8/0x248 do_bad_area+0x30/0xdc do_tag_check_fault+0x1c/0x30 do_mem_abort+0x58/0xbc el1_abort+0x3c/0x5c el1h_64_sync_handler+0x54/0x90 el1h_64_sync+0x68/0x6c trace_event_raw_event_filelock_lock+0x80/0x12c posix_lock_inode+0xd0c/0xd60 do_lock_file_wait+0xb8/0x190 fcntl_setlk+0x2d8/0x440
...
[name:report&]
[name:report&]Allocated by task 16752:
...
slab_post_alloc_hook+0x74/0x340 kmem_cache_alloc+0x1b0/0x2f0 posix_lock_inode+0xb0/0xd60
...
[name:report&]
[name:report&]Freed by task 16752:
...
kmem_cache_free+0x274/0x5b0 locks_dispose_list+0x3c/0x148 posix_lock_inode+0xc40/0xd60 do_lock_file_wait+0xb8/0x190 fcntl_setlk+0x2d8/0x440 do_fcntl+0x150/0xc18
...
--- fs/locks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/locks.c +1 -1
@@ -1300,6 +1300,7 @@ static int posix_lock_inode(struct inode *inode, struct file_lock *request, out:spin_unlock (&ctx->flc_lock);percpu_up_read (&file_rwsem); +trace_posix_lock_inode (inode, request, error);/* * Free any unused locks. */
@@ -1308,7 +1309,6 @@ static int posix_lock_inode(struct inode *inode, struct file_lock *request,if (new_fl2)locks_free_lock (new_fl2);locks_dispose_list (&dispose); -trace_posix_lock_inode (inode, request, error);return error; }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 30/139 mmc: sdhci-esdhc-imx: improve ESDHC_FLAG_ERR010450
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Giulio Benetti <[email protected]>
[ Upstream commit 5ae4b0d8875caa44946e579420c7fd5740d58653 ]
Errata ERR010450 only shows up if voltage is 1.8V, but if the device is supplied by 3v3 the errata can be ignored. So let's check for if quirk SDHCI_QUIRK2_NO_1_8_V is defined or not before limiting the frequency.
--- drivers/mmc/host/sdhci-esdhc-imx.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/mmc/host/sdhci-esdhc-imx.c +4 -3
@@ -171,8 +171,8 @@#define ESDHC_FLAG_HS400 BIT(9)/* * The IP has errata ERR010450 -* uSDHC: Due to the I/O timing limit, for SDR mode, SD card clock can't -* exceed 150MHz, for DDR mode, SD card clock can't exceed 45MHz. +* uSDHC: At 1.8V due to the I/O timing limit, for SDR mode, SD card +* clock can't exceed 150MHz, for DDR mode, SD card clock can't exceed 45MHz. */ #define ESDHC_FLAG_ERR010450 BIT(10)/* The IP supports HS400ES mode */
@@ -932,7 +932,8 @@ static inline void esdhc_pltfm_set_clock(struct sdhci_host *host, | ESDHC_CLOCK_MASK);sdhci_writel (host, temp,ESDHC_SYSTEM_CONTROL ); -if (imx_data->socdata->flags &ESDHC_FLAG_ERR010450 ) { +if ((imx_data->socdata->flags &ESDHC_FLAG_ERR010450 ) && + (!(host->quirks2 &SDHCI_QUIRK2_NO_1_8_V ))) {unsigned int max_clock; max_clock = imx_data->is_ddr ?45000000 :150000000 ;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 31/139 alx: fix OOB-read compiler warning
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: GONG, Ruiqi <[email protected]>
[ Upstream commit 3a198c95c95da10ad844cbeade2fe40bdf14c411 ]
The following message shows up when compiling with W=1:
In function ‘fortify_memcpy_chk’,
inlined from ‘alx_get_ethtool_stats’ at drivers/net/ethernet/atheros/alx/ethtool.c:297:2:./include/linux/fortify-string.h:592:4: error: call to ‘__read_overflow2_field’ declared with attribute warning: detected read beyond size of field (2nd parameter); maybe use struct_group()? [-Werror=attribute-warning]
592 | __read_overflow2_field(q_size_field, size);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~In order to get alx stats altogether, alx_get_ethtool_stats() reads beyond hw->stats.rx_ok. Fix this warning by directly copying hw->stats, and refactor the unnecessarily complicated BUILD_BUG_ON btw.
--- drivers/net/ethernet/atheros/alx/ethtool.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/net/ethernet/atheros/alx/ethtool.c +2 -3
@@ -292,9 +292,8 @@ static void alx_get_ethtool_stats(struct net_device *netdev,spin_lock (&alx->stats_lock);alx_update_hw_stats (hw); -BUILD_BUG_ON (sizeof (hw->stats) - offsetof(struct alx_hw_stats , rx_ok) < -ALX_NUM_STATS *sizeof (u64)); -memcpy (data, &hw->stats.rx_ok,ALX_NUM_STATS *sizeof (u64)); +BUILD_BUG_ON (sizeof (hw->stats) !=ALX_NUM_STATS *sizeof (u64)); +memcpy (data, &hw->stats,sizeof (hw->stats));spin_unlock (&alx->stats_lock); }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 32/139 wifi: mac80211: check S1G action frame size
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johannes Berg <[email protected]>
[ Upstream commit 19e4a47ee74718a22e963e8a647c8c3bfe8bb05c ]
Before checking the action code, check that it even exists in the frame.
--- net/mac80211/rx.c | 4 ++++ 1 file changed, 4 insertions(+)
net/mac80211/rx.c +4 -0
@@ -3625,6 +3625,10 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)break ; goto queue;case WLAN_CATEGORY_S1G : +if (len <offsetofend (typeof (*mgmt), + u.action.u.s1g.action_code)) +break ; +switch (mgmt->u.action.u.s1g.action_code) {case WLAN_S1G_TWT_SETUP :case WLAN_S1G_TWT_TEARDOWN :
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 33/139 netfilter: ebtables: fix fortify warnings in size_entry_mwt()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: GONG, Ruiqi <[email protected]>
[ Upstream commit a7ed3465daa240bdf01a5420f64336fee879c09d ]
When compiling with gcc 13 and CONFIG_FORTIFY_SOURCE=y, the following warning appears:
In function ‘fortify_memcpy_chk’,
inlined from ‘size_entry_mwt’ at net/bridge/netfilter/ebtables.c:2118:2:./include/linux/fortify-string.h:592:25: error: call to ‘__read_overflow2_field’ declared with attribute warning: detected read beyond size of field (2nd parameter); maybe use struct_group()? [-Werror=attribute-warning]
592 | __read_overflow2_field(q_size_field, size);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~The compiler is complaining:
memcpy(&offsets[1], &entry->watchers_offset,
sizeof(offsets) - sizeof(offsets[0]));
where memcpy reads beyong &entry->watchers_offset to copy {watchers,target,next}_offset altogether into offsets[]. Silence the warning by wrapping these three up via struct_group().
--- include/uapi/linux/netfilter_bridge/ebtables.h | 14 ++++++++------ net/bridge/netfilter/ebtables.c | 3 +-- 2 files changed, 9 insertions(+), 8 deletions(-)
include/uapi/linux/netfilter_bridge/ebtables.h +8 -6
@@ -182,12 +182,14 @@ struct ebt_entry {unsigned char sourcemsk[ETH_ALEN ];unsigned char destmac[ETH_ALEN ];unsigned char destmsk[ETH_ALEN ]; -/* sizeof ebt_entry + matches */ -unsigned int watchers_offset; -/* sizeof ebt_entry + matches + watchers */ -unsigned int target_offset; -/* sizeof ebt_entry + matches + watchers + target */ -unsigned int next_offset; + __struct_group(/* no tag */, offsets, /* no attrs */, +/* sizeof ebt_entry + matches */ + unsigned int watchers_offset; +/* sizeof ebt_entry + matches + watchers */ +unsigned int target_offset; +/* sizeof ebt_entry + matches + watchers + target */ +unsigned int next_offset; + ); unsigned char elems[0] __attribute__ ((aligned (__alignof__(struct ebt_replace)))); };
net/bridge/netfilter/ebtables.c +1 -2
@@ -2115,8 +2115,7 @@ static int size_entry_mwt(const struct ebt_entry *entry, const unsigned char *bareturn ret; offsets[0 ] =sizeof (struct ebt_entry );/* matches come first */ -memcpy (&offsets[1 ], &entry->watchers_offset, -sizeof (offsets) -sizeof (offsets[0 ])); +memcpy (&offsets[1 ], &entry->offsets,sizeof (entry->offsets));if (state->buf_kern_start) { buf_start = state->buf_kern_start + state->buf_kern_offset;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 34/139 wifi: cfg80211: reject auth/assoc to AP with our address
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johannes Berg <[email protected]>
[ Upstream commit 5d4e04bf3a0f098bd9033de3a5291810fa14c7a6 ]
If the AP uses our own address as its MLD address or BSSID, then clearly something's wrong. Reject such connections so we don't try and fail later.
--- net/wireless/mlme.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
net/wireless/mlme.c +13 -0
@@ -277,6 +277,11 @@ int cfg80211_mlme_auth(struct cfg80211_registered_device *rdev, ether_addr_equal(req->bss->bssid, wdev->u.client.connected_addr)) return -EALREADY; +if (ether_addr_equal (req->bss->bssid, dev->dev_addr) || + (req->link_id >=0 && +ether_addr_equal (req->ap_mld_addr, dev->dev_addr))) +return -EINVAL ; +return rdev_auth (rdev, dev, req); }
@@ -331,6 +336,9 @@ int cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev,if (req->links[i].bss == req->links[j].bss)return -EINVAL ; } + +if (ether_addr_equal (req->links[i].bss->bssid, dev->dev_addr)) +return -EINVAL ; } if (wdev->connected &&
@@ -338,6 +346,11 @@ int cfg80211_mlme_assoc(struct cfg80211_registered_device *rdev, !ether_addr_equal(wdev->u.client.connected_addr, req->prev_bssid)))return -EALREADY ; +if ((req->bss &ðer_addr_equal (req->bss->bssid, dev->dev_addr)) || + (req->link_id >=0 && +ether_addr_equal (req->ap_mld_addr, dev->dev_addr))) +return -EINVAL ; +cfg80211_oper_and_ht_capa (&req->ht_capa_mask, rdev->wiphy.ht_capa_mod_mask); cfg80211_oper_and_vht_capa(&req->vht_capa_mask,
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 35/139 wifi: cfg80211: ocb: dont leave if not joined
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johannes Berg <[email protected]>
[ Upstream commit abc76cf552e13cfa88a204b362a86b0e08e95228 ]
If there's no OCB state, don't ask the driver/mac80211 to leave, since that's just confusing. Since set/clear the chandef state, that's a simple check.
--- net/wireless/ocb.c | 3 +++ 1 file changed, 3 insertions(+)
net/wireless/ocb.c +3 -0
@@ -68,6 +68,9 @@ int __cfg80211_leave_ocb(struct cfg80211_registered_device *rdev,if (!rdev->ops->leave_ocb)return -EOPNOTSUPP ; +if (!wdev->u.ocb.chandef.chan) +return -ENOTCONN ; + err =rdev_leave_ocb (rdev, dev);if (!err)memset (&wdev->u.ocb.chandef,0 ,sizeof (wdev->u.ocb.chandef));
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 36/139 wifi: mac80211: check for station first in client probe
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johannes Berg <[email protected]>
[ Upstream commit 67dfa589aa8806c7959cbca2f4613b8d41c75a06 ]
When probing a client, first check if we have it, and then check for the channel context, otherwise you can trigger the warning there easily by probing when the AP isn't even started yet. Since a client existing means the AP is also operating, we can then keep the warning.
Also simplify the moved code a bit.
--- net/mac80211/cfg.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-)
net/mac80211/cfg.c +8 -7
@@ -3991,19 +3991,20 @@ static int ieee80211_probe_client(struct wiphy *wiphy, struct net_device *dev,mutex_lock (&local->mtx);rcu_read_lock (); + sta =sta_info_get_bss (sdata, peer); +if (!sta) { + ret = -ENOLINK ; + goto unlock; + } + + qos = sta->sta.wme; + chanctx_conf =rcu_dereference (sdata->vif.bss_conf.chanctx_conf);if (WARN_ON (!chanctx_conf)) { ret = -EINVAL ; goto unlock; } band = chanctx_conf->def.chan->band; - sta =sta_info_get_bss (sdata, peer); -if (sta) { - qos = sta->sta.wme; - }else { - ret = -ENOLINK ; - goto unlock; - }if (qos) { fc = cpu_to_le16(IEEE80211_FTYPE_DATA |
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 37/139 wifi: mac80211_hwsim: drop short frames
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johannes Berg <[email protected]>
[ Upstream commit fba360a047d5eeeb9d4b7c3a9b1c8308980ce9a6 ]
While technically some control frames like ACK are shorter and end after Address 1, such frames shouldn't be forwarded through wmediumd or similar userspace, so require the full 3-address header to avoid accessing invalid memory if shorter frames are passed in.
--- drivers/net/wireless/mac80211_hwsim.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/net/wireless/mac80211_hwsim.c +4 -3
@@ -4906,14 +4906,15 @@ static int hwsim_cloned_frame_received_nl(struct sk_buff *skb_2, frame_data_len =nla_len (info->attrs[HWSIM_ATTR_FRAME ]); frame_data = (void *)nla_data (info->attrs[HWSIM_ATTR_FRAME ]); +if (frame_data_len <sizeof (struct ieee80211_hdr_3addr ) || + frame_data_len >IEEE80211_MAX_DATA_LEN ) + goto err; +/* Allocate new skb here */ skb =alloc_skb (frame_data_len,GFP_KERNEL );if (skb ==NULL ) goto err; -if (frame_data_len >IEEE80211_MAX_DATA_LEN ) - goto err; -/* Copy the data */ skb_put_data (skb, frame_data, frame_data_len);
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 4/139 ACPICA: Add AML_NO_OPERAND_RESOLVE flag to Timer
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Abhishek Mainkar <[email protected]>
[ Upstream commit 3a21ffdbc825e0919db9da0e27ee5ff2cc8a863e ]
ACPICA commit 90310989a0790032f5a0140741ff09b545af4bc5
According to the ACPI specification 19.6.134, no argument is required to be passed for ASL Timer instruction. For taking care of no argument, AML_NO_OPERAND_RESOLVE flag is added to ASL Timer instruction opcode.
When ASL timer instruction interpreted by ACPI interpreter, getting error. After adding AML_NO_OPERAND_RESOLVE flag to ASL Timer instruction opcode, issue is not observed.
=============================================================
UBSAN: array-index-out-of-bounds in acpica/dswexec.c:401:12 index -1 is out of range for type 'union acpi_operand_object *[9]' CPU: 37 PID: 1678 Comm: cat Not tainted 6.0.0-dev-th500-6.0.y-1+bcf8c46459e407-generic-64k HW name: NVIDIA BIOS v1.1.1-d7acbfc-dirty 12/19/2022 Call trace: dump_backtrace+0xe0/0x130 show_stack+0x20/0x60 dump_stack_lvl+0x68/0x84 dump_stack+0x18/0x34 ubsan_epilogue+0x10/0x50 __ubsan_handle_out_of_bounds+0x80/0x90 acpi_ds_exec_end_op+0x1bc/0x6d8 acpi_ps_parse_loop+0x57c/0x618 acpi_ps_parse_aml+0x1e0/0x4b4 acpi_ps_execute_method+0x24c/0x2b8 acpi_ns_evaluate+0x3a8/0x4bc acpi_evaluate_object+0x15c/0x37c acpi_evaluate_integer+0x54/0x15c show_power+0x8c/0x12c [acpi_power_meter]
--- drivers/acpi/acpica/psopcode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/acpi/acpica/psopcode.c +1 -1
@@ -603,7 +603,7 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = {/* 7E */ ACPI_OP ("Timer" ,ARGP_TIMER_OP ,ARGI_TIMER_OP ,ACPI_TYPE_ANY ,AML_CLASS_EXECUTE ,AML_TYPE_EXEC_0A_0T_1R , - AML_FLAGS_EXEC_0A_0T_1R), + AML_FLAGS_EXEC_0A_0T_1R | AML_NO_OPERAND_RESOLVE),/* ACPI 5.0 opcodes */
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 5/139 kernel/fork: beware of __put_task_struct() calling context
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wander Lairson Costa <[email protected]>
[ Upstream commit d243b34459cea30cfe5f3a9b2feb44e7daff9938 ]
Under PREEMPT_RT, __put_task_struct() indirectly acquires sleeping locks. Therefore, it can't be called from an non-preemptible context.
One practical example is splat inside inactive_task_timer(), which is called in a interrupt context:
CPU: 1 PID: 2848 Comm: life Kdump: loaded Tainted: G W --------- Hardware name: HP ProLiant DL388p Gen8, BIOS P70 07/15/2012 Call Trace: dump_stack_lvl+0x57/0x7d mark_lock_irq.cold+0x33/0xba mark_lock+0x1e7/0x400 mark_usage+0x11d/0x140 __lock_acquire+0x30d/0x930 lock_acquire.part.0+0x9c/0x210 rt_spin_lock+0x27/0xe0 refill_obj_stock+0x3d/0x3a0 kmem_cache_free+0x357/0x560 inactive_task_timer+0x1ad/0x340 __run_hrtimer+0x8a/0x1a0 __hrtimer_run_queues+0x91/0x130 hrtimer_interrupt+0x10f/0x220 __sysvec_apic_timer_interrupt+0x7b/0xd0 sysvec_apic_timer_interrupt+0x4f/0xd0 asm_sysvec_apic_timer_interrupt+0x12/0x20 RIP: 0033:0x7fff196bf6f5
Instead of calling __put_task_struct() directly, we defer it using call_rcu(). A more natural approach would use a workqueue, but since in PREEMPT_RT, we can't allocate dynamic memory from atomic context, the code would become more complex because we would need to put the work_struct instance in the task_struct and initialize it when we allocate a new task_struct.
The issue is reproducible with stress-ng:
while true; do
stress-ng --sched deadline --sched-period 1000000000 \ --sched-runtime 800000000 --sched-deadline \ 1000000000 --mmapfork 23 -t 20
done
--- include/linux/sched/task.h | 28 +++++++++++++++++++++++++++- kernel/fork.c | 8 ++++++++ 2 files changed, 35 insertions(+), 1 deletion(-)
include/linux/sched/task.h +27 -1
@@ -112,10 +112,36 @@ static inline struct task_struct *get_task_struct(struct task_struct *t) }extern void __put_task_struct (struct task_struct *t); +extern void __put_task_struct_rcu_cb (struct rcu_head *rhp);static inline void put_task_struct (struct task_struct *t) { -if (refcount_dec_and_test (&t->usage)) +if (!refcount_dec_and_test (&t->usage)) +return ; + +/* +* under PREEMPT_RT, we can't call put_task_struct +* in atomic context because it will indirectly +* acquire sleeping locks. +* +* call_rcu() will schedule delayed_put_task_struct_rcu() +* to be called in process context. +* +* __put_task_struct() is called when +* refcount_dec_and_test(&t->usage) succeeds. +* +* This means that it can't "conflict" with +* put_task_struct_rcu_user() which abuses ->rcu the same +* way; rcu_users has a reference so task->usage can't be +* zero after rcu_users 1 -> 0 transition. +* +* delayed_free_task() also uses ->rcu, but it is only called +* when it fails to fork a process. Therefore, there is no +* way it can conflict with put_task_struct(). +*/ +if (IS_ENABLED (CONFIG_PREEMPT_RT ) && !preemptible ()) +call_rcu (&t->rcu, __put_task_struct_rcu_cb); +else __put_task_struct (t); }
kernel/fork.c +8 -0
@@ -852,6 +852,14 @@ void __put_task_struct(struct task_struct *tsk) }EXPORT_SYMBOL_GPL (__put_task_struct); +void __put_task_struct_rcu_cb (struct rcu_head *rhp) +{ + struct task_struct *task = container_of(rhp, struct task_struct, rcu); + +__put_task_struct (task); +} +EXPORT_SYMBOL_GPL (__put_task_struct_rcu_cb); +void __init __weak arch_task_cache_init (void ) { }/*
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 6/139 rcuscale: Move rcu_scale_writer() schedule_timeout_uninterruptible() to _idle()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zqiang <[email protected]>
[ Upstream commit e60c122a1614b4f65b29a7bef9d83b9fd30e937a ]
The rcuscale.holdoff module parameter can be used to delay the start of rcu_scale_writer() kthread. However, the hung-task timeout will trigger when the timeout specified by rcuscale.holdoff is greater than hung_task_timeout_secs:
runqemu kvm nographic slirp qemuparams="-smp 4 -m 2048M" bootparams="rcuscale.shutdown=0 rcuscale.holdoff=300"
[ 247.071753] INFO: task rcu_scale_write:59 blocked for more than 122 seconds. [ 247.072529] Not tainted 6.4.0-rc1-00134-gb9ed6de8d4ff #7 [ 247.073400] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [ 247.074331] task:rcu_scale_write state:D stack:30144 pid:59 ppid:2 flags:0x00004000 [ 247.075346] Call Trace: [ 247.075660] <TASK> [ 247.075965] __schedule+0x635/0x1280 [ 247.076448] ? __pfx___schedule+0x10/0x10 [ 247.076967] ? schedule_timeout+0x2dc/0x4d0 [ 247.077471] ? __pfx_lock_release+0x10/0x10 [ 247.078018] ? enqueue_timer+0xe2/0x220 [ 247.078522] schedule+0x84/0x120 [ 247.078957] schedule_timeout+0x2e1/0x4d0 [ 247.079447] ? __pfx_schedule_timeout+0x10/0x10 [ 247.080032] ? __pfx_rcu_scale_writer+0x10/0x10 [ 247.080591] ? __pfx_process_timeout+0x10/0x10 [ 247.081163] ? __pfx_sched_set_fifo_low+0x10/0x10 [ 247.081760] ? __pfx_rcu_scale_writer+0x10/0x10 [ 247.082287] rcu_scale_writer+0x6b1/0x7f0 [ 247.082773] ? mark_held_locks+0x29/0xa0 [ 247.083252] ? __pfx_rcu_scale_writer+0x10/0x10 [ 247.083865] ? __pfx_rcu_scale_writer+0x10/0x10 [ 247.084412] kthread+0x179/0x1c0 [ 247.084759] ? __pfx_kthread+0x10/0x10 [ 247.085098] ret_from_fork+0x2c/0x50 [ 247.085433] </TASK>
This commit therefore replaces schedule_timeout_uninterruptible() with schedule_timeout_idle().
--- kernel/rcu/rcuscale.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/rcu/rcuscale.c +1 -1
@@ -423,7 +423,7 @@ rcu_scale_writer(void *arg)sched_set_fifo_low (current);if (holdoff) -schedule_timeout_uninterruptible (holdoff *HZ ); +schedule_timeout_idle (holdoff *HZ );/* * Wait until rcu_end_inkernel_boot() is called for normal GP tests
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 7/139 scftorture: Forgive memory-allocation failure if KASAN
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Paul E. McKenney <[email protected]>
[ Upstream commit 013608cd0812bdb21fc26d39ed8fdd2fc76e8b9b ]
Kernels built with CONFIG_KASAN=y quarantine newly freed memory in order to better detect use-after-free errors. However, this can exhaust memory more quickly in allocator-heavy tests, which can result in spurious scftorture failure. This commit therefore forgives memory-allocation failure in kernels built with CONFIG_KASAN=y, but continues counting the errors for use in detailed test-result analyses.
--- kernel/scftorture.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
kernel/scftorture.c +4 -2
@@ -171,7 +171,8 @@ static void scf_torture_stats_print(void) scfs.n_all_wait += scf_stats_p[i].n_all_wait; }if (atomic_read (&n_errs) ||atomic_read (&n_mb_in_errs) || -atomic_read (&n_mb_out_errs) ||atomic_read (&n_alloc_errs)) +atomic_read (&n_mb_out_errs) || + (!IS_ENABLED (CONFIG_KASAN ) &&atomic_read (&n_alloc_errs))) bangstr ="!!! " ; pr_alert("%s %sscf_invoked_count %s: %lld resched: %lld single: %lld/%lld single_ofl: %lld/%lld single_rpc: %lld single_rpc_ofl: %lld many: %lld/%lld all: %lld/%lld ", SCFTORT_FLAG, bangstr, isdone ? "VER" : "ver", invoked_count, scfs.n_resched,
@@ -323,7 +324,8 @@ static void scftorture_invoke_one(struct scf_statistics *scfp, struct torture_rapreempt_disable ();if (scfsp->scfs_prim ==SCF_PRIM_SINGLE || scfsp->scfs_wait) { scfcp =kmalloc (sizeof (*scfcp),GFP_ATOMIC ); -if (WARN_ON_ONCE (!scfcp)) { +if (!scfcp) { +WARN_ON_ONCE (!IS_ENABLED (CONFIG_KASAN ));atomic_inc (&n_alloc_errs); }else { scfcp->scfc_cpu =-1 ;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 8/139 ACPI: video: Add backlight=native DMI quirk for Lenovo Ideapad Z470
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiri Slaby (SUSE) <[email protected]>
[ Upstream commit 96b709be183c56293933ef45b8b75f8af268c6de ]
The Lenovo Ideapad Z470 predates Windows 8, so it defaults to using acpi_video for backlight control. But this is not functional on this model.
Add a DMI quirk to use the native backlight interface which works.
--- drivers/acpi/video_detect.c | 9 +++++++++ 1 file changed, 9 insertions(+)
drivers/acpi/video_detect.c +9 -0
@@ -443,6 +443,15 @@ static const struct dmi_system_id video_detect_dmi_table[] = { DMI_MATCH(DMI_BOARD_NAME, "Lenovo IdeaPad S405"), }, }, + { +/* https://bugzilla.suse.com/show_bug.cgi?id=1208724 */ + .callback = video_detect_force_native, +/* Lenovo Ideapad Z470 */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"LENOVO" ), + DMI_MATCH(DMI_PRODUCT_VERSION, "IdeaPad Z470"), + }, + }, {/* https://bugzilla.redhat.com/show_bug.cgi?id=1187004 */ .callback = video_detect_force_native,
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 9/139 perf/smmuv3: Enable HiSilicon Erratum 162001900 quirk for HIP08/09
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yicong Yang <[email protected]>
[ Upstream commit 0242737dc4eb9f6e9a5ea594b3f93efa0b12f28d ]
Some HiSilicon SMMU PMCG suffers the erratum 162001900 that the PMU disable control sometimes fail to disable the counters. This will lead to error or inaccurate data since before we enable the counters the counter's still counting for the event used in last perf session.
This patch tries to fix this by hardening the global disable process. Before disable the PMU, writing an invalid event type (0xffff) to focibly stop the counters. Correspondingly restore each events on pmu::pmu_enable().
--- Documentation/arm64/silicon-errata.rst | 3 ++ drivers/acpi/arm64/iort.c | 5 ++- drivers/perf/arm_smmuv3_pmu.c | 46 +++++++++++++++++++++++++- include/linux/acpi_iort.h | 1 + 4 files changed, 53 insertions(+), 2 deletions(-)
Documentation/arm64/silicon-errata.rst +3 -0
@@ -193,6 +193,9 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | Hisilicon | Hip08 SMMU PMCG | #162001800 | N/A | +----------------+-----------------+-----------------+-----------------------------+ +| Hisilicon | Hip08 SMMU PMCG | #162001900 | N/A | +| | Hip09 SMMU PMCG | | | ++----------------+-----------------+-----------------+-----------------------------+ +----------------+-----------------+-----------------+-----------------------------+ | Qualcomm Tech. | Kryo/Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 | +----------------+-----------------+-----------------+-----------------------------+
drivers/acpi/arm64/iort.c +4 -1
@@ -1699,7 +1699,10 @@ static void __init arm_smmu_v3_pmcg_init_resources(struct resource *res,static struct acpi_platform_list pmcg_plat_info[]__initdata = {/* HiSilicon Hip08 Platform */ {"HISI " ,"HIP08 " ,0 ,ACPI_SIG_IORT , greater_than_or_equal, -"Erratum #162001800" ,IORT_SMMU_V3_PMCG_HISI_HIP08 }, +"Erratum #162001800, Erratum #162001900" ,IORT_SMMU_V3_PMCG_HISI_HIP08 }, +/* HiSilicon Hip09 Platform */ + {"HISI " ,"HIP09 " ,0 ,ACPI_SIG_IORT , greater_than_or_equal, +"Erratum #162001900" ,IORT_SMMU_V3_PMCG_HISI_HIP09 }, { } };
drivers/perf/arm_smmuv3_pmu.c +45 -1
76 lines not on this page · raw message
include/linux/acpi_iort.h +1 -0
@@ -21,6 +21,7 @@*/ #define IORT_SMMU_V3_PMCG_GENERIC 0x00000000/* Generic SMMUv3 PMCG */ #define IORT_SMMU_V3_PMCG_HISI_HIP08 0x00000001/* HiSilicon HIP08 PMCG */ +#define IORT_SMMU_V3_PMCG_HISI_HIP09 0x00000002/* HiSilicon HIP09 PMCG */ int iort_register_domain_token (int trans_id,phys_addr_t base,struct fwnode_handle *fw_node);
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainercover 6.1.55-rc1 review
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +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.55-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.55-rc1
Jamal Hadi Salim <[email protected]>
net/sched: Retire rsvp classifier
Christian König <[email protected]>
drm/amdgpu: fix amdgpu_cs_p1_user_fence
Greg Kroah-Hartman <[email protected]>
Revert "memcg: drop kmem.limit_in_bytes"
Yifan Zhang <[email protected]>
drm/amd/display: fix the white screen issue when >= 64GB DRAM
Shida Zhang <[email protected]>
ext4: fix rec_len verify error
Damien Le Moal <[email protected]>
scsi: pm8001: Setup IRQs on resume
Junxiao Bi <[email protected]>
scsi: megaraid_sas: Fix deadlock on firmware crashdump
Szuying Chen <[email protected]>
ata: libahci: clear pending interrupt status
Niklas Cassel <[email protected]>
ata: libata: disallow dev-initiated LPM transitions to unsupported states
Tommy Huang <[email protected]>
i2c: aspeed: Reset the i2c controller when timeout occurs
Steven Rostedt (Google) <[email protected]>
tracefs: Add missing lockdown check to tracefs_create_dir()
Jeff Layton <[email protected]>
nfsd: fix change_info in NFSv4 RENAME replies
Ondrej Mosnacek <[email protected]>
selinux: fix handling of empty opts in selinux_fs_context_submount()
Steven Rostedt (Google) <[email protected]>
tracing: Have option files inc the trace array ref count
Steven Rostedt (Google) <[email protected]>
tracing: Have current_trace inc the trace array ref count
Steven Rostedt (Google) <[email protected]>
tracing: Increase trace array ref count on enable and filter files
Steven Rostedt (Google) <[email protected]>
tracing: Have event inject files inc the trace array ref count
Steven Rostedt (Google) <[email protected]>
tracing: Have tracing_max_latency inc the trace array ref count
Josef Bacik <[email protected]>
btrfs: check for BTRFS_FS_ERROR in pending ordered assert
Filipe Manana <[email protected]>
btrfs: release path before inode lookup during the ino lookup ioctl
Qu Wenruo <[email protected]>
btrfs: fix a compilation error if DEBUG is defined in btree_dirty_folio
Filipe Manana <[email protected]>
btrfs: fix lockdep splat and potential deadlock after failure running delayed items
Jens Axboe <[email protected]>
dm: don't attempt to queue IO under RCU protection
Hamza Mahfooz <[email protected]>
Revert "drm/amd: Disable S/G for APUs when 64GB or more host memory"
Mariusz Tkaczyk <[email protected]>
md: Put the right device in md_seq_next
Keith Busch <[email protected]>
nvme: avoid bogus CRTO values
Pavel Begunkov <[email protected]>
io_uring/net: fix iter retargeting for selected buf
Amir Goldstein <[email protected]>
ovl: fix incorrect fdput() on aio completion
Amir Goldstein <[email protected]>
ovl: fix failed copyup of fileattr on a symlink
Christian Brauner <[email protected]>
attr: block mode changes of symlinks
Trond Myklebust <[email protected]>
Revert "SUNRPC: Fail faster on bad verifier"
Nigel Croxon <[email protected]>
md/raid1: fix error: ISO C90 forbids mixed declarations
Arnd Bergmann <[email protected]>
samples/hw_breakpoint: fix building without module unloading
Song Liu <[email protected]>
x86/purgatory: Remove LTO flags
Kirill A. Shutemov <[email protected]>
x86/boot/compressed: Reserve more memory for page tables
Lukas Wunner <[email protected]>
panic: Reenable preemption in WARN slowpath
Jinjie Ruan <[email protected]>
scsi: lpfc: Fix the NULL vs IS_ERR() bug for debugfs_create_file()
David Disseldorp <[email protected]>
scsi: target: core: Fix target_cmd_counter leak
Song Shuai <[email protected]>
riscv: kexec: Align the kexeced kernel entry
Peter Zijlstra <[email protected]>
x86/ibt: Suppress spurious ENDBR
Masami Hiramatsu (Google) <[email protected]>
selftests: tracing: Fix to unmount tracefs for recovering environment
Jinjie Ruan <[email protected]>
scsi: qla2xxx: Fix NULL vs IS_ERR() bug for debugfs_create_dir()
Jinjie Ruan <[email protected]>
drm: gm12u320: Fix the timeout usage for usb_bulk_msg()
Varun Prakash <[email protected]>
nvmet-tcp: pass iov_len instead of sg->length to bvec_set_page()
Christoph Hellwig <[email protected]>
nvmet: use bvec_set_page to initialize bvecs
Christoph Hellwig <[email protected]>
block: factor out a bvec_set_page helper
Anand Jain <[email protected]>
btrfs: compare the correct fsid/metadata_uuid in btrfs_validate_super
Anand Jain <[email protected]>
btrfs: add a helper to read the superblock metadata_uuid
Tiezhu Yang <[email protected]>
MIPS: Use "grep -E" instead of "egrep"
Ekansh Gupta <[email protected]>
misc: fastrpc: Fix incorrect DMA mapping unmap request
Dmitry Osipenko <[email protected]>
misc: fastrpc: Prepare to dynamic dma-buf locking specification
Dmitry Osipenko <[email protected]>
dma-buf: Add unlocked variant of attachment-mapping functions
John Ogness <[email protected]>
printk: Consolidate console deferred printing
John Ogness <[email protected]>
printk: Keep non-panic-CPUs out of console lock
Rob Clark <[email protected]>
interconnect: Fix locking for runpm vs reclaim
Zhen Lei <[email protected]>
kobject: Add sanity check for kset->kobj.ktype in kset_register()
Sakari Ailus <[email protected]>
media: pci: ipu3-cio2: Initialise timing struct to avoid a compiler warning
Xu Yang <[email protected]>
usb: chipidea: add workaround for chipidea PEC bug
Xu Yang <[email protected]>
usb: ehci: add workaround for chipidea PORTSC.PEC bug
Baoquan He <[email protected]>
misc: open-dice: make OPEN_DICE depend on HAS_IOMEM
Christophe Leroy <[email protected]>
serial: cpm_uart: Avoid suspicious locking
Konstantin Shelekhin <[email protected]>
scsi: target: iscsi: Fix buffer overflow in lio_target_nacl_info_show()
Chenyuan Mi <[email protected]>
tools: iio: iio_generic_buffer: Fix some integer type and calculation
Ma Ke <[email protected]>
usb: gadget: fsl_qe_udc: validate endpoint index for ch9 udc
Xiaolei Wang <[email protected]>
usb: cdns3: Put the cdns set active part outside the spin lock
Hans Verkuil <[email protected]>
media: pci: cx23885: replace BUG with error return
Hans Verkuil <[email protected]>
media: tuners: qt1010: replace BUG_ON with a regular error
Justin Tee <[email protected]>
scsi: lpfc: Abort outstanding ELS cmds when mailbox timeout error is detected
Zhang Shurong <[email protected]>
media: dvb-usb-v2: gl861: Fix null-ptr-deref in gl861_i2c_master_xfer
Zhang Shurong <[email protected]>
media: az6007: Fix null-ptr-deref in az6007_i2c_xfer()
Zhang Shurong <[email protected]>
media: anysee: fix null-ptr-deref in anysee_master_xfer
Zhang Shurong <[email protected]>
media: af9005: Fix null-ptr-deref in af9005_i2c_xfer
Zhang Shurong <[email protected]>
media: dw2102: Fix null-ptr-deref in dw2102_i2c_transfer()
Zhang Shurong <[email protected]>
media: dvb-usb-v2: af9035: Fix null-ptr-deref in af9035_i2c_master_xfer
Lu Hongfei <[email protected]>
media: mdp3: Fix resource leaks in of_find_device_by_node
Yong-Xuan Wang <[email protected]>
PCI: fu740: Set the number of MSI vectors
Nirmal Patel <[email protected]>
PCI: vmd: Disable bridge window for domain reset
ruanjinjie <[email protected]>
powerpc/pseries: fix possible memory leak in ibmebus_bus_init()
Mårten Lindahl <[email protected]>
ARM: 9317/1: kexec: Make smp stop calls asynchronous
Mark Brown <[email protected]>
PCI: dwc: Provide deinit callback for i.MX
Liu Shixin via Jfs-discussion <[email protected]>
jfs: fix invalid free of JFS_IP(ipimap)->i_imap in diUnmount
Andrew Kanner <[email protected]>
fs/jfs: prevent double-free in dbUnmount() after failed jfs_remount()
Georg Ottinger <[email protected]>
ext2: fix datatype of block number in ext2_xattr_set2()
Zhang Shurong <[email protected]>
md: raid1: fix potential OOB in raid1_remove_disk()
Tony Lindgren <[email protected]>
bus: ti-sysc: Configure uart quirks for k3 SoC
AngeloGioacchino Del Regno <[email protected]>
drm/mediatek: dp: Change logging to dev for mtk_dp_aux_transfer()
Tuo Li <[email protected]>
drm/exynos: fix a possible null-pointer dereference due to data race in exynos_drm_crtc_atomic_disable()
Leo Chen <[email protected]>
drm/amd/display: Blocking invalid 420 modes on HDMI TMDS for DCN314
Leo Chen <[email protected]>
drm/amd/display: Blocking invalid 420 modes on HDMI TMDS for DCN31
Austin Zheng <[email protected]>
drm/amd/display: Use DTBCLK as refclk instead of DPREFCLK
Pierre-Louis Bossart <[email protected]>
ALSA: hda: intel-dsp-cfg: add LunarLake support
Uday M Bhat <[email protected]>
ASoC: Intel: sof_sdw: Update BT offload config for soundwire config
Pierre-Louis Bossart <[email protected]>
ASoC: SOF: topology: simplify code to prevent static analysis warnings
Leo Ma <[email protected]>
drm/amd/display: Fix underflow issue on 175hz timing
Rong Tao <[email protected]>
samples/hw_breakpoint: Fix kernel BUG 'invalid opcode: 0000'
Krzysztof Kozlowski <[email protected]>
arm64: dts: qcom: sm8250-edo: correct ramoops pmsg-size
Krzysztof Kozlowski <[email protected]>
arm64: dts: qcom: sm8150-kumano: correct ramoops pmsg-size
Krzysztof Kozlowski <[email protected]>
arm64: dts: qcom: sm6350: correct ramoops pmsg-size
Krzysztof Kozlowski <[email protected]>
arm64: dts: qcom: sm6125-pdx201: correct ramoops pmsg-size
Ralph Campbell <[email protected]>
drm/edid: Add quirk for OSVR HDK 2.0
Marek Vasut <[email protected]>
drm/bridge: tc358762: Instruct DSI host to generate HSE packets
Hao Luo <[email protected]>
libbpf: Free btf_vmlinux when closing bpf_object
Johannes Berg <[email protected]>
wifi: mac80211_hwsim: drop short frames
Johannes Berg <[email protected]>
wifi: mac80211: check for station first in client probe
Johannes Berg <[email protected]>
wifi: cfg80211: ocb: don't leave if not joined
Johannes Berg <[email protected]>
wifi: cfg80211: reject auth/assoc to AP with our address
GONG, Ruiqi <[email protected]>
netfilter: ebtables: fix fortify warnings in size_entry_mwt()
Johannes Berg <[email protected]>
wifi: mac80211: check S1G action frame size
GONG, Ruiqi <[email protected]>
alx: fix OOB-read compiler warning
Giulio Benetti <[email protected]>
mmc: sdhci-esdhc-imx: improve ESDHC_FLAG_ERR010450
Alexander Steffen <[email protected]>
tpm_tis: Resend command to recover from data transfer errors
Eric Dumazet <[email protected]>
netlink: convert nlk->flags to atomic flags
Ying Hsu <[email protected]>
Bluetooth: Fix hci_suspend_sync crash
Mark O'Donovan <[email protected]>
crypto: lib/mpi - avoid null pointer deref in mpi_cmp_ui()
xu xin <[email protected]>
net/ipv4: return the real errno instead of -EINVAL
Kuniyuki Iwashima <[email protected]>
net: Use sockaddr_storage for getsockopt(SO_PEERNAME).
John Watts <[email protected]>
can: sun4i_can: Add support for the Allwinner D1
John Watts <[email protected]>
can: sun4i_can: Add acceptance register quirk
Dmitry Antipov <[email protected]>
wifi: wil6210: fix fortify warnings
Matt Whitlock <[email protected]>
mt76: mt7921: don't assume adequate headroom for SDIO headers
Dmitry Antipov <[email protected]>
wifi: mwifiex: fix fortify warning
Dongliang Mu <[email protected]>
wifi: ath9k: fix printk specifier
Dmitry Antipov <[email protected]>
wifi: ath9k: fix fortify warnings
Wojciech Drewek <[email protected]>
ice: Don't tx before switchdev is fully configured
Azeem Shaikh <[email protected]>
crypto: lrw,xts - Replace strlcpy with strscpy
Jiri Pirko <[email protected]>
devlink: remove reload failed checks in params get/set callbacks
Zhangjin Wu <[email protected]>
selftests/nolibc: fix up kernel parameters support
Mario Limonciello <[email protected]>
ACPI: x86: s2idle: Catch multiple ACPI_TYPE_PACKAGE objects
Tomislav Novak <[email protected]>
hw_breakpoint: fix single-stepping when using bpf_overflow_handler
Xu Yang <[email protected]>
perf/imx_ddr: speed up overflow frequency of cycle
Yicong Yang <[email protected]>
perf/smmuv3: Enable HiSilicon Erratum 162001900 quirk for HIP08/09
Jiri Slaby (SUSE) <[email protected]>
ACPI: video: Add backlight=native DMI quirk for Lenovo Ideapad Z470
Paul E. McKenney <[email protected]>
scftorture: Forgive memory-allocation failure if KASAN
Zqiang <[email protected]>
rcuscale: Move rcu_scale_writer() schedule_timeout_uninterruptible() to _idle()
Wander Lairson Costa <[email protected]>
kernel/fork: beware of __put_task_struct() calling context
Abhishek Mainkar <[email protected]>
ACPICA: Add AML_NO_OPERAND_RESOLVE flag to Timer
Will Shiu <[email protected]>
locks: fix KASAN: use-after-free in trace_event_raw_event_filelock_lock
Qu Wenruo <[email protected]>
btrfs: output extra debug info if we failed to find an inline backref
Fedor Pchelkin <[email protected]>
autofs: fix memory leak of waitqueues in autofs_catatonic_mode
-------------
Diffstat:
Documentation/admin-guide/cgroup-v1/memory.rst | 2 + Documentation/arm64/silicon-errata.rst | 3 + Makefile | 4 +- arch/arm/kernel/hw_breakpoint.c | 8 +- arch/arm/kernel/machine_kexec.c | 14 +- .../dts/qcom/sm6125-sony-xperia-seine-pdx201.dts | 2 +- arch/arm64/boot/dts/qcom/sm6350.dtsi | 2 +- .../boot/dts/qcom/sm8150-sony-xperia-kumano.dtsi | 2 +- .../boot/dts/qcom/sm8250-sony-xperia-edo.dtsi | 2 +- arch/arm64/kernel/hw_breakpoint.c | 4 +- arch/mips/Makefile | 2 +- arch/mips/vdso/Makefile | 2 +- arch/powerpc/platforms/pseries/ibmebus.c | 1 + arch/riscv/kernel/elf_kexec.c | 8 +- arch/x86/boot/compressed/ident_map_64.c | 8 + arch/x86/include/asm/boot.h | 45 +- arch/x86/include/asm/linkage.h | 8 + arch/x86/purgatory/Makefile | 4 + block/bio-integrity.c | 7 +- block/bio.c | 12 +- crypto/lrw.c | 6 +- crypto/xts.c | 6 +- drivers/acpi/acpica/psopcode.c | 2 +- drivers/acpi/arm64/iort.c | 5 +- drivers/acpi/video_detect.c | 9 + drivers/acpi/x86/s2idle.c | 6 + drivers/ata/ahci.c | 9 + drivers/ata/libahci.c | 35 +- drivers/ata/libata-sata.c | 19 +- drivers/bus/ti-sysc.c | 2 + drivers/char/tpm/tpm_tis_core.c | 13 +- drivers/dma-buf/dma-buf.c | 53 ++ drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 - drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 18 +- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 26 - drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 19 +- drivers/gpu/drm/amd/display/dc/dcn32/dcn32_dccg.c | 3 +- .../amd/display/dc/dml/dcn31/display_mode_vba_31.c | 4 +- .../display/dc/dml/dcn314/display_mode_vba_314.c | 4 +- .../dc/dml/dcn32/display_mode_vba_util_32.c | 7 +- drivers/gpu/drm/bridge/tc358762.c | 2 +- drivers/gpu/drm/drm_edid.c | 1 + drivers/gpu/drm/exynos/exynos_drm_crtc.c | 5 +- drivers/gpu/drm/mediatek/mtk_dp.c | 6 +- drivers/gpu/drm/tiny/gm12u320.c | 10 +- drivers/i2c/busses/i2c-aspeed.c | 7 +- drivers/interconnect/core.c | 8 +- drivers/md/dm.c | 23 +- drivers/md/md.c | 2 +- drivers/md/raid1.c | 3 + drivers/media/pci/cx23885/cx23885-video.c | 2 +- drivers/media/pci/intel/ipu3/ipu3-cio2-main.c | 2 +- .../media/platform/mediatek/mdp3/mtk-mdp3-comp.c | 2 + drivers/media/tuners/qt1010.c | 11 +- drivers/media/usb/dvb-usb-v2/af9035.c | 14 +- drivers/media/usb/dvb-usb-v2/anysee.c | 2 +- drivers/media/usb/dvb-usb-v2/az6007.c | 8 + drivers/media/usb/dvb-usb-v2/gl861.c | 2 +- drivers/media/usb/dvb-usb/af9005.c | 5 + drivers/media/usb/dvb-usb/dw2102.c | 24 + drivers/misc/Kconfig | 1 + drivers/misc/fastrpc.c | 12 +- drivers/mmc/host/sdhci-esdhc-imx.c | 7 +- drivers/net/can/Kconfig | 4 +- drivers/net/can/sun4i_can.c | 22 +- drivers/net/ethernet/atheros/alx/ethtool.c | 5 +- drivers/net/ethernet/intel/ice/ice_eswitch.c | 3 + drivers/net/wireless/ath/ath9k/ahb.c | 4 +- drivers/net/wireless/ath/ath9k/mac.h | 6 +- drivers/net/wireless/ath/ath9k/pci.c | 4 +- drivers/net/wireless/ath/ath9k/xmit.c | 4 +- drivers/net/wireless/ath/wil6210/txrx.c | 2 +- drivers/net/wireless/ath/wil6210/txrx.h | 6 +- drivers/net/wireless/ath/wil6210/txrx_edma.c | 2 +- drivers/net/wireless/ath/wil6210/txrx_edma.h | 6 +- drivers/net/wireless/mac80211_hwsim.c | 7 +- drivers/net/wireless/marvell/mwifiex/tdls.c | 9 +- drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 4 + drivers/nvme/host/core.c | 54 +- drivers/nvme/target/io-cmd-file.c | 10 +- drivers/nvme/target/tcp.c | 5 +- drivers/pci/controller/dwc/pci-imx6.c | 1 + drivers/pci/controller/dwc/pcie-fu740.c | 1 + drivers/pci/controller/vmd.c | 19 +- drivers/perf/arm_smmuv3_pmu.c | 46 +- drivers/perf/fsl_imx8_ddr_perf.c | 21 + drivers/scsi/lpfc/lpfc.h | 1 + drivers/scsi/lpfc/lpfc_debugfs.c | 14 +- drivers/scsi/lpfc/lpfc_els.c | 25 +- drivers/scsi/lpfc/lpfc_init.c | 20 +- drivers/scsi/lpfc/lpfc_sli.c | 8 +- drivers/scsi/megaraid/megaraid_sas.h | 2 +- drivers/scsi/megaraid/megaraid_sas_base.c | 21 +- drivers/scsi/pm8001/pm8001_init.c | 51 +- drivers/scsi/qla2xxx/qla_dfs.c | 6 +- drivers/target/iscsi/iscsi_target_configfs.c | 54 +- drivers/target/target_core_transport.c | 1 + drivers/tty/serial/cpm_uart/cpm_uart_core.c | 13 +- drivers/usb/cdns3/cdns3-plat.c | 3 +- drivers/usb/cdns3/cdnsp-pci.c | 3 +- drivers/usb/cdns3/core.c | 15 +- drivers/usb/cdns3/core.h | 7 +- drivers/usb/chipidea/ci.h | 1 + drivers/usb/chipidea/ci_hdrc_imx.c | 4 +- drivers/usb/chipidea/core.c | 2 + drivers/usb/chipidea/host.c | 1 + drivers/usb/gadget/udc/fsl_qe_udc.c | 2 + drivers/usb/host/ehci-hcd.c | 8 +- drivers/usb/host/ehci-hub.c | 10 +- drivers/usb/host/ehci.h | 10 + fs/attr.c | 20 +- fs/autofs/waitq.c | 3 +- fs/btrfs/delayed-inode.c | 19 +- fs/btrfs/disk-io.c | 22 +- fs/btrfs/extent-tree.c | 5 + fs/btrfs/ioctl.c | 8 +- fs/btrfs/ordered-data.c | 2 +- fs/btrfs/volumes.c | 8 + fs/btrfs/volumes.h | 1 + fs/ext2/xattr.c | 4 +- fs/ext4/namei.c | 26 +- fs/jfs/jfs_dmap.c | 1 + fs/jfs/jfs_imap.c | 1 + fs/locks.c | 2 +- fs/nfsd/nfs4proc.c | 4 +- fs/overlayfs/copy_up.c | 3 +- fs/overlayfs/file.c | 9 +- fs/tracefs/inode.c | 3 + include/linux/acpi_iort.h | 1 + include/linux/bvec.h | 15 + include/linux/dma-buf.h | 6 + include/linux/instruction_pointer.h | 5 + include/linux/libata.h | 4 + include/linux/perf_event.h | 22 +- include/linux/sched/task.h | 28 +- include/linux/usb/chipidea.h | 1 + include/uapi/linux/netfilter_bridge/ebtables.h | 14 +- io_uring/net.c | 5 + kernel/fork.c | 8 + kernel/panic.c | 1 + kernel/printk/printk.c | 80 ++- kernel/printk/printk_safe.c | 9 +- kernel/rcu/rcuscale.c | 2 +- kernel/scftorture.c | 6 +- kernel/trace/trace.c | 68 +- kernel/trace/trace.h | 2 + kernel/trace/trace_events.c | 6 +- kernel/trace/trace_events_inject.c | 3 +- lib/kobject.c | 5 + lib/mpi/mpi-cmp.c | 8 +- mm/memcontrol.c | 10 + net/bluetooth/hci_core.c | 4 + net/bridge/netfilter/ebtables.c | 3 +- net/core/sock.c | 6 +- net/devlink/leftover.c | 4 +- net/ipv4/ip_output.c | 2 +- net/mac80211/cfg.c | 15 +- net/mac80211/rx.c | 4 + net/netlink/af_netlink.c | 90 +-- net/netlink/af_netlink.h | 22 +- net/netlink/diag.c | 10 +- net/sched/Kconfig | 28 - net/sched/Makefile | 2 - net/sched/cls_rsvp.c | 24 - net/sched/cls_rsvp.h | 764 --------------------- net/sched/cls_rsvp6.c | 24 - net/sunrpc/clnt.c | 2 +- net/wireless/mlme.c | 13 + net/wireless/ocb.c | 3 + samples/hw_breakpoint/data_breakpoint.c | 4 +- security/selinux/hooks.c | 10 +- sound/hda/intel-dsp-config.c | 8 + sound/soc/intel/boards/sof_sdw.c | 4 +- sound/soc/sof/topology.c | 5 +- tools/iio/iio_generic_buffer.c | 17 +- tools/lib/bpf/libbpf.c | 1 + tools/testing/selftests/ftrace/ftracetest | 8 + tools/testing/selftests/nolibc/nolibc-test.c | 33 +- .../tc-testing/tc-tests/filters/rsvp.json | 203 ------ 179 files changed, 1227 insertions(+), 1609 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 39/139 drm/bridge: tc358762: Instruct DSI host to generate HSE packets
6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marek Vasut <[email protected]>
[ Upstream commit 362fa8f6e6a05089872809f4465bab9d011d05b3 ]
This bridge seems to need the HSE packet, otherwise the image is shifted up and corrupted at the bottom. This makes the bridge work with Samsung DSIM on i.MX8MM and i.MX8MP.
--- drivers/gpu/drm/bridge/tc358762.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/bridge/tc358762.c +1 -1
@@ -216,7 +216,7 @@ static int tc358762_probe(struct mipi_dsi_device *dsi) dsi->lanes =1 ; dsi->format =MIPI_DSI_FMT_RGB888 ; dsi->mode_flags =MIPI_DSI_MODE_VIDEO |MIPI_DSI_MODE_VIDEO_SYNC_PULSE | -MIPI_DSI_MODE_LPM ; +MIPI_DSI_MODE_LPM |MIPI_DSI_MODE_VIDEO_HSE ; ret =tc358762_parse_dt (ctx);if (ret <0 )
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 48/139 ASoC: Intel: sof_sdw: Update BT offload config for soundwire config
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Uday M Bhat <[email protected]>
[ Upstream commit a14aded9299187bb17ef90700eb2cf1120ef5885 ]
For soundwire config, SSP1 is used for BT offload. This is enabled in sof_sdw_quirk_table
--- sound/soc/intel/boards/sof_sdw.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
sound/soc/intel/boards/sof_sdw.c +3 -1
@@ -388,7 +388,9 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {DMI_MATCH (DMI_SYS_VENDOR ,"Google" ), DMI_MATCH(DMI_PRODUCT_NAME, "Rex"), }, - .driver_data = (void *)(SOF_SDW_PCH_DMIC), + .driver_data = (void *)(SOF_SDW_PCH_DMIC | +SOF_BT_OFFLOAD_SSP (1 ) | + SOF_SSP_BT_OFFLOAD_PRESENT), }, /* LunarLake devices */ {
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 49/139 ALSA: hda: intel-dsp-cfg: add LunarLake support
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pierre-Louis Bossart <[email protected]>
[ Upstream commit d2852b8c045ebd31d753b06f2810df5be30ed56a ]
One more PCI ID for the road.
--- sound/hda/intel-dsp-config.c | 8 ++++++++ 1 file changed, 8 insertions(+)
sound/hda/intel-dsp-config.c +8 -0
@@ -481,6 +481,14 @@ static const struct config_entry config_table[] = { },#endif +/* Lunar Lake */ +#if IS_ENABLED (CONFIG_SND_SOC_SOF_LUNARLAKE ) +/* Lunarlake-P */ + { + .flags = FLAG_SOF | FLAG_SOF_ONLY_IF_DMIC_OR_SOUNDWIRE, + .device = PCI_DEVICE_ID_INTEL_HDA_LNL_P, + }, +#endif };static const struct config_entry *snd_intel_dsp_find_config
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 50/139 drm/amd/display: Use DTBCLK as refclk instead of DPREFCLK
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Austin Zheng <[email protected]>
[ Upstream commit 4a30cc2bd281fa176a68b5305cd3695d636152ad ]
[Why]
Flash of corruption observed when UCLK switching after transitioning from DTBCLK to DPREFCLK on subVP(DP) + subVP(HDMI) config Scenario where DPREFCLK is required instead of DTBCLK is not expected
[How]
Always set the DTBCLK source as DTBCLK0
--- drivers/gpu/drm/amd/display/dc/dcn32/dcn32_dccg.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_dccg.c +2 -1
@@ -290,7 +290,8 @@ static void dccg32_set_dpstreamclk(struct dcn_dccg *dccg_dcn =TO_DCN_DCCG (dccg);/* set the dtbclk_p source */ -dccg32_set_dtbclk_p_src (dccg, src, otg_inst); +/* always program refclk as DTBCLK. No use-case expected to require DPREFCLK as refclk */ +dccg32_set_dtbclk_p_src (dccg,DTBCLK0 , otg_inst);/* enabled to select one of the DTBCLKs for pipe */ switch (dp_hpo_inst) {
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 51/139 drm/amd/display: Blocking invalid 420 modes on HDMI TMDS for DCN31
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Leo Chen <[email protected]>
[ Upstream commit 026a71babf48efb6b9884a3a66fa31aec9e1ea54 ]
[Why & How]
HDMI TMDS does not have ODM support. Filtering 420 modes that exceed the 4096 FMT limitation on DCN31 will resolve intermittent corruptions issues.
--- .../gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c +3 -1
@@ -4133,7 +4133,9 @@ void dml31_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l }if (v->OutputFormat[k] == dm_420 && v->HActive[k] >DCN31_MAX_FMT_420_BUFFER_WIDTH && v->ODMCombineEnablePerState[i][k] != dm_odm_combine_mode_4to1) { -if (v->HActive[k] /2 >DCN31_MAX_FMT_420_BUFFER_WIDTH ) { +if (v->Output[k] == dm_hdmi) { + FMTBufferExceeded = true; + }else if (v->HActive[k] /2 >DCN31_MAX_FMT_420_BUFFER_WIDTH ) { v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_4to1; v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine4To1;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 52/139 drm/amd/display: Blocking invalid 420 modes on HDMI TMDS for DCN314
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Leo Chen <[email protected]>
[ Upstream commit 4c6107a653ccf361cb1b6ba35d558a1a5e6e57ac ]
[Why & How]
HDMI TMDS does not have ODM support. Filtering 420 modes that exceed the 4096 FMT limitation on DCN314 will resolve intermittent corruptions issues.
--- .../gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c +3 -1
@@ -4225,7 +4225,9 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_ }if (v->OutputFormat[k] == dm_420 && v->HActive[k] >DCN314_MAX_FMT_420_BUFFER_WIDTH && v->ODMCombineEnablePerState[i][k] != dm_odm_combine_mode_4to1) { -if (v->HActive[k] /2 >DCN314_MAX_FMT_420_BUFFER_WIDTH ) { +if (v->Output[k] == dm_hdmi) { + FMTBufferExceeded = true; + }else if (v->HActive[k] /2 >DCN314_MAX_FMT_420_BUFFER_WIDTH ) { v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_4to1; v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine4To1;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 53/139 drm/exynos: fix a possible null-pointer dereference due to data race in exynos_drm_crtc_atomic_disable()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tuo Li <[email protected]>
[ Upstream commit 2e63972a2de14482d0eae1a03a73e379f1c3f44c ]
The variable crtc->state->event is often protected by the lock crtc->dev->event_lock when is accessed. However, it is accessed as a condition of an if statement in exynos_drm_crtc_atomic_disable() without holding the lock:
if (crtc->state->event && !crtc->state->active)
However, if crtc->state->event is changed to NULL by another thread right after the conditions of the if statement is checked to be true, a null-pointer dereference can occur in drm_crtc_send_vblank_event():
e->pipe = pipe;
To fix this possible null-pointer dereference caused by data race, the spin lock coverage is extended to protect the if statement as well as the function call to drm_crtc_send_vblank_event().
Added relevant link.
--- drivers/gpu/drm/exynos/exynos_drm_crtc.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/gpu/drm/exynos/exynos_drm_crtc.c +2 -3
@@ -39,13 +39,12 @@ static void exynos_drm_crtc_atomic_disable(struct drm_crtc *crtc,if (exynos_crtc->ops->atomic_disable) exynos_crtc->ops->atomic_disable (exynos_crtc); +spin_lock_irq (&crtc->dev->event_lock);if (crtc->state->event && !crtc->state->active) { -spin_lock_irq (&crtc->dev->event_lock);drm_crtc_send_vblank_event (crtc, crtc->state->event); -spin_unlock_irq (&crtc->dev->event_lock); - crtc->state->event =NULL ; } +spin_unlock_irq (&crtc->dev->event_lock); } static int exynos_crtc_atomic_check(struct drm_crtc *crtc,
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 54/139 drm/mediatek: dp: Change logging to dev for mtk_dp_aux_transfer()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: AngeloGioacchino Del Regno <[email protected]>
[ Upstream commit fd70e2019bfbcb0ed90c5e23839bf510ce6acf8f ]
Change logging from drm_{err,info}() to dev_{err,info}() in functions mtk_dp_aux_transfer() and mtk_dp_aux_do_transfer(): this will be essential to avoid getting NULL pointer kernel panics if any kind of error happens during AUX transfers happening before the bridge is attached.
This may potentially start happening in a later commit implementing aux-bus support, as AUX transfers will be triggered from the panel driver (for EDID) before the mtk-dp bridge gets attached, and it's done in preparation for the same.
--- drivers/gpu/drm/mediatek/mtk_dp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/gpu/drm/mediatek/mtk_dp.c +3 -3
@@ -847,7 +847,7 @@ static int mtk_dp_aux_do_transfer(struct mtk_dp *mtk_dp, bool is_read, u8 cmd,u32 phy_status =mtk_dp_read (mtk_dp,MTK_DP_AUX_P0_3628 ) &AUX_RX_PHY_STATE_AUX_TX_P0_MASK ;if (phy_status !=AUX_RX_PHY_STATE_AUX_TX_P0_RX_IDLE ) { -drm_err (mtk_dp->drm_dev, +dev_err (mtk_dp->dev,"AUX Rx Aux hang, need SW reset\n" );return -EIO ; }
@@ -2062,7 +2062,7 @@ static ssize_t mtk_dp_aux_transfer(struct drm_dp_aux *mtk_aux, is_read = true;break ;default : -drm_err (mtk_aux->drm_dev,"invalid aux cmd = %d\n" , +dev_err (mtk_dp->dev,"invalid aux cmd = %d\n" , msg->request); ret = -EINVAL ; goto err;
@@ -2078,7 +2078,7 @@ static ssize_t mtk_dp_aux_transfer(struct drm_dp_aux *mtk_aux, to_access, &msg->reply);if (ret) { -drm_info (mtk_dp->drm_dev, +dev_info (mtk_dp->dev,"Failed to do AUX transfer: %d\n" , ret); goto err; }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 55/139 bus: ti-sysc: Configure uart quirks for k3 SoC
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tony Lindgren <[email protected]>
[ Upstream commit 03a711d3cb83692733f865312f49e665c49de6de ]
Enable the uart quirks similar to the earlier SoCs. Let's assume we are likely going to need a k3 specific quirk mask separate from the earlier SoCs, so let's not start changing the revision register mask at this point.
Note that SYSC_QUIRK_LEGACY_IDLE will be needed until we can remove the need for pm_runtime_irq_safe() from 8250_omap driver.
--- drivers/bus/ti-sysc.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/bus/ti-sysc.c +2 -0
@@ -1548,6 +1548,8 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = { SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_LEGACY_IDLE),SYSC_QUIRK ("uart" ,0 ,0x50 ,0x54 ,0x58 ,0x47422e03 ,0xffffffff ,SYSC_QUIRK_SWSUP_SIDLE |SYSC_QUIRK_LEGACY_IDLE ), +SYSC_QUIRK ("uart" ,0 ,0x50 ,0x54 ,0x58 ,0x47424e03 ,0xffffffff , +SYSC_QUIRK_SWSUP_SIDLE |SYSC_QUIRK_LEGACY_IDLE ),/* Quirks that need to be set based on the module address */ SYSC_QUIRK("mcpdm", 0x40132000, 0, 0x10, -ENODEV, 0x50000800, 0xffffffff,
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 56/139 md: raid1: fix potential OOB in raid1_remove_disk()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhang Shurong <[email protected]>
[ Upstream commit 8b0472b50bcf0f19a5119b00a53b63579c8e1e4d ]
If rddev->raid_disk is greater than mddev->raid_disks, there will be an out-of-bounds in raid1_remove_disk(). We have already found similar reports as follows:
1) commit d17f744e883b ("md-raid10: fix KASAN warning")
2) commit 1ebc2cec0b7d ("dm raid: fix KASAN warning in raid5_remove_disk")
Fix this bug by checking whether the "number" variable is valid.
--- drivers/md/raid1.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/md/raid1.c +4 -0
@@ -1826,6 +1826,10 @@ static int raid1_remove_disk(struct mddev *mddev, struct md_rdev *rdev)struct r1conf *conf = mddev->private;int err =0 ;int number = rdev->raid_disk; + +if (unlikely (number >= conf->raid_disks)) + goto abort; +struct raid1_info *p = conf->mirrors + number;if (rdev != p->rdev)
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 57/139 ext2: fix datatype of block number in ext2_xattr_set2()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Georg Ottinger <[email protected]>
[ Upstream commit e88076348425b7d0491c8c98d8732a7df8de7aa3 ]
I run a small server that uses external hard drives for backups. The backup software I use uses ext2 filesystems with 4KiB block size and the server is running SELinux and therefore relies on xattr. I recently upgraded the hard drives from 4TB to 12TB models. I noticed that after transferring some TBs I got a filesystem error "Freeing blocks not in datazone - block = 18446744071529317386, count = 1" and the backup process stopped. Trying to fix the fs with e2fsck resulted in a completely corrupted fs. The error probably came from ext2_free_blocks(), and because of the large number 18e19 this problem immediately looked like some kind of integer overflow. Whereas the 4TB fs was about 1e9 blocks, the new 12TB is about 3e9 blocks. So, searching the ext2 code, I came across the line in fs/ext2/xattr.c:745 where ext2_new_block() is called and the resulting block number is stored in the variable block as an int datatype. If a block with a block number greater than INT32_MAX is returned, this variable overflows and the call to sb_getblk() at line fs/ext2/xattr.c:750 fails, then the call to ext2_free_blocks() produces the error.
Message-Id: <[email protected]>
--- fs/ext2/xattr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/ext2/xattr.c +2 -2
@@ -744,10 +744,10 @@ ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,/* We need to allocate a new block */ ext2_fsblk_t goal =ext2_group_first_block_no (sb,EXT2_I (inode)->i_block_group); -int block =ext2_new_block (inode, goal, &error); +ext2_fsblk_t block =ext2_new_block (inode, goal, &error);if (error) goto cleanup; -ea_idebug (inode,"creating block %d" , block); +ea_idebug (inode,"creating block %lu" , block); new_bh =sb_getblk (sb, block);if (unlikely (!new_bh)) {
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 40/139 drm/edid: Add quirk for OSVR HDK 2.0
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ralph Campbell <[email protected]>
[ Upstream commit 98d4cb705bc00afd4a9a71cc1e84f7111682639a ]
The OSVR virtual reality headset HDK 2.0 uses a different EDID vendor and device identifier than the HDK 1.1 - 1.4 headsets. Add the HDK 2.0 vendor and device identifier to the quirks table so that window managers do not try to display the desktop screen on the headset display.
--- drivers/gpu/drm/drm_edid.c | 1 + 1 file changed, 1 insertion(+)
drivers/gpu/drm/drm_edid.c +1 -0
@@ -231,6 +231,7 @@ static const struct edid_quirk {/* OSVR HDK and HDK2 VR Headsets */ EDID_QUIRK ('S' ,'V' ,'R' ,0x1019 ,EDID_QUIRK_NON_DESKTOP ), + EDID_QUIRK('A', 'U', 'O', 0x1111, EDID_QUIRK_NON_DESKTOP), };/*
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 58/139 fs/jfs: prevent double-free in dbUnmount() after failed jfs_remount()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrew Kanner <[email protected]>
[ Upstream commit cade5397e5461295f3cb87880534b6a07cafa427 ]
Syzkaller reported the following issue:
==================================================================
BUG: KASAN: double-free in slab_free mm/slub.c:3787 [inline] BUG: KASAN: double-free in __kmem_cache_free+0x71/0x110 mm/slub.c:3800 Free of addr ffff888086408000 by task syz-executor.4/12750 [...] Call Trace: <TASK> [...] kasan_report_invalid_free+0xac/0xd0 mm/kasan/report.c:482 ____kasan_slab_free+0xfb/0x120 kasan_slab_free include/linux/kasan.h:177 [inline] slab_free_hook mm/slub.c:1781 [inline] slab_free_freelist_hook+0x12e/0x1a0 mm/slub.c:1807 slab_free mm/slub.c:3787 [inline] __kmem_cache_free+0x71/0x110 mm/slub.c:3800 dbUnmount+0xf4/0x110 fs/jfs/jfs_dmap.c:264 jfs_umount+0x248/0x3b0 fs/jfs/jfs_umount.c:87 jfs_put_super+0x86/0x190 fs/jfs/super.c:194 generic_shutdown_super+0x130/0x310 fs/super.c:492 kill_block_super+0x79/0xd0 fs/super.c:1386 deactivate_locked_super+0xa7/0xf0 fs/super.c:332 cleanup_mnt+0x494/0x520 fs/namespace.c:1291 task_work_run+0x243/0x300 kernel/task_work.c:179 resume_user_mode_work include/linux/resume_user_mode.h:49 [inline] exit_to_user_mode_loop+0x124/0x150 kernel/entry/common.c:171 exit_to_user_mode_prepare+0xb2/0x140 kernel/entry/common.c:203 __syscall_exit_to_user_mode_work kernel/entry/common.c:285 [inline] syscall_exit_to_user_mode+0x26/0x60 kernel/entry/common.c:296 do_syscall_64+0x49/0xb0 arch/x86/entry/common.c:86 entry_SYSCALL_64_after_hwframe+0x63/0xcd [...] </TASK> Allocated by task 13352: kasan_save_stack mm/kasan/common.c:45 [inline] kasan_set_track+0x3d/0x60 mm/kasan/common.c:52 ____kasan_kmalloc mm/kasan/common.c:371 [inline] __kasan_kmalloc+0x97/0xb0 mm/kasan/common.c:380 kmalloc include/linux/slab.h:580 [inline] dbMount+0x54/0x980 fs/jfs/jfs_dmap.c:164 jfs_mount+0x1dd/0x830 fs/jfs/jfs_mount.c:121 jfs_fill_super+0x590/0xc50 fs/jfs/super.c:556 mount_bdev+0x26c/0x3a0 fs/super.c:1359 legacy_get_tree+0xea/0x180 fs/fs_context.c:610 vfs_get_tree+0x88/0x270 fs/super.c:1489 do_new_mount+0x289/0xad0 fs/namespace.c:3145 do_mount fs/namespace.c:3488 [inline] __do_sys_mount fs/namespace.c:3697 [inline] __se_sys_mount+0x2d3/0x3c0 fs/namespace.c:3674 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd Freed by task 13352: kasan_save_stack mm/kasan/common.c:45 [inline] kasan_set_track+0x3d/0x60 mm/kasan/common.c:52 kasan_save_free_info+0x27/0x40 mm/kasan/generic.c:518 ____kasan_slab_free+0xd6/0x120 mm/kasan/common.c:236 kasan_slab_free include/linux/kasan.h:177 [inline] slab_free_hook mm/slub.c:1781 [inline] slab_free_freelist_hook+0x12e/0x1a0 mm/slub.c:1807 slab_free mm/slub.c:3787 [inline] __kmem_cache_free+0x71/0x110 mm/slub.c:3800 dbUnmount+0xf4/0x110 fs/jfs/jfs_dmap.c:264 jfs_mount_rw+0x545/0x740 fs/jfs/jfs_mount.c:247 jfs_remount+0x3db/0x710 fs/jfs/super.c:454 reconfigure_super+0x3bc/0x7b0 fs/super.c:935 vfs_fsconfig_locked fs/fsopen.c:254 [inline] __do_sys_fsconfig fs/fsopen.c:439 [inline] __se_sys_fsconfig+0xad5/0x1060 fs/fsopen.c:314 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd
[...]
JFS_SBI(ipbmap->i_sb)->bmap wasn't set to NULL after kfree() in dbUnmount().
Syzkaller uses faultinject to reproduce this KASAN double-free warning. The issue is triggered if either diMount() or dbMount() fail in jfs_remount(), since diUnmount() or dbUnmount() already happened in such a case - they will do double-free on next execution: jfs_umount or jfs_remount.
Tested on both upstream and jfs-next by syzkaller.
--- fs/jfs/jfs_dmap.c | 1 + 1 file changed, 1 insertion(+)
fs/jfs/jfs_dmap.c +1 -0
@@ -269,6 +269,7 @@ int dbUnmount(struct inode *ipbmap, int mounterror)/* free the memory for the in-memory bmap. */ kfree (bmp); +JFS_SBI (ipbmap->i_sb)->bmap =NULL ;return (0 ); }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 59/139 jfs: fix invalid free of JFS_IP(ipimap)->i_imap in diUnmount
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Liu Shixin via Jfs-discussion <[email protected]>
[ Upstream commit 6e2bda2c192d0244b5a78b787ef20aa10cb319b7 ]
syzbot found an invalid-free in diUnmount:
BUG: KASAN: double-free in slab_free mm/slub.c:3661 [inline] BUG: KASAN: double-free in __kmem_cache_free+0x71/0x110 mm/slub.c:3674
Free of addr ffff88806f410000 by task syz-executor131/3632
CPU: 0 PID: 3632 Comm: syz-executor131 Not tainted 6.1.0-rc7-syzkaller-00012-gca57f02295f1 #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/26/2022 Call Trace: <TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x1b1/0x28e lib/dump_stack.c:106 print_address_description+0x74/0x340 mm/kasan/report.c:284 print_report+0x107/0x1f0 mm/kasan/report.c:395 kasan_report_invalid_free+0xac/0xd0 mm/kasan/report.c:460 ____kasan_slab_free+0xfb/0x120 kasan_slab_free include/linux/kasan.h:177 [inline] slab_free_hook mm/slub.c:1724 [inline] slab_free_freelist_hook+0x12e/0x1a0 mm/slub.c:1750 slab_free mm/slub.c:3661 [inline] __kmem_cache_free+0x71/0x110 mm/slub.c:3674 diUnmount+0xef/0x100 fs/jfs/jfs_imap.c:195 jfs_umount+0x108/0x370 fs/jfs/jfs_umount.c:63 jfs_put_super+0x86/0x190 fs/jfs/super.c:194 generic_shutdown_super+0x130/0x310 fs/super.c:492 kill_block_super+0x79/0xd0 fs/super.c:1428 deactivate_locked_super+0xa7/0xf0 fs/super.c:332 cleanup_mnt+0x494/0x520 fs/namespace.c:1186 task_work_run+0x243/0x300 kernel/task_work.c:179 exit_task_work include/linux/task_work.h:38 [inline] do_exit+0x664/0x2070 kernel/exit.c:820 do_group_exit+0x1fd/0x2b0 kernel/exit.c:950 __do_sys_exit_group kernel/exit.c:961 [inline] __se_sys_exit_group kernel/exit.c:959 [inline] __x64_sys_exit_group+0x3b/0x40 kernel/exit.c:959 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x3d/0xb0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd
[...]
JFS_IP(ipimap)->i_imap is not setting to NULL after free in diUnmount. If jfs_remount() free JFS_IP(ipimap)->i_imap but then failed at diMount(). JFS_IP(ipimap)->i_imap will be freed once again.
Fix this problem by setting JFS_IP(ipimap)->i_imap to NULL after free.
--- fs/jfs/jfs_imap.c | 1 + 1 file changed, 1 insertion(+)
fs/jfs/jfs_imap.c +1 -0
@@ -193,6 +193,7 @@ int diUnmount(struct inode *ipimap, int mounterror)* free in-memory control structure */ kfree (imap); +JFS_IP (ipimap)->i_imap =NULL ;return (0 ); }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 60/139 PCI: dwc: Provide deinit callback for i.MX
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark Brown <[email protected]>
[ Upstream commit fc8b24c28bec19fc0621d108b9ee81ddfdedb25a ]
The i.MX integration for the DesignWare PCI controller has a _host_exit() operation which undoes everything that the _host_init() operation does but does not wire this up as the host_deinit callback for the core, or call it in any path other than suspend. This means that if we ever unwind the initial probe of the device, for example because it fails, the regulator core complains that the regulators for the device were left enabled:
imx6q-pcie 33800000.pcie: iATU: unroll T, 4 ob, 4 ib, align 64K, limit 16G imx6q-pcie 33800000.pcie: Phy link never came up
imx6q-pcie 33800000.pcie: Phy link never came up
imx6q-pcie: probe of 33800000.pcie failed with error -110
------------[ cut here ]------------ WARNING: CPU: 2 PID: 46 at drivers/regulator/core.c:2396 _regulator_put+0x110/0x128
Wire up the callback so that the core can clean up after itself.
--- drivers/pci/controller/dwc/pci-imx6.c | 1 + 1 file changed, 1 insertion(+)
drivers/pci/controller/dwc/pci-imx6.c +1 -0
@@ -999,6 +999,7 @@ static void imx6_pcie_host_exit(struct dw_pcie_rp *pp)static const struct dw_pcie_host_ops imx6_pcie_host_ops = { .host_init = imx6_pcie_host_init, + .host_deinit = imx6_pcie_host_exit, };static const struct dw_pcie_ops dw_pcie_ops = {
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 61/139 ARM: 9317/1: kexec: Make smp stop calls asynchronous
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mårten Lindahl <[email protected]>
[ Upstream commit 8922ba71c969d2a0c01a94372a71477d879470de ]
If a panic is triggered by a hrtimer interrupt all online cpus will be notified and set offline. But as highlighted by commit 19dbdcb8039c ("smp: Warn on function calls from softirq context") this call should not be made synchronous with disabled interrupts:
softdog: Initiating panic
Kernel panic - not syncing: Software Watchdog Timer expired
WARNING: CPU: 1 PID: 0 at kernel/smp.c:753 smp_call_function_many_cond
unwind_backtrace:
show_stack
dump_stack_lvl
__warn
warn_slowpath_fmt
smp_call_function_many_cond
smp_call_function
crash_smp_send_stop.part.0
machine_crash_shutdown
__crash_kexec
panic
softdog_fire
__hrtimer_run_queues
hrtimer_interruptMake the smp call for machine_crash_nonpanic_core() asynchronous.
--- arch/arm/kernel/machine_kexec.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
arch/arm/kernel/machine_kexec.c +13 -1
@@ -92,16 +92,28 @@ void machine_crash_nonpanic_core(void *unused) } } +static DEFINE_PER_CPU(call_single_data_t, cpu_stop_csd) = +CSD_INIT (machine_crash_nonpanic_core, NULL); +void crash_smp_send_stop (void ) {static int cpus_stopped;unsigned long msecs; +call_single_data_t *csd; +int cpu, this_cpu =raw_smp_processor_id ();if (cpus_stopped)return ;atomic_set (&waiting_for_crash_ipi,num_online_cpus () -1 ); -smp_call_function (machine_crash_nonpanic_core,NULL , false); +for_each_online_cpu (cpu) { +if (cpu == this_cpu) +continue ; + + csd = &per_cpu (cpu_stop_csd, cpu); +smp_call_function_single_async (cpu, csd); + } + msecs =1000 ;/* Wait at most a second for the other cpus to stop */ while ((atomic_read (&waiting_for_crash_ipi) >0 ) && msecs) {mdelay (1 );
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 62/139 powerpc/pseries: fix possible memory leak in ibmebus_bus_init()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: ruanjinjie <[email protected]>
[ Upstream commit afda85b963c12947e298ad85d757e333aa40fd74 ]
If device_register() returns error in ibmebus_bus_init(), name of kobject which is allocated in dev_set_name() called in device_add() is leaked.
As comment of device_add() says, it should call put_device() to drop the reference count that was set in device_initialize() when it fails, so the name can be freed in kobject_cleanup().
--- arch/powerpc/platforms/pseries/ibmebus.c | 1 + 1 file changed, 1 insertion(+)
arch/powerpc/platforms/pseries/ibmebus.c +1 -0
@@ -455,6 +455,7 @@ static int __init ibmebus_bus_init(void)if (err) {printk (KERN_WARNING "%s: device_register returned %i\n" , __func__, err); +put_device (&ibmebus_bus_device);bus_unregister (&ibmebus_bus_type);return err;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 63/139 PCI: vmd: Disable bridge window for domain reset
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nirmal Patel <[email protected]>
[ Upstream commit f73eedc90bf73d48e8368e6b0b4ad76a7fffaef7 ]
During domain reset process vmd_domain_reset() clears PCI configuration space of VMD root ports. But certain platform has observed following errors and failed to boot.
...
DMAR: VT-d detected Invalidation Queue Error: Reason f
DMAR: VT-d detected Invalidation Time-out Error: SID ffff
DMAR: VT-d detected Invalidation Completion Error: SID ffff
DMAR: QI HEAD: UNKNOWN qw0 = 0x0, qw1 = 0x0
DMAR: QI PRIOR: UNKNOWN qw0 = 0x0, qw1 = 0x0
DMAR: Invalidation Time-out Error (ITE) cleared
The root cause is that memset_io() clears prefetchable memory base/limit registers and prefetchable base/limit 32 bits registers sequentially. This seems to be enabling prefetchable memory if the device disabled prefetchable memory originally.
Here is an example (before memset_io()):
PCI configuration space for 10000:00:00.0:
86 80 30 20 06 00 10 00 04 00 04 06 00 00 01 00
00 00 00 00 00 00 00 00 00 01 01 00 00 00 00 20
00 00 00 00 01 00 01 00 ff ff ff ff 75 05 00 00
...
So, prefetchable memory is ffffffff00000000-575000fffff, which is disabled. When memset_io() clears prefetchable base 32 bits register, the prefetchable memory becomes 0000000000000000-575000fffff, which is enabled and incorrect.
Here is the quote from section 7.5.1.3.9 of PCI Express Base 6.0 spec:
The Prefetchable Memory Limit register must be programmed to a smaller value than the Prefetchable Memory Base register if there is no prefetchable memory on the secondary side of the bridge.
This is believed to be the reason for the failure and in addition the sequence of operation in vmd_domain_reset() is not following the PCIe specs.
Disable the bridge window by executing a sequence of operations borrowed from pci_disable_bridge_window() and pci_setup_bridge_io(), that comply with the PCI specifications.
--- drivers/pci/controller/vmd.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-)
drivers/pci/controller/vmd.c +17 -2
@@ -526,8 +526,23 @@ static void vmd_domain_reset(struct vmd_dev *vmd) PCI_CLASS_BRIDGE_PCI))continue ; -memset_io (base +PCI_IO_BASE ,0 , -PCI_ROM_ADDRESS1 -PCI_IO_BASE ); +/* +* Temporarily disable the I/O range before updating +* PCI_IO_BASE. +*/ +writel (0x0000ffff , base +PCI_IO_BASE_UPPER16 ); +/* Update lower 16 bits of I/O base/limit */ +writew (0x00f0 , base +PCI_IO_BASE ); +/* Update upper 16 bits of I/O base/limit */ +writel (0 , base +PCI_IO_BASE_UPPER16 ); + +/* MMIO Base/Limit */ +writel (0x0000fff0 , base +PCI_MEMORY_BASE ); + +/* Prefetchable MMIO Base/Limit */ +writel (0 , base +PCI_PREF_LIMIT_UPPER32 ); +writel (0x0000fff0 , base +PCI_PREF_MEMORY_BASE ); +writel (0xffffffff , base +PCI_PREF_BASE_UPPER32 ); } } }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 64/139 PCI: fu740: Set the number of MSI vectors
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yong-Xuan Wang <[email protected]>
[ Upstream commit 551a60e1225e71fff8efd9390204c505b0870e0f ]
The iMSI-RX module of the DW PCIe controller provides multiple sets of MSI_CTRL_INT_i_* registers, and each set is capable of handling 32 MSI interrupts. However, the fu740 PCIe controller driver only enabled one set of MSI_CTRL_INT_i_* registers, as the total number of supported interrupts was not specified.
Set the supported number of MSI vectors to enable all the MSI_CTRL_INT_i_* registers on the fu740 PCIe core, allowing the system to fully utilize the available MSI interrupts.
--- drivers/pci/controller/dwc/pcie-fu740.c | 1 + 1 file changed, 1 insertion(+)
drivers/pci/controller/dwc/pcie-fu740.c +1 -0
@@ -299,6 +299,7 @@ static int fu740_pcie_probe(struct platform_device *pdev) pci->dev = dev; pci->ops = &dw_pcie_ops; pci->pp.ops = &fu740_pcie_host_ops; + pci->pp.num_vectors =MAX_MSI_IRQS ;/* SiFive specific region: mgmt */ afp->mgmt_base =devm_platform_ioremap_resource_byname (pdev,"mgmt" );
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 65/139 media: mdp3: Fix resource leaks in of_find_device_by_node
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lu Hongfei <[email protected]>
[ Upstream commit 35ca8ce495366909b4c2e701d1356570dd40c4e2 ]
Use put_device to release the object get through of_find_device_by_node, avoiding resource leaks.
--- drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/media/platform/mediatek/mdp3/mtk-mdp3-comp.c +2 -0
@@ -775,11 +775,13 @@ static int mdp_get_subsys_id(struct device *dev, struct device_node *node, ret =cmdq_dev_get_client_reg (&comp_pdev->dev, &cmdq_reg, index);if (ret !=0 ) {dev_err (&comp_pdev->dev,"cmdq_dev_get_subsys fail!\n" ); +put_device (&comp_pdev->dev);return -EINVAL ; } comp->subsys_id = cmdq_reg.subsys;dev_dbg (&comp_pdev->dev,"subsys id=%d\n" , cmdq_reg.subsys); +put_device (&comp_pdev->dev);return 0 ; }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 66/139 media: dvb-usb-v2: af9035: Fix null-ptr-deref in af9035_i2c_master_xfer
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhang Shurong <[email protected]>
[ Upstream commit 7bf744f2de0a848fb1d717f5831b03db96feae89 ]
In af9035_i2c_master_xfer, msg is controlled by user. When msg[i].buf is null and msg[i].len is zero, former checks on msg[i].buf would be passed. Malicious data finally reach af9035_i2c_master_xfer. If accessing msg[i].buf[0] without sanity check, null ptr deref would happen. We add check on msg[i].len to prevent crash.
Similar commit:
commit 0ed554fd769a
("media: dvb-usb: az6027: fix null-ptr-deref in az6027_i2c_xfer()")
--- drivers/media/usb/dvb-usb-v2/af9035.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
drivers/media/usb/dvb-usb-v2/af9035.c +8 -6
@@ -270,6 +270,7 @@ static int af9035_i2c_master_xfer(structstruct dvb_usb_device *d =i2c_get_adapdata (adap);struct state *state =d_to_priv (d);int ret; +u32 reg;if (mutex_lock_interruptible (&d->i2c_mutex) <0 )return -EAGAIN ;
@@ -322,8 +323,10 @@ static int af9035_i2c_master_xfer(struct ret = -EOPNOTSUPP ; }else if ((msg[0 ].addr == state->af9033_i2c_addr[0 ]) || (msg[0 ].addr == state->af9033_i2c_addr[1 ])) { +if (msg[0 ].len <3 || msg[1 ].len <1 ) +return -EOPNOTSUPP ;/* demod access via firmware interface */ -u32 reg = msg[0 ].buf[0 ] <<16 | msg[0 ].buf[1 ] <<8 | + reg = msg[0 ].buf[0 ] <<16 | msg[0 ].buf[1 ] <<8 | msg[0 ].buf[2 ];if (msg[0 ].addr == state->af9033_i2c_addr[1 ])
@@ -381,17 +384,16 @@ static int af9035_i2c_master_xfer(struct ret = -EOPNOTSUPP ; }else if ((msg[0 ].addr == state->af9033_i2c_addr[0 ]) || (msg[0 ].addr == state->af9033_i2c_addr[1 ])) { +if (msg[0 ].len <3 ) +return -EOPNOTSUPP ;/* demod access via firmware interface */ -u32 reg = msg[0 ].buf[0 ] <<16 | msg[0 ].buf[1 ] <<8 | + reg = msg[0 ].buf[0 ] <<16 | msg[0 ].buf[1 ] <<8 | msg[0 ].buf[2 ];if (msg[0 ].addr == state->af9033_i2c_addr[1 ]) reg |=0x100000 ; - ret = (msg[0 ].len >=3 ) ?af9035_wr_regs (d, reg, - &msg[0 ].buf[3 ], - msg[0 ].len -3 ) - : -EOPNOTSUPP ; + ret =af9035_wr_regs (d, reg, &msg[0 ].buf[3 ], msg[0 ].len -3 ); }else {/* I2C write */ u8 buf[MAX_XFER_SIZE ];
Greg Kroah-Hartman
maintainerPATCH 67/139 media: dw2102: Fix null-ptr-deref in dw2102_i2c_transfer()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhang Shurong <[email protected]>
[ Upstream commit 5ae544d94abc8ff77b1b9bf8774def3fa5689b5b ]
In dw2102_i2c_transfer, msg is controlled by user. When msg[i].buf is null and msg[i].len is zero, former checks on msg[i].buf would be passed. Malicious data finally reach dw2102_i2c_transfer. If accessing msg[i].buf[0] without sanity check, null ptr deref would happen. We add check on msg[i].len to prevent crash.
Similar commit:
commit 950e252cb469
("[media] dw2102: limit messages to buffer size")
--- drivers/media/usb/dvb-usb/dw2102.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
drivers/media/usb/dvb-usb/dw2102.c +24 -0
@@ -128,6 +128,10 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],switch (num) {case 2 : +if (msg[0 ].len <1 ) { + num = -EOPNOTSUPP ; +break ; + }/* read stv0299 register */ value = msg[0 ].buf[0 ];/* register */ for (i =0 ; i < msg[1 ].len; i++) {
@@ -139,6 +143,10 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],case 1 :switch (msg[0 ].addr) {case 0x68 : +if (msg[0 ].len <2 ) { + num = -EOPNOTSUPP ; +break ; + }/* write to stv0299 register */ buf6[0 ] =0x2a ; buf6[1 ] = msg[0 ].buf[0 ];
@@ -148,6 +156,10 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],break ;case 0x60 :if (msg[0 ].flags ==0 ) { +if (msg[0 ].len <4 ) { + num = -EOPNOTSUPP ; +break ; + }/* write to tuner pll */ buf6[0 ] =0x2c ; buf6[1 ] =5 ;
@@ -159,6 +171,10 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],dw210x_op_rw (d->udev,0xb2 ,0 ,0 , buf6,7 ,DW210X_WRITE_MSG ); }else { +if (msg[0 ].len <1 ) { + num = -EOPNOTSUPP ; +break ; + }/* read from tuner */ dw210x_op_rw (d->udev,0xb5 ,0 ,0 , buf6,1 ,DW210X_READ_MSG );
@@ -166,12 +182,20 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], }break ;case (DW2102_RC_QUERY ): +if (msg[0 ].len <2 ) { + num = -EOPNOTSUPP ; +break ; + }dw210x_op_rw (d->udev,0xb8 ,0 ,0 , buf6,2 ,DW210X_READ_MSG ); msg[0 ].buf[0 ] = buf6[0 ]; msg[0 ].buf[1 ] = buf6[1 ];break ;case (DW2102_VOLTAGE_CTRL ): +if (msg[0 ].len <1 ) { + num = -EOPNOTSUPP ; +break ; + } buf6[0 ] =0x30 ; buf6[1 ] = msg[0 ].buf[0 ]; dw210x_op_rw(d->udev, 0xb2, 0, 0,
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 41/139 arm64: dts: qcom: sm6125-pdx201: correct ramoops pmsg-size
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Krzysztof Kozlowski <[email protected]>
[ Upstream commit c42f5452de6ad2599c6e5e2a64c180a4ac835d27 ]
There is no 'msg-size' property in ramoops, so assume intention was for 'pmsg-size':
sm6125-sony-xperia-seine-pdx201.dtb: ramoops@ffc00000: Unevaluated properties are not allowed ('msg-size' was unexpected)
--- arch/arm64/boot/dts/qcom/sm6125-sony-xperia-seine-pdx201.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/qcom/sm6125-sony-xperia-seine-pdx201.dts +1 -1
@@ -73,7 +73,7 @@ pstore_mem: ramoops@ffc00000 { reg = <0x0 0xffc40000 0x0 0xc0000>; record-size = <0x1000>; console-size = <0x40000>; - msg-size = <0x20000 0x20000>; + pmsg-size = <0x20000>; }; cmdline_mem: memory@ffd00000 {
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 68/139 media: af9005: Fix null-ptr-deref in af9005_i2c_xfer
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhang Shurong <[email protected]>
[ Upstream commit f4ee84f27625ce1fdf41e8483fa0561a1b837d10 ]
In af9005_i2c_xfer, msg is controlled by user. When msg[i].buf is null and msg[i].len is zero, former checks on msg[i].buf would be passed. Malicious data finally reach af9005_i2c_xfer. If accessing msg[i].buf[0] without sanity check, null ptr deref would happen. We add check on msg[i].len to prevent crash.
Similar commit:
commit 0ed554fd769a
("media: dvb-usb: az6027: fix null-ptr-deref in az6027_i2c_xfer()")
--- drivers/media/usb/dvb-usb/af9005.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/media/usb/dvb-usb/af9005.c +5 -0
@@ -422,6 +422,10 @@ static int af9005_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],if (ret ==0 ) ret =2 ; }else { +if (msg[0 ].len <2 ) { + ret = -EOPNOTSUPP ; + goto unlock; + }/* write one or more registers */ reg = msg[0 ].buf[0 ]; addr = msg[0 ].addr;
@@ -431,6 +435,7 @@ static int af9005_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], ret =1 ; } +unlock:mutex_unlock (&d->i2c_mutex);return ret; }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 69/139 media: anysee: fix null-ptr-deref in anysee_master_xfer
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhang Shurong <[email protected]>
[ Upstream commit c30411266fd67ea3c02a05c157231654d5a3bdc9 ]
In anysee_master_xfer, msg is controlled by user. When msg[i].buf is null and msg[i].len is zero, former checks on msg[i].buf would be passed. Malicious data finally reach anysee_master_xfer. If accessing msg[i].buf[0] without sanity check, null ptr deref would happen. We add check on msg[i].len to prevent crash.
Similar commit:
commit 0ed554fd769a
("media: dvb-usb: az6027: fix null-ptr-deref in az6027_i2c_xfer()")
--- drivers/media/usb/dvb-usb-v2/anysee.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/usb/dvb-usb-v2/anysee.c +1 -1
@@ -202,7 +202,7 @@ static int anysee_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msg,while (i < num) {if (num > i +1 && (msg[i+1 ].flags &I2C_M_RD )) { -if (msg[i].len >2 || msg[i+1 ].len >60 ) { +if (msg[i].len !=2 || msg[i +1 ].len >60 ) { ret = -EOPNOTSUPP ;break ; }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 70/139 media: az6007: Fix null-ptr-deref in az6007_i2c_xfer()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhang Shurong <[email protected]>
[ Upstream commit 1047f9343011f2cedc73c64829686206a7e9fc3f ]
In az6007_i2c_xfer, msg is controlled by user. When msg[i].buf is null and msg[i].len is zero, former checks on msg[i].buf would be passed. Malicious data finally reach az6007_i2c_xfer. If accessing msg[i].buf[0] without sanity check, null ptr deref would happen. We add check on msg[i].len to prevent crash.
Similar commit:
commit 0ed554fd769a
("media: dvb-usb: az6027: fix null-ptr-deref in az6027_i2c_xfer()")
--- drivers/media/usb/dvb-usb-v2/az6007.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/media/usb/dvb-usb-v2/az6007.c +8 -0
@@ -788,6 +788,10 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],if (az6007_xfer_debug)printk (KERN_DEBUG "az6007: I2C W addr=0x%x len=%d\n" , addr, msgs[i].len); +if (msgs[i].len <1 ) { + ret = -EIO ; + goto err; + } req =AZ6007_I2C_WR ; index = msgs[i].buf[0 ]; value = addr | (1 <<8 );
@@ -802,6 +806,10 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],if (az6007_xfer_debug)printk (KERN_DEBUG "az6007: I2C R addr=0x%x len=%d\n" , addr, msgs[i].len); +if (msgs[i].len <1 ) { + ret = -EIO ; + goto err; + } req =AZ6007_I2C_RD ; index = msgs[i].buf[0 ]; value = addr;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 71/139 media: dvb-usb-v2: gl861: Fix null-ptr-deref in gl861_i2c_master_xfer
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhang Shurong <[email protected]>
[ Upstream commit b97719a66970601cd3151a3e2020f4454a1c4ff6 ]
In gl861_i2c_master_xfer, msg is controlled by user. When msg[i].buf is null and msg[i].len is zero, former checks on msg[i].buf would be passed. Malicious data finally reach gl861_i2c_master_xfer. If accessing msg[i].buf[0] without sanity check, null ptr deref would happen. We add check on msg[i].len to prevent crash.
Similar commit:
commit 0ed554fd769a
("media: dvb-usb: az6027: fix null-ptr-deref in az6027_i2c_xfer()")
--- drivers/media/usb/dvb-usb-v2/gl861.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/usb/dvb-usb-v2/gl861.c +1 -1
@@ -120,7 +120,7 @@ static int gl861_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], }else if (num ==2 && !(msg[0 ].flags &I2C_M_RD ) && (msg[1 ].flags &I2C_M_RD )) {/* I2C write + read */ -if (msg[0 ].len >1 || msg[1 ].len >sizeof (ctx->buf)) { +if (msg[0 ].len !=1 || msg[1 ].len >sizeof (ctx->buf)) { ret = -EOPNOTSUPP ; goto err; }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 72/139 scsi: lpfc: Abort outstanding ELS cmds when mailbox timeout error is detected
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Justin Tee <[email protected]>
[ Upstream commit 089ea22e374aa20043e72243c47b5867d5419d38 ]
A mailbox timeout error usually indicates something has gone wrong, and a follow up reset of the HBA is a typical recovery mechanism. Introduce a MBX_TMO_ERR flag to detect such cases and have lpfc_els_flush_cmd abort ELS commands if the MBX_TMO_ERR flag condition was set. This ensures all of the registered SGL resources meant for ELS traffic are not leaked after an HBA reset.
--- drivers/scsi/lpfc/lpfc.h | 1 + drivers/scsi/lpfc/lpfc_els.c | 25 ++++++++++++++++++------- drivers/scsi/lpfc/lpfc_init.c | 20 +++++++++++++++++--- drivers/scsi/lpfc/lpfc_sli.c | 8 +++++++- 4 files changed, 43 insertions(+), 11 deletions(-)
drivers/scsi/lpfc/lpfc.h +1 -0
@@ -895,6 +895,7 @@ enum lpfc_irq_chann_mode {enum lpfc_hba_bit_flags {FABRIC_COMANDS_BLOCKED ,HBA_PCI_ERR , +MBX_TMO_ERR , };struct lpfc_hba {
drivers/scsi/lpfc/lpfc_els.c +18 -7
@@ -9410,11 +9410,13 @@ void lpfc_els_flush_cmd(struct lpfc_vport *vport) {LIST_HEAD (abort_list); +LIST_HEAD (cancel_list);struct lpfc_hba *phba = vport->phba;struct lpfc_sli_ring *pring;struct lpfc_iocbq *tmp_iocb, *piocb;u32 ulp_command;unsigned long iflags =0 ; +bool mbx_tmo_err;lpfc_fabric_abort_vport (vport);
@@ -9436,15 +9438,16 @@ lpfc_els_flush_cmd(struct lpfc_vport *vport)if (phba->sli_rev ==LPFC_SLI_REV4 )spin_lock (&pring->ring_lock); + mbx_tmo_err =test_bit (MBX_TMO_ERR , &phba->bit_flags);/* First we need to issue aborts to outstanding cmds on txcmpl */ list_for_each_entry_safe (piocb, tmp_iocb, &pring->txcmplq, list) { -if (piocb->cmd_flag &LPFC_IO_LIBDFC ) +if (piocb->cmd_flag &LPFC_IO_LIBDFC && !mbx_tmo_err)continue ;if (piocb->vport != vport)continue ; -if (piocb->cmd_flag &LPFC_DRIVER_ABORTED ) +if (piocb->cmd_flag &LPFC_DRIVER_ABORTED && !mbx_tmo_err)continue ;/* On the ELS ring we can have ELS_REQUESTs or
@@ -9463,8 +9466,8 @@ lpfc_els_flush_cmd(struct lpfc_vport *vport)*/ if (phba->link_state ==LPFC_LINK_DOWN ) piocb->cmd_cmpl = lpfc_cmpl_els_link_down; - } -if (ulp_command ==CMD_GEN_REQUEST64_CR ) + }else if (ulp_command ==CMD_GEN_REQUEST64_CR || + mbx_tmo_err)list_add_tail (&piocb->dlist, &abort_list); }
@@ -9476,11 +9479,19 @@ lpfc_els_flush_cmd(struct lpfc_vport *vport)list_for_each_entry_safe (piocb, tmp_iocb, &abort_list, dlist) {spin_lock_irqsave (&phba->hbalock, iflags);list_del_init (&piocb->dlist); -lpfc_sli_issue_abort_iotag (phba, pring, piocb,NULL ); +if (mbx_tmo_err) +list_move_tail (&piocb->list, &cancel_list); +else +lpfc_sli_issue_abort_iotag (phba, pring, piocb,NULL ); +spin_unlock_irqrestore (&phba->hbalock, iflags); } -/* Make sure HBA is alive */ -lpfc_issue_hb_tmo (phba); +if (!list_empty (&cancel_list)) +lpfc_sli_cancel_iocbs (phba, &cancel_list,IOSTAT_LOCAL_REJECT , +IOERR_SLI_ABORTED ); +else +/* Make sure HBA is alive */ +lpfc_issue_hb_tmo (phba);if (!list_empty (&abort_list)) lpfc_printf_vlog(vport, KERN_ERR, LOG_TRACE_EVENT,
drivers/scsi/lpfc/lpfc_init.c +17 -3
@@ -7563,6 +7563,8 @@ lpfc_disable_pci_dev(struct lpfc_hba *phba)void lpfc_reset_hba (struct lpfc_hba *phba) { +int rc =0 ; +/* If resets are disabled then set error state and return. */ if (!phba->cfg_enable_hba_reset) { phba->link_state =LPFC_HBA_ERROR ;
@@ -7573,13 +7575,25 @@ lpfc_reset_hba(struct lpfc_hba *phba)if (phba->sli.sli_flag &LPFC_SLI_ACTIVE ) {lpfc_offline_prep (phba,LPFC_MBX_WAIT ); }else { +if (test_bit (MBX_TMO_ERR , &phba->bit_flags)) { +/* Perform a PCI function reset to start from clean */ + rc =lpfc_pci_function_reset (phba); +lpfc_els_flush_all_cmd (phba); + }lpfc_offline_prep (phba,LPFC_MBX_NO_WAIT );lpfc_sli_flush_io_rings (phba); }lpfc_offline (phba); -lpfc_sli_brdrestart (phba); -lpfc_online (phba); -lpfc_unblock_mgmt_io (phba); +clear_bit (MBX_TMO_ERR , &phba->bit_flags); +if (unlikely (rc)) { +lpfc_printf_log (phba,KERN_ERR ,LOG_SLI , +"8888 PCI function reset failed rc %x\n" , + rc); + }else { +lpfc_sli_brdrestart (phba); +lpfc_online (phba); +lpfc_unblock_mgmt_io (phba); + } }/**
drivers/scsi/lpfc/lpfc_sli.c +7 -1
@@ -3919,6 +3919,8 @@ void lpfc_poll_eratt(struct timer_list *t)uint64_t sli_intr, cnt; phba =from_timer (phba, t, eratt_poll); +if (!(phba->hba_flag &HBA_SETUP )) +return ;/* Here we will also keep track of interrupts per sec of the hba */ sli_intr = phba->sli.slistat.sli_intr;
@@ -7712,7 +7714,9 @@ lpfc_sli4_repost_sgl_list(struct lpfc_hba *phba,spin_unlock_irq (&phba->hbalock); }else {lpfc_printf_log (phba,KERN_ERR ,LOG_TRACE_EVENT , -"3161 Failure to post sgl to port.\n" ); +"3161 Failure to post sgl to port,status %x " +"blkcnt %d totalcnt %d postcnt %d\n" , + status, block_cnt, total_cnt, post_cnt);return -EIO ; }
@@ -8495,6 +8499,7 @@ lpfc_sli4_hba_setup(struct lpfc_hba *phba)spin_unlock_irq (&phba->hbalock); } } + phba->hba_flag &= ~HBA_SETUP ;lpfc_sli4_dip (phba);
@@ -9317,6 +9322,7 @@ lpfc_mbox_timeout_handler(struct lpfc_hba *phba)* would get IOCB_ERROR from lpfc_sli_issue_iocb, allowing * it to fail all outstanding SCSI IO. */ +set_bit (MBX_TMO_ERR , &phba->bit_flags);spin_lock_irq (&phba->pport->work_port_lock); phba->pport->work_port_events &= ~WORKER_MBOX_TMO ;spin_unlock_irq (&phba->pport->work_port_lock);
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 73/139 media: tuners: qt1010: replace BUG_ON with a regular error
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans Verkuil <[email protected]>
[ Upstream commit ee630b29ea44d1851bb6c903f400956604834463 ]
BUG_ON is unnecessary here, and in addition it confuses smatch. Replacing this with an error return help resolve this smatch warning:
drivers/media/tuners/qt1010.c:350 qt1010_init() error: buffer overflow 'i2c_data' 34 <= 34
--- drivers/media/tuners/qt1010.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
drivers/media/tuners/qt1010.c +6 -5
@@ -345,11 +345,12 @@ static int qt1010_init(struct dvb_frontend *fe)else valptr = &tmpval; -BUG_ON (i >=ARRAY_SIZE (i2c_data) -1 ); - - err =qt1010_init_meas1 (priv, i2c_data[i+1 ].reg, - i2c_data[i].reg, - i2c_data[i].val, valptr); +if (i >=ARRAY_SIZE (i2c_data) -1 ) + err = -EIO ; +else + err =qt1010_init_meas1 (priv, i2c_data[i +1 ].reg, + i2c_data[i].reg, + i2c_data[i].val, valptr); i++;break ; }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 42/139 arm64: dts: qcom: sm6350: correct ramoops pmsg-size
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Krzysztof Kozlowski <[email protected]>
[ Upstream commit c86b97a72065e06eacb993dc71fa9febc93422af ]
There is no 'msg-size' property in ramoops, so assume intention was for 'pmsg-size':
sm6350-sony-xperia-lena-pdx213.dtb: ramoops@ffc00000: Unevaluated properties are not allowed ('msg-size' was unexpected)
--- arch/arm64/boot/dts/qcom/sm6350.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/qcom/sm6350.dtsi +1 -1
@@ -346,7 +346,7 @@ ramoops: ramoops@ffc00000 { reg = <0 0xffc00000 0 0x100000>; record-size = <0x1000>; console-size = <0x40000>; - msg-size = <0x20000 0x20000>; + pmsg-size = <0x20000>; ecc-size = <16>; no-map; };
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 43/139 arm64: dts: qcom: sm8150-kumano: correct ramoops pmsg-size
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 4e6b942f092653ebcdbbc0819b2d1f08ab415bdc ]
There is no 'msg-size' property in ramoops, so assume intention was for 'pmsg-size':
sm8150-sony-xperia-kumano-griffin.dtb: ramoops@ffc00000: Unevaluated properties are not allowed ('msg-size' was unexpected)
--- arch/arm64/boot/dts/qcom/sm8150-sony-xperia-kumano.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/qcom/sm8150-sony-xperia-kumano.dtsi +1 -1
@@ -127,7 +127,7 @@ ramoops@ffc00000 { reg = <0x0 0xffc00000 0x0 0x100000>; record-size = <0x1000>; console-size = <0x40000>; - msg-size = <0x20000 0x20000>; + pmsg-size = <0x20000>; ecc-size = <16>; no-map; };
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 44/139 arm64: dts: qcom: sm8250-edo: correct ramoops pmsg-size
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Krzysztof Kozlowski <[email protected]>
[ Upstream commit 7dc3606f91427414d00a2fb09e6e0e32c14c2093 ]
There is no 'msg-size' property in ramoops, so assume intention was for 'pmsg-size':
sm8250-sony-xperia-edo-pdx206.dtb: ramoops@ffc00000: Unevaluated properties are not allowed ('msg-size' was unexpected)
--- arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi +1 -1
@@ -126,7 +126,7 @@ ramoops@ffc00000 { reg = <0x0 0xffc00000 0x0 0x100000>; record-size = <0x1000>; console-size = <0x40000>; - msg-size = <0x20000 0x20000>; + pmsg-size = <0x20000>; ecc-size = <16>; no-map; };
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 45/139 samples/hw_breakpoint: Fix kernel BUG invalid opcode: 0000
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rong Tao <[email protected]>
[ Upstream commit 910e230d5f1bb72c54532e94fbb1705095c7bab6 ]
Macro symbol_put() is defined as __symbol_put(__stringify(x))
ksym_name = "jiffies"
symbol_put(ksym_name)
will be resolved as
__symbol_put("ksym_name")which is clearly wrong. So symbol_put must be replaced with __symbol_put.
When we uninstall hw_breakpoint.ko (rmmod), a kernel bug occurs with the following error:
[11381.854152] kernel BUG at kernel/module/main.c:779! [11381.854159] invalid opcode: 0000 [#2] PREEMPT SMP PTI [11381.854163] CPU: 8 PID: 59623 Comm: rmmod Tainted: G D OE 6.2.9-200.fc37.x86_64 #1 [11381.854167] Hardware name: To Be Filled By O.E.M. To Be Filled By O.E.M./B360M-HDV, BIOS P3.20 10/23/2018 [11381.854169] RIP: 0010:__symbol_put+0xa2/0xb0 [11381.854175] Code: 00 e8 92 d2 f7 ff 65 8b 05 c3 2f e6 78 85 c0 74 1b 48 8b 44 24 30 65 48 2b 04 25 28 00 00 00 75 12 48 83 c4 38 c3 cc cc cc cc <0f> 0b 0f 1f 44 00 00 eb de e8 c0 df d8 00 90 90 90 90 90 90 90 90 [11381.854178] RSP: 0018:ffffad8ec6ae7dd0 EFLAGS: 00010246 [11381.854181] RAX: 0000000000000000 RBX: ffffffffc1fd1240 RCX: 000000000000000c [11381.854184] RDX: 000000000000006b RSI: ffffffffc02bf7c7 RDI: ffffffffc1fd001c [11381.854186] RBP: 000055a38b76e7c8 R08: ffffffff871ccfe0 R09: 0000000000000000 [11381.854188] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000 [11381.854190] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 [11381.854192] FS: 00007fbf7c62c740(0000) GS:ffff8c5badc00000(0000) knlGS:0000000000000000 [11381.854195] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [11381.854197] CR2: 000055a38b7793f8 CR3: 0000000363e1e001 CR4: 00000000003726e0 [11381.854200] DR0: ffffffffb3407980 DR1: 0000000000000000 DR2: 0000000000000000 [11381.854202] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400 [11381.854204] Call Trace: [11381.854207] <TASK> [11381.854212] s_module_exit+0xc/0xff0 [symbol_getput] [11381.854219] __do_sys_delete_module.constprop.0+0x198/0x2f0 [11381.854225] do_syscall_64+0x58/0x80 [11381.854231] ? exit_to_user_mode_prepare+0x180/0x1f0 [11381.854237] ? syscall_exit_to_user_mode+0x17/0x40 [11381.854241] ? do_syscall_64+0x67/0x80 [11381.854245] ? syscall_exit_to_user_mode+0x17/0x40 [11381.854248] ? do_syscall_64+0x67/0x80 [11381.854252] ? exc_page_fault+0x70/0x170 [11381.854256] entry_SYSCALL_64_after_hwframe+0x72/0xdc
--- samples/hw_breakpoint/data_breakpoint.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
samples/hw_breakpoint/data_breakpoint.c +1 -1
@@ -70,7 +70,7 @@ static int __init hw_break_module_init(void) static void __exit hw_break_module_exit(void) {unregister_wide_hw_breakpoint (sample_hbp); -symbol_put (ksym_name); +__symbol_put (ksym_name);printk (KERN_INFO "HW Breakpoint for %s write uninstalled\n" , ksym_name); }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 46/139 drm/amd/display: Fix underflow issue on 175hz timing
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Leo Ma <[email protected]>
[ Upstream commit 735688eb905db529efea0c78466fccc1461c3fde ]
[Why]
Screen underflows happen on 175hz timing for 3 plane overlay case.
[How]
Based on dst y prefetch value clamp to equ or oto for bandwidth calculation.
--- .../amd/display/dc/dml/dcn32/display_mode_vba_util_32.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c +6 -1
@@ -3454,6 +3454,7 @@ bool dml32_CalculatePrefetchSchedule(double TimeForFetchingMetaPTE =0 ;double TimeForFetchingRowInVBlank =0 ;double LinesToRequestPrefetchPixelData =0 ; +double LinesForPrefetchBandwidth =0 ;unsigned int HostVMDynamicLevelsTrips;double trip_to_mem;double Tvm_trips;
@@ -3883,11 +3884,15 @@ bool dml32_CalculatePrefetchSchedule( TimeForFetchingMetaPTE = Tvm_oto; TimeForFetchingRowInVBlank = Tr0_oto; *PrefetchBandwidth = prefetch_bw_oto; +/* Clamp to oto for bandwidth calculation */ + LinesForPrefetchBandwidth = dst_y_prefetch_oto; }else { *DestinationLinesForPrefetch = dst_y_prefetch_equ; TimeForFetchingMetaPTE = Tvm_equ; TimeForFetchingRowInVBlank = Tr0_equ; *PrefetchBandwidth = prefetch_bw_equ; +/* Clamp to equ for bandwidth calculation */ + LinesForPrefetchBandwidth = dst_y_prefetch_equ; } *DestinationLinesToRequestVMInVBlank =dml_ceil (4.0 * TimeForFetchingMetaPTE / LineTime,1.0 ) /4.0 ;
@@ -3895,7 +3900,7 @@ bool dml32_CalculatePrefetchSchedule( *DestinationLinesToRequestRowInVBlank =dml_ceil (4.0 * TimeForFetchingRowInVBlank / LineTime,1.0 ) /4.0 ; - LinesToRequestPrefetchPixelData = *DestinationLinesForPrefetch - + LinesToRequestPrefetchPixelData = LinesForPrefetchBandwidth - *DestinationLinesToRequestVMInVBlank -2 * *DestinationLinesToRequestRowInVBlank;#ifdef __DML_VBA_DEBUG__
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 47/139 ASoC: SOF: topology: simplify code to prevent static analysis warnings
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pierre-Louis Bossart <[email protected]>
[ Upstream commit 55cb3dc271d81f1982c949a2ac483a6daf613b92 ]
make KCFLAGS='-fanalyzer' sound/soc/sof/intel/ reports a possible NULL pointer dereference.
sound/soc/sof/topology.c:1136:21: error: dereference of NULL ‘w’ [CWE-476] [-Werror=analyzer-null-dereference]
1136 | strcmp(w->sname, rtd->dai_link->stream_name))
The code is rather confusing and can be simplified to make static analysis happy. No functionality change.
--- sound/soc/sof/topology.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
sound/soc/sof/topology.c +3 -2
@@ -1086,16 +1086,17 @@ static void sof_disconnect_dai_widget(struct snd_soc_component *scomp, {struct snd_soc_card *card = scomp->card;struct snd_soc_pcm_runtime *rtd; +const char *sname = w->sname;struct snd_soc_dai *cpu_dai;int i; -if (!w->sname) +if (!sname)return ;list_for_each_entry (rtd, &card->rtd_list, list) {/* does stream match DAI link ? */ if (!rtd->dai_link->stream_name || -strcmp (w->sname, rtd->dai_link->stream_name)) +strcmp (sname, rtd->dai_link->stream_name))continue ;switch (w->id) {
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 38/139 libbpf: Free btf_vmlinux when closing bpf_object
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hao Luo <[email protected]>
[ Upstream commit 29d67fdebc42af6466d1909c60fdd1ef4f3e5240 ]
I hit a memory leak when testing bpf_program__set_attach_target(). Basically, set_attach_target() may allocate btf_vmlinux, for example, when setting attach target for bpf_iter programs. But btf_vmlinux is freed only in bpf_object_load(), which means if we only open bpf object but not load it, setting attach target may leak btf_vmlinux.
So let's free btf_vmlinux in bpf_object__close() anyway.
--- tools/lib/bpf/libbpf.c | 1 + 1 file changed, 1 insertion(+)
tools/lib/bpf/libbpf.c +1 -0
@@ -8173,6 +8173,7 @@ void bpf_object__close(struct bpf_object *obj)bpf_object__elf_finish (obj);bpf_object_unload (obj);btf__free (obj->btf); +btf__free (obj->btf_vmlinux);btf_ext__free (obj->btf_ext);for (i =0 ; i < obj->nr_maps; i++)
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 75/139 usb: cdns3: Put the cdns set active part outside the spin lock
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xiaolei Wang <[email protected]>
[ Upstream commit 2319b9c87fe243327285f2fefd7374ffd75a65fc ]
The device may be scheduled during the resume process, so this cannot appear in atomic operations. Since pm_runtime_set_active will resume suppliers, put set active outside the spin lock, which is only used to protect the struct cdns data structure, otherwise the kernel will report the following warning:
BUG: sleeping function called from invalid context at drivers/base/power/runtime.c:1163
in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 651, name: sh
preempt_count: 1, expected: 0
RCU nest depth: 0, expected: 0
CPU: 0 PID: 651 Comm: sh Tainted: G WC 6.1.20 #1
Hardware name: Freescale i.MX8QM MEK (DT)
Call trace:
dump_backtrace.part.0+0xe0/0xf0
show_stack+0x18/0x30
dump_stack_lvl+0x64/0x80
dump_stack+0x1c/0x38
__might_resched+0x1fc/0x240
__might_sleep+0x68/0xc0
__pm_runtime_resume+0x9c/0xe0
rpm_get_suppliers+0x68/0x1b0
__pm_runtime_set_status+0x298/0x560
cdns_resume+0xb0/0x1c0
cdns3_controller_resume.isra.0+0x1e0/0x250
cdns3_plat_resume+0x28/0x40--- drivers/usb/cdns3/cdns3-plat.c | 3 ++- drivers/usb/cdns3/cdnsp-pci.c | 3 ++- drivers/usb/cdns3/core.c | 15 +++++++++++---- drivers/usb/cdns3/core.h | 7 +++++-- 4 files changed, 20 insertions(+), 8 deletions(-)
drivers/usb/cdns3/cdns3-plat.c +2 -1
@@ -256,9 +256,10 @@ static int cdns3_controller_resume(struct device *dev, pm_message_t msg)cdns3_set_platform_suspend (cdns->dev, false, false);spin_lock_irqsave (&cdns->lock, flags); -cdns_resume (cdns, !PMSG_IS_AUTO (msg)); +cdns_resume (cdns); cdns->in_lpm = false;spin_unlock_irqrestore (&cdns->lock, flags); +cdns_set_active (cdns, !PMSG_IS_AUTO (msg));if (cdns->wakeup_pending) { cdns->wakeup_pending = false;enable_irq (cdns->wakeup_irq);
drivers/usb/cdns3/cdnsp-pci.c +2 -1
@@ -210,8 +210,9 @@ static int __maybe_unused cdnsp_pci_resume(struct device *dev)int ret;spin_lock_irqsave (&cdns->lock, flags); - ret =cdns_resume (cdns,1 ); + ret =cdns_resume (cdns);spin_unlock_irqrestore (&cdns->lock, flags); +cdns_set_active (cdns,1 );return ret; }
drivers/usb/cdns3/core.c +11 -4
@@ -522,9 +522,8 @@ int cdns_suspend(struct cdns *cdns) }EXPORT_SYMBOL_GPL (cdns_suspend); -int cdns_resume (struct cdns *cdns,u8 set_active) +int cdns_resume (struct cdns *cdns) { -struct device *dev = cdns->dev;enum usb_role real_role;bool role_changed = false;int ret =0 ;
@@ -556,15 +555,23 @@ int cdns_resume(struct cdns *cdns, u8 set_active)if (cdns->roles[cdns->role]->resume) cdns->roles[cdns->role]->resume (cdns,cdns_power_is_lost (cdns)); + return 0; +} +EXPORT_SYMBOL_GPL (cdns_resume); + +void cdns_set_active (struct cdns *cdns,u8 set_active) +{ +struct device *dev = cdns->dev; +if (set_active) {pm_runtime_disable (dev);pm_runtime_set_active (dev);pm_runtime_enable (dev); } - return 0; +return ; } -EXPORT_SYMBOL_GPL (cdns_resume); +EXPORT_SYMBOL_GPL (cdns_set_active);#endif /* CONFIG_PM_SLEEP */ MODULE_AUTHOR ("Peter Chen <[email protected]>" );
drivers/usb/cdns3/core.h +5 -2
@@ -125,10 +125,13 @@ int cdns_init(struct cdns *cdns);int cdns_remove (struct cdns *cdns);#ifdef CONFIG_PM_SLEEP -int cdns_resume (struct cdns *cdns,u8 set_active); +int cdns_resume (struct cdns *cdns);int cdns_suspend (struct cdns *cdns); +void cdns_set_active (struct cdns *cdns,u8 set_active);#else /* CONFIG_PM_SLEEP */ -static inline int cdns_resume (struct cdns *cdns,u8 set_active) +static inline int cdns_resume (struct cdns *cdns) +{return 0 ; } +static inline int cdns_set_active (struct cdns *cdns,u8 set_active) {return 0 ; }static inline int cdns_suspend (struct cdns *cdns) {return 0 ; }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 84/139 kobject: Add sanity check for kset->kobj.ktype in kset_register()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zhen Lei <[email protected]>
[ Upstream commit 4d0fe8c52bb3029d83e323c961221156ab98680b ]
When I register a kset in the following way:
static struct kset my_kset;
kobject_set_name(&my_kset.kobj, "my_kset");
ret = kset_register(&my_kset);A null pointer dereference exception is occurred:
[ 4453.568337] Unable to handle kernel NULL pointer dereference at \ virtual address 0000000000000028 ... ... [ 4453.810361] Call trace: [ 4453.813062] kobject_get_ownership+0xc/0x34 [ 4453.817493] kobject_add_internal+0x98/0x274 [ 4453.822005] kset_register+0x5c/0xb4 [ 4453.825820] my_kobj_init+0x44/0x1000 [my_kset]
... ...
Because I didn't initialize my_kset.kobj.ktype.
According to the description in Documentation/core-api/kobject.rst:
- A ktype is the type of object that embeds a kobject. Every structure that embeds a kobject needs a corresponding ktype.
So add sanity check to make sure kset->kobj.ktype is not NULL.
--- lib/kobject.c | 5 +++++ 1 file changed, 5 insertions(+)
lib/kobject.c +5 -0
@@ -850,6 +850,11 @@ int kset_register(struct kset *k)if (!k)return -EINVAL ; +if (!k->kobj.ktype) { +pr_err ("must have a ktype to be initialized properly!\n" ); +return -EINVAL ; + } +kset_init (k); err =kobject_add_internal (&k->kobj);if (err)
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 85/139 interconnect: Fix locking for runpm vs reclaim
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rob Clark <[email protected]>
[ Upstream commit af42269c3523492d71ebbe11fefae2653e9cdc78 ]
For cases where icc_bw_set() can be called in callbaths that could deadlock against shrinker/reclaim, such as runpm resume, we need to decouple the icc locking. Introduce a new icc_bw_lock for cases where we need to serialize bw aggregation and update to decouple that from paths that require memory allocation such as node/link creation/ destruction.
Fixes this lockdep splat:
======================================================
WARNING: possible circular locking dependency detected 6.2.0-rc8-debug+ #554 Not tainted
------------------------------------------------------
ring0/132 is trying to acquire lock:
ffffff80871916d0 (&gmu->lock){+.+.}-{3:3}, at: a6xx_pm_resume+0xf0/0x234
but task is already holding lock:
ffffffdb5aee57e8 (dma_fence_map){++++}-{0:0}, at: msm_job_run+0x68/0x150
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #4 (dma_fence_map){++++}-{0:0}:
__dma_fence_might_wait+0x74/0xc0
dma_resv_lockdep+0x1f4/0x2f4
do_one_initcall+0x104/0x2bc
kernel_init_freeable+0x344/0x34c
kernel_init+0x30/0x134
ret_from_fork+0x10/0x20-> #3 (mmu_notifier_invalidate_range_start){+.+.}-{0:0}:
fs_reclaim_acquire+0x80/0xa8
slab_pre_alloc_hook.constprop.0+0x40/0x25c
__kmem_cache_alloc_node+0x60/0x1cc
__kmalloc+0xd8/0x100
topology_parse_cpu_capacity+0x8c/0x178
get_cpu_for_node+0x88/0xc4
parse_cluster+0x1b0/0x28c
parse_cluster+0x8c/0x28c
init_cpu_topology+0x168/0x188
smp_prepare_cpus+0x24/0xf8
kernel_init_freeable+0x18c/0x34c
kernel_init+0x30/0x134
ret_from_fork+0x10/0x20-> #2 (fs_reclaim){+.+.}-{0:0}:
__fs_reclaim_acquire+0x3c/0x48
fs_reclaim_acquire+0x54/0xa8
slab_pre_alloc_hook.constprop.0+0x40/0x25c
__kmem_cache_alloc_node+0x60/0x1cc
__kmalloc+0xd8/0x100
kzalloc.constprop.0+0x14/0x20
icc_node_create_nolock+0x4c/0xc4
icc_node_create+0x38/0x58
qcom_icc_rpmh_probe+0x1b8/0x248
platform_probe+0x70/0xc4
really_probe+0x158/0x290
__driver_probe_device+0xc8/0xe0
driver_probe_device+0x44/0x100
__driver_attach+0xf8/0x108
bus_for_each_dev+0x78/0xc4
driver_attach+0x2c/0x38
bus_add_driver+0xd0/0x1d8
driver_register+0xbc/0xf8
__platform_driver_register+0x30/0x3c
qnoc_driver_init+0x24/0x30
do_one_initcall+0x104/0x2bc
kernel_init_freeable+0x344/0x34c
kernel_init+0x30/0x134
ret_from_fork+0x10/0x20-> #1 (icc_lock){+.+.}-{3:3}:
__mutex_lock+0xcc/0x3c8
mutex_lock_nested+0x30/0x44
icc_set_bw+0x88/0x2b4
_set_opp_bw+0x8c/0xd8
_set_opp+0x19c/0x300
dev_pm_opp_set_opp+0x84/0x94
a6xx_gmu_resume+0x18c/0x804
a6xx_pm_resume+0xf8/0x234
adreno_runtime_resume+0x2c/0x38
pm_generic_runtime_resume+0x30/0x44
__rpm_callback+0x15c/0x174
rpm_callback+0x78/0x7c
rpm_resume+0x318/0x524
__pm_runtime_resume+0x78/0xbc
adreno_load_gpu+0xc4/0x17c
msm_open+0x50/0x120
drm_file_alloc+0x17c/0x228
drm_open_helper+0x74/0x118
drm_open+0xa0/0x144
drm_stub_open+0xd4/0xe4
chrdev_open+0x1b8/0x1e4
do_dentry_open+0x2f8/0x38c
vfs_open+0x34/0x40
path_openat+0x64c/0x7b4
do_filp_open+0x54/0xc4
do_sys_openat2+0x9c/0x100
do_sys_open+0x50/0x7c
__arm64_sys_openat+0x28/0x34
invoke_syscall+0x8c/0x128
el0_svc_common.constprop.0+0xa0/0x11c
do_el0_svc+0xac/0xbc
el0_svc+0x48/0xa0
el0t_64_sync_handler+0xac/0x13c
el0t_64_sync+0x190/0x194-> #0 (&gmu->lock){+.+.}-{3:3}:
__lock_acquire+0xe00/0x1060
lock_acquire+0x1e0/0x2f8
__mutex_lock+0xcc/0x3c8
mutex_lock_nested+0x30/0x44
a6xx_pm_resume+0xf0/0x234
adreno_runtime_resume+0x2c/0x38
pm_generic_runtime_resume+0x30/0x44
__rpm_callback+0x15c/0x174
rpm_callback+0x78/0x7c
rpm_resume+0x318/0x524
__pm_runtime_resume+0x78/0xbc
pm_runtime_get_sync.isra.0+0x14/0x20
msm_gpu_submit+0x58/0x178
msm_job_run+0x78/0x150
drm_sched_main+0x290/0x370
kthread+0xf0/0x100
ret_from_fork+0x10/0x20other info that might help us debug this:
Chain exists of:
&gmu->lock --> mmu_notifier_invalidate_range_start --> dma_fence_map
Possible unsafe locking scenario: CPU0 CPU1
---- ----
lock(dma_fence_map);
lock(mmu_notifier_invalidate_range_start);
lock(dma_fence_map);
lock(&gmu->lock);
*** DEADLOCK ***2 locks held by ring0/132:
#0: ffffff8087191170 (&gpu->lock){+.+.}-{3:3}, at: msm_job_run+0x64/0x150
#1: ffffffdb5aee57e8 (dma_fence_map){++++}-{0:0}, at: msm_job_run+0x68/0x150 stack backtrace:
CPU: 7 PID: 132 Comm: ring0 Not tainted 6.2.0-rc8-debug+ #554
Hardware name: Google Lazor (rev1 - 2) with LTE (DT)
Call trace:
dump_backtrace.part.0+0xb4/0xf8
show_stack+0x20/0x38
dump_stack_lvl+0x9c/0xd0
dump_stack+0x18/0x34
print_circular_bug+0x1b4/0x1f0
check_noncircular+0x78/0xac
__lock_acquire+0xe00/0x1060
lock_acquire+0x1e0/0x2f8
__mutex_lock+0xcc/0x3c8
mutex_lock_nested+0x30/0x44
a6xx_pm_resume+0xf0/0x234
adreno_runtime_resume+0x2c/0x38
pm_generic_runtime_resume+0x30/0x44
__rpm_callback+0x15c/0x174
rpm_callback+0x78/0x7c
rpm_resume+0x318/0x524
__pm_runtime_resume+0x78/0xbc
pm_runtime_get_sync.isra.0+0x14/0x20
msm_gpu_submit+0x58/0x178
msm_job_run+0x78/0x150
drm_sched_main+0x290/0x370
kthread+0xf0/0x100
ret_from_fork+0x10/0x20--- drivers/interconnect/core.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/interconnect/core.c +6 -2
@@ -29,6 +29,7 @@ static LIST_HEAD(icc_providers);static int providers_count;static bool synced_state;static DEFINE_MUTEX (icc_lock); +static DEFINE_MUTEX (icc_bw_lock);static struct dentry *icc_debugfs_dir;static void icc_summary_show_one (struct seq_file *s,struct icc_node *n)
@@ -632,7 +633,7 @@ int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)if (WARN_ON (IS_ERR (path) || !path->num_nodes))return -EINVAL ; -mutex_lock (&icc_lock); +mutex_lock (&icc_bw_lock); old_avg = path->reqs[0 ].avg_bw; old_peak = path->reqs[0 ].peak_bw;
@@ -664,7 +665,7 @@ int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)apply_constraints (path); } -mutex_unlock (&icc_lock); +mutex_unlock (&icc_bw_lock);trace_icc_set_bw_end (path, ret);
@@ -967,6 +968,7 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider)return ;mutex_lock (&icc_lock); +mutex_lock (&icc_bw_lock); node->provider = provider;list_add_tail (&node->node_list, &provider->nodes);
@@ -992,6 +994,7 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider) node->avg_bw =0 ; node->peak_bw =0 ; +mutex_unlock (&icc_bw_lock);mutex_unlock (&icc_lock); }EXPORT_SYMBOL_GPL (icc_node_add);
@@ -1129,6 +1132,7 @@ void icc_sync_state(struct device *dev)return ;mutex_lock (&icc_lock); +mutex_lock (&icc_bw_lock); synced_state = true;list_for_each_entry (p, &icc_providers, provider_list) {dev_dbg (p->dev,"interconnect provider is in synced state\n" );
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 86/139 printk: Keep non-panic-CPUs out of console lock
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Ogness <[email protected]>
[ Upstream commit 51a1d258e50e03a0216bf42b6af9ff34ec402ac1 ]
When in a panic situation, non-panic CPUs should avoid holding the console lock so as not to contend with the panic CPU. This is already implemented with abandon_console_lock_in_panic(), which is checked after each printed line. However, non-panic CPUs should also avoid trying to acquire the console lock during a panic.
Modify console_trylock() to fail and console_lock() to block() when called from a non-panic CPU during a panic.
--- kernel/printk/printk.c | 45 ++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 19 deletions(-)
kernel/printk/printk.c +26 -19
@@ -2552,6 +2552,25 @@ static int console_cpu_notify(unsigned int cpu)return 0 ; } +/* +* Return true when this CPU should unlock console_sem without pushing all +* messages to the console. This reduces the chance that the console is +* locked when the panic CPU tries to use it. +*/ +static bool abandon_console_lock_in_panic (void ) +{ +if (!panic_in_progress ()) +return false; + +/* +* We can use raw_smp_processor_id() here because it is impossible for +* the task to be migrated to the panic_cpu, or away from it. If +* panic_cpu has already been set, and we're not currently executing on +* that CPU, then we never will be. +*/ +return atomic_read (&panic_cpu) !=raw_smp_processor_id (); +} +/** * console_lock - lock the console system for exclusive use. *
@@ -2564,6 +2583,10 @@ void console_lock(void) {might_sleep (); +/* On panic, the console_lock must be left to the panic cpu. */ +while (abandon_console_lock_in_panic ()) +msleep (1000 ); +down_console_sem ();if (console_suspended)return ;
@@ -2582,6 +2605,9 @@ EXPORT_SYMBOL(console_lock);*/ int console_trylock (void ) { +/* On panic, the console_lock must be left to the panic cpu. */ +if (abandon_console_lock_in_panic ()) +return 0 ;if (down_trylock_console_sem ())return 0 ;if (console_suspended) {
@@ -2600,25 +2626,6 @@ int is_console_locked(void) }EXPORT_SYMBOL (is_console_locked); -/* -* Return true when this CPU should unlock console_sem without pushing all -* messages to the console. This reduces the chance that the console is -* locked when the panic CPU tries to use it. -*/ -static bool abandon_console_lock_in_panic (void ) -{ -if (!panic_in_progress ()) -return false; - -/* -* We can use raw_smp_processor_id() here because it is impossible for -* the task to be migrated to the panic_cpu, or away from it. If -* panic_cpu has already been set, and we're not currently executing on -* that CPU, then we never will be. -*/ -return atomic_read (&panic_cpu) !=raw_smp_processor_id (); -} -/* * Check if the given console is currently capable and allowed to print * records.
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 87/139 printk: Consolidate console deferred printing
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: John Ogness <[email protected]>
[ Upstream commit 696ffaf50e1f8dbc66223ff614473f945f5fb8d8 ]
Printing to consoles can be deferred for several reasons:
- explicitly with printk_deferred()
- printk() in NMI context
- recursive printk() calls
The current implementation is not consistent. For printk_deferred(), irq work is scheduled twice. For NMI und recursive, panic CPU suppression and caller delays are not properly enforced.
Correct these inconsistencies by consolidating the deferred printing code so that vprintk_deferred() is the top-level function for deferred printing and vprintk_emit() will perform whichever irq_work queueing is appropriate.
Also add kerneldoc for wake_up_klogd() and defer_console_output() to clarify their differences and appropriate usage.
--- kernel/printk/printk.c | 35 ++++++++++++++++++++++++++++------- kernel/printk/printk_safe.c | 9 ++------- 2 files changed, 30 insertions(+), 14 deletions(-)
kernel/printk/printk.c +28 -7
@@ -2269,7 +2269,11 @@ asmlinkage int vprintk_emit(int facility, int level,preempt_enable (); } -wake_up_klogd (); +if (in_sched) +defer_console_output (); +else +wake_up_klogd (); +return printed_len; }EXPORT_SYMBOL (vprintk_emit);
@@ -3490,11 +3494,33 @@ static void __wake_up_klogd(int val)preempt_enable (); } +/** +* wake_up_klogd - Wake kernel logging daemon +* +* Use this function when new records have been added to the ringbuffer +* and the console printing of those records has already occurred or is +* known to be handled by some other context. This function will only +* wake the logging daemon. +* +* Context: Any context. +*/ void wake_up_klogd (void ) {__wake_up_klogd (PRINTK_PENDING_WAKEUP ); } +/** +* defer_console_output - Wake kernel logging daemon and trigger +* console printing in a deferred context +* +* Use this function when new records have been added to the ringbuffer, +* this context is responsible for console printing those records, but +* the current context is not allowed to perform the console printing. +* Trigger an irq_work context to perform the console printing. This +* function also wakes the logging daemon. +* +* Context: Any context. +*/ void defer_console_output (void ) {/*
@@ -3511,12 +3537,7 @@ void printk_trigger_flush(void)int vprintk_deferred (const char *fmt,va_list args) { -int r; - - r =vprintk_emit (0 ,LOGLEVEL_SCHED ,NULL , fmt, args); -defer_console_output (); - -return r; +return vprintk_emit (0 ,LOGLEVEL_SCHED ,NULL , fmt, args); }int _printk_deferred (const char *fmt, ...)
kernel/printk/printk_safe.c +2 -7
@@ -38,13 +38,8 @@ asmlinkage int vprintk(const char *fmt, va_list args)* Use the main logbuf even in NMI. But avoid calling console * drivers that might have their own locks. */ -if (this_cpu_read (printk_context) ||in_nmi ()) { -int len; - - len =vprintk_store (0 ,LOGLEVEL_DEFAULT ,NULL , fmt, args); -defer_console_output (); -return len; - } +if (this_cpu_read (printk_context) ||in_nmi ()) +return vprintk_deferred (fmt, args);/* No obstacles. */ return vprintk_default (fmt, args);
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 88/139 dma-buf: Add unlocked variant of attachment-mapping functions
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Osipenko <[email protected]>
[ Upstream commit 19d6634d8789573a9212ce78dbb4348ffd4f7f78 ]
Add unlocked variant of dma_buf_map/unmap_attachment() that will be used by drivers that don't take the reservation lock explicitly.
Stable-dep-of: a2cb9cd6a394 ("misc: fastrpc: Fix incorrect DMA mapping unmap request")
--- drivers/dma-buf/dma-buf.c | 53 +++++++++++++++++++++++++++++++++++++++ include/linux/dma-buf.h | 6 +++++ 2 files changed, 59 insertions(+)
drivers/dma-buf/dma-buf.c +53 -0
@@ -1105,6 +1105,34 @@ struct sg_table *dma_buf_map_attachment(struct dma_buf_attachment *attach, }EXPORT_SYMBOL_NS_GPL (dma_buf_map_attachment,DMA_BUF ); +/** +* dma_buf_map_attachment_unlocked - Returns the scatterlist table of the attachment; +* mapped into _device_ address space. Is a wrapper for map_dma_buf() of the +* dma_buf_ops. +* @attach: [in] attachment whose scatterlist is to be returned +* @direction: [in] direction of DMA transfer +* +* Unlocked variant of dma_buf_map_attachment(). +*/ +struct sg_table * +dma_buf_map_attachment_unlocked (struct dma_buf_attachment *attach, +enum dma_data_direction direction) +{ +struct sg_table *sg_table; + +might_sleep (); + +if (WARN_ON (!attach || !attach->dmabuf)) +return ERR_PTR (-EINVAL ); + +dma_resv_lock (attach->dmabuf->resv,NULL ); + sg_table =dma_buf_map_attachment (attach, direction); +dma_resv_unlock (attach->dmabuf->resv); + +return sg_table; +} +EXPORT_SYMBOL_NS_GPL (dma_buf_map_attachment_unlocked,DMA_BUF ); +/** * dma_buf_unmap_attachment - unmaps and decreases usecount of the buffer;might * deallocate the scatterlist associated. Is a wrapper for unmap_dma_buf() of
@@ -1141,6 +1169,31 @@ void dma_buf_unmap_attachment(struct dma_buf_attachment *attach, }EXPORT_SYMBOL_NS_GPL (dma_buf_unmap_attachment,DMA_BUF ); +/** +* dma_buf_unmap_attachment_unlocked - unmaps and decreases usecount of the buffer;might +* deallocate the scatterlist associated. Is a wrapper for unmap_dma_buf() of +* dma_buf_ops. +* @attach: [in] attachment to unmap buffer from +* @sg_table: [in] scatterlist info of the buffer to unmap +* @direction: [in] direction of DMA transfer +* +* Unlocked variant of dma_buf_unmap_attachment(). +*/ +void dma_buf_unmap_attachment_unlocked (struct dma_buf_attachment *attach, +struct sg_table *sg_table, +enum dma_data_direction direction) +{ +might_sleep (); + +if (WARN_ON (!attach || !attach->dmabuf || !sg_table)) +return ; + +dma_resv_lock (attach->dmabuf->resv,NULL ); +dma_buf_unmap_attachment (attach, sg_table, direction); +dma_resv_unlock (attach->dmabuf->resv); +} +EXPORT_SYMBOL_NS_GPL (dma_buf_unmap_attachment_unlocked,DMA_BUF ); +/** * dma_buf_move_notify - notify attachments that DMA-buf is moving *
include/linux/dma-buf.h +6 -0
@@ -627,6 +627,12 @@ int dma_buf_begin_cpu_access(struct dma_buf *dma_buf, enum dma_data_direction dir);int dma_buf_end_cpu_access (struct dma_buf *dma_buf,enum dma_data_direction dir); +struct sg_table * +dma_buf_map_attachment_unlocked (struct dma_buf_attachment *attach, +enum dma_data_direction direction); +void dma_buf_unmap_attachment_unlocked (struct dma_buf_attachment *attach, +struct sg_table *sg_table, +enum dma_data_direction direction);int dma_buf_mmap (struct dma_buf *,struct vm_area_struct *,unsigned long );
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 89/139 misc: fastrpc: Prepare to dynamic dma-buf locking specification
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Osipenko <[email protected]>
[ Upstream commit 791da5c7fedbc1d662445ec030d8f86872f6184c ]
Prepare fastrpc to the common dynamic dma-buf locking convention by starting to use the unlocked versions of dma-buf API functions.
Stable-dep-of: a2cb9cd6a394 ("misc: fastrpc: Fix incorrect DMA mapping unmap request")
--- drivers/misc/fastrpc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/misc/fastrpc.c +3 -3
@@ -310,8 +310,8 @@ static void fastrpc_free_map(struct kref *ref)return ; } } -dma_buf_unmap_attachment (map->attach, map->table, -DMA_BIDIRECTIONAL ); +dma_buf_unmap_attachment_unlocked (map->attach, map->table, +DMA_BIDIRECTIONAL );dma_buf_detach (map->buf, map->attach);dma_buf_put (map->buf); }
@@ -736,7 +736,7 @@ static int fastrpc_map_create(struct fastrpc_user *fl, int fd, goto attach_err; } - map->table =dma_buf_map_attachment (map->attach,DMA_BIDIRECTIONAL ); + map->table =dma_buf_map_attachment_unlocked (map->attach,DMA_BIDIRECTIONAL );if (IS_ERR (map->table)) { err =PTR_ERR (map->table); goto map_err;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 90/139 misc: fastrpc: Fix incorrect DMA mapping unmap request
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ekansh Gupta <[email protected]>
[ Upstream commit a2cb9cd6a3949a3804ad9fd7da234892ce6719ec ]
Scatterlist table is obtained during map create request and the same table is used for DMA mapping unmap. In case there is any failure while getting the sg_table, ERR_PTR is returned instead of sg_table.
When the map is getting freed, there is only a non-NULL check of sg_table which will also be true in case failure was returned instead of sg_table. This would result in improper unmap request. Add proper check before setting map table to avoid bad unmap request.
--- drivers/misc/fastrpc.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
drivers/misc/fastrpc.c +5 -3
@@ -711,6 +711,7 @@ static int fastrpc_map_create(struct fastrpc_user *fl, int fd, {struct fastrpc_session_ctx *sess = fl->sctx;struct fastrpc_map *map =NULL ; +struct sg_table *table;int err =0 ;if (!fastrpc_map_lookup (fl, fd, ppmap, true))
@@ -736,11 +737,12 @@ static int fastrpc_map_create(struct fastrpc_user *fl, int fd, goto attach_err; } - map->table =dma_buf_map_attachment_unlocked (map->attach,DMA_BIDIRECTIONAL ); -if (IS_ERR (map->table)) { - err =PTR_ERR (map->table); + table =dma_buf_map_attachment_unlocked (map->attach,DMA_BIDIRECTIONAL ); +if (IS_ERR (table)) { + err =PTR_ERR (table); goto map_err; } + map->table = table; map->phys =sg_dma_address (map->table->sgl); map->phys += ((u64 )fl->sctx->sid <<32 );
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 91/139 MIPS: Use "grep -E" instead of "egrep"
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tiezhu Yang <[email protected]>
[ Upstream commit d42f0c6ad502c9f612410e125ebdf290cce8bdc3 ]
The latest version of grep claims the egrep is now obsolete so the build now contains warnings that look like:
egrep: warning: egrep is obsolescent; using grep -E
fix this up by moving the related file to use "grep -E" instead.
Here are the steps to install the latest grep:
wget http://ftp.gnu.org/gnu/grep/grep-3.8.tar.gz tar xf grep-3.8.tar.gz cd grep-3.8 && ./configure && make sudo make install export PATH=/usr/local/bin:$PATH
Stable-dep-of: 4fe4a6374c4d ("MIPS: Only fiddle with CHECKFLAGS if `need-compiler'")
--- arch/mips/Makefile | 2 +- arch/mips/vdso/Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
arch/mips/Makefile +1 -1
@@ -352,7 +352,7 @@ KBUILD_LDFLAGS += -m $(ld-emul) ifdef need-compiler CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \ - egrep -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \ + grep -E -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \ sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g') endif
arch/mips/vdso/Makefile +1 -1
@@ -71,7 +71,7 @@ KCOV_INSTRUMENT := n # Check that we don't have PIC 'jalr t9' calls left quiet_cmd_vdso_mips_check = VDSOCHK $@ - cmd_vdso_mips_check = if $(OBJDUMP) --disassemble $@ | egrep -h "jalr.*t9" > /dev/null; \ + cmd_vdso_mips_check = if $(OBJDUMP) --disassemble $@ | grep -E -h "jalr.*t9" > /dev/null; \ then (echo >&2 "$@: PIC 'jalr t9' calls are not supported"; \ rm -f $@; /bin/false); fi
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 92/139 btrfs: add a helper to read the superblock metadata_uuid
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Anand Jain <[email protected]>
[ Upstream commit 4844c3664a72d36cc79752cb651c78860b14c240 ]
In some cases, we need to read the FSID from the superblock when the metadata_uuid is not set, and otherwise, read the metadata_uuid. So, add a helper.
Stable-dep-of: 6bfe3959b0e7 ("btrfs: compare the correct fsid/metadata_uuid in btrfs_validate_super")
--- fs/btrfs/volumes.c | 8 ++++++++ fs/btrfs/volumes.h | 1 + 2 files changed, 9 insertions(+)
fs/btrfs/volumes.c +8 -0
@@ -663,6 +663,14 @@ static int btrfs_open_one_device(struct btrfs_fs_devices *fs_devices,return -EINVAL ; } +u8 *btrfs_sb_fsid_ptr (struct btrfs_super_block *sb) +{ +bool has_metadata_uuid = (btrfs_super_incompat_flags (sb) & +BTRFS_FEATURE_INCOMPAT_METADATA_UUID ); + +return has_metadata_uuid ? sb->metadata_uuid : sb->fsid; +} +/* * Handle scanned device having its CHANGING_FSID_V2 flag set and the fs_devices * being created with a disk that has already completed its fsid change. Such
fs/btrfs/volumes.h +1 -0
@@ -757,5 +757,6 @@ int btrfs_verify_dev_extents(struct btrfs_fs_info *fs_info);bool btrfs_repair_one_zone (struct btrfs_fs_info *fs_info,u64 logical);bool btrfs_pinned_by_swapfile (struct btrfs_fs_info *fs_info,void *ptr); +u8 *btrfs_sb_fsid_ptr (struct btrfs_super_block *sb);#endif
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 93/139 btrfs: compare the correct fsid/metadata_uuid in btrfs_validate_super
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Anand Jain <[email protected]>
[ Upstream commit 6bfe3959b0e7a526f5c64747801a8613f002f05a ]
The function btrfs_validate_super() should verify the metadata_uuid in the provided superblock argument. Because, all its callers expect it to do that.
Such as in the following stacks:
write_all_supers()
sb = fs_info->super_for_commit;
btrfs_validate_write_super(.., sb)
btrfs_validate_super(.., sb, ..) scrub_one_super()
btrfs_validate_super(.., sb, ..)
And
check_dev_super()
btrfs_validate_super(.., sb, ..)
However, it currently verifies the fs_info::super_copy::metadata_uuid instead. Fix this using the correct metadata_uuid in the superblock argument.
--- fs/btrfs/disk-io.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
fs/btrfs/disk-io.c +3 -5
@@ -2728,13 +2728,11 @@ int btrfs_validate_super(struct btrfs_fs_info *fs_info, ret = -EINVAL ; } -if (btrfs_fs_incompat (fs_info,METADATA_UUID ) && -memcmp (fs_info->fs_devices->metadata_uuid, - fs_info->super_copy->metadata_uuid,BTRFS_FSID_SIZE )) { +if (memcmp (fs_info->fs_devices->metadata_uuid,btrfs_sb_fsid_ptr (sb), +BTRFS_FSID_SIZE ) !=0 ) {btrfs_err (fs_info,"superblock metadata_uuid doesn't match metadata uuid of fs_devices: %pU != %pU" , - fs_info->super_copy->metadata_uuid, - fs_info->fs_devices->metadata_uuid); +btrfs_sb_fsid_ptr (sb), fs_info->fs_devices->metadata_uuid); ret = -EINVAL ; }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 76/139 usb: gadget: fsl_qe_udc: validate endpoint index for ch9 udc
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ma Ke <[email protected]>
[ Upstream commit ce9daa2efc0872a9a68ea51dc8000df05893ef2e ]
We should verify the bound of the array to assure that host may not manipulate the index to point past endpoint array.
--- drivers/usb/gadget/udc/fsl_qe_udc.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/usb/gadget/udc/fsl_qe_udc.c +2 -0
@@ -1959,6 +1959,8 @@ static void ch9getstatus(struct qe_udc *udc, u8 request_type, u16 value, }else if ((request_type &USB_RECIP_MASK ) ==USB_RECIP_ENDPOINT ) {/* Get endpoint status */ int pipe = index &USB_ENDPOINT_NUMBER_MASK ; +if (pipe >=USB_MAX_ENDPOINTS ) + goto stall;struct qe_ep *target_ep = &udc->eps[pipe];u16 usep;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 94/139 block: factor out a bvec_set_page helper
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoph Hellwig <[email protected]>
[ Upstream commit d58cdfae6a22e5079656c487aad669597a0635c8 ]
Add a helper to initialize a bvec based of a page pointer. This will help removing various open code bvec initializations.
Stable-dep-of: 1f0bbf28940c ("nvmet-tcp: pass iov_len instead of sg->length to bvec_set_page()")
--- block/bio-integrity.c | 7 +------ block/bio.c | 12 ++---------- include/linux/bvec.h | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 16 deletions(-)
block/bio-integrity.c +1 -6
@@ -124,23 +124,18 @@ int bio_integrity_add_page(struct bio *bio, struct page *page, unsigned int len, unsigned int offset) {struct bio_integrity_payload *bip =bio_integrity (bio); -struct bio_vec *iv;if (bip->bip_vcnt >= bip->bip_max_vcnt) {printk (KERN_ERR "%s: bip_vec full\n" , __func__);return 0 ; } - iv = bip->bip_vec + bip->bip_vcnt; -if (bip->bip_vcnt &&bvec_gap_to_prev (&bdev_get_queue (bio->bi_bdev)->limits, &bip->bip_vec[bip->bip_vcnt -1 ], offset))return 0 ; - iv->bv_page = page; - iv->bv_len = len; - iv->bv_offset = offset; +bvec_set_page (&bip->bip_vec[bip->bip_vcnt], page, len, offset); bip->bip_vcnt++;return len;
block/bio.c +2 -10
@@ -976,10 +976,7 @@ int bio_add_hw_page(struct request_queue *q, struct bio *bio,if (bio->bi_vcnt >=queue_max_segments (q))return 0 ; - bvec = &bio->bi_io_vec[bio->bi_vcnt]; - bvec->bv_page = page; - bvec->bv_len = len; - bvec->bv_offset = offset; +bvec_set_page (&bio->bi_io_vec[bio->bi_vcnt], page, len, offset); bio->bi_vcnt++; bio->bi_iter.bi_size += len;return len;
@@ -1055,15 +1052,10 @@ EXPORT_SYMBOL_GPL(bio_add_zone_append_page);void __bio_add_page (struct bio *bio,struct page *page,unsigned int len,unsigned int off) { -struct bio_vec *bv = &bio->bi_io_vec[bio->bi_vcnt]; -WARN_ON_ONCE (bio_flagged (bio,BIO_CLONED ));WARN_ON_ONCE (bio_full (bio, len)); - bv->bv_page = page; - bv->bv_offset = off; - bv->bv_len = len; - +bvec_set_page (&bio->bi_io_vec[bio->bi_vcnt], page, len, off); bio->bi_iter.bi_size += len; bio->bi_vcnt++; }
include/linux/bvec.h +15 -0
@@ -35,6 +35,21 @@ struct bio_vec {unsigned int bv_offset; }; +/** +* bvec_set_page - initialize a bvec based off a struct page +* @bv: bvec to initialize +* @page: page the bvec should point to +* @len: length of the bvec +* @offset: offset into the page +*/ +static inline void bvec_set_page (struct bio_vec *bv,struct page *page, +unsigned int len,unsigned int offset) +{ + bv->bv_page = page; + bv->bv_len = len; + bv->bv_offset = offset; +} +struct bvec_iter {sector_t bi_sector;/* device address in 512 byte sectors */
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 95/139 nvmet: use bvec_set_page to initialize bvecs
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoph Hellwig <[email protected]>
[ Upstream commit fc41c97a3a7b08131e6998bc7692f95729f9d359 ]
Use the bvec_set_page helper to initialize bvecs.
Stable-dep-of: 1f0bbf28940c ("nvmet-tcp: pass iov_len instead of sg->length to bvec_set_page()")
--- drivers/nvme/target/io-cmd-file.c | 10 ++-------- drivers/nvme/target/tcp.c | 5 ++--- 2 files changed, 4 insertions(+), 11 deletions(-)
drivers/nvme/target/io-cmd-file.c +2 -8
@@ -73,13 +73,6 @@ int nvmet_file_ns_enable(struct nvmet_ns *ns)return ret; } -static void nvmet_file_init_bvec (struct bio_vec *bv,struct scatterlist *sg) -{ - bv->bv_page =sg_page (sg); - bv->bv_offset = sg->offset; - bv->bv_len = sg->length; -} -static ssize_t nvmet_file_submit_bvec (struct nvmet_req *req,loff_t pos,unsigned long nr_segs,size_t count,int ki_flags) {
@@ -146,7 +139,8 @@ static bool nvmet_file_execute_io(struct nvmet_req *req, int ki_flags)memset (&req->f.iocb,0 ,sizeof (struct kiocb ));for_each_sg (req->sg, sg, req->sg_cnt, i) { -nvmet_file_init_bvec (&req->f.bvec[bv_cnt], sg); +bvec_set_page (&req->f.bvec[bv_cnt],sg_page (sg), sg->length, + sg->offset); len += req->f.bvec[bv_cnt].bv_len; total_len += req->f.bvec[bv_cnt].bv_len; bv_cnt++;
drivers/nvme/target/tcp.c +2 -3
@@ -321,9 +321,8 @@ static void nvmet_tcp_build_pdu_iovec(struct nvmet_tcp_cmd *cmd)while (length) {u32 iov_len =min_t (u32, length, sg->length - sg_offset); - iov->bv_page =sg_page (sg); - iov->bv_len = sg->length; - iov->bv_offset = sg->offset + sg_offset; +bvec_set_page (iov,sg_page (sg), sg->length, + sg->offset + sg_offset); length -= iov_len; sg =sg_next (sg);
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 96/139 nvmet-tcp: pass iov_len instead of sg->length to bvec_set_page()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Varun Prakash <[email protected]>
[ Upstream commit 1f0bbf28940cf5edad90ab57b62aa8197bf5e836 ]
iov_len is the valid data length, so pass iov_len instead of sg->length to bvec_set_page().
--- drivers/nvme/target/tcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/nvme/target/tcp.c +1 -1
@@ -321,7 +321,7 @@ static void nvmet_tcp_build_pdu_iovec(struct nvmet_tcp_cmd *cmd)while (length) {u32 iov_len =min_t (u32, length, sg->length - sg_offset); -bvec_set_page (iov,sg_page (sg), sg->length, +bvec_set_page (iov,sg_page (sg), iov_len, sg->offset + sg_offset); length -= iov_len;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 97/139 drm: gm12u320: Fix the timeout usage for usb_bulk_msg()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jinjie Ruan <[email protected]>
[ Upstream commit 7583028d359db3cd0072badcc576b4f9455fd27a ]
The timeout arg of usb_bulk_msg() is ms already, which has been converted to jiffies by msecs_to_jiffies() in usb_start_wait_urb(). So fix the usage by removing the redundant msecs_to_jiffies() in the macros.
And as Hans suggested, also remove msecs_to_jiffies() for the IDLE_TIMEOUT macro to make it consistent here and so change IDLE_TIMEOUT to msecs_to_jiffies(IDLE_TIMEOUT) where it is used.
--- drivers/gpu/drm/tiny/gm12u320.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/gpu/drm/tiny/gm12u320.c +5 -5
@@ -69,10 +69,10 @@ MODULE_PARM_DESC(eco_mode, "Turn on Eco mode (less bright, more silent)");#define READ_STATUS_SIZE 13#define MISC_VALUE_SIZE 4 -#define CMD_TIMEOUT msecs_to_jiffies(200) -#define DATA_TIMEOUT msecs_to_jiffies(1000) -#define IDLE_TIMEOUT msecs_to_jiffies(2000) -#define FIRST_FRAME_TIMEOUT msecs_to_jiffies(2000) +#define CMD_TIMEOUT 200 +#define DATA_TIMEOUT 1000 +#define IDLE_TIMEOUT 2000 +#define FIRST_FRAME_TIMEOUT 2000#define MISC_REQ_GET_SET_ECO_A 0xff#define MISC_REQ_GET_SET_ECO_B 0x35
@@ -388,7 +388,7 @@ static void gm12u320_fb_update_work(struct work_struct *work)* switches back to showing its logo. */ queue_delayed_work (system_long_wq, &gm12u320->fb_update.work, -IDLE_TIMEOUT ); +msecs_to_jiffies (IDLE_TIMEOUT ));return ; err:
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 98/139 scsi: qla2xxx: Fix NULL vs IS_ERR() bug for debugfs_create_dir()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jinjie Ruan <[email protected]>
[ Upstream commit d0b0822e32dbae80bbcb3cc86f34d28539d913df ]
Since both debugfs_create_dir() and debugfs_create_file() return ERR_PTR and never NULL, use IS_ERR() instead of checking for NULL.
--- drivers/scsi/qla2xxx/qla_dfs.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/scsi/qla2xxx/qla_dfs.c +3 -3
@@ -116,7 +116,7 @@ qla2x00_dfs_create_rport(scsi_qla_host_t *vha, struct fc_port *fp)sprintf (wwn,"pn-%016llx" ,wwn_to_u64 (fp->port_name)); fp->dfs_rport_dir =debugfs_create_dir (wwn, vha->dfs_rport_root); -if (!fp->dfs_rport_dir) +if (IS_ERR (fp->dfs_rport_dir))return ;if (NVME_TARGET (vha->hw, fp)) debugfs_create_file("dev_loss_tmo", 0600, fp->dfs_rport_dir,
@@ -708,14 +708,14 @@ qla2x00_dfs_setup(scsi_qla_host_t *vha)if (IS_QLA27XX (ha) ||IS_QLA83XX (ha) ||IS_QLA28XX (ha)) { ha->tgt.dfs_naqp =debugfs_create_file ("naqp" ,0400 , ha->dfs_dir, vha, &dfs_naqp_ops); -if (!ha->tgt.dfs_naqp) { +if (IS_ERR (ha->tgt.dfs_naqp)) {ql_log (ql_log_warn, vha,0xd011 ,"Unable to create debugFS naqp node.\n" ); goto out; } } vha->dfs_rport_root =debugfs_create_dir ("rports" , ha->dfs_dir); -if (!vha->dfs_rport_root) { +if (IS_ERR (vha->dfs_rport_root)) {ql_log (ql_log_warn, vha,0xd012 ,"Unable to create debugFS rports node.\n" ); goto out;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 99/139 selftests: tracing: Fix to unmount tracefs for recovering environment
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masami Hiramatsu (Google) <[email protected]>
[ Upstream commit 7e021da80f48582171029714f8a487347f29dddb ]
Fix to unmount the tracefs if the ftracetest mounted it for recovering system environment. If the tracefs is already mounted, this does nothing.
--- tools/testing/selftests/ftrace/ftracetest | 8 ++++++++ 1 file changed, 8 insertions(+)
tools/testing/selftests/ftrace/ftracetest +8 -0
@@ -30,6 +30,9 @@ err_ret=1 # kselftest skip code is 4 err_skip=4 +# umount required +UMOUNT_DIR="" + # cgroup RT scheduling prevents chrt commands from succeeding, which # induces failures in test wakeup tests. Disable for the duration of # the tests.
@@ -44,6 +47,9 @@ setup() { cleanup() { echo $sched_rt_runtime_orig > $sched_rt_runtime + if [ -n "${UMOUNT_DIR}" ]; then + umount ${UMOUNT_DIR} ||: + fi } errexit() { # message
@@ -155,11 +161,13 @@ if [ -z "$TRACING_DIR" ]; then mount -t tracefs nodev /sys/kernel/tracing || errexit "Failed to mount /sys/kernel/tracing" TRACING_DIR="/sys/kernel/tracing" + UMOUNT_DIR=${TRACING_DIR} # If debugfs exists, then so does /sys/kernel/debug elif [ -d "/sys/kernel/debug" ]; then mount -t debugfs nodev /sys/kernel/debug || errexit "Failed to mount /sys/kernel/debug" TRACING_DIR="/sys/kernel/debug/tracing" + UMOUNT_DIR=${TRACING_DIR} else err_ret=$err_skip errexit "debugfs and tracefs are not configured in this kernel"
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 100/139 x86/ibt: Suppress spurious ENDBR
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Peter Zijlstra <[email protected]>
[ Upstream commit 25e73b7e3f72a25aa30cbb2eecb49036e0acf066 ]
It was reported that under certain circumstances GCC emits ENDBR instructions for _THIS_IP_ usage. Specifically, when it appears at the start of a basic block -- but not elsewhere.
Since _THIS_IP_ is never used for control flow, these ENDBR instructions are completely superfluous. Override the _THIS_IP_ definition for x86_64 to avoid this.
Less ENDBR instructions is better.
--- arch/x86/include/asm/linkage.h | 8 ++++++++ include/linux/instruction_pointer.h | 5 +++++ 2 files changed, 13 insertions(+)
arch/x86/include/asm/linkage.h +8 -0
@@ -8,6 +8,14 @@#undef notrace#define notrace __attribute__((no_instrument_function)) +#ifdef CONFIG_64BIT +/* +* The generic version tends to create spurious ENDBR instructions under +* certain conditions. +*/ +#define _THIS_IP_ ({ unsigned long __here; asm ("lea 0(%%rip), %0" : "=r" (__here)); __here; }) +#endif +#ifdef CONFIG_X86_32 #define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))#endif /* CONFIG_X86_32 */
include/linux/instruction_pointer.h +5 -0
@@ -2,7 +2,12 @@#ifndef _LINUX_INSTRUCTION_POINTER_H#define _LINUX_INSTRUCTION_POINTER_H +#include <asm/linkage.h> +#define _RET_IP_ (unsigned long)__builtin_return_address(0) + +#ifndef _THIS_IP_#define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) +#endif #endif /* _LINUX_INSTRUCTION_POINTER_H */
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 101/139 riscv: kexec: Align the kexeced kernel entry
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Song Shuai <[email protected]>
[ Upstream commit 1bfb2b618d52e59a4ef1896b46c4698ad2be66b7 ]
The current riscv boot protocol requires 2MB alignment for RV64 and 4MB alignment for RV32.
In KEXEC_FILE path, the elf_find_pbase() function should align the kexeced kernel entry according to the requirement, otherwise the kexeced kernel would silently BUG at the setup_vm().
--- arch/riscv/kernel/elf_kexec.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
arch/riscv/kernel/elf_kexec.c +7 -1
@@ -98,7 +98,13 @@ static int elf_find_pbase(struct kimage *image, unsigned long kernel_len, kbuf.image = image; kbuf.buf_min = lowest_paddr; kbuf.buf_max =ULONG_MAX ; - kbuf.buf_align =PAGE_SIZE ; + +/* +* Current riscv boot protocol requires 2MB alignment for +* RV64 and 4MB alignment for RV32 +* +*/ + kbuf.buf_align =PMD_SIZE ; kbuf.mem =KEXEC_BUF_MEM_UNKNOWN ; kbuf.memsz =ALIGN (kernel_len,PAGE_SIZE ); kbuf.top_down = false;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 102/139 scsi: target: core: Fix target_cmd_counter leak
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Disseldorp <[email protected]>
[ Upstream commit d14e3e553e05cb763964c991fe6acb0a6a1c6f9c ]
The target_cmd_counter struct allocated via target_alloc_cmd_counter() is never freed, resulting in leaks across various transport types, e.g.:
unreferenced object 0xffff88801f920120 (size 96):
comm "sh", pid 102, jiffies 4294892535 (age 713.412s) hex dump (first 32 bytes):
07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 38 01 92 1f 80 88 ff ff ........8.......
backtrace:
[<00000000e58a6252>] kmalloc_trace+0x11/0x20
[<0000000043af4b2f>] target_alloc_cmd_counter+0x17/0x90 [target_core_mod]
[<000000007da2dfa7>] target_setup_session+0x2d/0x140 [target_core_mod]
[<0000000068feef86>] tcm_loop_tpg_nexus_store+0x19b/0x350 [tcm_loop]
[<000000006a80e021>] configfs_write_iter+0xb1/0x120
[<00000000e9f4d860>] vfs_write+0x2e4/0x3c0
[<000000008143433b>] ksys_write+0x80/0xb0
[<00000000a7df29b2>] do_syscall_64+0x42/0x90
[<0000000053f45fb8>] entry_SYSCALL_64_after_hwframe+0x6e/0xd8Free the structure alongside the corresponding iscsit_conn / se_sess parent.
--- drivers/target/target_core_transport.c | 1 + 1 file changed, 1 insertion(+)
drivers/target/target_core_transport.c +1 -0
@@ -264,6 +264,7 @@ void target_free_cmd_counter(struct target_cmd_counter *cmd_cnt)percpu_ref_put (&cmd_cnt->refcnt);percpu_ref_exit (&cmd_cnt->refcnt); +kfree (cmd_cnt); }EXPORT_SYMBOL_GPL (target_free_cmd_counter);
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 103/139 scsi: lpfc: Fix the NULL vs IS_ERR() bug for debugfs_create_file()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jinjie Ruan <[email protected]>
[ Upstream commit 7dcc683db3639eadd11bf0d59a09088a43de5e22 ]
Since debugfs_create_file() returns ERR_PTR and never NULL, use IS_ERR() to check the return value.
--- drivers/scsi/lpfc/lpfc_debugfs.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
drivers/scsi/lpfc/lpfc_debugfs.c +7 -7
@@ -6069,7 +6069,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport) phba->hba_debugfs_root, phba, &lpfc_debugfs_op_multixripools); -if (!phba->debug_multixri_pools) { +if (IS_ERR (phba->debug_multixri_pools)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"0527 Cannot create debugfs multixripools\n" ); goto debug_failed;
@@ -6081,7 +6081,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,S_IFREG |0644 , phba->hba_debugfs_root, phba, &lpfc_cgn_buffer_op); -if (!phba->debug_cgn_buffer) { +if (IS_ERR (phba->debug_cgn_buffer)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"6527 Cannot create debugfs " "cgn_buffer\n" );
@@ -6094,7 +6094,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,S_IFREG |0644 , phba->hba_debugfs_root, phba, &lpfc_rx_monitor_op); -if (!phba->debug_rx_monitor) { +if (IS_ERR (phba->debug_rx_monitor)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"6528 Cannot create debugfs " "rx_monitor\n" );
@@ -6107,7 +6107,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,0644 , phba->hba_debugfs_root, phba, &lpfc_debugfs_ras_log); -if (!phba->debug_ras_log) { +if (IS_ERR (phba->debug_ras_log)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"6148 Cannot create debugfs" " ras_log\n" );
@@ -6128,7 +6128,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,S_IFREG |0644 , phba->hba_debugfs_root, phba, &lpfc_debugfs_op_lockstat); -if (!phba->debug_lockstat) { +if (IS_ERR (phba->debug_lockstat)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"4610 Can't create debugfs lockstat\n" ); goto debug_failed;
@@ -6354,7 +6354,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,0644 , vport->vport_debugfs_root, vport, &lpfc_debugfs_op_scsistat); -if (!vport->debug_scsistat) { +if (IS_ERR (vport->debug_scsistat)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"4611 Cannot create debugfs scsistat\n" ); goto debug_failed;
@@ -6365,7 +6365,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,0644 , vport->vport_debugfs_root, vport, &lpfc_debugfs_op_ioktime); -if (!vport->debug_ioktime) { +if (IS_ERR (vport->debug_ioktime)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"0815 Cannot create debugfs ioktime\n" ); goto debug_failed;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 77/139 tools: iio: iio_generic_buffer: Fix some integer type and calculation
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chenyuan Mi <[email protected]>
[ Upstream commit 49d736313d0975ddeb156f4f59801da833f78b30 ]
In function size_from_channelarray(), the return value 'bytes' is defined as int type. However, the calcution of 'bytes' in this function is designed to use the unsigned int type. So it is necessary to change 'bytes' type to unsigned int to avoid integer overflow.
The size_from_channelarray() is called in main() function, its return value is directly multipled by 'buf_len' and then used as the malloc() parameter. The 'buf_len' is completely controllable by user, thus a multiplication overflow may occur here. This could allocate an unexpected small area.
--- tools/iio/iio_generic_buffer.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)
tools/iio/iio_generic_buffer.c +13 -4
@@ -51,9 +51,9 @@ enum autochan {* Has the side effect of filling the channels[i].location values used * in processing the buffer output. **/ -static int size_from_channelarray (struct iio_channel_info *channels,int num_channels) +static unsigned int size_from_channelarray (struct iio_channel_info *channels,int num_channels) { -int bytes =0 ; +unsigned int bytes =0 ;int i =0 ;while (i < num_channels) {
@@ -348,7 +348,7 @@ int main(int argc, char **argv)ssize_t read_size;int dev_num =-1 , trig_num =-1 ;char *buffer_access =NULL ; -int scan_size; +unsigned int scan_size;int noevents =0 ;int notrigger =0 ;char *dummy;
@@ -674,7 +674,16 @@ int main(int argc, char **argv) } scan_size =size_from_channelarray (channels, num_channels); - data =malloc (scan_size * buf_len); + +size_t total_buf_len = scan_size * buf_len; + +if (scan_size >0 && total_buf_len / scan_size != buf_len) { + ret = -EFAULT ; +perror ("Integer overflow happened when calculate scan_size * buf_len" ); + goto error; + } + + data =malloc (total_buf_len);if (!data) { ret = -ENOMEM ; goto error;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 104/139 panic: Reenable preemption in WARN slowpath
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lukas Wunner <[email protected]>
[ Upstream commit cccd32816506cbac3a4c65d9dff51b3125ef1a03 ]
Commit:
5a5d7e9badd2 ("cpuidle: lib/bug: Disable rcu_is_watching() during WARN/BUG")
amended warn_slowpath_fmt() to disable preemption until the WARN splat has been emitted.
However the commit neglected to reenable preemption in the !fmt codepath, i.e. when a WARN splat is emitted without additional format string.
One consequence is that users may see more splats than intended. E.g. a WARN splat emitted in a work item results in at least two extra splats:
BUG: workqueue leaked lock or atomic (emitted by process_one_work()) BUG: scheduling while atomic (emitted by worker_thread() -> schedule())
Ironically the point of the commit was to *avoid* extra splats. ;)
Fix it.
--- kernel/panic.c | 1 + 1 file changed, 1 insertion(+)
kernel/panic.c +1 -0
@@ -695,6 +695,7 @@ void warn_slowpath_fmt(const char *file, int line, unsigned taint,if (!fmt) {__warn (file, line,__builtin_return_address (0 ), taint,NULL ,NULL ); +warn_rcu_exit (rcu);return ; }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 105/139 x86/boot/compressed: Reserve more memory for page tables
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kirill A. Shutemov <[email protected]>
[ Upstream commit f530ee95b72e77b09c141c4b1a4b94d1199ffbd9 ]
The decompressor has a hard limit on the number of page tables it can allocate. This limit is defined at compile-time and will cause boot failure if it is reached.
The kernel is very strict and calculates the limit precisely for the worst-case scenario based on the current configuration. However, it is easy to forget to adjust the limit when a new use-case arises. The worst-case scenario is rarely encountered during sanity checks.
In the case of enabling 5-level paging, a use-case was overlooked. The limit needs to be increased by one to accommodate the additional level. This oversight went unnoticed until Aaron attempted to run the kernel via kexec with 5-level paging and unaccepted memory enabled.
Update wost-case calculations to include 5-level paging.
To address this issue, let's allocate some extra space for page tables. 128K should be sufficient for any use-case. The logic can be simplified by using a single value for all kernel configurations.
[ Also add a warning, should this memory run low - by Dave Hansen. ]
--- arch/x86/boot/compressed/ident_map_64.c | 8 +++++ arch/x86/include/asm/boot.h | 45 +++++++++++++++++-------- 2 files changed, 39 insertions(+), 14 deletions(-)
arch/x86/boot/compressed/ident_map_64.c +8 -0
@@ -67,6 +67,14 @@ static void *alloc_pgt_page(void *context)return NULL ; } +/* Consumed more tables than expected? */ +if (pages->pgt_buf_offset ==BOOT_PGT_SIZE_WARN ) { +debug_putstr ("pgt_buf running low in " __FILE__"\n" ); +debug_putstr ("Need to raise BOOT_PGT_SIZE?\n" ); +debug_putaddr (pages->pgt_buf_offset); +debug_putaddr (pages->pgt_buf_size); + } + entry = pages->pgt_buf + pages->pgt_buf_offset; pages->pgt_buf_offset +=PAGE_SIZE ;
arch/x86/include/asm/boot.h +31 -14
54 lines not on this page · raw message
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 78/139 scsi: target: iscsi: Fix buffer overflow in lio_target_nacl_info_show()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Konstantin Shelekhin <[email protected]>
[ Upstream commit 801f287c93ff95582b0a2d2163f12870a2f076d4 ]
The function lio_target_nacl_info_show() uses sprintf() in a loop to print details for every iSCSI connection in a session without checking for the buffer length. With enough iSCSI connections it's possible to overflow the buffer provided by configfs and corrupt the memory.
This patch replaces sprintf() with sysfs_emit_at() that checks for buffer boundries.
--- drivers/target/iscsi/iscsi_target_configfs.c | 54 ++++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-)
drivers/target/iscsi/iscsi_target_configfs.c +27 -27
@@ -533,102 +533,102 @@ static ssize_t lio_target_nacl_info_show(struct config_item *item, char *page)spin_lock_bh (&se_nacl->nacl_sess_lock); se_sess = se_nacl->nacl_sess;if (!se_sess) { - rb +=sprintf (page+rb,"No active iSCSI Session for Initiator" + rb +=sysfs_emit_at (page, rb,"No active iSCSI Session for Initiator" " Endpoint: %s\n" , se_nacl->initiatorname); }else { sess = se_sess->fabric_sess_ptr; - rb +=sprintf (page+rb,"InitiatorName: %s\n" , + rb +=sysfs_emit_at (page, rb,"InitiatorName: %s\n" , sess->sess_ops->InitiatorName); - rb +=sprintf (page+rb,"InitiatorAlias: %s\n" , + rb +=sysfs_emit_at (page, rb,"InitiatorAlias: %s\n" , sess->sess_ops->InitiatorAlias); - rb +=sprintf (page+rb, + rb +=sysfs_emit_at (page, rb,"LIO Session ID: %u ISID: 0x%6ph TSIH: %hu " , sess->sid, sess->isid, sess->tsih); - rb +=sprintf (page+rb,"SessionType: %s\n" , + rb +=sysfs_emit_at (page, rb,"SessionType: %s\n" , (sess->sess_ops->SessionType) ?"Discovery" :"Normal" ); - rb +=sprintf (page+rb,"Session State: " ); + rb +=sysfs_emit_at (page, rb,"Session State: " );switch (sess->session_state) {case TARG_SESS_STATE_FREE : - rb +=sprintf (page+rb,"TARG_SESS_FREE\n" ); + rb +=sysfs_emit_at (page, rb,"TARG_SESS_FREE\n" );break ;case TARG_SESS_STATE_ACTIVE : - rb +=sprintf (page+rb,"TARG_SESS_STATE_ACTIVE\n" ); + rb +=sysfs_emit_at (page, rb,"TARG_SESS_STATE_ACTIVE\n" );break ;case TARG_SESS_STATE_LOGGED_IN : - rb +=sprintf (page+rb,"TARG_SESS_STATE_LOGGED_IN\n" ); + rb +=sysfs_emit_at (page, rb,"TARG_SESS_STATE_LOGGED_IN\n" );break ;case TARG_SESS_STATE_FAILED : - rb +=sprintf (page+rb,"TARG_SESS_STATE_FAILED\n" ); + rb +=sysfs_emit_at (page, rb,"TARG_SESS_STATE_FAILED\n" );break ;case TARG_SESS_STATE_IN_CONTINUE : - rb +=sprintf (page+rb,"TARG_SESS_STATE_IN_CONTINUE\n" ); + rb +=sysfs_emit_at (page, rb,"TARG_SESS_STATE_IN_CONTINUE\n" );break ;default : - rb +=sprintf (page+rb,"ERROR: Unknown Session" + rb +=sysfs_emit_at (page, rb,"ERROR: Unknown Session" " State!\n" );break ; } - rb +=sprintf (page+rb,"---------------------[iSCSI Session" + rb +=sysfs_emit_at (page, rb,"---------------------[iSCSI Session" " Values]-----------------------\n" ); - rb +=sprintf (page+rb," CmdSN/WR : CmdSN/WC : ExpCmdSN" + rb +=sysfs_emit_at (page, rb," CmdSN/WR : CmdSN/WC : ExpCmdSN" " : MaxCmdSN : ITT : TTT\n" ); max_cmd_sn = (u32 )atomic_read (&sess->max_cmd_sn); - rb +=sprintf (page+rb," 0x%08x 0x%08x 0x%08x 0x%08x" + rb +=sysfs_emit_at (page, rb," 0x%08x 0x%08x 0x%08x 0x%08x" " 0x%08x 0x%08x\n" , sess->cmdsn_window, (max_cmd_sn - sess->exp_cmd_sn) +1 , sess->exp_cmd_sn, max_cmd_sn, sess->init_task_tag, sess->targ_xfer_tag); - rb +=sprintf (page+rb,"----------------------[iSCSI" + rb +=sysfs_emit_at (page, rb,"----------------------[iSCSI" " Connections]-------------------------\n" );spin_lock (&sess->conn_lock);list_for_each_entry (conn, &sess->sess_conn_list, conn_list) { - rb +=sprintf (page+rb,"CID: %hu Connection" + rb +=sysfs_emit_at (page, rb,"CID: %hu Connection" " State: " , conn->cid);switch (conn->conn_state) {case TARG_CONN_STATE_FREE : - rb +=sprintf (page+rb, + rb +=sysfs_emit_at (page, rb,"TARG_CONN_STATE_FREE\n" );break ;case TARG_CONN_STATE_XPT_UP : - rb +=sprintf (page+rb, + rb +=sysfs_emit_at (page, rb,"TARG_CONN_STATE_XPT_UP\n" );break ;case TARG_CONN_STATE_IN_LOGIN : - rb +=sprintf (page+rb, + rb +=sysfs_emit_at (page, rb,"TARG_CONN_STATE_IN_LOGIN\n" );break ;case TARG_CONN_STATE_LOGGED_IN : - rb +=sprintf (page+rb, + rb +=sysfs_emit_at (page, rb,"TARG_CONN_STATE_LOGGED_IN\n" );break ;case TARG_CONN_STATE_IN_LOGOUT : - rb +=sprintf (page+rb, + rb +=sysfs_emit_at (page, rb,"TARG_CONN_STATE_IN_LOGOUT\n" );break ;case TARG_CONN_STATE_LOGOUT_REQUESTED : - rb +=sprintf (page+rb, + rb +=sysfs_emit_at (page, rb,"TARG_CONN_STATE_LOGOUT_REQUESTED\n" );break ;case TARG_CONN_STATE_CLEANUP_WAIT : - rb +=sprintf (page+rb, + rb +=sysfs_emit_at (page, rb,"TARG_CONN_STATE_CLEANUP_WAIT\n" );break ;default : - rb +=sprintf (page+rb, + rb +=sysfs_emit_at (page, rb,"ERROR: Unknown Connection State!\n" );break ; } - rb +=sprintf (page+rb," Address %pISc %s" , &conn->login_sockaddr, + rb +=sysfs_emit_at (page, rb," Address %pISc %s" , &conn->login_sockaddr, (conn->network_transport ==ISCSI_TCP ) ?"TCP" :"SCTP" ); - rb +=sprintf (page+rb," StatSN: 0x%08x\n" , + rb +=sysfs_emit_at (page, rb," StatSN: 0x%08x\n" , conn->stat_sn); }spin_unlock (&sess->conn_lock);
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 79/139 serial: cpm_uart: Avoid suspicious locking
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christophe Leroy <[email protected]>
[ Upstream commit 36ef11d311f405e55ad8e848c19b212ff71ef536 ]
CHECK drivers/tty/serial/cpm_uart/cpm_uart_core.cdrivers/tty/serial/cpm_uart/cpm_uart_core.c:1271:39: warning: context imbalance in 'cpm_uart_console_write' - unexpected unlock
Allthough 'nolock' is not expected to change, sparse find the following form suspicious:
if (unlikely(nolock)) {
local_irq_save(flags);
} else {
spin_lock_irqsave(&pinfo->port.lock, flags);
}
cpm_uart_early_write(pinfo, s, count, true);
if (unlikely(nolock)) {
local_irq_restore(flags);
} else {
spin_unlock_irqrestore(&pinfo->port.lock, flags);
}Rewrite it a more obvious form:
if (unlikely(oops_in_progress)) {
local_irq_save(flags);
cpm_uart_early_write(pinfo, s, count, true);
local_irq_restore(flags);
} else {
spin_lock_irqsave(&pinfo->port.lock, flags);
cpm_uart_early_write(pinfo, s, count, true);
spin_unlock_irqrestore(&pinfo->port.lock, flags);
}--- drivers/tty/serial/cpm_uart/cpm_uart_core.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-)
drivers/tty/serial/cpm_uart/cpm_uart_core.c +4 -9
@@ -1257,19 +1257,14 @@ static void cpm_uart_console_write(struct console *co, const char *s, {struct uart_cpm_port *pinfo = &cpm_uart_ports[co->index];unsigned long flags; -int nolock = oops_in_progress; -if (unlikely (nolock)) { +if (unlikely (oops_in_progress)) {local_irq_save (flags); - }else { -spin_lock_irqsave (&pinfo->port.lock, flags); - } - -cpm_uart_early_write (pinfo, s, count, true); - -if (unlikely (nolock)) { +cpm_uart_early_write (pinfo, s, count, true);local_irq_restore (flags); }else { +spin_lock_irqsave (&pinfo->port.lock, flags); +cpm_uart_early_write (pinfo, s, count, true);spin_unlock_irqrestore (&pinfo->port.lock, flags); } }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 80/139 misc: open-dice: make OPEN_DICE depend on HAS_IOMEM
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Baoquan He <[email protected]>
[ Upstream commit aefc8b57af7787c80686e49a5841e9289cb11f53 ]
On s390 systems (aka mainframes), it has classic channel devices for networking and permanent storage that are currently even more common than PCI devices. Hence it could have a fully functional s390 kernel with CONFIG_PCI=n, then the relevant iomem mapping functions [including ioremap(), devm_ioremap(), etc.] are not available.
Here let OPEN_DICE depend on HAS_IOMEM so that it won't be built to cause below compiling error if PCI is unset:
------
ERROR: modpost: "devm_memremap" [drivers/misc/open-dice.ko] undefined!
ERROR: modpost: "devm_memunmap" [drivers/misc/open-dice.ko] undefined!
------
--- drivers/misc/Kconfig | 1 + 1 file changed, 1 insertion(+)
drivers/misc/Kconfig +1 -0
@@ -474,6 +474,7 @@ config HISI_HIKEY_USB config OPEN_DICE tristate "Open Profile for DICE driver" depends on OF_RESERVED_MEM + depends on HAS_IOMEM help This driver exposes a DICE reserved memory region to userspace via a character device. The memory region contains Compound Device
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 81/139 usb: ehci: add workaround for chipidea PORTSC.PEC bug
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xu Yang <[email protected]>
[ Upstream commit dda4b60ed70bd670eefda081f70c0cb20bbeb1fa ]
Some NXP processor using chipidea IP has a bug when frame babble is detected.
As per 4.15.1.1.1 Serial Bus Babble:
A babble condition also exists if IN transaction is in progress at
High-speed SOF2 point. This is called frame babble. The host controller must disable the port to which the frame babble is detected.
The USB controller has disabled the port (PE cleared) and has asserted USBERRINT when frame babble is detected, but PEC is not asserted. Therefore, the SW isn't aware that port has been disabled. Then the SW keeps sending packets to this port, but all of the transfers will fail.
This workaround will firstly assert PCD by SW when USBERRINT is detected and then judge whether port change has really occurred or not by polling roothub status. Because the PEC doesn't get asserted in our case, this patch will also assert it by SW when specific conditions are satisfied.
--- drivers/usb/host/ehci-hcd.c | 8 ++++++-- drivers/usb/host/ehci-hub.c | 10 +++++++++- drivers/usb/host/ehci.h | 10 ++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-)
drivers/usb/host/ehci-hcd.c +6 -2
@@ -755,10 +755,14 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd)/* normal [4.15.1.2] or error [4.15.1.1] completion */ if (likely ((status & (STS_INT |STS_ERR )) !=0 )) { -if (likely ((status &STS_ERR ) ==0 )) +if (likely ((status &STS_ERR ) ==0 )) {INCR (ehci->stats.normal); -else + }else { +/* Force to check port status */ +if (ehci->has_ci_pec_bug) + status |=STS_PCD ;INCR (ehci->stats.error); + } bh =1 ; }
drivers/usb/host/ehci-hub.c +9 -1
@@ -674,7 +674,8 @@ ehci_hub_status_data (struct usb_hcd *hcd, char *buf)if ((temp & mask) !=0 ||test_bit (i, &ehci->port_c_suspend) || (ehci->reset_done[i] &&time_after_eq ( - jiffies, ehci->reset_done[i]))) { + jiffies, ehci->reset_done[i])) + ||ehci_has_ci_pec_bug (ehci, temp)) {if (i <7 ) buf [0 ] |=1 << (i +1 );else
@@ -875,6 +876,13 @@ int ehci_hub_control(if (temp &PORT_PEC ) status |=USB_PORT_STAT_C_ENABLE <<16 ; +if (ehci_has_ci_pec_bug (ehci, temp)) { + status |=USB_PORT_STAT_C_ENABLE <<16 ; +ehci_info (ehci, +"PE is cleared by HW port:%d PORTSC:%08x\n" , + wIndex +1 , temp); + } +if ((temp &PORT_OCC ) && (!ignore_oc && !ehci->spurious_oc)){ status |=USB_PORT_STAT_C_OVERCURRENT <<16 ;
drivers/usb/host/ehci.h +10 -0
@@ -207,6 +207,7 @@ struct ehci_hcd { /* one per controller */ unsigned has_fsl_port_bug:1; /* FreeScale */ unsigned has_fsl_hs_errata:1; /* Freescale HS quirk */ unsigned has_fsl_susp_errata:1; /* NXP SUSP quirk */ + unsigned has_ci_pec_bug:1; /* ChipIdea PEC bug */ unsigned big_endian_mmio:1; unsigned big_endian_desc:1; unsigned big_endian_capbase:1;
@@ -707,6 +708,15 @@ ehci_port_speed(struct ehci_hcd *ehci, unsigned int portsc)*/ #define ehci_has_fsl_susp_errata (e) ((e)->has_fsl_susp_errata) +/* +* Some Freescale/NXP processors using ChipIdea IP have a bug in which +* disabling the port (PE is cleared) does not cause PEC to be asserted +* when frame babble is detected. +*/ +#define ehci_has_ci_pec_bug (e, portsc) \ + ((e)->has_ci_pec_bug && ((e)->command & CMD_PSE) \ + && !(portsc & PORT_PEC) && !(portsc & PORT_PE)) +/* * While most USB host controllers implement their registers in * little-endian format, a minority (celleb companion chip) implement
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 82/139 usb: chipidea: add workaround for chipidea PEC bug
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xu Yang <[email protected]>
[ Upstream commit 12e6ac69cc7e7d3367599ae26a92a0f9a18bc728 ]
Some NXP processors using ChipIdea USB IP have a bug when frame babble is detected.
Issue description:
In USB camera test, our controller is host in HS mode. In ISOC IN, when device sends data across the micro frame, it causes the babble in host controller. This will clear the PE bit. In spec, it also requires to set the PEC bit and then set the PCI bit. Without the PCI interrupt, the software does not know the PE is cleared.
This will add a flag CI_HDRC_HAS_PORTSC_PEC_MISSED to some impacted platform datas. And the ehci host driver will assert PEC by SW when specific conditions are satisfied.
--- drivers/usb/chipidea/ci.h | 1 + drivers/usb/chipidea/ci_hdrc_imx.c | 4 +++- drivers/usb/chipidea/core.c | 2 ++ drivers/usb/chipidea/host.c | 1 + include/linux/usb/chipidea.h | 1 + 5 files changed, 8 insertions(+), 1 deletion(-)
drivers/usb/chipidea/ci.h +1 -0
@@ -253,6 +253,7 @@ struct ci_hdrc {bool id_event;bool b_sess_valid_event;bool imx28_write_fix; +bool has_portsc_pec_bug;bool supports_runtime_pm;bool in_lpm;bool wakeup_int;
drivers/usb/chipidea/ci_hdrc_imx.c +3 -1
@@ -67,11 +67,13 @@ static const struct ci_hdrc_imx_platform_flag imx7d_usb_data = {static const struct ci_hdrc_imx_platform_flag imx7ulp_usb_data = { .flags =CI_HDRC_SUPPORTS_RUNTIME_PM | +CI_HDRC_HAS_PORTSC_PEC_MISSED |CI_HDRC_PMQOS , };static const struct ci_hdrc_imx_platform_flag imx8ulp_usb_data = { - .flags =CI_HDRC_SUPPORTS_RUNTIME_PM , + .flags =CI_HDRC_SUPPORTS_RUNTIME_PM | +CI_HDRC_HAS_PORTSC_PEC_MISSED , };static const struct of_device_id ci_hdrc_imx_dt_ids[] = {
drivers/usb/chipidea/core.c +2 -0
@@ -1038,6 +1038,8 @@ static int ci_hdrc_probe(struct platform_device *pdev) CI_HDRC_IMX28_WRITE_FIX); ci->supports_runtime_pm = !!(ci->platdata->flags &CI_HDRC_SUPPORTS_RUNTIME_PM ); + ci->has_portsc_pec_bug = !!(ci->platdata->flags & +CI_HDRC_HAS_PORTSC_PEC_MISSED );platform_set_drvdata (pdev, ci); ret =hw_device_init (ci, base);
drivers/usb/chipidea/host.c +1 -0
@@ -151,6 +151,7 @@ static int host_start(struct ci_hdrc *ci) ehci->has_hostpc = ci->hw_bank.lpm; ehci->has_tdi_phy_lpm = ci->hw_bank.lpm; ehci->imx28_write_fix = ci->imx28_write_fix; + ehci->has_ci_pec_bug = ci->has_portsc_pec_bug; priv = (struct ehci_ci_priv *)ehci->priv; priv->reg_vbus =NULL ;
include/linux/usb/chipidea.h +1 -0
@@ -63,6 +63,7 @@ struct ci_hdrc_platform_data {#define CI_HDRC_IMX_IS_HSIC BIT(14)#define CI_HDRC_PMQOS BIT(15)#define CI_HDRC_PHY_VBUS_CONTROL BIT(16) +#define CI_HDRC_HAS_PORTSC_PEC_MISSED BIT(17)enum usb_dr_mode dr_mode;#define CI_HDRC_CONTROLLER_RESET_EVENT 0#define CI_HDRC_CONTROLLER_STOPPED_EVENT 1
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 83/139 media: pci: ipu3-cio2: Initialise timing struct to avoid a compiler warning
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sakari Ailus <[email protected]>
[ Upstream commit 9d7531be3085a8f013cf173ccc4e72e3cf493538 ]
Initialise timing struct in cio2_hw_init() to zero in order to avoid a compiler warning. The warning was a false positive.
--- drivers/media/pci/intel/ipu3/ipu3-cio2-main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/pci/intel/ipu3/ipu3-cio2-main.c +1 -1
@@ -354,7 +354,7 @@ static int cio2_hw_init(struct cio2_device *cio2, struct cio2_queue *q)void __iomem *const base = cio2->base;u8 lanes, csi2bus = q->csi2.port;u8 sensor_vc =SENSOR_VIR_CH_DFLT ; -struct cio2_csi2_timing timing; +struct cio2_csi2_timing timing = {0 };int i, r; fmt =cio2_find_format (NULL , &q->subdev_fmt.code);
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 74/139 media: pci: cx23885: replace BUG with error return
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans Verkuil <[email protected]>
[ Upstream commit 2e1796fd4904fdd6062a8e4589778ea899ea0c8d ]
It was completely unnecessary to use BUG in buffer_prepare(). Just replace it with an error return. This also fixes a smatch warning:
drivers/media/pci/cx23885/cx23885-video.c:422 buffer_prepare() error: uninitialized symbol 'ret'.
--- drivers/media/pci/cx23885/cx23885-video.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/pci/cx23885/cx23885-video.c +1 -1
@@ -413,7 +413,7 @@ static int buffer_prepare(struct vb2_buffer *vb) dev->height >> 1);break ;default : -BUG (); +return -EINVAL ;/* should not happen */ } dprintk(2, "[%p/%d] buffer_init - %dx%d %dbpp 0x%08x - dma=0x%08lx\n", buf, buf->vb.vb2_buf.index,
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 107/139 samples/hw_breakpoint: fix building without module unloading
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
[ Upstream commit b9080468caeddc58a91edd1c3a7d212ea82b0d1d ]
__symbol_put() is really meant as an internal helper and is not available when module unloading is disabled, unlike the previously used symbol_put():
samples/hw_breakpoint/data_breakpoint.c: In function 'hw_break_module_exit':samples/hw_breakpoint/data_breakpoint.c:73:9: error: implicit declaration of function '__symbol_put'; did you mean '__symbol_get'? [-Werror=implicit-function-declaration]
The hw_break_module_exit() function is not actually used when module unloading is disabled, but it still causes the build failure for an undefined identifier. Enclose this one call in an appropriate #ifdef to clarify what the requirement is. Leaving out the entire exit function would also work but feels less clar in this case.
--- samples/hw_breakpoint/data_breakpoint.c | 2 ++ 1 file changed, 2 insertions(+)
samples/hw_breakpoint/data_breakpoint.c +2 -0
@@ -70,7 +70,9 @@ static int __init hw_break_module_init(void) static void __exit hw_break_module_exit(void) {unregister_wide_hw_breakpoint (sample_hbp); +#ifdef CONFIG_MODULE_UNLOAD __symbol_put (ksym_name); +#endif printk (KERN_INFO "HW Breakpoint for %s write uninstalled\n" , ksym_name); }
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 116/139 Revert "drm/amd: Disable S/G for APUs when 64GB or more host memory"
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hamza Mahfooz <[email protected]>
commit 169ed4ece8373f02f10642eae5240e3d1ef5c038 upstream.
This reverts commit 70e64c4d522b732e31c6475a3be2349de337d321.
Since, we now have an actual fix for this issue, we can get rid of this workaround as it can cause pin failures if enough VRAM isn't carved out by the BIOS.
--- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 26 ---------------------- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 5 ++-- 3 files changed, 3 insertions(+), 29 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu.h +0 -1
@@ -1266,7 +1266,6 @@ int amdgpu_device_gpu_recover(struct amdvoid amdgpu_device_pci_config_reset (struct amdgpu_device *adev);int amdgpu_device_pci_reset (struct amdgpu_device *adev);bool amdgpu_device_need_post (struct amdgpu_device *adev); -bool amdgpu_sg_display_supported (struct amdgpu_device *adev);bool amdgpu_device_pcie_dynamic_switching_supported (void );bool amdgpu_device_should_use_aspm (struct amdgpu_device *adev);bool amdgpu_device_aspm_support_quirk (void );
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +0 -26
@@ -1337,32 +1337,6 @@ bool amdgpu_device_need_post(struct amdg }/* -* On APUs with >= 64GB white flickering has been observed w/ SG enabled. -* Disable S/G on such systems until we have a proper fix. -* https://gitlab.freedesktop.org/drm/amd/-/issues/2354 -* https://gitlab.freedesktop.org/drm/amd/-/issues/2735 -*/ -bool amdgpu_sg_display_supported (struct amdgpu_device *adev) -{ -switch (amdgpu_sg_display) { -case -1 : -break ; -case 0 : -return false; -case 1 : -return true; -default : -return false; - } -if ((totalram_pages () << (PAGE_SHIFT -10 )) + - (adev->gmc.real_vram_size /1024 ) >=64000000 ) { -DRM_WARN ("Disabling S/G due to >=64GB RAM\n" ); -return false; - } -return true; -} - -/* * Intel hosts such as Raptor Lake and Sapphire Rapids don't support dynamic * speed switching. Until we have confirmation from Intel that a specific host * supports it, it's safer that we keep it disabled for all.
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +3 -2
@@ -1634,8 +1634,9 @@ static int amdgpu_dm_init(struct amdgpu_ }break ; } -if (init_data.flags.gpu_vm_support) - init_data.flags.gpu_vm_support =amdgpu_sg_display_supported (adev); +if (init_data.flags.gpu_vm_support && + (amdgpu_sg_display ==0 )) + init_data.flags.gpu_vm_support = false;if (init_data.flags.gpu_vm_support) adev->mode_info.gpu_vm_support = true;
Greg Kroah-Hartman
maintainerPATCH 117/139 dm: dont attempt to queue IO under RCU protection
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <[email protected]>
commit a9ce385344f916cd1c36a33905e564f5581beae9 upstream.
dm looks up the table for IO based on the request type, with an assumption that if the request is marked REQ_NOWAIT, it's fine to attempt to submit that IO while under RCU read lock protection. This is not OK, as REQ_NOWAIT just means that we should not be sleeping waiting on other IO, it does not mean that we can't potentially schedule.
A simple test case demonstrates this quite nicely:
int main(int argc, char *argv[])
{
struct iovec iov;
int fd;
fd = open("/dev/dm-0", O_RDONLY | O_DIRECT);
posix_memalign(&iov.iov_base, 4096, 4096);
iov.iov_len = 4096;
preadv2(fd, &iov, 1, 0, RWF_NOWAIT);
return 0;
}which will instantly spew:
BUG: sleeping function called from invalid context at include/linux/sched/mm.h:306
in_atomic(): 0, irqs_disabled(): 0, non_block: 0, pid: 5580, name: dm-nowaitpreempt_count: 0, expected: 0
RCU nest depth: 1, expected: 0
INFO: lockdep is turned off.
CPU: 7 PID: 5580 Comm: dm-nowait Not tainted 6.6.0-rc1-g39956d2dcd81 #132 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2-debian-1.16.2-1 04/01/2014 Call Trace: <TASK> dump_stack_lvl+0x11d/0x1b0 __might_resched+0x3c3/0x5e0 ? preempt_count_sub+0x150/0x150 mempool_alloc+0x1e2/0x390 ? mempool_resize+0x7d0/0x7d0 ? lock_sync+0x190/0x190 ? lock_release+0x4b7/0x670 ? internal_get_user_pages_fast+0x868/0x2d40 bio_alloc_bioset+0x417/0x8c0 ? bvec_alloc+0x200/0x200 ? internal_get_user_pages_fast+0xb8c/0x2d40 bio_alloc_clone+0x53/0x100 dm_submit_bio+0x27f/0x1a20 ? lock_release+0x4b7/0x670 ? blk_try_enter_queue+0x1a0/0x4d0 ? dm_dax_direct_access+0x260/0x260 ? rcu_is_watching+0x12/0xb0 ? blk_try_enter_queue+0x1cc/0x4d0 __submit_bio+0x239/0x310 ? __bio_queue_enter+0x700/0x700 ? kvm_clock_get_cycles+0x40/0x60 ? ktime_get+0x285/0x470 submit_bio_noacct_nocheck+0x4d9/0xb80 ? should_fail_request+0x80/0x80 ? preempt_count_sub+0x150/0x150 ? lock_release+0x4b7/0x670 ? __bio_add_page+0x143/0x2d0 ? iov_iter_revert+0x27/0x360 submit_bio_noacct+0x53e/0x1b30 submit_bio_wait+0x10a/0x230 ? submit_bio_wait_endio+0x40/0x40 __blkdev_direct_IO_simple+0x4f8/0x780 ? blkdev_bio_end_io+0x4c0/0x4c0 ? stack_trace_save+0x90/0xc0 ? __bio_clone+0x3c0/0x3c0 ? lock_release+0x4b7/0x670 ? lock_sync+0x190/0x190 ? atime_needs_update+0x3bf/0x7e0 ? timestamp_truncate+0x21b/0x2d0 ? inode_owner_or_capable+0x240/0x240 blkdev_direct_IO.part.0+0x84a/0x1810 ? rcu_is_watching+0x12/0xb0 ? lock_release+0x4b7/0x670 ? blkdev_read_iter+0x40d/0x530 ? reacquire_held_locks+0x4e0/0x4e0 ? __blkdev_direct_IO_simple+0x780/0x780 ? rcu_is_watching+0x12/0xb0 ? __mark_inode_dirty+0x297/0xd50 ? preempt_count_add+0x72/0x140 blkdev_read_iter+0x2a4/0x530 do_iter_readv_writev+0x2f2/0x3c0 ? generic_copy_file_range+0x1d0/0x1d0 ? fsnotify_perm.part.0+0x25d/0x630 ? security_file_permission+0xd8/0x100 do_iter_read+0x31b/0x880 ? import_iovec+0x10b/0x140 vfs_readv+0x12d/0x1a0 ? vfs_iter_read+0xb0/0xb0 ? rcu_is_watching+0x12/0xb0 ? rcu_is_watching+0x12/0xb0 ? lock_release+0x4b7/0x670 do_preadv+0x1b3/0x260 ? do_readv+0x370/0x370 __x64_sys_preadv2+0xef/0x150 do_syscall_64+0x39/0xb0 entry_SYSCALL_64_after_hwframe+0x63/0xcd RIP: 0033:0x7f5af41ad806 Code: 41 54 41 89 fc 55 44 89 c5 53 48 89 cb 48 83 ec 18 80 3d e4 dd 0d 00 00 74 7a 45 89 c1 49 89 ca 45 31 c0 b8 47 01 00 00 0f 05 <48> 3d 00 f0 ff ff 0f 87 be 00 00 00 48 85 c0 79 4a 48 8b 0d da 55 RSP: 002b:00007ffd3145c7f0 EFLAGS: 00000246 ORIG_RAX: 0000000000000147 RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f5af41ad806 RDX: 0000000000000001 RSI: 00007ffd3145c850 RDI: 0000000000000003 RBP: 0000000000000008 R08: 0000000000000000 R09: 0000000000000008 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000003 R13: 00007ffd3145c850 R14: 000055f5f0431dd8 R15: 0000000000000001 </TASK>
where in fact it is dm itself that attempts to allocate a bio clone with GFP_NOIO under the rcu read lock, regardless of the request type.
Fix this by getting rid of the special casing for REQ_NOWAIT, and just use the normal SRCU protected table lookup. Get rid of the bio based table locking helpers at the same time, as they are now unused.
--- drivers/md/dm.c | 23 ++--------------------- 1 file changed, 2 insertions(+), 21 deletions(-)
drivers/md/dm.c +2 -21
@@ -707,24 +707,6 @@ static void dm_put_live_table_fast(strucrcu_read_unlock (); } -static inline struct dm_table *dm_get_live_table_bio (struct mapped_device *md, -int *srcu_idx,blk_opf_t bio_opf) -{ -if (bio_opf &REQ_NOWAIT ) -return dm_get_live_table_fast (md); -else -return dm_get_live_table (md, srcu_idx); -} - -static inline void dm_put_live_table_bio (struct mapped_device *md,int srcu_idx, -blk_opf_t bio_opf) -{ -if (bio_opf &REQ_NOWAIT ) -dm_put_live_table_fast (md); -else -dm_put_live_table (md, srcu_idx); -} -static char *_dm_claim_ptr ="I belong to device-mapper" ;/*
@@ -1805,9 +1787,8 @@ static void dm_submit_bio(struct bio *bistruct mapped_device *md = bio->bi_bdev->bd_disk->private_data;int srcu_idx;struct dm_table *map; -blk_opf_t bio_opf = bio->bi_opf; - map =dm_get_live_table_bio (md, &srcu_idx, bio_opf); + map =dm_get_live_table (md, &srcu_idx);/* If suspended, or map not yet available, queue this IO for later */ if (unlikely(test_bit(DMF_BLOCK_IO_FOR_SUSPEND, &md->flags)) ||
@@ -1823,7 +1804,7 @@ static void dm_submit_bio(struct bio *bidm_split_and_process_bio (md, map, bio); out: -dm_put_live_table_bio (md, srcu_idx, bio_opf); +dm_put_live_table (md, srcu_idx); } static bool dm_poll_dm_io(struct dm_io *io, struct io_comp_batch *iob,
Greg Kroah-Hartman
maintainerPATCH 118/139 btrfs: fix lockdep splat and potential deadlock after failure running delayed items
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Filipe Manana <[email protected]>
commit e110f8911ddb93e6f55da14ccbbe705397b30d0b upstream.
When running delayed items we are holding a delayed node's mutex and then we will attempt to modify a subvolume btree to insert/update/delete the delayed items. However if have an error during the insertions for example, btrfs_insert_delayed_items() may return with a path that has locked extent buffers (a leaf at the very least), and then we attempt to release the delayed node at __btrfs_run_delayed_items(), which requires taking the delayed node's mutex, causing an ABBA type of deadlock. This was reported by syzbot and the lockdep splat is the following:
WARNING: possible circular locking dependency detected
6.5.0-rc7-syzkaller-00024-g93f5de5f648d #0 Not tainted
------------------------------------------------------
syz-executor.2/13257 is trying to acquire lock:
ffff88801835c0c0 (&delayed_node->mutex){+.+.}-{3:3}, at: __btrfs_release_delayed_node+0x9a/0xaa0 fs/btrfs/delayed-inode.c:256
but task is already holding lock:
ffff88802a5ab8e8 (btrfs-tree-00){++++}-{3:3}, at: __btrfs_tree_lock+0x3c/0x2a0 fs/btrfs/locking.c:198
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (btrfs-tree-00){++++}-{3:3}:
__lock_release kernel/locking/lockdep.c:5475 [inline]
lock_release+0x36f/0x9d0 kernel/locking/lockdep.c:5781
up_write+0x79/0x580 kernel/locking/rwsem.c:1625
btrfs_tree_unlock_rw fs/btrfs/locking.h:189 [inline]
btrfs_unlock_up_safe+0x179/0x3b0 fs/btrfs/locking.c:239
search_leaf fs/btrfs/ctree.c:1986 [inline]
btrfs_search_slot+0x2511/0x2f80 fs/btrfs/ctree.c:2230
btrfs_insert_empty_items+0x9c/0x180 fs/btrfs/ctree.c:4376
btrfs_insert_delayed_item fs/btrfs/delayed-inode.c:746 [inline]
btrfs_insert_delayed_items fs/btrfs/delayed-inode.c:824 [inline]
__btrfs_commit_inode_delayed_items+0xd24/0x2410 fs/btrfs/delayed-inode.c:1111
__btrfs_run_delayed_items+0x1db/0x430 fs/btrfs/delayed-inode.c:1153
flush_space+0x269/0xe70 fs/btrfs/space-info.c:723
btrfs_async_reclaim_metadata_space+0x106/0x350 fs/btrfs/space-info.c:1078
process_one_work+0x92c/0x12c0 kernel/workqueue.c:2600
worker_thread+0xa63/0x1210 kernel/workqueue.c:2751
kthread+0x2b8/0x350 kernel/kthread.c:389
ret_from_fork+0x2e/0x60 arch/x86/kernel/process.c:145
ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:304-> #0 (&delayed_node->mutex){+.+.}-{3:3}:
check_prev_add kernel/locking/lockdep.c:3142 [inline]
check_prevs_add kernel/locking/lockdep.c:3261 [inline]
validate_chain kernel/locking/lockdep.c:3876 [inline]
__lock_acquire+0x39ff/0x7f70 kernel/locking/lockdep.c:5144
lock_acquire+0x1e3/0x520 kernel/locking/lockdep.c:5761
__mutex_lock_common+0x1d8/0x2530 kernel/locking/mutex.c:603
__mutex_lock kernel/locking/mutex.c:747 [inline]
mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:799
__btrfs_release_delayed_node+0x9a/0xaa0 fs/btrfs/delayed-inode.c:256
btrfs_release_delayed_node fs/btrfs/delayed-inode.c:281 [inline]
__btrfs_run_delayed_items+0x2b5/0x430 fs/btrfs/delayed-inode.c:1156
btrfs_commit_transaction+0x859/0x2ff0 fs/btrfs/transaction.c:2276
btrfs_sync_file+0xf56/0x1330 fs/btrfs/file.c:1988
vfs_fsync_range fs/sync.c:188 [inline]
vfs_fsync fs/sync.c:202 [inline]
do_fsync fs/sync.c:212 [inline]
__do_sys_fsync fs/sync.c:220 [inline]
__se_sys_fsync fs/sync.c:218 [inline]
__x64_sys_fsync+0x196/0x1e0 fs/sync.c:218
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x63/0xcdother info that might help us debug this:
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
lock(btrfs-tree-00);
lock(&delayed_node->mutex);
lock(btrfs-tree-00);
lock(&delayed_node->mutex);*** DEADLOCK ***
3 locks held by syz-executor.2/13257:
#0: ffff88802c1ee370 (btrfs_trans_num_writers){++++}-{0:0}, at: spin_unlock include/linux/spinlock.h:391 [inline] #0: ffff88802c1ee370 (btrfs_trans_num_writers){++++}-{0:0}, at: join_transaction+0xb87/0xe00 fs/btrfs/transaction.c:287 #1: ffff88802c1ee398 (btrfs_trans_num_extwriters){++++}-{0:0}, at: join_transaction+0xbb2/0xe00 fs/btrfs/transaction.c:288 #2: ffff88802a5ab8e8 (btrfs-tree-00){++++}-{3:3}, at: __btrfs_tree_lock+0x3c/0x2a0 fs/btrfs/locking.c:198
stack backtrace: CPU: 0 PID: 13257 Comm: syz-executor.2 Not tainted 6.5.0-rc7-syzkaller-00024-g93f5de5f648d #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/26/2023 Call Trace: <TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106 check_noncircular+0x375/0x4a0 kernel/locking/lockdep.c:2195 check_prev_add kernel/locking/lockdep.c:3142 [inline] check_prevs_add kernel/locking/lockdep.c:3261 [inline] validate_chain kernel/locking/lockdep.c:3876 [inline] __lock_acquire+0x39ff/0x7f70 kernel/locking/lockdep.c:5144 lock_acquire+0x1e3/0x520 kernel/locking/lockdep.c:5761 __mutex_lock_common+0x1d8/0x2530 kernel/locking/mutex.c:603 __mutex_lock kernel/locking/mutex.c:747 [inline] mutex_lock_nested+0x1b/0x20 kernel/locking/mutex.c:799 __btrfs_release_delayed_node+0x9a/0xaa0 fs/btrfs/delayed-inode.c:256 btrfs_release_delayed_node fs/btrfs/delayed-inode.c:281 [inline] __btrfs_run_delayed_items+0x2b5/0x430 fs/btrfs/delayed-inode.c:1156 btrfs_commit_transaction+0x859/0x2ff0 fs/btrfs/transaction.c:2276 btrfs_sync_file+0xf56/0x1330 fs/btrfs/file.c:1988 vfs_fsync_range fs/sync.c:188 [inline] vfs_fsync fs/sync.c:202 [inline] do_fsync fs/sync.c:212 [inline] __do_sys_fsync fs/sync.c:220 [inline] __se_sys_fsync fs/sync.c:218 [inline] __x64_sys_fsync+0x196/0x1e0 fs/sync.c:218 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd RIP: 0033:0x7f3ad047cae9 Code: 28 00 00 00 75 (...) RSP: 002b:00007f3ad12510c8 EFLAGS: 00000246 ORIG_RAX: 000000000000004a RAX: ffffffffffffffda RBX: 00007f3ad059bf80 RCX: 00007f3ad047cae9 RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000005 RBP: 00007f3ad04c847a R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000 R13: 000000000000000b R14: 00007f3ad059bf80 R15: 00007ffe56af92f8 </TASK> ------------[ cut here ]------------
Fix this by releasing the path before releasing the delayed node in the error path at __btrfs_run_delayed_items().
--- fs/btrfs/delayed-inode.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-)
fs/btrfs/delayed-inode.c +16 -3
@@ -1148,20 +1148,33 @@ static int __btrfs_run_delayed_items(str ret =__btrfs_commit_inode_delayed_items (trans, path, curr_node);if (ret) { -btrfs_release_delayed_node (curr_node); - curr_node =NULL ;btrfs_abort_transaction (trans, ret);break ; } prev_node = curr_node; curr_node =btrfs_next_delayed_node (curr_node); +/* +* See the comment below about releasing path before releasing +* node. If the commit of delayed items was successful the path +* should always be released, but in case of an error, it may +* point to locked extent buffers (a leaf at the very least). +*/ +ASSERT (path->nodes[0 ] ==NULL );btrfs_release_delayed_node (prev_node); } +/* +* Release the path to avoid a potential deadlock and lockdep splat when +* releasing the delayed node, as that requires taking the delayed node's +* mutex. If another task starts running delayed items before we take +* the mutex, it will first lock the mutex and then it may try to lock +* the same btree path (leaf). +*/ +btrfs_free_path (path); +if (curr_node)btrfs_release_delayed_node (curr_node); -btrfs_free_path (path); trans->block_rsv = block_rsv;return ret;
Greg Kroah-Hartman
maintainerPATCH 119/139 btrfs: fix a compilation error if DEBUG is defined in btree_dirty_folio
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qu Wenruo <[email protected]>
commit 5e0e879926c1ce7e1f5e0dfaacaf2d105f7d8a05 upstream.
[BUG]
After commit 72a69cd03082 ("btrfs: subpage: pack all subpage bitmaps into a larger bitmap"), the DEBUG section of btree_dirty_folio() would no longer compile.
[CAUSE]
If DEBUG is defined, we would do extra checks for btree_dirty_folio(), mostly to make sure the range we marked dirty has an extent buffer and that extent buffer is dirty.
For subpage, we need to iterate through all the extent buffers covered by that page range, and make sure they all matches the criteria.
However commit 72a69cd03082 ("btrfs: subpage: pack all subpage bitmaps into a larger bitmap") changes how we store the bitmap, we pack all the 16 bits bitmaps into a larger bitmap, which would save some space.
This means we no longer have btrfs_subpage::dirty_bitmap, instead the dirty bitmap is starting at btrfs_subpage_info::dirty_offset, and has a length of btrfs_subpage_info::bitmap_nr_bits.
[FIX]
Although I'm not sure if it still makes sense to maintain such code, at least let it compile.
This patch would let us test the bits one by one through the bitmaps.
--- fs/btrfs/disk-io.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
fs/btrfs/disk-io.c +8 -6
@@ -859,6 +859,7 @@ static bool btree_dirty_folio(struct add struct folio *folio) {struct btrfs_fs_info *fs_info =btrfs_sb (mapping->host->i_sb); +struct btrfs_subpage_info *spi = fs_info->subpage_info;struct btrfs_subpage *subpage;struct extent_buffer *eb;int cur_bit =0 ;
@@ -872,18 +873,19 @@ static bool btree_dirty_folio(struct addbtrfs_assert_tree_write_locked (eb);return filemap_dirty_folio (mapping, folio); } + +ASSERT (spi); subpage =folio_get_private (folio); -ASSERT (subpage->dirty_bitmap); -while (cur_bit <BTRFS_SUBPAGE_BITMAP_SIZE ) { +for (cur_bit = spi->dirty_offset; + cur_bit < spi->dirty_offset + spi->bitmap_nr_bits; + cur_bit++) {unsigned long flags;u64 cur; -u16 tmp = (1 << cur_bit);spin_lock_irqsave (&subpage->lock, flags); -if (!(tmp & subpage->dirty_bitmap)) { +if (!test_bit (cur_bit, subpage->bitmaps)) {spin_unlock_irqrestore (&subpage->lock, flags); - cur_bit++;continue ; }spin_unlock_irqrestore (&subpage->lock, flags);
@@ -896,7 +898,7 @@ static bool btree_dirty_folio(struct addbtrfs_assert_tree_write_locked (eb);free_extent_buffer (eb); - cur_bit += (fs_info->nodesize >> fs_info->sectorsize_bits); + cur_bit += (fs_info->nodesize >> fs_info->sectorsize_bits) -1 ; }return filemap_dirty_folio (mapping, folio); }
Greg Kroah-Hartman
maintainerPATCH 120/139 btrfs: release path before inode lookup during the ino lookup ioctl
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Filipe Manana <[email protected]>
commit ee34a82e890a7babb5585daf1a6dd7d4d1cf142a upstream.
During the ino lookup ioctl we can end up calling btrfs_iget() to get an inode reference while we are holding on a root's btree. If btrfs_iget() needs to lookup the inode from the root's btree, because it's not currently loaded in memory, then it will need to lock another or the same path in the same root btree. This may result in a deadlock and trigger the following lockdep splat:
WARNING: possible circular locking dependency detected 6.5.0-rc7-syzkaller-00004-gf7757129e3de #0 Not tainted
------------------------------------------------------
syz-executor277/5012 is trying to acquire lock:
ffff88802df41710 (btrfs-tree-01){++++}-{3:3}, at: __btrfs_tree_read_lock+0x2f/0x220 fs/btrfs/locking.c:136
but task is already holding lock:
ffff88802df418e8 (btrfs-tree-00){++++}-{3:3}, at: __btrfs_tree_read_lock+0x2f/0x220 fs/btrfs/locking.c:136
which lock already depends on the new lock.
the existing dependency chain (in reverse order) is:
-> #1 (btrfs-tree-00){++++}-{3:3}:
down_read_nested+0x49/0x2f0 kernel/locking/rwsem.c:1645
__btrfs_tree_read_lock+0x2f/0x220 fs/btrfs/locking.c:136
btrfs_search_slot+0x13a4/0x2f80 fs/btrfs/ctree.c:2302
btrfs_init_root_free_objectid+0x148/0x320 fs/btrfs/disk-io.c:4955
btrfs_init_fs_root fs/btrfs/disk-io.c:1128 [inline]
btrfs_get_root_ref+0x5ae/0xae0 fs/btrfs/disk-io.c:1338
btrfs_get_fs_root fs/btrfs/disk-io.c:1390 [inline]
open_ctree+0x29c8/0x3030 fs/btrfs/disk-io.c:3494
btrfs_fill_super+0x1c7/0x2f0 fs/btrfs/super.c:1154
btrfs_mount_root+0x7e0/0x910 fs/btrfs/super.c:1519
legacy_get_tree+0xef/0x190 fs/fs_context.c:611
vfs_get_tree+0x8c/0x270 fs/super.c:1519
fc_mount fs/namespace.c:1112 [inline]
vfs_kern_mount+0xbc/0x150 fs/namespace.c:1142
btrfs_mount+0x39f/0xb50 fs/btrfs/super.c:1579
legacy_get_tree+0xef/0x190 fs/fs_context.c:611
vfs_get_tree+0x8c/0x270 fs/super.c:1519
do_new_mount+0x28f/0xae0 fs/namespace.c:3335
do_mount fs/namespace.c:3675 [inline]
__do_sys_mount fs/namespace.c:3884 [inline]
__se_sys_mount+0x2d9/0x3c0 fs/namespace.c:3861
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x63/0xcd-> #0 (btrfs-tree-01){++++}-{3:3}:
check_prev_add kernel/locking/lockdep.c:3142 [inline]
check_prevs_add kernel/locking/lockdep.c:3261 [inline]
validate_chain kernel/locking/lockdep.c:3876 [inline]
__lock_acquire+0x39ff/0x7f70 kernel/locking/lockdep.c:5144
lock_acquire+0x1e3/0x520 kernel/locking/lockdep.c:5761
down_read_nested+0x49/0x2f0 kernel/locking/rwsem.c:1645
__btrfs_tree_read_lock+0x2f/0x220 fs/btrfs/locking.c:136
btrfs_tree_read_lock fs/btrfs/locking.c:142 [inline]
btrfs_read_lock_root_node+0x292/0x3c0 fs/btrfs/locking.c:281
btrfs_search_slot_get_root fs/btrfs/ctree.c:1832 [inline]
btrfs_search_slot+0x4ff/0x2f80 fs/btrfs/ctree.c:2154
btrfs_lookup_inode+0xdc/0x480 fs/btrfs/inode-item.c:412
btrfs_read_locked_inode fs/btrfs/inode.c:3892 [inline]
btrfs_iget_path+0x2d9/0x1520 fs/btrfs/inode.c:5716
btrfs_search_path_in_tree_user fs/btrfs/ioctl.c:1961 [inline]
btrfs_ioctl_ino_lookup_user+0x77a/0xf50 fs/btrfs/ioctl.c:2105
btrfs_ioctl+0xb0b/0xd40 fs/btrfs/ioctl.c:4683
vfs_ioctl fs/ioctl.c:51 [inline]
__do_sys_ioctl fs/ioctl.c:870 [inline]
__se_sys_ioctl+0xf8/0x170 fs/ioctl.c:856
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x63/0xcdother info that might help us debug this:
Possible unsafe locking scenario:
CPU0 CPU1
---- ----
rlock(btrfs-tree-00);
lock(btrfs-tree-01);
lock(btrfs-tree-00);
rlock(btrfs-tree-01);*** DEADLOCK ***
1 lock held by syz-executor277/5012:
#0: ffff88802df418e8 (btrfs-tree-00){++++}-{3:3}, at: __btrfs_tree_read_lock+0x2f/0x220 fs/btrfs/locking.c:136
stack backtrace: CPU: 1 PID: 5012 Comm: syz-executor277 Not tainted 6.5.0-rc7-syzkaller-00004-gf7757129e3de #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/26/2023 Call Trace: <TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106 check_noncircular+0x375/0x4a0 kernel/locking/lockdep.c:2195 check_prev_add kernel/locking/lockdep.c:3142 [inline] check_prevs_add kernel/locking/lockdep.c:3261 [inline] validate_chain kernel/locking/lockdep.c:3876 [inline] __lock_acquire+0x39ff/0x7f70 kernel/locking/lockdep.c:5144 lock_acquire+0x1e3/0x520 kernel/locking/lockdep.c:5761 down_read_nested+0x49/0x2f0 kernel/locking/rwsem.c:1645 __btrfs_tree_read_lock+0x2f/0x220 fs/btrfs/locking.c:136 btrfs_tree_read_lock fs/btrfs/locking.c:142 [inline] btrfs_read_lock_root_node+0x292/0x3c0 fs/btrfs/locking.c:281 btrfs_search_slot_get_root fs/btrfs/ctree.c:1832 [inline] btrfs_search_slot+0x4ff/0x2f80 fs/btrfs/ctree.c:2154 btrfs_lookup_inode+0xdc/0x480 fs/btrfs/inode-item.c:412 btrfs_read_locked_inode fs/btrfs/inode.c:3892 [inline] btrfs_iget_path+0x2d9/0x1520 fs/btrfs/inode.c:5716 btrfs_search_path_in_tree_user fs/btrfs/ioctl.c:1961 [inline] btrfs_ioctl_ino_lookup_user+0x77a/0xf50 fs/btrfs/ioctl.c:2105 btrfs_ioctl+0xb0b/0xd40 fs/btrfs/ioctl.c:4683 vfs_ioctl fs/ioctl.c:51 [inline] __do_sys_ioctl fs/ioctl.c:870 [inline] __se_sys_ioctl+0xf8/0x170 fs/ioctl.c:856 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd RIP: 0033:0x7f0bec94ea39
Fix this simply by releasing the path before calling btrfs_iget() as at point we don't need the path anymore.
--- fs/btrfs/ioctl.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
fs/btrfs/ioctl.c +7 -1
@@ -2850,6 +2850,13 @@ static int btrfs_search_path_in_tree_use goto out_put; } +/* +* We don't need the path anymore, so release it and +* avoid deadlocks and lockdep warnings in case +* btrfs_iget() needs to lookup the inode from its root +* btree and lock the same leaf. +*/ +btrfs_release_path (path); temp_inode =btrfs_iget (sb, key2.objectid, root);if (IS_ERR (temp_inode)) { ret =PTR_ERR (temp_inode);
@@ -2870,7 +2877,6 @@ static int btrfs_search_path_in_tree_use goto out_put; } -btrfs_release_path (path); key.objectid = key.offset; key.offset = (u64)-1 ; dirid = key.objectid;
Greg Kroah-Hartman
maintainerPATCH 121/139 btrfs: check for BTRFS_FS_ERROR in pending ordered assert
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Josef Bacik <[email protected]>
commit 4ca8e03cf2bfaeef7c85939fa1ea0c749cd116ab upstream.
If we do fast tree logging we increment a counter on the current transaction for every ordered extent we need to wait for. This means we expect the transaction to still be there when we clear pending on the ordered extent. However if we happen to abort the transaction and clean it up, there could be no running transaction, and thus we'll trip the "ASSERT(trans)" check. This is obviously incorrect, and the code properly deals with the case that the transaction doesn't exist. Fix this ASSERT() to only fire if there's no trans and we don't have BTRFS_FS_ERROR() set on the file system.
--- fs/btrfs/ordered-data.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/btrfs/ordered-data.c +1 -1
@@ -580,7 +580,7 @@ void btrfs_remove_ordered_extent(structrefcount_inc (&trans->use_count);spin_unlock (&fs_info->trans_lock); -ASSERT (trans); +ASSERT (trans ||BTRFS_FS_ERROR (fs_info));if (trans) {if (atomic_dec_and_test (&trans->pending_ordered))wake_up (&trans->pending_wait);
Greg Kroah-Hartman
maintainerPATCH 122/139 tracing: Have tracing_max_latency inc the trace array ref count
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steven Rostedt (Google) <[email protected]>
commit 7d660c9b2bc95107f90a9f4c4759be85309a6550 upstream.
The tracing_max_latency file points to the trace_array max_latency field. For an instance, if the file is opened and the instance is deleted, reading or writing to the file will cause a use after free.
Up the ref count of the trace_array when tracing_max_latency is opened.
--- kernel/trace/trace.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
kernel/trace/trace.c +10 -5
@@ -1729,7 +1729,7 @@ static void trace_create_maxlat_file(strinit_irq_work (&tr->fsnotify_irqwork, latency_fsnotify_workfn_irq); tr->d_max_latency =trace_create_file ("tracing_max_latency" ,TRACE_MODE_WRITE , - d_tracer, &tr->max_latency, + d_tracer, tr, &tracing_max_lat_fops); }
@@ -1762,7 +1762,7 @@ void latency_fsnotify(struct trace_array#define trace_create_maxlat_file (tr, d_tracer) \ trace_create_file("tracing_max_latency", TRACE_MODE_WRITE, \ - d_tracer, &tr->max_latency, &tracing_max_lat_fops) + d_tracer, tr, &tracing_max_lat_fops)#endif
@@ -6604,14 +6604,18 @@ static ssize_t tracing_max_lat_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos) { - return tracing_nsecs_read(filp->private_data, ubuf, cnt, ppos); + struct trace_array *tr = filp->private_data; + +return tracing_nsecs_read (&tr->max_latency, ubuf, cnt, ppos); }static ssize_t tracing_max_lat_write (struct file *filp,const char __user *ubuf,size_t cnt,loff_t *ppos) { -return tracing_nsecs_write (filp->private_data, ubuf, cnt, ppos); +struct trace_array *tr = filp->private_data; + +return tracing_nsecs_write (&tr->max_latency, ubuf, cnt, ppos); }#endif
@@ -7668,10 +7672,11 @@ static const struct file_operations trac#ifdef CONFIG_TRACER_MAX_TRACE static const struct file_operations tracing_max_lat_fops = { - .open = tracing_open_generic, + .open = tracing_open_generic_tr, .read = tracing_max_lat_read, .write = tracing_max_lat_write, .llseek = generic_file_llseek, + .release = tracing_release_generic_tr, };#endif
Greg Kroah-Hartman
maintainerPATCH 123/139 tracing: Have event inject files inc the trace array ref count
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steven Rostedt (Google) <[email protected]>
commit e5c624f027ac74f97e97c8f36c69228ac9f1102d upstream.
The event inject files add events for a specific trace array. For an instance, if the file is opened and the instance is deleted, reading or writing to the file will cause a use after free.
Up the ref count of the trace_array when a event inject file is opened.
--- kernel/trace/trace_events_inject.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
kernel/trace/trace_events_inject.c +2 -1
@@ -328,7 +328,8 @@ event_inject_read(struct file *file, cha }const struct file_operations event_inject_fops = { - .open = tracing_open_generic, + .open = tracing_open_file_tr, .read = event_inject_read, .write = event_inject_write, + .release = tracing_release_file_tr, };
Greg Kroah-Hartman
maintainerPATCH 124/139 tracing: Increase trace array ref count on enable and filter files
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steven Rostedt (Google) <[email protected]>
commit f5ca233e2e66dc1c249bf07eefa37e34a6c9346a upstream.
When the trace event enable and filter files are opened, increment the trace array ref counter, otherwise they can be accessed when the trace array is being deleted. The ref counter keeps the trace array from being deleted while those files are opened.
--- kernel/trace/trace.c | 27 +++++++++++++++++++++++++++ kernel/trace/trace.h | 2 ++ kernel/trace/trace_events.c | 6 ++++-- 3 files changed, 33 insertions(+), 2 deletions(-)
kernel/trace/trace.c +27 -0
@@ -4899,6 +4899,33 @@ int tracing_open_generic_tr(struct inodereturn 0 ; } +/* +* The private pointer of the inode is the trace_event_file. +* Update the tr ref count associated to it. +*/ +int tracing_open_file_tr (struct inode *inode,struct file *filp) +{ +struct trace_event_file *file = inode->i_private; +int ret; + + ret =tracing_check_open_get_tr (file->tr); +if (ret) +return ret; + + filp->private_data = inode->i_private; + +return 0 ; +} + +int tracing_release_file_tr (struct inode *inode,struct file *filp) +{ +struct trace_event_file *file = inode->i_private; + +trace_array_put (file->tr); + +return 0 ; +} +static int tracing_mark_open (struct inode *inode,struct file *filp) {stream_open (inode, filp);
kernel/trace/trace.h +2 -0
@@ -590,6 +590,8 @@ void tracing_reset_all_online_cpus(void)void tracing_reset_all_online_cpus_unlocked (void );int tracing_open_generic (struct inode *inode,struct file *filp);int tracing_open_generic_tr (struct inode *inode,struct file *filp); +int tracing_open_file_tr (struct inode *inode,struct file *filp); +int tracing_release_file_tr (struct inode *inode,struct file *filp);bool tracing_is_disabled (void );bool tracer_tracing_is_on (struct trace_array *tr);void tracer_tracing_on (struct trace_array *tr);
kernel/trace/trace_events.c +4 -2
@@ -2101,9 +2101,10 @@ static const struct file_operations ftra };static const struct file_operations ftrace_enable_fops = { - .open = tracing_open_generic, + .open = tracing_open_file_tr, .read = event_enable_read, .write = event_enable_write, + .release = tracing_release_file_tr, .llseek = default_llseek, };
@@ -2120,9 +2121,10 @@ static const struct file_operations ftra };static const struct file_operations ftrace_event_filter_fops = { - .open = tracing_open_generic, + .open = tracing_open_file_tr, .read = event_filter_read, .write = event_filter_write, + .release = tracing_release_file_tr, .llseek = default_llseek, };
Greg Kroah-Hartman
maintainerPATCH 125/139 tracing: Have current_trace inc the trace array ref count
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steven Rostedt (Google) <[email protected]>
commit 9b37febc578b2e1ad76a105aab11d00af5ec3d27 upstream.
The current_trace updates the trace array tracer. For an instance, if the file is opened and the instance is deleted, reading or writing to the file will cause a use after free.
Up the ref count of the trace array when current_trace is opened.
--- kernel/trace/trace.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
kernel/trace/trace.c +2 -1
@@ -7708,10 +7708,11 @@ static const struct file_operations trac#endif static const struct file_operations set_tracer_fops = { - .open = tracing_open_generic, + .open = tracing_open_generic_tr, .read = tracing_set_trace_read, .write = tracing_set_trace_write, .llseek = generic_file_llseek, + .release = tracing_release_generic_tr, };static const struct file_operations tracing_pipe_fops = {
Greg Kroah-Hartman
maintainerPATCH 108/139 md/raid1: fix error: ISO C90 forbids mixed declarations
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nigel Croxon <[email protected]>
[ Upstream commit df203da47f4428bc286fc99318936416253a321c ]
There is a compile error when this commit is added:
md: raid1: fix potential OOB in raid1_remove_disk()
drivers/md/raid1.c: In function 'raid1_remove_disk':drivers/md/raid1.c:1844:9: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
1844 | struct raid1_info *p = conf->mirrors + number;
| ^~~~~~
That's because the new code was inserted before the struct. The change is move the struct command above this commit.
--- drivers/md/raid1.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/md/raid1.c +1 -2
@@ -1826,12 +1826,11 @@ static int raid1_remove_disk(struct mddev *mddev, struct md_rdev *rdev)struct r1conf *conf = mddev->private;int err =0 ;int number = rdev->raid_disk; +struct raid1_info *p = conf->mirrors + number;if (unlikely (number >= conf->raid_disks)) goto abort; -struct raid1_info *p = conf->mirrors + number; -if (rdev != p->rdev) p = conf->mirrors + conf->raid_disks + number;
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 126/139 tracing: Have option files inc the trace array ref count
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steven Rostedt (Google) <[email protected]>
commit 7e2cfbd2d3c86afcd5c26b5c4b1dd251f63c5838 upstream.
The option files update the options for a given trace array. For an instance, if the file is opened and the instance is deleted, reading or writing to the file will cause a use after free.
Up the ref count of the trace_array when an option file is opened.
--- kernel/trace/trace.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-)
kernel/trace/trace.c +22 -1
@@ -8905,12 +8905,33 @@ trace_options_write(struct file *filp, creturn cnt; } +static int tracing_open_options (struct inode *inode,struct file *filp) +{ +struct trace_option_dentry *topt = inode->i_private; +int ret; + + ret =tracing_check_open_get_tr (topt->tr); +if (ret) +return ret; + + filp->private_data = inode->i_private; +return 0 ; +} + +static int tracing_release_options (struct inode *inode,struct file *file) +{ +struct trace_option_dentry *topt = file->private_data; + +trace_array_put (topt->tr); +return 0 ; +}static const struct file_operations trace_options_fops = { - .open = tracing_open_generic, + .open = tracing_open_options, .read = trace_options_read, .write = trace_options_write, .llseek = generic_file_llseek, + .release = tracing_release_options, };/*
Greg Kroah-Hartman
maintainerPATCH 127/139 selinux: fix handling of empty opts in selinux_fs_context_submount()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ondrej Mosnacek <[email protected]>
commit ccf1dab96be4caed7c5235b1cfdb606ac161b996 upstream.
selinux_set_mnt_opts() relies on the fact that the mount options pointer is always NULL when all options are unset (specifically in its !selinux_initialized() branch. However, the new selinux_fs_context_submount() hook breaks this rule by allocating a new structure even if no options are set. That causes any submount created before a SELinux policy is loaded to be rejected in selinux_set_mnt_opts().
Fix this by making selinux_fs_context_submount() leave fc->security set to NULL when there are no options to be copied from the reference superblock.
--- security/selinux/hooks.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
security/selinux/hooks.c +8 -2
@@ -2769,14 +2769,20 @@ static int selinux_umount(struct vfsmounstatic int selinux_fs_context_submount (struct fs_context *fc,struct super_block *reference) { -const struct superblock_security_struct *sbsec; +const struct superblock_security_struct *sbsec =selinux_superblock (reference);struct selinux_mnt_opts *opts; +/* +* Ensure that fc->security remains NULL when no options are set +* as expected by selinux_set_mnt_opts(). +*/ +if (!(sbsec->flags & (FSCONTEXT_MNT |CONTEXT_MNT |DEFCONTEXT_MNT ))) +return 0 ; + opts =kzalloc (sizeof (*opts),GFP_KERNEL );if (!opts)return -ENOMEM ; - sbsec =selinux_superblock (reference);if (sbsec->flags &FSCONTEXT_MNT ) opts->fscontext_sid = sbsec->sid;if (sbsec->flags &CONTEXT_MNT )
Greg Kroah-Hartman
maintainerPATCH 128/139 nfsd: fix change_info in NFSv4 RENAME replies
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jeff Layton <[email protected]>
commit fdd2630a7398191e84822612e589062063bd4f3d upstream.
nfsd sends the transposed directory change info in the RENAME reply. The source directory is in save_fh and the target is in current_fh.
--- fs/nfsd/nfs4proc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/nfsd/nfs4proc.c +2 -2
@@ -1029,8 +1029,8 @@ nfsd4_rename(struct svc_rqst *rqstp, str rename->rn_tname, rename->rn_tnamelen);if (status)return status; -set_change_info (&rename->rn_sinfo, &cstate->current_fh); -set_change_info (&rename->rn_tinfo, &cstate->save_fh); +set_change_info (&rename->rn_sinfo, &cstate->save_fh); +set_change_info (&rename->rn_tinfo, &cstate->current_fh);return nfs_ok; }
Greg Kroah-Hartman
maintainerPATCH 129/139 tracefs: Add missing lockdown check to tracefs_create_dir()
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Steven Rostedt (Google) <[email protected]>
commit 51aab5ffceb43e05119eb059048fd75765d2bc21 upstream.
The function tracefs_create_dir() was missing a lockdown check and was called by the RV code. This gave an inconsistent behavior of this function returning success while other tracefs functions failed. This caused the inode being freed by the wrong kmem_cache.
--- fs/tracefs/inode.c | 3 +++ 1 file changed, 3 insertions(+)
fs/tracefs/inode.c +3 -0
@@ -556,6 +556,9 @@ static struct dentry *__create_dir(const*/ struct dentry *tracefs_create_dir (const char *name,struct dentry *parent) { +if (security_locked_down (LOCKDOWN_TRACEFS )) +return NULL ; +return __create_dir (name, parent, &simple_dir_inode_operations); }
Greg Kroah-Hartman
maintainerPATCH 130/139 i2c: aspeed: Reset the i2c controller when timeout occurs
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tommy Huang <[email protected]>
commit fee465150b458351b6d9b9f66084f3cc3022b88b upstream.
Reset the i2c controller when an i2c transfer timeout occurs. The remaining interrupts and device should be reset to avoid unpredictable controller behavior.
--- drivers/i2c/busses/i2c-aspeed.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/i2c/busses/i2c-aspeed.c +5 -2
@@ -698,13 +698,16 @@ static int aspeed_i2c_master_xfer(structif (time_left ==0 ) {/* -* If timed out and bus is still busy in a multi master -* environment, attempt recovery at here. +* In a multi-master setup, if a timeout occurs, attempt +* recovery. But if the bus is idle, we still need to reset the +* i2c controller to clear the remaining interrupts. */ if (bus->multi_master && (readl (bus->base +ASPEED_I2C_CMD_REG ) &ASPEED_I2CD_BUS_BUSY_STS ))aspeed_i2c_recover_bus (bus); +else +aspeed_i2c_reset (bus);/* * If timed out and the state is still pending, drop the pending
Greg Kroah-Hartman
maintainerPATCH 131/139 ata: libata: disallow dev-initiated LPM transitions to unsupported states
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Niklas Cassel <[email protected]>
commit 24e0e61db3cb86a66824531989f1df80e0939f26 upstream.
In AHCI 1.3.1, the register description for CAP.SSC:
"When cleared to ‘0’, software must not allow the HBA to initiate transitions to the Slumber state via agressive link power management nor the PxCMD.ICC field in each port, and the PxSCTL.IPM field in each port must be programmed to disallow device initiated Slumber requests."
In AHCI 1.3.1, the register description for CAP.PSC:
"When cleared to ‘0’, software must not allow the HBA to initiate transitions to the Partial state via agressive link power management nor the PxCMD.ICC field in each port, and the PxSCTL.IPM field in each port must be programmed to disallow device initiated Partial requests."
Ensure that we always set the corresponding bits in PxSCTL.IPM, such that a device is not allowed to initiate transitions to power states which are unsupported by the HBA.
DevSleep is always initiated by the HBA, however, for completeness, set the corresponding bit in PxSCTL.IPM such that agressive link power management cannot transition to DevSleep if DevSleep is not supported.
sata_link_scr_lpm() is used by libahci, ata_piix and libata-pmp. However, only libahci has the ability to read the CAP/CAP2 register to see if these features are supported. Therefore, in order to not introduce any regressions on ata_piix or libata-pmp, create flags that indicate that the respective feature is NOT supported. This way, the behavior for ata_piix and libata-pmp should remain unchanged.
This change is based on a patch originally submitted by Runa Guo-oc.
--- drivers/ata/ahci.c | 9 +++++++++ drivers/ata/libata-sata.c | 19 ++++++++++++++++--- include/linux/libata.h | 4 ++++ 3 files changed, 29 insertions(+), 3 deletions(-)
drivers/ata/ahci.c +9 -0
@@ -1884,6 +1884,15 @@ static int ahci_init_one(struct pci_develse dev_info (&pdev->dev,"SSS flag set, parallel bus scan disabled\n" ); +if (!(hpriv->cap &HOST_CAP_PART )) + host->flags |=ATA_HOST_NO_PART ; + +if (!(hpriv->cap &HOST_CAP_SSC )) + host->flags |=ATA_HOST_NO_SSC ; + +if (!(hpriv->cap2 &HOST_CAP2_SDS )) + host->flags |=ATA_HOST_NO_DEVSLP ; +if (pi.flags &ATA_FLAG_EM )ahci_reset_em (host);
drivers/ata/libata-sata.c +16 -3
@@ -394,10 +394,23 @@ int sata_link_scr_lpm(struct ata_link *lcase ATA_LPM_MED_POWER_WITH_DIPM :case ATA_LPM_MIN_POWER_WITH_PARTIAL :case ATA_LPM_MIN_POWER : -if (ata_link_nr_enabled (link) >0 ) -/* no restrictions on LPM transitions */ +if (ata_link_nr_enabled (link) >0 ) { +/* assume no restrictions on LPM transitions */ scontrol &= ~(0x7 <<8 ); -else { + +/* +* If the controller does not support partial, slumber, +* or devsleep, then disallow these transitions. +*/ +if (link->ap->host->flags &ATA_HOST_NO_PART ) + scontrol |= (0x1 <<8 ); + +if (link->ap->host->flags &ATA_HOST_NO_SSC ) + scontrol |= (0x2 <<8 ); + +if (link->ap->host->flags &ATA_HOST_NO_DEVSLP ) + scontrol |= (0x4 <<8 ); + }else {/* empty port, power off */ scontrol &= ~0xf ; scontrol |= (0x1 <<2 );
include/linux/libata.h +4 -0
@@ -216,6 +216,10 @@ enum {ATA_HOST_PARALLEL_SCAN = (1 <<2 ),/* Ports on this host can be scanned in parallel */ ATA_HOST_IGNORE_ATA = (1 <<3 ),/* Ignore ATA devices on this host. */ +ATA_HOST_NO_PART = (1 <<4 ),/* Host does not support partial */ +ATA_HOST_NO_SSC = (1 <<5 ),/* Host does not support slumber */ +ATA_HOST_NO_DEVSLP = (1 <<6 ),/* Host does not support devslp */ +/* bits 24:31 of host->flags are reserved for LLD specific flags */ /* various lengths of time */
Greg Kroah-Hartman
maintainerPATCH 132/139 ata: libahci: clear pending interrupt status
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Szuying Chen <[email protected]>
commit 737dd811a3dbfd7edd4ad2ba5152e93d99074f83 upstream.
When a CRC error occurs, the HBA asserts an interrupt to indicate an interface fatal error (PxIS.IFS). The ISR clears PxIE and PxIS, then does error recovery. If the adapter receives another SDB FIS with an error (PxIS.TFES) from the device before the start of the EH recovery process, the interrupt signaling the new SDB cannot be serviced as PxIE was cleared already. This in turn results in the HBA inability to issue any command during the error recovery process after setting PxCMD.ST to 1 because PxIS.TFES is still set.
According to AHCI 1.3.1 specifications section 6.2.2, fatal errors notified by setting PxIS.HBFS, PxIS.HBDS, PxIS.IFS or PxIS.TFES will cause the HBA to enter the ERR:Fatal state. In this state, the HBA shall not issue any new commands.
To avoid this situation, introduce the function ahci_port_clear_pending_irq() to clear pending interrupts before executing a COMRESET. This follows the AHCI 1.3.1 - section 6.2.2.2 specification.
--- drivers/ata/libahci.c | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-)
drivers/ata/libahci.c +23 -12
@@ -1255,6 +1255,26 @@ static ssize_t ahci_activity_show(structreturn sprintf (buf,"%d\n" , emp->blink_policy); } +static void ahci_port_clear_pending_irq (struct ata_port *ap) +{ +struct ahci_host_priv *hpriv = ap->host->private_data; +void __iomem *port_mmio =ahci_port_base (ap); +u32 tmp; + +/* clear SError */ + tmp =readl (port_mmio +PORT_SCR_ERR ); +dev_dbg (ap->host->dev,"PORT_SCR_ERR 0x%x\n" , tmp); +writel (tmp, port_mmio +PORT_SCR_ERR ); + +/* clear port IRQ */ + tmp =readl (port_mmio +PORT_IRQ_STAT ); +dev_dbg (ap->host->dev,"PORT_IRQ_STAT 0x%x\n" , tmp); +if (tmp) +writel (tmp, port_mmio +PORT_IRQ_STAT ); + +writel (1 << ap->port_no, hpriv->mmio +HOST_IRQ_STAT ); +} +static void ahci_port_init (struct device *dev,struct ata_port *ap,int port_no,void __iomem *mmio,void __iomem *port_mmio)
@@ -1269,18 +1289,7 @@ static void ahci_port_init(struct deviceif (rc)dev_warn (dev,"%s (%d)\n" , emsg, rc); -/* clear SError */ - tmp =readl (port_mmio +PORT_SCR_ERR ); -dev_dbg (dev,"PORT_SCR_ERR 0x%x\n" , tmp); -writel (tmp, port_mmio +PORT_SCR_ERR ); - -/* clear port IRQ */ - tmp =readl (port_mmio +PORT_IRQ_STAT ); -dev_dbg (dev,"PORT_IRQ_STAT 0x%x\n" , tmp); -if (tmp) -writel (tmp, port_mmio +PORT_IRQ_STAT ); - -writel (1 << port_no, mmio +HOST_IRQ_STAT ); +ahci_port_clear_pending_irq (ap);/* mark esata ports */ tmp =readl (port_mmio +PORT_CMD );
@@ -1601,6 +1610,8 @@ int ahci_do_hardreset(struct ata_link *l tf.status =ATA_BUSY ;ata_tf_to_fis (&tf,0 ,0 , d2h_fis); +ahci_port_clear_pending_irq (ap); + rc =sata_link_hardreset (link, timing, deadline, online, ahci_check_ready);
Greg Kroah-Hartman
maintainerPATCH 133/139 scsi: megaraid_sas: Fix deadlock on firmware crashdump
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Junxiao Bi <[email protected]>
commit 0b0747d507bffb827e40fc0f9fb5883fffc23477 upstream.
The following processes run into a deadlock. CPU 41 was waiting for CPU 29 to handle a CSD request while holding spinlock "crashdump_lock", but CPU 29 was hung by that spinlock with IRQs disabled.
PID: 17360 TASK: ffff95c1090c5c40 CPU: 41 COMMAND: "mrdiagd"
!# 0 [ffffb80edbf37b58] __read_once_size at ffffffff9b871a40 include/linux/compiler.h:185:0
!# 1 [ffffb80edbf37b58] atomic_read at ffffffff9b871a40 arch/x86/include/asm/atomic.h:27:0
!# 2 [ffffb80edbf37b58] dump_stack at ffffffff9b871a40 lib/dump_stack.c:54:0
# 3 [ffffb80edbf37b78] csd_lock_wait_toolong at ffffffff9b131ad5 kernel/smp.c:364:0
# 4 [ffffb80edbf37b78] __csd_lock_wait at ffffffff9b131ad5 kernel/smp.c:384:0
# 5 [ffffb80edbf37bf8] csd_lock_wait at ffffffff9b13267a kernel/smp.c:394:0
# 6 [ffffb80edbf37bf8] smp_call_function_many at ffffffff9b13267a kernel/smp.c:843:0
# 7 [ffffb80edbf37c50] smp_call_function at ffffffff9b13279d kernel/smp.c:867:0
# 8 [ffffb80edbf37c50] on_each_cpu at ffffffff9b13279d kernel/smp.c:976:0
# 9 [ffffb80edbf37c78] flush_tlb_kernel_range at ffffffff9b085c4b arch/x86/mm/tlb.c:742:0
#10 [ffffb80edbf37cb8] __purge_vmap_area_lazy at ffffffff9b23a1e0 mm/vmalloc.c:701:0
#11 [ffffb80edbf37ce0] try_purge_vmap_area_lazy at ffffffff9b23a2cc mm/vmalloc.c:722:0
#12 [ffffb80edbf37ce0] free_vmap_area_noflush at ffffffff9b23a2cc mm/vmalloc.c:754:0
#13 [ffffb80edbf37cf8] free_unmap_vmap_area at ffffffff9b23bb3b mm/vmalloc.c:764:0
#14 [ffffb80edbf37cf8] remove_vm_area at ffffffff9b23bb3b mm/vmalloc.c:1509:0
#15 [ffffb80edbf37d18] __vunmap at ffffffff9b23bb8a mm/vmalloc.c:1537:0
#16 [ffffb80edbf37d40] vfree at ffffffff9b23bc85 mm/vmalloc.c:1612:0
#17 [ffffb80edbf37d58] megasas_free_host_crash_buffer [megaraid_sas] at ffffffffc020b7f2 drivers/scsi/megaraid/megaraid_sas_fusion.c:3932:0 #18 [ffffb80edbf37d80] fw_crash_state_store [megaraid_sas] at ffffffffc01f804d drivers/scsi/megaraid/megaraid_sas_base.c:3291:0 #19 [ffffb80edbf37dc0] dev_attr_store at ffffffff9b56dd7b drivers/base/core.c:758:0
#20 [ffffb80edbf37dd0] sysfs_kf_write at ffffffff9b326acf fs/sysfs/file.c:144:0
#21 [ffffb80edbf37de0] kernfs_fop_write at ffffffff9b325fd4 fs/kernfs/file.c:316:0
#22 [ffffb80edbf37e20] __vfs_write at ffffffff9b29418a fs/read_write.c:480:0
#23 [ffffb80edbf37ea8] vfs_write at ffffffff9b294462 fs/read_write.c:544:0
#24 [ffffb80edbf37ee8] SYSC_write at ffffffff9b2946ec fs/read_write.c:590:0
#25 [ffffb80edbf37ee8] SyS_write at ffffffff9b2946ec fs/read_write.c:582:0
#26 [ffffb80edbf37f30] do_syscall_64 at ffffffff9b003ca9 arch/x86/entry/common.c:298:0
#27 [ffffb80edbf37f58] entry_SYSCALL_64 at ffffffff9ba001b1 arch/x86/entry/entry_64.S:238:0
PID: 17355 TASK: ffff95c1090c3d80 CPU: 29 COMMAND: "mrdiagd"
!# 0 [ffffb80f2d3c7d30] __read_once_size at ffffffff9b0f2ab0 include/linux/compiler.h:185:0
!# 1 [ffffb80f2d3c7d30] native_queued_spin_lock_slowpath at ffffffff9b0f2ab0 kernel/locking/qspinlock.c:368:0
# 2 [ffffb80f2d3c7d58] pv_queued_spin_lock_slowpath at ffffffff9b0f244b arch/x86/include/asm/paravirt.h:674:0 # 3 [ffffb80f2d3c7d58] queued_spin_lock_slowpath at ffffffff9b0f244b arch/x86/include/asm/qspinlock.h:53:0 # 4 [ffffb80f2d3c7d68] queued_spin_lock at ffffffff9b8961a6 include/asm-generic/qspinlock.h:90:0
# 5 [ffffb80f2d3c7d68] do_raw_spin_lock_flags at ffffffff9b8961a6 include/linux/spinlock.h:173:0
# 6 [ffffb80f2d3c7d68] __raw_spin_lock_irqsave at ffffffff9b8961a6 include/linux/spinlock_api_smp.h:122:0
# 7 [ffffb80f2d3c7d68] _raw_spin_lock_irqsave at ffffffff9b8961a6 kernel/locking/spinlock.c:160:0
# 8 [ffffb80f2d3c7d88] fw_crash_buffer_store [megaraid_sas] at ffffffffc01f8129 drivers/scsi/megaraid/megaraid_sas_base.c:3205:0 # 9 [ffffb80f2d3c7dc0] dev_attr_store at ffffffff9b56dd7b drivers/base/core.c:758:0
#10 [ffffb80f2d3c7dd0] sysfs_kf_write at ffffffff9b326acf fs/sysfs/file.c:144:0
#11 [ffffb80f2d3c7de0] kernfs_fop_write at ffffffff9b325fd4 fs/kernfs/file.c:316:0
#12 [ffffb80f2d3c7e20] __vfs_write at ffffffff9b29418a fs/read_write.c:480:0
#13 [ffffb80f2d3c7ea8] vfs_write at ffffffff9b294462 fs/read_write.c:544:0
#14 [ffffb80f2d3c7ee8] SYSC_write at ffffffff9b2946ec fs/read_write.c:590:0
#15 [ffffb80f2d3c7ee8] SyS_write at ffffffff9b2946ec fs/read_write.c:582:0
#16 [ffffb80f2d3c7f30] do_syscall_64 at ffffffff9b003ca9 arch/x86/entry/common.c:298:0
#17 [ffffb80f2d3c7f58] entry_SYSCALL_64 at ffffffff9ba001b1 arch/x86/entry/entry_64.S:238:0
The lock is used to synchronize different sysfs operations, it doesn't protect any resource that will be touched by an interrupt. Consequently it's not required to disable IRQs. Replace the spinlock with a mutex to fix the deadlock.
--- drivers/scsi/megaraid/megaraid_sas.h | 2 +- drivers/scsi/megaraid/megaraid_sas_base.c | 21 +++++++++------------ 2 files changed, 10 insertions(+), 13 deletions(-)
drivers/scsi/megaraid/megaraid_sas.h +1 -1
@@ -2332,7 +2332,7 @@ struct megasas_instance {u32 support_morethan256jbod;/* FW support for more than 256 PD/JBOD */ bool use_seqnum_jbod_fp;/* Added for PD sequence */ bool smp_affinity_enable; -spinlock_t crashdump_lock; +struct mutex crashdump_lock;struct megasas_register_set __iomem *reg_set;u32 __iomem *reply_post_host_index_addr[MR_MAX_MSIX_REG_ARRAY ];
drivers/scsi/megaraid/megaraid_sas_base.c +9 -12
@@ -3272,14 +3272,13 @@ fw_crash_buffer_store(struct device *cdestruct megasas_instance *instance = (struct megasas_instance *) shost->hostdata;int val =0 ; -unsigned long flags;if (kstrtoint (buf,0 , &val) !=0 )return -EINVAL ; -spin_lock_irqsave (&instance->crashdump_lock, flags); +mutex_lock (&instance->crashdump_lock); instance->fw_crash_buffer_offset = val; -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);return strlen (buf); }
@@ -3294,24 +3293,23 @@ fw_crash_buffer_show(struct device *cdevunsigned long dmachunk =CRASH_DMA_BUF_SIZE ;unsigned long chunk_left_bytes;unsigned long src_addr; -unsigned long flags;u32 buff_offset; -spin_lock_irqsave (&instance->crashdump_lock, flags); +mutex_lock (&instance->crashdump_lock); buff_offset = instance->fw_crash_buffer_offset;if (!instance->crash_dump_buf || !((instance->fw_crash_state ==AVAILABLE ) || (instance->fw_crash_state ==COPYING ))) {dev_err (&instance->pdev->dev,"Firmware crash dump is not available\n" ); -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);return -EINVAL ; }if (buff_offset > (instance->fw_crash_buffer_size * dmachunk)) {dev_err (&instance->pdev->dev,"Firmware crash dump offset is out of range\n" ); -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);return 0 ; }
@@ -3323,7 +3321,7 @@ fw_crash_buffer_show(struct device *cdev src_addr = (unsigned long )instance->crash_buf[buff_offset / dmachunk] + (buff_offset % dmachunk);memcpy (buf, (void *)src_addr, size); -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);return size; }
@@ -3348,7 +3346,6 @@ fw_crash_state_store(struct device *cdevstruct megasas_instance *instance = (struct megasas_instance *) shost->hostdata;int val =0 ; -unsigned long flags;if (kstrtoint (buf,0 , &val) !=0 )return -EINVAL ;
@@ -3362,9 +3359,9 @@ fw_crash_state_store(struct device *cdev instance->fw_crash_state = val;if ((val ==COPIED ) || (val ==COPY_ERROR )) { -spin_lock_irqsave (&instance->crashdump_lock, flags); +mutex_lock (&instance->crashdump_lock);megasas_free_host_crash_buffer (instance); -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);if (val ==COPY_ERROR )dev_info (&instance->pdev->dev,"application failed to " "copy Firmware crash dump\n" );
@@ -7423,7 +7420,7 @@ static inline void megasas_init_ctrl_parinit_waitqueue_head (&instance->int_cmd_wait_q);init_waitqueue_head (&instance->abort_cmd_wait_q); -spin_lock_init (&instance->crashdump_lock); +mutex_init (&instance->crashdump_lock);spin_lock_init (&instance->mfi_pool_lock);spin_lock_init (&instance->hba_lock);spin_lock_init (&instance->stream_lock);
Greg Kroah-Hartman
maintainerPATCH 109/139 Revert "SUNRPC: Fail faster on bad verifier"
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Trond Myklebust <[email protected]>
commit e86fcf0820d914389b46658a5a7e8969c3af2d53 upstream.
This reverts commit 0701214cd6e66585a999b132eb72ae0489beb724.
The premise of this commit was incorrect. There are exactly 2 cases where rpcauth_checkverf() will return an error:
1) If there was an XDR decode problem (i.e. garbage data).
2) If gss_validate() had a problem verifying the RPCSEC_GSS MIC.
In the second case, there are again 2 subcases:
a) The GSS context expires, in which case gss_validate() will force a new context negotiation on retry by invalidating the cred.
b) The sequence number check failed because an RPC call timed out, and the client retransmitted the request using a new sequence number, as required by RFC2203.
In neither subcase is this a fatal error.
--- net/sunrpc/clnt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/sunrpc/clnt.c +1 -1
@@ -2710,7 +2710,7 @@ out_unparsable: out_verifier:trace_rpc_bad_verifier (task); - goto out_err; + goto out_garbage; out_msg_denied: error = -EACCES ;
Greg Kroah-Hartman
maintainerPATCH 110/139 attr: block mode changes of symlinks
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian Brauner <[email protected]>
commit 5d1f903f75a80daa4dfb3d84e114ec8ecbf29956 upstream.
Changing the mode of symlinks is meaningless as the vfs doesn't take the mode of a symlink into account during path lookup permission checking.
However, the vfs doesn't block mode changes on symlinks. This however, has lead to an untenable mess roughly classifiable into the following two categories:
(1) Filesystems that don't implement a i_op->setattr() for symlinks.
Such filesystems may or may not know that without i_op->setattr() defined, notify_change() falls back to simple_setattr() causing the inode's mode in the inode cache to be changed.
That's a generic issue as this will affect all non-size changing inode attributes including ownership changes.
Example: afs
(2) Filesystems that fail with EOPNOTSUPP but change the mode of the symlink nonetheless.
Some filesystems will happily update the mode of a symlink but still return EOPNOTSUPP. This is the biggest source of confusion for userspace.
The EOPNOTSUPP in this case comes from POSIX ACLs. Specifically it comes from filesystems that call posix_acl_chmod(), e.g., btrfs via
if (!err && attr->ia_valid & ATTR_MODE)
err = posix_acl_chmod(idmap, dentry, inode->i_mode);
Filesystems including btrfs don't implement i_op->set_acl() so posix_acl_chmod() will report EOPNOTSUPP.
When posix_acl_chmod() is called, most filesystems will have finished updating the inode.
Perversely, this has the consequences that this behavior may depend on two kconfig options and mount options:
* CONFIG_POSIX_ACL={y,n}
* CONFIG_${FSTYPE}_POSIX_ACL={y,n}
* Opt_acl, Opt_noacl
Example: btrfs, ext4, xfs
The only way to change the mode on a symlink currently involves abusing an O_PATH file descriptor in the following manner:
fd = openat(-1, "/path/to/link", O_CLOEXEC | O_PATH | O_NOFOLLOW);
char path[PATH_MAX];
snprintf(path, sizeof(path), "/proc/self/fd/%d", fd);
chmod(path, 0000);But for most major filesystems with POSIX ACL support such as btrfs, ext4, ceph, tmpfs, xfs and others this will fail with EOPNOTSUPP with the mode still updated due to the aforementioned posix_acl_chmod() nonsense.
So, given that for all major filesystems this would fail with EOPNOTSUPP and that both glibc (cf. [1]) and musl (cf. [2]) outright block mode changes on symlinks we should just try and block mode changes on symlinks directly in the vfs and have a clean break with this nonsense.
If this causes any regressions, we do the next best thing and fix up all filesystems that do return EOPNOTSUPP with the mode updated to not call posix_acl_chmod() on symlinks.
But as usual, let's try the clean cut solution first. It's a simple patch that can be easily reverted. Not marking this for backport as I'll do that manually if we're reasonably sure that this works and there are no strong objections.
We could block this in chmod_common() but it's more appropriate to do it notify_change() as it will also mean that we catch filesystems that change symlink permissions explicitly or accidently.
Similar proposals were floated in the past as in [3] and [4] and again recently in [5]. There's also a couple of bugs about this inconsistency as in [6] and [7].
Message-Id: <[email protected]>
--- fs/attr.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-)
fs/attr.c +18 -2
@@ -394,9 +394,25 @@ int notify_change(struct user_namespacereturn error;if ((ia_valid &ATTR_MODE )) { -umode_t amode = attr->ia_mode; +/* +* Don't allow changing the mode of symlinks: +* +* (1) The vfs doesn't take the mode of symlinks into account +* during permission checking. +* (2) This has never worked correctly. Most major filesystems +* did return EOPNOTSUPP due to interactions with POSIX ACLs +* but did still updated the mode of the symlink. +* This inconsistency led system call wrapper providers such +* as libc to block changing the mode of symlinks with +* EOPNOTSUPP already. +* (3) To even do this in the first place one would have to use +* specific file descriptors and quite some effort. +*/ +if (S_ISLNK (inode->i_mode)) +return -EOPNOTSUPP ; +/* Flag setting protected by i_mutex */ -if (is_sxid (amode)) +if (is_sxid (attr->ia_mode)) inode->i_flags &= ~S_NOSEC ; }
Greg Kroah-Hartman
maintainerPATCH 111/139 ovl: fix failed copyup of fileattr on a symlink
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Amir Goldstein <[email protected]>
commit ab048302026d7701e7fbd718917e0dbcff0c4223 upstream.
Some local filesystems support setting persistent fileattr flags (e.g. FS_NOATIME_FL) on directories and regular files via ioctl. Some of those persistent fileattr flags are reflected to vfs as in-memory inode flags (e.g. S_NOATIME).
Overlayfs uses the in-memory inode flags (e.g. S_NOATIME) on a lower file as an indication that a the lower file may have persistent inode fileattr flags (e.g. FS_NOATIME_FL) that need to be copied to upper file.
However, in some cases, the S_NOATIME in-memory flag could be a false indication for persistent FS_NOATIME_FL fileattr. For example, with NFS and FUSE lower fs, as was the case in the two bug reports, the S_NOATIME flag is set unconditionally for all inodes.
Users cannot set persistent fileattr flags on symlinks and special files, but in some local fs, such as ext4/btrfs/tmpfs, the FS_NOATIME_FL fileattr flag are inheritted to symlinks and special files from parent directory.
In both cases described above, when lower symlink has the S_NOATIME flag, overlayfs will try to copy the symlink's fileattrs and fail with error ENOXIO, because it could not open the symlink for the ioctl security hook.
To solve this failure, do not attempt to copyup fileattrs for anything other than directories and regular files.
--- fs/overlayfs/copy_up.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/overlayfs/copy_up.c +2 -1
@@ -580,7 +580,8 @@ static int ovl_copy_up_metadata(struct oif (err)return err; -if (inode->i_flags &OVL_COPY_I_FLAGS_MASK ) { +if (inode->i_flags &OVL_COPY_I_FLAGS_MASK && + (S_ISREG (c->stat.mode) ||S_ISDIR (c->stat.mode))) {/* * Copy the fileattr inode flags that are the source of already * copied i_flags
Greg Kroah-Hartman
maintainerPATCH 112/139 ovl: fix incorrect fdput() on aio completion
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Amir Goldstein <[email protected]>
commit 724768a39374d35b70eaeae8dd87048a2ec7ae8e upstream.
ovl_{read,write}_iter() always call fdput(real) to put one or zero refcounts of the real file, but for aio, whether it was submitted or not, ovl_aio_put() also calls fdput(), which is not balanced. This is only a problem in the less common case when FDPUT_FPUT flag is set.
To fix the problem use get_file() to take file refcount and use fput() instead of fdput() in ovl_aio_put().
--- fs/overlayfs/file.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
fs/overlayfs/file.c +3 -6
@@ -19,7 +19,6 @@ struct ovl_aio_req {struct kiocb iocb;refcount_t ref;struct kiocb *orig_iocb; -struct fd fd; };static struct kmem_cache *ovl_aio_request_cachep;
@@ -260,7 +259,7 @@ static rwf_t ovl_iocb_to_rwf(int ifl)static inline void ovl_aio_put (struct ovl_aio_req *aio_req) {if (refcount_dec_and_test (&aio_req->ref)) { -fdput (aio_req->fd); +fput (aio_req->iocb.ki_filp);kmem_cache_free (ovl_aio_request_cachep, aio_req); } }
@@ -325,10 +324,9 @@ static ssize_t ovl_read_iter(struct kiocif (!aio_req) goto out; - aio_req->fd = real; real.flags =0 ; aio_req->orig_iocb = iocb; -kiocb_clone (&aio_req->iocb, iocb, real.file); +kiocb_clone (&aio_req->iocb, iocb,get_file (real.file)); aio_req->iocb.ki_complete = ovl_aio_rw_complete;refcount_set (&aio_req->ref,2 ); ret =vfs_iocb_iter_read (real.file, &aio_req->iocb, iter);
@@ -396,10 +394,9 @@ static ssize_t ovl_write_iter(struct kio/* Pacify lockdep, same trick as done in aio_write() */ __sb_writers_release (file_inode (real.file)->i_sb,SB_FREEZE_WRITE ); - aio_req->fd = real; real.flags =0 ; aio_req->orig_iocb = iocb; -kiocb_clone (&aio_req->iocb, iocb, real.file); +kiocb_clone (&aio_req->iocb, iocb,get_file (real.file)); aio_req->iocb.ki_flags = ifl; aio_req->iocb.ki_complete = ovl_aio_rw_complete;refcount_set (&aio_req->ref,2 );
Greg Kroah-Hartman
maintainerPATCH 113/139 io_uring/net: fix iter retargeting for selected buf
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pavel Begunkov <[email protected]>
commit c21a8027ad8a68c340d0d58bf1cc61dcb0bc4d2f upstream.
When using selected buffer feature, io_uring delays data iter setup until later. If io_setup_async_msg() is called before that it might see not correctly setup iterator. Pre-init nr_segs and judge from its state whether we repointing.
--- io_uring/net.c | 5 +++++ 1 file changed, 5 insertions(+)
io_uring/net.c +5 -0
@@ -170,6 +170,10 @@ static int io_setup_async_msg(struct io_memcpy (async_msg, kmsg,sizeof (*kmsg));if (async_msg->msg.msg_name) async_msg->msg.msg_name = &async_msg->addr; + +if ((req->flags &REQ_F_BUFFER_SELECT ) && !async_msg->msg.msg_iter.nr_segs) +return -EAGAIN ; +/* if were using fast_iov, set it to the new one */ if (!kmsg->free_iov) {size_t fast_idx = kmsg->msg.msg_iter.iov - kmsg->fast_iov;
@@ -529,6 +533,7 @@ static int io_recvmsg_copy_hdr(struct io struct io_async_msghdr *iomsg) { iomsg->msg.msg_name = &iomsg->addr; + iomsg->msg.msg_iter.nr_segs =0 ;#ifdef CONFIG_COMPAT if (req->ctx->compat)
Greg Kroah-Hartman
maintainerPATCH 114/139 nvme: avoid bogus CRTO values
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Keith Busch <[email protected]>
commit 6cc834ba62998c65c42d0c63499bdd35067151ec upstream.
Some devices are reporting controller ready mode support, but return 0 for CRTO. These devices require a much higher time to ready than that, so they are failing to initialize after the driver starter preferring that value over CAP.TO.
The spec requires that CAP.TO match the appropritate CRTO value, or be set to 0xff if CRTO is larger than that. This means that CAP.TO can be used to validate if CRTO is reliable, and provides an appropriate fallback for setting the timeout value if not. Use whichever is larger.
--- drivers/nvme/host/core.c | 54 ++++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 19 deletions(-)
drivers/nvme/host/core.c +35 -19
@@ -2368,25 +2368,8 @@ int nvme_enable_ctrl(struct nvme_ctrl *celse ctrl->ctrl_config =NVME_CC_CSS_NVM ; -if (ctrl->cap &NVME_CAP_CRMS_CRWMS ) { -u32 crto; - - ret = ctrl->ops->reg_read32 (ctrl,NVME_REG_CRTO , &crto); -if (ret) { -dev_err (ctrl->device,"Reading CRTO failed (%d)\n" , - ret); -return ret; - } - -if (ctrl->cap &NVME_CAP_CRMS_CRIMS ) { - ctrl->ctrl_config |=NVME_CC_CRIME ; - timeout =NVME_CRTO_CRIMT (crto); - }else { - timeout =NVME_CRTO_CRWMT (crto); - } - }else { - timeout =NVME_CAP_TIMEOUT (ctrl->cap); - } +if (ctrl->cap &NVME_CAP_CRMS_CRWMS && ctrl->cap &NVME_CAP_CRMS_CRIMS ) + ctrl->ctrl_config |=NVME_CC_CRIME ; ctrl->ctrl_config |= (NVME_CTRL_PAGE_SHIFT -12 ) <<NVME_CC_MPS_SHIFT ; ctrl->ctrl_config |=NVME_CC_AMS_RR |NVME_CC_SHN_NONE ;
@@ -2400,6 +2383,39 @@ int nvme_enable_ctrl(struct nvme_ctrl *cif (ret)return ret; +/* CAP value may change after initial CC write */ + ret = ctrl->ops->reg_read64 (ctrl,NVME_REG_CAP , &ctrl->cap); +if (ret) +return ret; + + timeout =NVME_CAP_TIMEOUT (ctrl->cap); +if (ctrl->cap &NVME_CAP_CRMS_CRWMS ) { +u32 crto, ready_timeout; + + ret = ctrl->ops->reg_read32 (ctrl,NVME_REG_CRTO , &crto); +if (ret) { +dev_err (ctrl->device,"Reading CRTO failed (%d)\n" , + ret); +return ret; + } + +/* +* CRTO should always be greater or equal to CAP.TO, but some +* devices are known to get this wrong. Use the larger of the +* two values. +*/ +if (ctrl->ctrl_config &NVME_CC_CRIME ) + ready_timeout =NVME_CRTO_CRIMT (crto); +else + ready_timeout =NVME_CRTO_CRWMT (crto); + +if (ready_timeout < timeout) +dev_warn_once (ctrl->device,"bad crto:%x cap:%llx\n" , + crto, ctrl->cap); +else + timeout = ready_timeout; + } + ctrl->ctrl_config |=NVME_CC_ENABLE ; ret = ctrl->ops->reg_write32 (ctrl,NVME_REG_CC , ctrl->ctrl_config);if (ret)
Greg Kroah-Hartman
maintainerPATCH 115/139 md: Put the right device in md_seq_next
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mariusz Tkaczyk <[email protected]>
commit c8870379a21fbd9ad14ca36204ccfbe9d25def43 upstream.
If there are multiple arrays in system and one mddevice is marked with MD_DELETED and md_seq_next() is called in the middle of removal then it _get()s proper device but it may _put() deleted one. As a result, active counter may never be zeroed for mddevice and it cannot be removed.
Put the device which has been _get with previous md_seq_next() call.
--- drivers/md/md.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/md/md.c +1 -1
@@ -8228,7 +8228,7 @@ static void *md_seq_next(struct seq_filespin_unlock (&all_mddevs_lock);if (to_put) -mddev_put (mddev); +mddev_put (to_put);return next_mddev; }
Greg Kroah-Hartman
maintainerPATCH 106/139 x86/purgatory: Remove LTO flags
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Song Liu <[email protected]>
[ Upstream commit 75b2f7e4c9e0fd750a5a27ca9736d1daa7a3762a ]
-flto* implies -ffunction-sections. With LTO enabled, ld.lld generates multiple .text sections for purgatory.ro:
$ readelf -S purgatory.ro | grep " .text"
[ 1] .text PROGBITS 0000000000000000 00000040
[ 7] .text.purgatory PROGBITS 0000000000000000 000020e0
[ 9] .text.warn PROGBITS 0000000000000000 000021c0
[13] .text.sha256_upda PROGBITS 0000000000000000 000022f0
[15] .text.sha224_upda PROGBITS 0000000000000000 00002be0
[17] .text.sha256_fina PROGBITS 0000000000000000 00002bf0
[19] .text.sha224_fina PROGBITS 0000000000000000 00002cc0This causes WARNING from kexec_purgatory_setup_sechdrs():
WARNING: CPU: 26 PID: 110894 at kernel/kexec_file.c:919 kexec_load_purgatory+0x37f/0x390
Fix this by disabling LTO for purgatory.
[ AFAICT, x86 is the only arch that supports LTO and purgatory. ]
We could also fix this with an explicit linker script to rejoin .text.* sections back into .text. However, given the benefit of LTOing purgatory is small, simply disable the production of more .text.* sections for now.
--- arch/x86/purgatory/Makefile | 4 ++++ 1 file changed, 4 insertions(+)
arch/x86/purgatory/Makefile +4 -0
@@ -19,6 +19,10 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS # optimization flags. KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS)) +# When LTO is enabled, llvm emits many text sections, which is not supported +# by kexec. Remove -flto=* flags. +KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_LTO),$(KBUILD_CFLAGS)) + # When linking purgatory.ro with -r unresolved symbols are not checked, # also link a purgatory.chk binary without -r to check for unresolved symbols. PURGATORY_LDFLAGS := -e purgatory_start -z nodefaultlib
Signature · 1 line
2.40.1
Greg Kroah-Hartman
maintainerPATCH 135/139 ext4: fix rec_len verify error
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shida Zhang <[email protected]>
commit 7fda67e8c3ab6069f75888f67958a6d30454a9f6 upstream.
With the configuration PAGE_SIZE 64k and filesystem blocksize 64k, a problem occurred when more than 13 million files were directly created under a directory:
EXT4-fs error (device xx): ext4_dx_csum_set:492: inode #xxxx: comm xxxxx: dir seems corrupt? Run e2fsck -D. EXT4-fs error (device xx): ext4_dx_csum_verify:463: inode #xxxx: comm xxxxx: dir seems corrupt? Run e2fsck -D. EXT4-fs error (device xx): dx_probe:856: inode #xxxx: block 8188: comm xxxxx: Directory index failed checksum
When enough files are created, the fake_dirent->reclen will be 0xffff. it doesn't equal to the blocksize 65536, i.e. 0x10000.
But it is not the same condition when blocksize equals to 4k. when enough files are created, the fake_dirent->reclen will be 0x1000. it equals to the blocksize 4k, i.e. 0x1000.
The problem seems to be related to the limitation of the 16-bit field when the blocksize is set to 64k.
To address this, helpers like ext4_rec_len_{from,to}_disk has already been introduced to complete the conversion between the encoded and the plain form of rec_len.
So fix this one by using the helper, and all the other in this file too.
--- fs/ext4/namei.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-)
fs/ext4/namei.c +15 -11
@@ -343,17 +343,17 @@ static struct ext4_dir_entry_tail *get_d struct buffer_head *bh) {struct ext4_dir_entry_tail *t; +int blocksize =EXT4_BLOCK_SIZE (inode->i_sb);#ifdef PARANOID struct ext4_dir_entry *d, *top; d = (struct ext4_dir_entry *)bh->b_data; top = (struct ext4_dir_entry *)(bh->b_data + - (EXT4_BLOCK_SIZE (inode->i_sb) - -sizeof (struct ext4_dir_entry_tail ))); -while (d < top && d->rec_len) + (blocksize -sizeof (struct ext4_dir_entry_tail ))); +while (d < top &&ext4_rec_len_from_disk (d->rec_len, blocksize)) d = (struct ext4_dir_entry *)(((void *)d) + -le16_to_cpu (d->rec_len)); +ext4_rec_len_from_disk (d->rec_len, blocksize));if (d != top)return NULL ;
@@ -364,7 +364,8 @@ static struct ext4_dir_entry_tail *get_d#endif if (t->det_reserved_zero1 || -le16_to_cpu (t->det_rec_len) !=sizeof (struct ext4_dir_entry_tail ) || + (ext4_rec_len_from_disk (t->det_rec_len, blocksize) != +sizeof (struct ext4_dir_entry_tail )) || t->det_reserved_zero2 || t->det_reserved_ft !=EXT4_FT_DIR_CSUM )return NULL ;
@@ -445,13 +446,14 @@ static struct dx_countlimit *get_dx_counstruct ext4_dir_entry *dp;struct dx_root_info *root;int count_offset; +int blocksize =EXT4_BLOCK_SIZE (inode->i_sb); +unsigned int rlen =ext4_rec_len_from_disk (dirent->rec_len, blocksize); -if (le16_to_cpu (dirent->rec_len) ==EXT4_BLOCK_SIZE (inode->i_sb)) +if (rlen == blocksize) count_offset =8 ; -else if (le16_to_cpu (dirent->rec_len) ==12 ) { +else if (rlen ==12 ) { dp = (struct ext4_dir_entry *)(((void *)dirent) +12 ); -if (le16_to_cpu (dp->rec_len) != -EXT4_BLOCK_SIZE (inode->i_sb) -12 ) +if (ext4_rec_len_from_disk (dp->rec_len, blocksize) != blocksize -12 )return NULL ; root = (struct dx_root_info *)(((void *)dp +12 )); if (root->reserved_zero ||
@@ -1315,6 +1317,7 @@ static int dx_make_map(struct inode *dirunsigned int buflen = bh->b_size;char *base = bh->b_data;struct dx_hash_info h = *hinfo; +int blocksize =EXT4_BLOCK_SIZE (dir->i_sb);if (ext4_has_metadata_csum (dir->i_sb)) buflen -=sizeof (struct ext4_dir_entry_tail );
@@ -1335,11 +1338,12 @@ static int dx_make_map(struct inode *dir map_tail--; map_tail->hash = h.hash; map_tail->offs = ((char *) de - base)>>2 ; - map_tail->size =le16_to_cpu (de->rec_len); + map_tail->size =ext4_rec_len_from_disk (de->rec_len, + blocksize); count++;cond_resched (); } - de =ext4_next_entry (de, dir->i_sb->s_blocksize); + de =ext4_next_entry (de, blocksize); }return count; }
Greg Kroah-Hartman
maintainerPATCH 136/139 drm/amd/display: fix the white screen issue when >= 64GB DRAM
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yifan Zhang <[email protected]>
commit ef064187a9709393a981a56cce1e31880fd97107 upstream.
Dropping bit 31:4 of page table base is wrong, it makes page table base points to wrong address if phys addr is beyond 64GB; dropping page_table_start/end bit 31:4 is unnecessary since dcn20_vmid_setup will do that. Also, while we are at it, cleanup the assignments using upper_32_bits()/lower_32_bits() and AMDGPU_GPU_PAGE_SHIFT.
--- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +9 -5
@@ -1265,11 +1265,15 @@ static void mmhub_read_system_context(st pt_base =amdgpu_gmc_pd_addr (adev->gart.bo); - page_table_start.high_part = (u32)(adev->gmc.gart_start >>44 ) &0xF ; - page_table_start.low_part = (u32)(adev->gmc.gart_start >>12 ); - page_table_end.high_part = (u32)(adev->gmc.gart_end >>44 ) &0xF ; - page_table_end.low_part = (u32)(adev->gmc.gart_end >>12 ); - page_table_base.high_part =upper_32_bits (pt_base) &0xF ; + page_table_start.high_part =upper_32_bits (adev->gmc.gart_start >> +AMDGPU_GPU_PAGE_SHIFT ); + page_table_start.low_part =lower_32_bits (adev->gmc.gart_start >> +AMDGPU_GPU_PAGE_SHIFT ); + page_table_end.high_part =upper_32_bits (adev->gmc.gart_end >> +AMDGPU_GPU_PAGE_SHIFT ); + page_table_end.low_part =lower_32_bits (adev->gmc.gart_end >> +AMDGPU_GPU_PAGE_SHIFT ); + page_table_base.high_part =upper_32_bits (pt_base); page_table_base.low_part =lower_32_bits (pt_base); pa_config->system_aperture.start_addr = (uint64_t )logical_addr_low <<18 ;
Greg Kroah-Hartman
maintainerPATCH 137/139 Revert "memcg: drop kmem.limit_in_bytes"
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit 21ef9e11205fca43785eecf7d4a99528d4de5701 which is commit 86327e8eb94c52eca4f93cfece2e29d1bf52acbf upstream.
It breaks existing runc systems, as the tool always thinks the file should be present.
--- Documentation/admin-guide/cgroup-v1/memory.rst | 2 ++ mm/memcontrol.c | 10 ++++++++++ 2 files changed, 12 insertions(+)
Documentation/admin-guide/cgroup-v1/memory.rst +2 -0
@@ -91,6 +91,8 @@ Brief summary of control files. memory.oom_control set/show oom controls. memory.numa_stat show the number of memory usage per numa node + memory.kmem.limit_in_bytes This knob is deprecated and writing to + it will return -ENOTSUPP. memory.kmem.usage_in_bytes show current kernel memory allocation memory.kmem.failcnt show the number of kernel memory usage hits limits
mm/memcontrol.c +10 -0
@@ -3841,6 +3841,10 @@ static ssize_t mem_cgroup_write(struct kcase _MEMSWAP: ret =mem_cgroup_resize_max (memcg, nr_pages, true);break ; +case _KMEM: +/* kmem.limit_in_bytes is deprecated. */ + ret = -EOPNOTSUPP ; +break ;case _TCP: ret =memcg_update_tcp_max (memcg, nr_pages);break ;
@@ -5052,6 +5056,12 @@ static struct cftype mem_cgroup_legacy_f },#endif { + .name = "kmem.limit_in_bytes", + .private = MEMFILE_PRIVATE(_KMEM, RES_LIMIT), + .write = mem_cgroup_write, + .read_u64 = mem_cgroup_read_u64, + }, + { .name = "kmem.usage_in_bytes", .private = MEMFILE_PRIVATE(_KMEM, RES_USAGE), .read_u64 = mem_cgroup_read_u64,
Greg Kroah-Hartman
maintainerPATCH 138/139 drm/amdgpu: fix amdgpu_cs_p1_user_fence
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian König <[email protected]>
commit 35588314e963938dfdcdb792c9170108399377d6 upstream.
The offset is just 32bits here so this can potentially overflow if somebody specifies a large value. Instead reduce the size to calculate the last possible offset.
The error handling path incorrectly drops the reference to the user fence BO resulting in potential reference count underflow.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +5 -15
@@ -120,7 +120,6 @@ static int amdgpu_cs_p1_user_fence(strucstruct drm_gem_object *gobj;struct amdgpu_bo *bo;unsigned long size; -int r; gobj =drm_gem_object_lookup (p->filp, data->handle);if (gobj ==NULL )
@@ -132,23 +131,14 @@ static int amdgpu_cs_p1_user_fence(strucdrm_gem_object_put (gobj); size =amdgpu_bo_size (bo); -if (size !=PAGE_SIZE || (data->offset +8 ) > size) { - r = -EINVAL ; - goto error_unref; - } - -if (amdgpu_ttm_tt_get_usermm (bo->tbo.ttm)) { - r = -EINVAL ; - goto error_unref; - } +if (size !=PAGE_SIZE || data->offset > (size -8 )) +return -EINVAL ; - *offset = data->offset; +if (amdgpu_ttm_tt_get_usermm (bo->tbo.ttm)) +return -EINVAL ; + *offset = data->offset;return 0 ; - -error_unref: -amdgpu_bo_unref (&bo); -return r; } static int amdgpu_cs_p1_bo_handles(struct amdgpu_cs_parser *p,
Greg Kroah-Hartman
maintainerPATCH 139/139 net/sched: Retire rsvp classifier
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jamal Hadi Salim <[email protected]>
commit 265b4da82dbf5df04bee5a5d46b7474b1aaf326a upstream.
The rsvp classifier has served us well for about a quarter of a century but has has not been getting much maintenance attention due to lack of known users.
--- net/sched/Kconfig | 28 net/sched/Makefile | 2 net/sched/cls_rsvp.c | 24 net/sched/cls_rsvp.h | 764 ---------- net/sched/cls_rsvp6.c | 24 tools/testing/selftests/tc-testing/tc-tests/filters/rsvp.json | 203 -- 6 files changed, 1045 deletions(-)
net/sched/Kconfig +0 -28
@@ -548,34 +548,6 @@ config CLS_U32_MARK help Say Y here to be able to use netfilter marks as u32 key. -config NET_CLS_RSVP - tristate "IPv4 Resource Reservation Protocol (RSVP)" - select NET_CLS - help - The Resource Reservation Protocol (RSVP) permits end systems to - request a minimum and maximum data flow rate for a connection; this - is important for real time data such as streaming sound or video. - - Say Y here if you want to be able to classify outgoing packets based - on their RSVP requests. - - To compile this code as a module, choose M here: the - module will be called cls_rsvp. - -config NET_CLS_RSVP6 - tristate "IPv6 Resource Reservation Protocol (RSVP6)" - select NET_CLS - help - The Resource Reservation Protocol (RSVP) permits end systems to - request a minimum and maximum data flow rate for a connection; this - is important for real time data such as streaming sound or video. - - Say Y here if you want to be able to classify outgoing packets based - on their RSVP requests and you are using the IPv6 protocol. - - To compile this code as a module, choose M here: the - module will be called cls_rsvp6. - config NET_CLS_FLOW tristate "Flow classifier" select NET_CLS
net/sched/Makefile +0 -2
@@ -69,8 +69,6 @@ obj-$(CONFIG_NET_SCH_TAPRIO) += sch_tapr obj-$(CONFIG_NET_CLS_U32) += cls_u32.o obj-$(CONFIG_NET_CLS_ROUTE4) += cls_route.o obj-$(CONFIG_NET_CLS_FW) += cls_fw.o -obj-$(CONFIG_NET_CLS_RSVP) += cls_rsvp.o -obj-$(CONFIG_NET_CLS_RSVP6) += cls_rsvp6.o obj-$(CONFIG_NET_CLS_BASIC) += cls_basic.o obj-$(CONFIG_NET_CLS_FLOW) += cls_flow.o obj-$(CONFIG_NET_CLS_CGROUP) += cls_cgroup.o
net/sched/cls_rsvp.c deleted +0 -24
@@ -1,24 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/* -* net/sched/cls_rsvp.c Special RSVP packet classifier for IPv4. -* -* Authors: Alexey Kuznetsov, <[email protected]> -*/ - -#include <linux/module.h> -#include <linux/types.h> -#include <linux/kernel.h> -#include <linux/string.h> -#include <linux/errno.h> -#include <linux/skbuff.h> -#include <net/ip.h> -#include <net/netlink.h> -#include <net/act_api.h> -#include <net/pkt_cls.h> - -#define RSVP_DST_LEN 1 -#define RSVP_ID "rsvp" -#define RSVP_OPS cls_rsvp_ops - -#include "cls_rsvp.h" -MODULE_LICENSE ("GPL" );
net/sched/cls_rsvp.h deleted +0 -764
764 lines not on this page · raw message
net/sched/cls_rsvp6.c deleted +0 -24
@@ -1,24 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/* -* net/sched/cls_rsvp6.c Special RSVP packet classifier for IPv6. -* -* Authors: Alexey Kuznetsov, <[email protected]> -*/ - -#include <linux/module.h> -#include <linux/types.h> -#include <linux/kernel.h> -#include <linux/string.h> -#include <linux/errno.h> -#include <linux/ipv6.h> -#include <linux/skbuff.h> -#include <net/act_api.h> -#include <net/pkt_cls.h> -#include <net/netlink.h> - -#define RSVP_DST_LEN 4 -#define RSVP_ID "rsvp6" -#define RSVP_OPS cls_rsvp6_ops - -#include "cls_rsvp.h" -MODULE_LICENSE ("GPL" );
tools/testing/selftests/tc-testing/tc-tests/filters/rsvp.json deleted +0 -203
203 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 134/139 scsi: pm8001: Setup IRQs on resume
In reply to Greg Kroah-Hartman6.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Damien Le Moal <[email protected]>
commit c91774818b041ed290df29fb1dc0725be9b12e83 upstream.
The function pm8001_pci_resume() only calls pm8001_request_irq() without calling pm8001_setup_irq(). This causes the IRQ allocation to fail, which leads all drives being removed from the system.
Fix this issue by integrating the code for pm8001_setup_irq() directly inside pm8001_request_irq() so that MSI-X setup is performed both during normal initialization and resume operations.
--- drivers/scsi/pm8001/pm8001_init.c | 51 ++++++++++++-------------------------- 1 file changed, 17 insertions(+), 34 deletions(-)
drivers/scsi/pm8001/pm8001_init.c +17 -34
@@ -274,7 +274,6 @@ static irqreturn_t pm8001_interrupt_handreturn ret; } -static u32 pm8001_setup_irq (struct pm8001_hba_info *pm8001_ha);static u32 pm8001_request_irq (struct pm8001_hba_info *pm8001_ha);/**
@@ -295,13 +294,6 @@ static int pm8001_alloc(struct pm8001_hbpm8001_dbg (pm8001_ha,INIT ,"pm8001_alloc: PHY:%x\n" , pm8001_ha->chip->n_phy); -/* Setup Interrupt */ - rc =pm8001_setup_irq (pm8001_ha); -if (rc) { -pm8001_dbg (pm8001_ha,FAIL , -"pm8001_setup_irq failed [ret: %d]\n" , rc); - goto err_out; - }/* Request Interrupt */ rc =pm8001_request_irq (pm8001_ha);if (rc)
@@ -1021,47 +1013,38 @@ static u32 pm8001_request_msix(struct pm }#endif -static u32 pm8001_setup_irq (struct pm8001_hba_info *pm8001_ha) -{ -struct pci_dev *pdev; - - pdev = pm8001_ha->pdev; - -#ifdef PM8001_USE_MSIX -if (pci_find_capability (pdev,PCI_CAP_ID_MSIX )) -return pm8001_setup_msix (pm8001_ha); -pm8001_dbg (pm8001_ha,INIT ,"MSIX not supported!!!\n" ); -#endif -return 0 ; -} -/** * pm8001_request_irq - register interrupt * @pm8001_ha: our ha struct. */ static u32 pm8001_request_irq (struct pm8001_hba_info *pm8001_ha) { -struct pci_dev *pdev; +struct pci_dev *pdev = pm8001_ha->pdev; +#ifdef PM8001_USE_MSIX int rc; - pdev = pm8001_ha->pdev; +if (pci_find_capability (pdev,PCI_CAP_ID_MSIX )) { + rc =pm8001_setup_msix (pm8001_ha); +if (rc) { +pm8001_dbg (pm8001_ha,FAIL , +"pm8001_setup_irq failed [ret: %d]\n" , rc); +return rc; + } -#ifdef PM8001_USE_MSIX -if (pdev->msix_cap &&pci_msi_enabled ()) -return pm8001_request_msix (pm8001_ha); -else { -pm8001_dbg (pm8001_ha,INIT ,"MSIX not supported!!!\n" ); - goto intx; +if (pdev->msix_cap &&pci_msi_enabled ()) +return pm8001_request_msix (pm8001_ha); } + +pm8001_dbg (pm8001_ha,INIT ,"MSIX not supported!!!\n" );#endif -intx:/* initialize the INT-X interrupt */ pm8001_ha->irq_vector[0 ].irq_id =0 ; pm8001_ha->irq_vector[0 ].drv_inst = pm8001_ha; - rc =request_irq (pdev->irq, pm8001_interrupt_handler_intx,IRQF_SHARED , - pm8001_ha->name,SHOST_TO_SAS_HA (pm8001_ha->shost)); -return rc; + +return request_irq (pdev->irq, pm8001_interrupt_handler_intx, +IRQF_SHARED , pm8001_ha->name, +SHOST_TO_SAS_HA (pm8001_ha->shost)); }/**
Hello,
Quoted 5 lines
This is the start of the stable review cycle for the 6.1.55 release. There are 139 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Quoted 8 lines
Responses should be made by Fri, 22 Sep 2023 11:28:09 +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.55-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.1.y
and the diffstat can be found below.
This rc kernel passes DAMON functionality test[1] on my test machine. Attaching the test results summary below. Please note that I retrieved the kernel from linux-stable-rc tree[2].
[1] https://github.com/awslabs/damon-tests/tree/next/corr
[2] d5ace918366e ("Linux 6.1.55-rc1")
Thanks,
SJ
[...]
---
ok 1 selftests: damon: debugfs_attrs.sh
ok 2 selftests: damon: debugfs_schemes.sh
ok 3 selftests: damon: debugfs_target_ids.sh
ok 4 selftests: damon: debugfs_empty_targets.sh
ok 5 selftests: damon: debugfs_huge_count_read_write.sh
ok 6 selftests: damon: debugfs_duplicate_context_creation.sh
ok 7 selftests: damon: sysfs.sh
ok 1 selftests: damon-tests: kunit.sh
ok 2 selftests: damon-tests: huge_count_read_write.sh
ok 3 selftests: damon-tests: buffer_overflow.sh
ok 4 selftests: damon-tests: rm_contexts.sh
ok 5 selftests: damon-tests: record_null_deref.sh
ok 6 selftests: damon-tests: dbgfs_target_ids_read_before_terminate_race.sh ok 7 selftests: damon-tests: dbgfs_target_ids_pid_leak.sh
ok 8 selftests: damon-tests: damo_tests.sh
ok 9 selftests: damon-tests: masim-record.sh
ok 10 selftests: damon-tests: build_i386.sh
ok 11 selftests: damon-tests: build_m68k.sh
ok 12 selftests: damon-tests: build_arm64.sh
ok 13 selftests: damon-tests: build_i386_idle_flag.sh
ok 14 selftests: damon-tests: build_i386_highpte.sh
ok 15 selftests: damon-tests: build_nomemcg.sh
[33m
[92mPASS [39m
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.55-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.1.y
and the diffstat can be found below.thanks,
greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels, build tested on BMIPS_GENERIC:
Signature · 1 line
Florian
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.55-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.1.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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.
Successfully compiled and installed bindeb-pkgs on my computer (Acer Aspire E15, Intel Core i3 Haswell). No noticeable regressions.
Signature · 1 line
An old man doll... just what I always wanted! - Clara
Hi Greg
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.55-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.1.y
and the diffstat can be found below.thanks,
greg k-h
6.1.55-rc1 tested.
Build successfully completed.
Boot successfully completed.
No dmesg regressions.
Video output normal.
Sound output normal.
Lenovo ThinkPad X1 Carbon Gen10(Intel i7-1260P(x86_64) arch linux)
Thanks
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.55-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.1.y
and the diffstat can be found below.thanks,
greg k-h
Built and booted successfully on RISC-V RV64 (HiFive Unmatched).
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.55-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.1.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
## Build
* kernel: 6.1.55-rc1
* git: https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable-rc
* git branch: linux-6.1.y
* git commit: d5ace918366ee2fcf06842d77abec8a170c759aa
* git describe: v6.1.54-140-gd5ace918366e
* test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.1.y/build/v6.1.54-140-gd5ace918366e
## Test Regressions (compared to v6.1.54)
## Metric Regressions (compared to v6.1.54)
## Test Fixes (compared to v6.1.54)
## Metric Fixes (compared to v6.1.54)
## Test result summary
total: 125579, pass: 106421, fail: 2477, skip: 16508, xfail: 173
## Build Summary
* arc: 5 total, 5 passed, 0 failed
* arm: 151 total, 150 passed, 1 failed
* arm64: 53 total, 51 passed, 2 failed
* i386: 41 total, 39 passed, 2 failed
* mips: 30 total, 28 passed, 2 failed
* parisc: 4 total, 4 passed, 0 failed
* powerpc: 38 total, 36 passed, 2 failed
* riscv: 16 total, 14 passed, 2 failed
* s390: 16 total, 15 passed, 1 failed
* sh: 14 total, 12 passed, 2 failed
* sparc: 8 total, 8 passed, 0 failed
* x86_64: 46 total, 43 passed, 3 failed
## Test suites summary
* boot
* kselftest-android
* kselftest-arm64
* kselftest-breakpoints
* kselftest-capabilities
* kselftest-cgroup
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-cpufreq
* kselftest-drivers-dma-buf
* kselftest-efivarfs
* kselftest-exec
* kselftest-filesystems
* kselftest-filesystems-binderfs
* kselftest-filesystems-epoll
* kselftest-firmware
* kselftest-fpu
* kselftest-ftrace
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-ir
* kselftest-kcmp
* kselftest-kexec
* kselftest-kvm
* kselftest-lib
* kselftest-membarrier
* kselftest-memfd
* kselftest-memory-hotplug
* kselftest-mincore
* kselftest-mount
* kselftest-mqueue
* kselftest-net
* kselftest-net-forwarding
* kselftest-net-mptcp
* kselftest-netfilter
* kselftest-nsfs
* kselftest-openat2
* kselftest-pid_namespace
* kselftest-pidfd
* kselftest-proc
* kselftest-pstore
* kselftest-ptrace
* kselftest-rseq
* kselftest-rtc
* kselftest-seccomp
* kselftest-sigaltstack
* kselftest-size
* kselftest-splice
* kselftest-static_keys
* kselftest-sync
* kselftest-sysctl
* kselftest-tc-testing
* kselftest-timens
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user
* kselftest-user_events
* kselftest-vDSO
* kselftest-vm
* kselftest-watchdog
* kselftest-x86
* kselftest-zram
* kunit
* kvm-unit-tests
* libgpiod
* log-parser-boot
* log-parser-test
* ltp-cap_bounds
* ltp-commands
* ltp-containers
* ltp-controllers
* ltp-cpuhotplug
* ltp-crypto
* ltp-cve
* ltp-dio
* ltp-fcntl-locktests
* ltp-filecaps
* ltp-fs
* ltp-fs_bind
* ltp-fs_perms_simple
* ltp-fsx
* ltp-hugetlb
* ltp-io
* ltp-ipc
* ltp-math
* ltp-mm
* ltp-nptl
* ltp-pty
* ltp-sched
* ltp-securebits
* ltp-smoke
* ltp-syscalls
* ltp-tracing
* network-basic-tests
* perf
* rcutorture
* v4l2-compliance
--
Linaro LKFT
https://lkft.linaro.org
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +0000. Anything received after that time might be too late.
Build results:
total: 157 pass: 156 fail: 1 Failed builds: powerpc:ppc32_allmodconfig Qemu test results: total: 529 pass: 529 fail: 0
Building powerpc:ppc32_allmodconfig ... failed
--------------
Error log:drivers/usb/gadget/udc/fsl_qe_udc.c: In function 'ch9getstatus':drivers/usb/gadget/udc/fsl_qe_udc.c:1964:17: error: ISO C90 forbids mixed declarations and code
Guenter
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Quoted 8 lines
Responses should be made by Fri, 22 Sep 2023 11:28:09 +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.55-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.1.y
and the diffstat can be found below.
For RCU,
thanks,
- Joel
Quoted 615 lines
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:Greg Kroah-Hartman <[email protected]>
Linux 6.1.55-rc1Jamal Hadi Salim <[email protected]>
net/sched: Retire rsvp classifierChristian König <[email protected]>
drm/amdgpu: fixamdgpu_cs_p1_user_fenceGreg Kroah-Hartman <[email protected]>
Revert "memcg: drop kmem.limit_in_bytes"Yifan Zhang <[email protected]>
drm/amd/display: fix the white screen issue when >= 64GB DRAMShida Zhang <[email protected]>
ext4: fixrec_lenverify errorDamien Le Moal <[email protected]>
scsi: pm8001: Setup IRQs on resumeJunxiao Bi <[email protected]>
scsi:megaraid_sas: Fix deadlock on firmware crashdumpSzuying Chen <[email protected]>
ata: libahci: clear pending interrupt statusNiklas Cassel <[email protected]>
ata: libata: disallow dev-initiated LPM transitions to unsupported statesTommy Huang <[email protected]>
i2c: aspeed: Reset the i2c controller when timeout occursSteven Rostedt (Google) <[email protected]>
tracefs: Add missing lockdown check totracefs_create_dir()Jeff Layton <[email protected]>
nfsd: fixchange_infoin NFSv4 RENAME repliesOndrej Mosnacek <[email protected]>
selinux: fix handling of empty opts inselinux_fs_context_submount()Steven Rostedt (Google) <[email protected]>
tracing: Have option files inc the trace array ref countSteven Rostedt (Google) <[email protected]>
tracing: Havecurrent_traceinc the trace array ref countSteven Rostedt (Google) <[email protected]>
tracing: Increase trace array ref count on enable and filter filesSteven Rostedt (Google) <[email protected]>
tracing: Have event inject files inc the trace array ref countSteven Rostedt (Google) <[email protected]>
tracing: Havetracing_max_latencyinc the trace array ref countJosef Bacik <[email protected]>
btrfs: check forBTRFS_FS_ERRORin pending ordered assertFilipe Manana <[email protected]>
btrfs: release path before inode lookup during the ino lookup ioctlQu Wenruo <[email protected]>
btrfs: fix a compilation error if DEBUG is defined inbtree_dirty_folioFilipe Manana <[email protected]>
btrfs: fix lockdep splat and potential deadlock after failure running delayed itemsJens Axboe <[email protected]>
dm: don't attempt to queue IO under RCU protectionHamza Mahfooz <[email protected]>
Revert "drm/amd: Disable S/G for APUs when 64GB or more host memory"Mariusz Tkaczyk <[email protected]>
md: Put the right device inmd_seq_nextKeith Busch <[email protected]>
nvme: avoid bogus CRTO valuesPavel Begunkov <[email protected]>
io_uring/net: fix iter retargeting for selected bufAmir Goldstein <[email protected]>
ovl: fix incorrectfdput()on aio completionAmir Goldstein <[email protected]>
ovl: fix failed copyup of fileattr on a symlinkChristian Brauner <[email protected]>
attr: block mode changes of symlinksTrond Myklebust <[email protected]>
Revert "SUNRPC: Fail faster on bad verifier"Nigel Croxon <[email protected]>
md/raid1: fix error: ISO C90 forbids mixed declarationsArnd Bergmann <[email protected]>
samples/hw_breakpoint: fix building without module unloadingSong Liu <[email protected]>
x86/purgatory: Remove LTO flagsKirill A. Shutemov <[email protected]>
x86/boot/compressed: Reserve more memory for page tablesLukas Wunner <[email protected]>
panic: Reenable preemption in WARN slowpathJinjie Ruan <[email protected]>
scsi: lpfc: Fix the NULL vsIS_ERR()bug fordebugfs_create_file()David Disseldorp <[email protected]>
scsi: target: core: Fixtarget_cmd_counterleakSong Shuai <[email protected]>
riscv: kexec: Align the kexeced kernel entryPeter Zijlstra <[email protected]>
x86/ibt: Suppress spurious ENDBRMasami Hiramatsu (Google) <[email protected]>
selftests: tracing: Fix to unmount tracefs for recovering environmentJinjie Ruan <[email protected]>
scsi: qla2xxx: Fix NULL vsIS_ERR()bug fordebugfs_create_dir()Jinjie Ruan <[email protected]>
drm: gm12u320: Fix the timeout usage forusb_bulk_msg()Varun Prakash <[email protected]>
nvmet-tcp: pass iov_len instead of sg->length to bvec_set_page()Christoph Hellwig <[email protected]>
nvmet: usebvec_set_pageto initialize bvecsChristoph Hellwig <[email protected]>
block: factor out abvec_set_pagehelperAnand Jain <[email protected]>
btrfs: compare the correct fsid/metadata_uuid inbtrfs_validate_superAnand Jain <[email protected]>
btrfs: add a helper to read the superblockmetadata_uuidTiezhu Yang <[email protected]>
MIPS: Use "grep -E" instead of "egrep"Ekansh Gupta <[email protected]>
misc: fastrpc: Fix incorrect DMA mapping unmap requestDmitry Osipenko <[email protected]>
misc: fastrpc: Prepare to dynamic dma-buf locking specificationDmitry Osipenko <[email protected]>
dma-buf: Add unlocked variant of attachment-mapping functionsJohn Ogness <[email protected]>
printk: Consolidate console deferred printingJohn Ogness <[email protected]>
printk: Keep non-panic-CPUs out of console lockRob Clark <[email protected]>
interconnect: Fix locking for runpm vs reclaimZhen Lei <[email protected]>
kobject: Add sanity check for kset->kobj.ktype in kset_register()Sakari Ailus <[email protected]>
media: pci: ipu3-cio2: Initialise timing struct to avoid a compiler warningXu Yang <[email protected]>
usb: chipidea: add workaround for chipidea PEC bugXu Yang <[email protected]>
usb: ehci: add workaround for chipidea PORTSC.PEC bugBaoquan He <[email protected]>
misc: open-dice: makeOPEN_DICEdepend onHAS_IOMEMChristophe Leroy <[email protected]>
serial:cpm_uart: Avoid suspicious lockingKonstantin Shelekhin <[email protected]>
scsi: target: iscsi: Fix buffer overflow inlio_target_nacl_info_show()Chenyuan Mi <[email protected]>
tools: iio:iio_generic_buffer: Fix some integer type and calculationMa Ke <[email protected]>
usb: gadget:fsl_qe_udc: validate endpoint index for ch9 udcXiaolei Wang <[email protected]>
usb: cdns3: Put the cdns set active part outside the spin lockHans Verkuil <[email protected]>
media: pci: cx23885: replace BUG with error returnHans Verkuil <[email protected]>
media: tuners: qt1010: replaceBUG_ONwith a regular errorJustin Tee <[email protected]>
scsi: lpfc: Abort outstanding ELS cmds when mailbox timeout error is detectedZhang Shurong <[email protected]>
media: dvb-usb-v2: gl861: Fix null-ptr-deref in gl861_i2c_master_xferZhang Shurong <[email protected]>
media: az6007: Fix null-ptr-deref in az6007_i2c_xfer()Zhang Shurong <[email protected]>
media: anysee: fix null-ptr-deref inanysee_master_xferZhang Shurong <[email protected]>
media: af9005: Fix null-ptr-deref in af9005_i2c_xferZhang Shurong <[email protected]>
media: dw2102: Fix null-ptr-deref in dw2102_i2c_transfer()Zhang Shurong <[email protected]>
media: dvb-usb-v2: af9035: Fix null-ptr-deref in af9035_i2c_master_xferLu Hongfei <[email protected]>
media: mdp3: Fix resource leaks inof_find_device_by_nodeYong-Xuan Wang <[email protected]>
PCI: fu740: Set the number of MSI vectorsNirmal Patel <[email protected]>
PCI: vmd: Disable bridge window for domain resetruanjinjie <[email protected]>
powerpc/pseries: fix possible memory leak inibmebus_bus_init()Mårten Lindahl <[email protected]>
ARM: 9317/1: kexec: Make smp stop calls asynchronousMark Brown <[email protected]>
PCI: dwc: Provide deinit callback for i.MXLiu Shixin via Jfs-discussion <[email protected]>
jfs: fix invalid free of JFS_IP(ipimap)->i_imap in diUnmountAndrew Kanner <[email protected]>
fs/jfs: prevent double-free indbUnmount()after failedjfs_remount()Georg Ottinger <[email protected]>
ext2: fix datatype of block number inext2_xattr_set2()Zhang Shurong <[email protected]>
md: raid1: fix potential OOB inraid1_remove_disk()Tony Lindgren <[email protected]>
bus: ti-sysc: Configure uart quirks for k3 SoCAngeloGioacchino Del Regno <[email protected]>
drm/mediatek: dp: Change logging to dev formtk_dp_aux_transfer()Tuo Li <[email protected]>
drm/exynos: fix a possible null-pointer dereference due to data race inexynos_drm_crtc_atomic_disable()Leo Chen <[email protected]>
drm/amd/display: Blocking invalid 420 modes on HDMI TMDS for DCN314Leo Chen <[email protected]>
drm/amd/display: Blocking invalid 420 modes on HDMI TMDS for DCN31Austin Zheng <[email protected]>
drm/amd/display: Use DTBCLK as refclk instead of DPREFCLKPierre-Louis Bossart <[email protected]>
ALSA: hda: intel-dsp-cfg: add LunarLake supportUday M Bhat <[email protected]>
ASoC: Intel:sof_sdw: Update BT offload config for soundwire configPierre-Louis Bossart <[email protected]>
ASoC: SOF: topology: simplify code to prevent static analysis warningsLeo Ma <[email protected]>
drm/amd/display: Fix underflow issue on 175hz timingRong Tao <[email protected]>
samples/hw_breakpoint: Fix kernel BUG 'invalid opcode: 0000'Krzysztof Kozlowski <[email protected]>
arm64: dts: qcom: sm8250-edo: correct ramoops pmsg-sizeKrzysztof Kozlowski <[email protected]>
arm64: dts: qcom: sm8150-kumano: correct ramoops pmsg-sizeKrzysztof Kozlowski <[email protected]>
arm64: dts: qcom: sm6350: correct ramoops pmsg-sizeKrzysztof Kozlowski <[email protected]>
arm64: dts: qcom: sm6125-pdx201: correct ramoops pmsg-sizeRalph Campbell <[email protected]>
drm/edid: Add quirk for OSVR HDK 2.0Marek Vasut <[email protected]>
drm/bridge: tc358762: Instruct DSI host to generate HSE packetsHao Luo <[email protected]>
libbpf: Freebtf_vmlinuxwhen closingbpf_objectJohannes Berg <[email protected]>
wifi:mac80211_hwsim: drop short framesJohannes Berg <[email protected]>
wifi: mac80211: check for station first in client probeJohannes Berg <[email protected]>
wifi: cfg80211: ocb: don't leave if not joinedJohannes Berg <[email protected]>
wifi: cfg80211: reject auth/assoc to AP with our addressGONG, Ruiqi <[email protected]>
netfilter: ebtables: fix fortify warnings insize_entry_mwt()Johannes Berg <[email protected]>
wifi: mac80211: check S1G action frame sizeGONG, Ruiqi <[email protected]>
alx: fix OOB-read compiler warningGiulio Benetti <[email protected]>
mmc: sdhci-esdhc-imx: improveESDHC_FLAG_ERR010450Alexander Steffen <[email protected]>
tpm_tis: Resend command to recover from data transfer errorsEric Dumazet <[email protected]>
netlink: convert nlk->flags to atomic flagsYing Hsu <[email protected]>
Bluetooth: Fixhci_suspend_synccrashMark O'Donovan <[email protected]>
crypto: lib/mpi - avoid null pointer deref inmpi_cmp_ui()xu xin <[email protected]>
net/ipv4: return the real errno instead of-EINVALKuniyuki Iwashima <[email protected]>
net: Usesockaddr_storageforgetsockopt(SO_PEERNAME).John Watts <[email protected]>
can:sun4i_can: Add support for the Allwinner D1John Watts <[email protected]>
can:sun4i_can: Add acceptance register quirkDmitry Antipov <[email protected]>
wifi: wil6210: fix fortify warningsMatt Whitlock <[email protected]>
mt76: mt7921: don't assume adequate headroom for SDIO headersDmitry Antipov <[email protected]>
wifi: mwifiex: fix fortify warningDongliang Mu <[email protected]>
wifi: ath9k: fix printk specifierDmitry Antipov <[email protected]>
wifi: ath9k: fix fortify warningsWojciech Drewek <[email protected]>
ice: Don't tx before switchdev is fully configuredAzeem Shaikh <[email protected]>
crypto: lrw,xts - Replace strlcpy with strscpyJiri Pirko <[email protected]>
devlink: remove reload failed checks in params get/set callbacksZhangjin Wu <[email protected]>
selftests/nolibc: fix up kernel parameters supportMario Limonciello <[email protected]>
ACPI: x86: s2idle: Catch multipleACPI_TYPE_PACKAGEobjectsTomislav Novak <[email protected]>
hw_breakpoint: fix single-stepping when usingbpf_overflow_handlerXu Yang <[email protected]>
perf/imx_ddr: speed up overflow frequency of cycleYicong Yang <[email protected]>
perf/smmuv3: Enable HiSilicon Erratum 162001900 quirk for HIP08/09Jiri Slaby (SUSE) <[email protected]>
ACPI: video: Add backlight=native DMI quirk for Lenovo Ideapad Z470Paul E. McKenney <[email protected]>
scftorture: Forgive memory-allocation failure if KASANZqiang <[email protected]>
rcuscale: Movercu_scale_writer()schedule_timeout_uninterruptible()to_idle()Wander Lairson Costa <[email protected]>
kernel/fork: beware of__put_task_struct()calling contextAbhishek Mainkar <[email protected]>
ACPICA: AddAML_NO_OPERAND_RESOLVEflag to TimerWill Shiu <[email protected]>
locks: fix KASAN: use-after-free intrace_event_raw_event_filelock_lockQu Wenruo <[email protected]>
btrfs: output extra debug info if we failed to find an inline backrefFedor Pchelkin <[email protected]>
autofs: fix memory leak of waitqueues inautofs_catatonic_mode-------------
Diffstat:
Documentation/admin-guide/cgroup-v1/memory.rst | 2 + Documentation/arm64/silicon-errata.rst | 3 + Makefile | 4 +- arch/arm/kernel/hw_breakpoint.c | 8 +- arch/arm/kernel/machine_kexec.c | 14 +- .../dts/qcom/sm6125-sony-xperia-seine-pdx201.dts | 2 +- arch/arm64/boot/dts/qcom/sm6350.dtsi | 2 +- .../boot/dts/qcom/sm8150-sony-xperia-kumano.dtsi | 2 +- .../boot/dts/qcom/sm8250-sony-xperia-edo.dtsi | 2 +- arch/arm64/kernel/hw_breakpoint.c | 4 +- arch/mips/Makefile | 2 +- arch/mips/vdso/Makefile | 2 +- arch/powerpc/platforms/pseries/ibmebus.c | 1 + arch/riscv/kernel/elf_kexec.c | 8 +- arch/x86/boot/compressed/ident_map_64.c | 8 + arch/x86/include/asm/boot.h | 45 +- arch/x86/include/asm/linkage.h | 8 + arch/x86/purgatory/Makefile | 4 + block/bio-integrity.c | 7 +- block/bio.c | 12 +- crypto/lrw.c | 6 +- crypto/xts.c | 6 +- drivers/acpi/acpica/psopcode.c | 2 +- drivers/acpi/arm64/iort.c | 5 +- drivers/acpi/video_detect.c | 9 + drivers/acpi/x86/s2idle.c | 6 + drivers/ata/ahci.c | 9 + drivers/ata/libahci.c | 35 +- drivers/ata/libata-sata.c | 19 +- drivers/bus/ti-sysc.c | 2 + drivers/char/tpm/tpm_tis_core.c | 13 +- drivers/dma-buf/dma-buf.c | 53 ++ drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 - drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 18 +- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 26 - drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 19 +- drivers/gpu/drm/amd/display/dc/dcn32/dcn32_dccg.c | 3 +- .../amd/display/dc/dml/dcn31/display_mode_vba_31.c | 4 +- .../display/dc/dml/dcn314/display_mode_vba_314.c | 4 +- .../dc/dml/dcn32/display_mode_vba_util_32.c | 7 +- drivers/gpu/drm/bridge/tc358762.c | 2 +- drivers/gpu/drm/drm_edid.c | 1 + drivers/gpu/drm/exynos/exynos_drm_crtc.c | 5 +- drivers/gpu/drm/mediatek/mtk_dp.c | 6 +- drivers/gpu/drm/tiny/gm12u320.c | 10 +- drivers/i2c/busses/i2c-aspeed.c | 7 +- drivers/interconnect/core.c | 8 +- drivers/md/dm.c | 23 +- drivers/md/md.c | 2 +- drivers/md/raid1.c | 3 + drivers/media/pci/cx23885/cx23885-video.c | 2 +- drivers/media/pci/intel/ipu3/ipu3-cio2-main.c | 2 +- .../media/platform/mediatek/mdp3/mtk-mdp3-comp.c | 2 + drivers/media/tuners/qt1010.c | 11 +- drivers/media/usb/dvb-usb-v2/af9035.c | 14 +- drivers/media/usb/dvb-usb-v2/anysee.c | 2 +- drivers/media/usb/dvb-usb-v2/az6007.c | 8 + drivers/media/usb/dvb-usb-v2/gl861.c | 2 +- drivers/media/usb/dvb-usb/af9005.c | 5 + drivers/media/usb/dvb-usb/dw2102.c | 24 + drivers/misc/Kconfig | 1 + drivers/misc/fastrpc.c | 12 +- drivers/mmc/host/sdhci-esdhc-imx.c | 7 +- drivers/net/can/Kconfig | 4 +- drivers/net/can/sun4i_can.c | 22 +- drivers/net/ethernet/atheros/alx/ethtool.c | 5 +- drivers/net/ethernet/intel/ice/ice_eswitch.c | 3 + drivers/net/wireless/ath/ath9k/ahb.c | 4 +- drivers/net/wireless/ath/ath9k/mac.h | 6 +- drivers/net/wireless/ath/ath9k/pci.c | 4 +- drivers/net/wireless/ath/ath9k/xmit.c | 4 +- drivers/net/wireless/ath/wil6210/txrx.c | 2 +- drivers/net/wireless/ath/wil6210/txrx.h | 6 +- drivers/net/wireless/ath/wil6210/txrx_edma.c | 2 +- drivers/net/wireless/ath/wil6210/txrx_edma.h | 6 +- drivers/net/wireless/mac80211_hwsim.c | 7 +- drivers/net/wireless/marvell/mwifiex/tdls.c | 9 +- drivers/net/wireless/mediatek/mt76/mt7921/mac.c | 4 + drivers/nvme/host/core.c | 54 +- drivers/nvme/target/io-cmd-file.c | 10 +- drivers/nvme/target/tcp.c | 5 +- drivers/pci/controller/dwc/pci-imx6.c | 1 + drivers/pci/controller/dwc/pcie-fu740.c | 1 + drivers/pci/controller/vmd.c | 19 +- drivers/perf/arm_smmuv3_pmu.c | 46 +- drivers/perf/fsl_imx8_ddr_perf.c | 21 + drivers/scsi/lpfc/lpfc.h | 1 + drivers/scsi/lpfc/lpfc_debugfs.c | 14 +- drivers/scsi/lpfc/lpfc_els.c | 25 +- drivers/scsi/lpfc/lpfc_init.c | 20 +- drivers/scsi/lpfc/lpfc_sli.c | 8 +- drivers/scsi/megaraid/megaraid_sas.h | 2 +- drivers/scsi/megaraid/megaraid_sas_base.c | 21 +- drivers/scsi/pm8001/pm8001_init.c | 51 +- drivers/scsi/qla2xxx/qla_dfs.c | 6 +- drivers/target/iscsi/iscsi_target_configfs.c | 54 +- drivers/target/target_core_transport.c | 1 + drivers/tty/serial/cpm_uart/cpm_uart_core.c | 13 +- drivers/usb/cdns3/cdns3-plat.c | 3 +- drivers/usb/cdns3/cdnsp-pci.c | 3 +- drivers/usb/cdns3/core.c | 15 +- drivers/usb/cdns3/core.h | 7 +- drivers/usb/chipidea/ci.h | 1 + drivers/usb/chipidea/ci_hdrc_imx.c | 4 +- drivers/usb/chipidea/core.c | 2 + drivers/usb/chipidea/host.c | 1 + drivers/usb/gadget/udc/fsl_qe_udc.c | 2 + drivers/usb/host/ehci-hcd.c | 8 +- drivers/usb/host/ehci-hub.c | 10 +- drivers/usb/host/ehci.h | 10 + fs/attr.c | 20 +- fs/autofs/waitq.c | 3 +- fs/btrfs/delayed-inode.c | 19 +- fs/btrfs/disk-io.c | 22 +- fs/btrfs/extent-tree.c | 5 + fs/btrfs/ioctl.c | 8 +- fs/btrfs/ordered-data.c | 2 +- fs/btrfs/volumes.c | 8 + fs/btrfs/volumes.h | 1 + fs/ext2/xattr.c | 4 +- fs/ext4/namei.c | 26 +- fs/jfs/jfs_dmap.c | 1 + fs/jfs/jfs_imap.c | 1 + fs/locks.c | 2 +- fs/nfsd/nfs4proc.c | 4 +- fs/overlayfs/copy_up.c | 3 +- fs/overlayfs/file.c | 9 +- fs/tracefs/inode.c | 3 + include/linux/acpi_iort.h | 1 + include/linux/bvec.h | 15 + include/linux/dma-buf.h | 6 + include/linux/instruction_pointer.h | 5 + include/linux/libata.h | 4 + include/linux/perf_event.h | 22 +- include/linux/sched/task.h | 28 +- include/linux/usb/chipidea.h | 1 + include/uapi/linux/netfilter_bridge/ebtables.h | 14 +- io_uring/net.c | 5 + kernel/fork.c | 8 + kernel/panic.c | 1 + kernel/printk/printk.c | 80 ++- kernel/printk/printk_safe.c | 9 +- kernel/rcu/rcuscale.c | 2 +- kernel/scftorture.c | 6 +- kernel/trace/trace.c | 68 +- kernel/trace/trace.h | 2 + kernel/trace/trace_events.c | 6 +- kernel/trace/trace_events_inject.c | 3 +- lib/kobject.c | 5 + lib/mpi/mpi-cmp.c | 8 +- mm/memcontrol.c | 10 + net/bluetooth/hci_core.c | 4 + net/bridge/netfilter/ebtables.c | 3 +- net/core/sock.c | 6 +- net/devlink/leftover.c | 4 +- net/ipv4/ip_output.c | 2 +- net/mac80211/cfg.c | 15 +- net/mac80211/rx.c | 4 + net/netlink/af_netlink.c | 90 +-- net/netlink/af_netlink.h | 22 +- net/netlink/diag.c | 10 +- net/sched/Kconfig | 28 - net/sched/Makefile | 2 - net/sched/cls_rsvp.c | 24 - net/sched/cls_rsvp.h | 764 --------------------- net/sched/cls_rsvp6.c | 24 - net/sunrpc/clnt.c | 2 +- net/wireless/mlme.c | 13 + net/wireless/ocb.c | 3 + samples/hw_breakpoint/data_breakpoint.c | 4 +- security/selinux/hooks.c | 10 +- sound/hda/intel-dsp-config.c | 8 + sound/soc/intel/boards/sof_sdw.c | 4 +- sound/soc/sof/topology.c | 5 +- tools/iio/iio_generic_buffer.c | 17 +- tools/lib/bpf/libbpf.c | 1 + tools/testing/selftests/ftrace/ftracetest | 8 + tools/testing/selftests/nolibc/nolibc-test.c | 33 +- .../tc-testing/tc-tests/filters/rsvp.json | 203 ------ 179 files changed, 1227 insertions(+), 1609 deletions(-)
Jon Hunter
maintainerHi Greg,
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.55-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.1.y
and the diffstat can be found below.thanks,
greg k-h
I am seeing some suspend failures with this update ...
Test results for stable-v6.1:
11 builds: 11 pass, 0 fail
28 boots: 28 pass, 0 fail
130 tests: 124 pass, 6 failLinux version: 6.1.55-rc1-gd5ace918366e
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000,
tegra20-ventana, tegra210-p2371-2180,
tegra210-p3450-0000, tegra30-cardhu-a04Test failures: tegra124-jetson-tk1: pm-system-suspend.sh
tegra186-p2771-0000: pm-system-suspend.sh
tegra20-ventana: pm-system-suspend.sh
tegra30-cardhu-a04: pm-system-suspend.shBisect is underway.
Jon
Signature · 1 line
nvpublic
Jon Hunter
maintainerQuoted 34 lines · Jon Hunter
Hi Greg,
Quoted 14 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +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.55-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.Quoted 3 lines
thanks,
greg k-h
I am seeing some suspend failures with this update ...
Test results for stable-v6.1:
11 builds: 11 pass, 0 fail
28 boots: 28 pass, 0 fail
130 tests: 124 pass, 6 failLinux version: 6.1.55-rc1-gd5ace918366e
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000, tegra20-ventana, tegra210-p2371-2180, tegra210-p3450-0000, tegra30-cardhu-a04
Quoted 6 lines
Test failures: tegra124-jetson-tk1:
pm-system-suspend.sh
tegra186-p2771-0000:pm-system-suspend.sh
tegra20-ventana:pm-system-suspend.sh
tegra30-cardhu-a04:pm-system-suspend.shBisect is underway.
Bisect for this issue is also pointing to ...
Rob Clark <[email protected]>
interconnect: Fix locking for runpm vs reclaim
Looks like all the Tegra issues are related to this.
Jon
Signature · 1 line
nvpublic
Quoted 4 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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.
cheers, conor
Quoted 44 lines · Jon Hunter
Quoted 34 lines · Jon Hunter
Hi Greg,
Quoted 14 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +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.55-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.Quoted 3 lines
thanks,
greg k-h
I am seeing some suspend failures with this update ...
Test results for stable-v6.1:
11 builds: 11 pass, 0 fail
28 boots: 28 pass, 0 fail
130 tests: 124 pass, 6 failLinux version: 6.1.55-rc1-gd5ace918366e
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000, tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000, tegra20-ventana, tegra210-p2371-2180, tegra210-p3450-0000, tegra30-cardhu-a04Quoted 6 lines
Test failures: tegra124-jetson-tk1:
pm-system-suspend.sh
tegra186-p2771-0000:pm-system-suspend.sh
tegra20-ventana:pm-system-suspend.sh
tegra30-cardhu-a04:pm-system-suspend.shBisect is underway.
Quoted 7 lines
Bisect for this issue is also pointing to ...
Rob Clark <[email protected]>
interconnect: Fix locking for runpm vs reclaimLooks like all the Tegra issues are related to this.
This isn't surprising because upstream commit 136191703038 ("interconnect: Teach lockdep about icc_bw_lock order") silently fixes it without Fixes: tag. If you look into that patch you'll see that the the missing call to mutex_unlock() is added to icc_sync_state().
Guenter
Quoted 51 lines · Guenter Roeck
Quoted 49 lines · Jon Hunter
Quoted 34 lines · Jon Hunter
Hi Greg,
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.55-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.1.y
and the diffstat can be found below.thanks,
greg k-h
I am seeing some suspend failures with this update ...
Test results for stable-v6.1:
11 builds: 11 pass, 0 fail
28 boots: 28 pass, 0 fail
130 tests: 124 pass, 6 failLinux version: 6.1.55-rc1-gd5ace918366e Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000, tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000, tegra20-ventana, tegra210-p2371-2180, tegra210-p3450-0000, tegra30-cardhu-a04Quoted 6 lines
Test failures: tegra124-jetson-tk1:
pm-system-suspend.shtegra186-p2771-0000: pm-system-suspend.sh tegra20-ventana: pm-system-suspend.sh tegra30-cardhu-a04: pm-system-suspend.shBisect is underway.
Bisect for this issue is also pointing to ...
Rob Clark <[email protected]>
interconnect: Fix locking for runpm vs reclaim
Quoted 7 lines
Quoted 2 lines
Looks like all the Tegra issues are related to this.
This isn't surprising because upstream commit 136191703038 ("interconnect: Teach lockdep about
icc_bw_lockorder") silently fixes it without Fixes: tag. If you look into that patch you'll see that the the missing call tomutex_unlock()is added toicc_sync_state().
Oh, indeed, it looks like that hunk ended up in the wrong commit, and I didn't notice because both were merged at the same time
BR,
-R
Quoted 2 lines
Guenter
Greg Kroah-Hartman
maintainerQuoted 55 lines · Rob Clark
Quoted 54 lines · Guenter Roeck
Quoted 51 lines · Jon Hunter
Quoted 34 lines · Jon Hunter
Hi Greg,
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.55-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.1.y
and the diffstat can be found below.thanks,
greg k-h
I am seeing some suspend failures with this update ...
Test results for stable-v6.1:
11 builds: 11 pass, 0 fail
28 boots: 28 pass, 0 fail
130 tests: 124 pass, 6 failLinux version: 6.1.55-rc1-gd5ace918366e Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000, tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000, tegra20-ventana, tegra210-p2371-2180, tegra210-p3450-0000, tegra30-cardhu-a04Quoted 6 lines
Test failures: tegra124-jetson-tk1:
pm-system-suspend.shtegra186-p2771-0000: pm-system-suspend.sh tegra20-ventana: pm-system-suspend.sh tegra30-cardhu-a04: pm-system-suspend.shBisect is underway.
Bisect for this issue is also pointing to ...
Rob Clark <[email protected]>
interconnect: Fix locking for runpm vs reclaimLooks like all the Tegra issues are related to this.
Quoted 7 lines
Quoted 4 lines
This isn't surprising because upstream commit 136191703038 ("interconnect: Teach lockdep about
icc_bw_lockorder") silently fixes it without Fixes: tag. If you look into that patch you'll see that the the missing call tomutex_unlock()is added toicc_sync_state().Oh, indeed, it looks like that hunk ended up in the wrong commit, and I didn't notice because both were merged at the same time
Thanks, I've queued that fix up now as well.
greg k-h
Greg Kroah-Hartman
maintainerQuoted 17 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +0000. Anything received after that time might be too late.
Build results:
total: 157 pass: 156 fail: 1 Failed builds: powerpc:ppc32_allmodconfig Qemu test results: total: 529 pass: 529 fail: 0
Quoted 5 lines
Building powerpc:ppc32_allmodconfig ... failed
--------------
Error log:drivers/usb/gadget/udc/fsl_qe_udc.c: In function 'ch9getstatus':drivers/usb/gadget/udc/fsl_qe_udc.c:1964:17: error: ISO C90 forbids mixed declarations and code
Very odd that this only shows up on this one platform. I'll go fix it up, thanks for the report.
greg k-h
Greg Kroah-Hartman
maintainerQuoted 61 lines · Greg Kroah-Hartman
Quoted 60 lines · Rob Clark
Quoted 58 lines · Guenter Roeck
Quoted 44 lines · Jon Hunter
Quoted 34 lines · Jon Hunter
Hi Greg,
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.55-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.1.y
and the diffstat can be found below.thanks,
greg k-h
I am seeing some suspend failures with this update ...
Test results for stable-v6.1:
11 builds: 11 pass, 0 fail
28 boots: 28 pass, 0 fail
130 tests: 124 pass, 6 failLinux version: 6.1.55-rc1-gd5ace918366e Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000, tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000, tegra20-ventana, tegra210-p2371-2180, tegra210-p3450-0000, tegra30-cardhu-a04Quoted 6 lines
Test failures: tegra124-jetson-tk1:
pm-system-suspend.shtegra186-p2771-0000: pm-system-suspend.sh tegra20-ventana: pm-system-suspend.sh tegra30-cardhu-a04: pm-system-suspend.shBisect is underway.
Quoted 7 lines
Bisect for this issue is also pointing to ...
Rob Clark <[email protected]>
interconnect: Fix locking for runpm vs reclaimLooks like all the Tegra issues are related to this.
This isn't surprising because upstream commit 136191703038 ("interconnect: Teach lockdep about
icc_bw_lockorder") silently fixes it without Fixes: tag. If you look into that patch you'll see that the the missing call tomutex_unlock()is added toicc_sync_state().
Quoted 4 lines
Quoted 2 lines
Oh, indeed, it looks like that hunk ended up in the wrong commit, and I didn't notice because both were merged at the same time
Thanks, I've queued that fix up now as well.
And that breaks on older kernels, let me drop the interconnect patches completely and I'll wait for someone to submit a full, working, set for stable inclusion to add them back at a later time if wanted.
thanks,
greg k-h
Greg Kroah-Hartman
maintainerQuoted 62 lines · Greg Kroah-Hartman
Quoted 61 lines · Greg Kroah-Hartman
Quoted 60 lines · Rob Clark
Quoted 58 lines · Guenter Roeck
Quoted 44 lines · Jon Hunter
Quoted 34 lines · Jon Hunter
Hi Greg,
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.1.55 release. There are 139 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, 22 Sep 2023 11:28:09 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.1.55-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.1.y
and the diffstat can be found below.thanks,
greg k-h
I am seeing some suspend failures with this update ...
Test results for stable-v6.1:
11 builds: 11 pass, 0 fail
28 boots: 28 pass, 0 fail
130 tests: 124 pass, 6 failLinux version: 6.1.55-rc1-gd5ace918366e Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000, tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000, tegra20-ventana, tegra210-p2371-2180, tegra210-p3450-0000, tegra30-cardhu-a04Quoted 6 lines
Test failures: tegra124-jetson-tk1:
pm-system-suspend.shtegra186-p2771-0000: pm-system-suspend.sh tegra20-ventana: pm-system-suspend.sh tegra30-cardhu-a04: pm-system-suspend.shBisect is underway.
Quoted 7 lines
Bisect for this issue is also pointing to ...
Rob Clark <[email protected]>
interconnect: Fix locking for runpm vs reclaimLooks like all the Tegra issues are related to this.
This isn't surprising because upstream commit 136191703038 ("interconnect: Teach lockdep about
icc_bw_lockorder") silently fixes it without Fixes: tag. If you look into that patch you'll see that the the missing call tomutex_unlock()is added toicc_sync_state().
Quoted 8 lines
Quoted 4 lines
Quoted 2 lines
Oh, indeed, it looks like that hunk ended up in the wrong commit, and I didn't notice because both were merged at the same time
Thanks, I've queued that fix up now as well.
And that breaks on older kernels, let me drop the interconnect patches completely and I'll wait for someone to submit a full, working, set for stable inclusion to add them back at a later time if wanted.
Ok, I'll just do that for 5.10, and leave it for the others.
greg k-h