6.0.15-rc1 review
Subsystems (2)
Greg Kroah-Hartman
maintainercover 6.0.15-rc1 review
This is the start of the stable review cycle for the 6.0.15 release. There are 28 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 Wed, 21 Dec 2022 18:29:31 +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.0.15-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.0.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 6.0.15-rc1
Rasmus Villemoes <[email protected]>
net: loopback: use NET_NAME_PREDICTABLE for name_assign_type
Tiezhu Yang <[email protected]>
selftests: net: Use "grep -E" instead of "egrep"
Sungwoo Kim <[email protected]>
Bluetooth: L2CAP: Fix u8 overflow
Ferry Toth <[email protected]>
usb: ulpi: defer ulpi_register on ulpi_read_id timeout
Nikolaus Voss <[email protected]>
KEYS: encrypted: fix key instantiation with user-provided data
Shruthi Sanil <[email protected]>
usb: dwc3: pci: Update PCIe device ID for USB3 controller on CPU sub-system for Raptor Lake
Heikki Krogerus <[email protected]>
usb: typec: ucsi: Resume in separate work
Tony Nguyen <[email protected]>
igb: Initialize mailbox message for VF reset
Reka Norman <[email protected]>
xhci: Apply XHCI_RESET_TO_DEFAULT quirk to ADL-N
Andy Chi <[email protected]>
ALSA: hda/realtek: fix mute/micmute LEDs for a HP ProBook
Johan Hovold <[email protected]>
USB: serial: f81534: fix division by zero on line-speed change
Johan Hovold <[email protected]>
USB: serial: f81232: fix division by zero on line-speed change
Bruno Thomsen <[email protected]>
USB: serial: cp210x: add Kamstrup RF sniffer PIDs
Duke Xin <[email protected]>
USB: serial: option: add Quectel EM05-G modem
Szymon Heidrich <[email protected]>
usb: gadget: uvc: Prevent buffer overflow in setup handler
Jan Kara <[email protected]>
udf: Fix extending file within last block
Jan Kara <[email protected]>
udf: Do not bother looking for prealloc extents if i_lenExtents matches i_size
Jan Kara <[email protected]>
udf: Fix preallocation discarding at indirect extent boundary
Jan Kara <[email protected]>
udf: Discard preallocation before extending file with a hole
Jiri Olsa <[email protected]>
selftests/bpf: Add kprobe_multi kmod attach api tests
Jiri Olsa <[email protected]>
selftests/bpf: Add kprobe_multi check to module attach test
Jiri Olsa <[email protected]>
selftests/bpf: Add bpf_testmod_fentry_* functions
Jiri Olsa <[email protected]>
selftests/bpf: Add load_kallsyms_refresh function
Jiri Olsa <[email protected]>
bpf: Take module reference on kprobe_multi link
Jiri Olsa <[email protected]>
bpf: Rename __bpf_kprobe_multi_cookie_cmp to bpf_kprobe_multi_addrs_cmp
Jiri Olsa <[email protected]>
ftrace: Add support to resolve module symbols in ftrace_lookup_symbols
Jiri Olsa <[email protected]>
kallsyms: Make module_kallsyms_on_each_symbol generally available
John Thomson <[email protected]>
PCI: mt7621: Add sentinel to quirks table
-------------
Diffstat:
Documentation/security/keys/trusted-encrypted.rst | 3 +- Makefile | 4 +- drivers/net/ethernet/intel/igb/igb_main.c | 2 +- drivers/net/loopback.c | 2 +- drivers/pci/controller/pcie-mt7621.c | 3 +- drivers/usb/common/ulpi.c | 2 +- drivers/usb/dwc3/dwc3-pci.c | 2 +- drivers/usb/gadget/function/f_uvc.c | 5 +- drivers/usb/host/xhci-pci.c | 4 +- drivers/usb/serial/cp210x.c | 2 + drivers/usb/serial/f81232.c | 12 +-- drivers/usb/serial/f81534.c | 12 +-- drivers/usb/serial/option.c | 3 + drivers/usb/typec/ucsi/ucsi.c | 17 +++- drivers/usb/typec/ucsi/ucsi.h | 1 + fs/udf/inode.c | 76 ++++++++--------- fs/udf/truncate.c | 48 ++++------- include/linux/module.h | 9 ++ kernel/module/kallsyms.c | 2 - kernel/trace/bpf_trace.c | 98 +++++++++++++++++++++- kernel/trace/ftrace.c | 16 ++-- net/bluetooth/l2cap_core.c | 3 +- security/keys/encrypted-keys/encrypted.c | 6 +- sound/pci/hda/patch_realtek.c | 2 + .../selftests/bpf/bpf_testmod/bpf_testmod.c | 24 ++++++ .../bpf/prog_tests/kprobe_multi_testmod_test.c | 89 ++++++++++++++++++++ .../selftests/bpf/prog_tests/module_attach.c | 7 ++ tools/testing/selftests/bpf/progs/kprobe_multi.c | 50 +++++++++++ .../selftests/bpf/progs/test_module_attach.c | 6 ++ tools/testing/selftests/bpf/trace_helpers.c | 20 +++-- tools/testing/selftests/bpf/trace_helpers.h | 2 + tools/testing/selftests/net/toeplitz.sh | 2 +- 32 files changed, 412 insertions(+), 122 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/28 PCI: mt7621: Add sentinel to quirks table
From: John Thomson <[email protected]>
commit 19098934f910b4d47cb30251dd39ffa57bef9523 upstream.
Current driver is missing a sentinel in the struct soc_device_attribute array, which causes an oops when assessed by the soc_device_match(mt7621_pcie_quirks_match) call.
This was only exposed once the CONFIG_SOC_MT7621 mt7621 soc_dev_attr was fixed to register the SOC as a device, in:
commit 7c18b64bba3b ("mips: ralink: mt7621: do not use kzalloc too early")
Fix it by adding the required sentinel.
--- drivers/pci/controller/pcie-mt7621.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/pci/controller/pcie-mt7621.c +2 -1
@@ -471,7 +471,8 @@ static int mt7621_pcie_register_host(str }static const struct soc_device_attribute mt7621_pcie_quirks_match[] = { - { .soc_id ="mt7621" , .revision ="E2" } + { .soc_id ="mt7621" , .revision ="E2" }, + {/* sentinel */ } };static int mt7621_pcie_probe (struct platform_device *pdev)
Greg Kroah-Hartman
maintainerPATCH 2/28 kallsyms: Make module_kallsyms_on_each_symbol generally available
In reply to Greg Kroah-HartmanFrom: Jiri Olsa <[email protected]>
commit 73feb8d5fa3b755bb51077c0aabfb6aa556fd498 upstream.
Making module_kallsyms_on_each_symbol generally available, so it can be used outside CONFIG_LIVEPATCH option in following changes.
Rather than adding another ifdef option let's make the function generally available (when CONFIG_KALLSYMS and CONFIG_MODULES options are defined).
--- include/linux/module.h | 9 +++++++++ kernel/module/kallsyms.c | 2 -- 2 files changed, 9 insertions(+), 2 deletions(-)
include/linux/module.h +9 -0
@@ -879,8 +879,17 @@ static inline bool module_sig_ok(struct }#endif /* CONFIG_MODULE_SIG */ +#if defined(CONFIG_MODULES ) && defined(CONFIG_KALLSYMS )int module_kallsyms_on_each_symbol (int (*fn)(void *,const char *,struct module *,unsigned long ),void *data); +#else +static inline int module_kallsyms_on_each_symbol (int (*fn)(void *,const char *, +struct module *,unsigned long ), +void *data) +{ +return -EOPNOTSUPP ; +} +#endif /* CONFIG_MODULES && CONFIG_KALLSYMS */ #endif /* _LINUX_MODULE_H */
kernel/module/kallsyms.c +0 -2
@@ -494,7 +494,6 @@ unsigned long module_kallsyms_lookup_namreturn ret; } -#ifdef CONFIG_LIVEPATCH int module_kallsyms_on_each_symbol (int (*fn)(void *,const char *,struct module *,unsigned long ),void *data)
@@ -531,4 +530,3 @@ out:mutex_unlock (&module_mutex);return ret; } -#endif /* CONFIG_LIVEPATCH */
Greg Kroah-Hartman
maintainerPATCH 3/28 ftrace: Add support to resolve module symbols in ftrace_lookup_symbols
In reply to Greg Kroah-HartmanFrom: Jiri Olsa <[email protected]>
commit 3640bf8584f4ab0f5eed6285f09213954acd8b62 upstream.
Currently ftrace_lookup_symbols iterates only over core symbols, adding module_kallsyms_on_each_symbol call to check on modules symbols as well.
Also removing 'args.found == args.cnt' condition, because it's already checked in kallsyms_callback function.
Also removing 'err < 0' check, because both *kallsyms_on_each_symbol functions do not return error.
--- kernel/trace/ftrace.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-)
kernel/trace/ftrace.c +11 -5
@@ -8261,6 +8261,10 @@ struct kallsyms_data {size_t found; }; +/* This function gets called for all kernel and module symbols +* and returns 1 in case we resolved all the requested symbols, +* 0 otherwise. +*/ static int kallsyms_callback (void *data,const char *name,struct module *mod,unsigned long addr) {
@@ -8304,17 +8308,19 @@ static int kallsyms_callback(void *data,int ftrace_lookup_symbols (const char **sorted_syms,size_t cnt,unsigned long *addrs) {struct kallsyms_data args; -int err; +int found_all;memset (addrs,0 ,sizeof (*addrs) * cnt); args.addrs = addrs; args.syms = sorted_syms; args.cnt = cnt; args.found =0 ; - err =kallsyms_on_each_symbol (kallsyms_callback, &args); -if (err <0 ) -return err; -return args.found == args.cnt ?0 : -ESRCH ; + + found_all =kallsyms_on_each_symbol (kallsyms_callback, &args); +if (found_all) +return 0 ; + found_all =module_kallsyms_on_each_symbol (kallsyms_callback, &args); +return found_all ?0 : -ESRCH ; }#ifdef CONFIG_SYSCTL
Greg Kroah-Hartman
maintainerPATCH 4/28 bpf: Rename __bpf_kprobe_multi_cookie_cmp to bpf_kprobe_multi_addrs_cmp
In reply to Greg Kroah-HartmanFrom: Jiri Olsa <[email protected]>
commit 1a1b0716d36d21f8448bd7d3f1c0ade7230bb294 upstream.
Renaming __bpf_kprobe_multi_cookie_cmp to bpf_kprobe_multi_addrs_cmp, because it's more suitable to current and upcoming code.
--- kernel/trace/bpf_trace.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
kernel/trace/bpf_trace.c +3 -3
@@ -2362,7 +2362,7 @@ static void bpf_kprobe_multi_cookie_swapswap (*cookie_a, *cookie_b); } -static int __bpf_kprobe_multi_cookie_cmp (const void *a,const void *b) +static int bpf_kprobe_multi_addrs_cmp (const void *a,const void *b) {const unsigned long *addr_a = a, *addr_b = b;
@@ -2373,7 +2373,7 @@ static int __bpf_kprobe_multi_cookie_cmpstatic int bpf_kprobe_multi_cookie_cmp (const void *a,const void *b,const void *priv) { -return __bpf_kprobe_multi_cookie_cmp (a, b); +return bpf_kprobe_multi_addrs_cmp (a, b); }static u64 bpf_kprobe_multi_cookie (struct bpf_run_ctx *ctx)
@@ -2391,7 +2391,7 @@ static u64 bpf_kprobe_multi_cookie(strucreturn 0 ; entry_ip = run_ctx->entry_ip; addr =bsearch (&entry_ip, link->addrs, link->cnt,sizeof (entry_ip), - __bpf_kprobe_multi_cookie_cmp); + bpf_kprobe_multi_addrs_cmp);if (!addr)return 0 ; cookie = link->cookies + (addr - link->addrs);
Greg Kroah-Hartman
maintainerPATCH 5/28 bpf: Take module reference on kprobe_multi link
In reply to Greg Kroah-HartmanFrom: Jiri Olsa <[email protected]>
commit e22061b2d3095c12f90336479f24bf5eeb70e1bd upstream.
Currently we allow to create kprobe multi link on function from kernel module, but we don't take the module reference to ensure it's not unloaded while we are tracing it.
The multi kprobe link is based on fprobe/ftrace layer which takes different approach and releases ftrace hooks when module is unloaded even if there's tracer registered on top of it.
Adding code that gathers all the related modules for the link and takes their references before it's attached. All kernel module references are released after link is unregistered.
Note that we do it the same way already for trampoline probes (but for single address).
--- kernel/trace/bpf_trace.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+)
kernel/trace/bpf_trace.c +92 -0
@@ -2264,6 +2264,8 @@ struct bpf_kprobe_multi_link {unsigned long *addrs;u64 *cookies;u32 cnt; +u32 mods_cnt; +struct module **mods; };struct bpf_kprobe_multi_run_ctx {
@@ -2319,6 +2321,14 @@ error:return err; } +static void kprobe_multi_put_modules (struct module **mods,u32 cnt) +{ +u32 i; + +for (i =0 ; i < cnt; i++) +module_put (mods[i]); +} +static void free_user_syms (struct user_syms *us) {kvfree (us->syms);
@@ -2331,6 +2341,7 @@ static void bpf_kprobe_multi_link_releas kmulti_link = container_of(link, struct bpf_kprobe_multi_link, link);unregister_fprobe (&kmulti_link->fp); +kprobe_multi_put_modules (kmulti_link->mods, kmulti_link->mods_cnt); }static void bpf_kprobe_multi_link_dealloc (struct bpf_link *link)
@@ -2340,6 +2351,7 @@ static void bpf_kprobe_multi_link_deallo kmulti_link = container_of(link, struct bpf_kprobe_multi_link, link);kvfree (kmulti_link->addrs);kvfree (kmulti_link->cookies); +kfree (kmulti_link->mods);kfree (kmulti_link); }
@@ -2475,6 +2487,71 @@ static void symbols_swap_r(void *a, void } } +struct module_addr_args { +unsigned long *addrs; +u32 addrs_cnt; +struct module **mods; +int mods_cnt; +int mods_cap; +}; + +static int module_callback (void *data,const char *name, +struct module *mod,unsigned long addr) +{ +struct module_addr_args *args = data; +struct module **mods; + +/* We iterate all modules symbols and for each we: +* - search for it in provided addresses array +* - if found we check if we already have the module pointer stored +* (we iterate modules sequentially, so we can check just the last +* module pointer) +* - take module reference and store it +*/ +if (!bsearch (&addr, args->addrs, args->addrs_cnt,sizeof (addr), + bpf_kprobe_multi_addrs_cmp)) +return 0 ; + +if (args->mods && args->mods[args->mods_cnt -1 ] == mod) +return 0 ; + +if (args->mods_cnt == args->mods_cap) { + args->mods_cap =max (16 , args->mods_cap *3 /2 ); + mods =krealloc_array (args->mods, args->mods_cap,sizeof (*mods),GFP_KERNEL ); +if (!mods) +return -ENOMEM ; + args->mods = mods; + } + +if (!try_module_get (mod)) +return -EINVAL ; + + args->mods[args->mods_cnt] = mod; + args->mods_cnt++; +return 0 ; +} + +static int get_modules_for_addrs (struct module ***mods,unsigned long *addrs,u32 addrs_cnt) +{ +struct module_addr_args args = { + .addrs = addrs, + .addrs_cnt = addrs_cnt, + }; +int err; + +/* We return either err < 0 in case of error, ... */ + err =module_kallsyms_on_each_symbol (module_callback, &args); +if (err) { +kprobe_multi_put_modules (args.mods, args.mods_cnt); +kfree (args.mods); +return err; + } + +/* or number of modules found if everything is ok. */ + *mods = args.mods; +return args.mods_cnt; +} +int bpf_kprobe_multi_link_attach (const union bpf_attr *attr,struct bpf_prog *prog) {struct bpf_kprobe_multi_link *link =NULL ;
@@ -2585,10 +2662,25 @@ int bpf_kprobe_multi_link_attach(const u bpf_kprobe_multi_cookie_cmp, bpf_kprobe_multi_cookie_swap, link); + }else { +/* +* We need to sort addrs array even if there are no cookies +* provided, to allow bsearch in get_modules_for_addrs. +*/ +sort (addrs, cnt,sizeof (*addrs), + bpf_kprobe_multi_addrs_cmp,NULL ); + } + + err =get_modules_for_addrs (&link->mods, addrs, cnt); +if (err <0 ) { +bpf_link_cleanup (&link_primer); +return err; } + link->mods_cnt = err; err =register_fprobe_ips (&link->fp, addrs, cnt);if (err) { +kprobe_multi_put_modules (link->mods, link->mods_cnt);bpf_link_cleanup (&link_primer);return err; }
Greg Kroah-Hartman
maintainerPATCH 6/28 selftests/bpf: Add load_kallsyms_refresh function
In reply to Greg Kroah-HartmanFrom: Jiri Olsa <[email protected]>
commit 10705b2b7a8e4eb46ab5bf1b9ee354cb9a929428 upstream.
Adding load_kallsyms_refresh function to re-read symbols from /proc/kallsyms file.
This will be needed to get proper functions addresses from bpf_testmod.ko module, which is loaded/unloaded several times during the tests run, so symbols might be already old when we need to use them.
--- tools/testing/selftests/bpf/trace_helpers.c | 20 +++++++++++++------- tools/testing/selftests/bpf/trace_helpers.h | 2 ++ 2 files changed, 15 insertions(+), 7 deletions(-)
tools/testing/selftests/bpf/trace_helpers.c +13 -7
@@ -23,7 +23,7 @@ static int ksym_cmp(const void *p1, consreturn ((struct ksym *)p1)->addr - ((struct ksym *)p2)->addr; } -int load_kallsyms (void ) +int load_kallsyms_refresh (void ) {FILE *f;char func[256 ], buf[256 ];
@@ -31,12 +31,7 @@ int load_kallsyms(void)void *addr;int i =0 ; -/* -* This is called/used from multiplace places, -* load symbols just once. -*/ -if (sym_cnt) -return 0 ; + sym_cnt =0 ; f =fopen ("/proc/kallsyms" ,"r" );if (!f)
@@ -57,6 +52,17 @@ int load_kallsyms(void)return 0 ; } +int load_kallsyms (void ) +{ +/* +* This is called/used from multiplace places, +* load symbols just once. +*/ +if (sym_cnt) +return 0 ; +return load_kallsyms_refresh (); +} +struct ksym *ksym_search (long key) {int start =0 , end = sym_cnt;
tools/testing/selftests/bpf/trace_helpers.h +2 -0
@@ -10,6 +10,8 @@ struct ksym { };int load_kallsyms (void ); +int load_kallsyms_refresh (void ); +struct ksym *ksym_search (long key);long ksym_get_addr (const char *name);
Greg Kroah-Hartman
maintainerPATCH 7/28 selftests/bpf: Add bpf_testmod_fentry_* functions
In reply to Greg Kroah-HartmanFrom: Jiri Olsa <[email protected]>
commit fee356ede980b6c2c8db612e18b25738356d6744 upstream.
Adding 3 bpf_testmod_fentry_* functions to have a way to test kprobe multi link on kernel module. They follow bpf_fentry_test* functions prototypes/code.
Adding equivalent functions to all bpf_fentry_test* does not seems necessary at the moment, could be added later.
--- tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c | 24 ++++++++++++++++++ 1 file changed, 24 insertions(+)
tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c +24 -0
@@ -88,6 +88,23 @@ __weak noinline struct file *bpf_testmod } } +noinline int bpf_testmod_fentry_test1(int a) +{ +return a +1 ; +} + +noinline int bpf_testmod_fentry_test2(int a, u64 b) +{ +return a + b; +} + +noinline int bpf_testmod_fentry_test3(char a, int b, u64 c) +{ +return a + b + c; +} + +int bpf_testmod_fentry_ok; + noinline ssize_t bpf_testmod_test_read(struct file *file, struct kobject *kobj, struct bin_attribute *bin_attr,
@@ -119,6 +136,13 @@ bpf_testmod_test_read(struct file *file,return snprintf (buf, len,"%d\n" , writable.val); } +if (bpf_testmod_fentry_test1 (1 ) !=2 || +bpf_testmod_fentry_test2 (2 ,3 ) !=5 || +bpf_testmod_fentry_test3 (4 ,5 ,6 ) !=15 ) + goto out; + + bpf_testmod_fentry_ok =1 ; +out:return -EIO ;/* always fail */ }EXPORT_SYMBOL (bpf_testmod_test_read);
Greg Kroah-Hartman
maintainerPATCH 8/28 selftests/bpf: Add kprobe_multi check to module attach test
In reply to Greg Kroah-HartmanFrom: Jiri Olsa <[email protected]>
commit e697d8dcebd2f557fa5e5ed57aaf0a9992ce9df8 upstream.
Adding test that makes sure the kernel module won't be removed if there's kprobe multi link defined on top of it.
--- tools/testing/selftests/bpf/prog_tests/module_attach.c | 7 +++++++ tools/testing/selftests/bpf/progs/test_module_attach.c | 6 ++++++ 2 files changed, 13 insertions(+)
tools/testing/selftests/bpf/prog_tests/module_attach.c +7 -0
@@ -103,6 +103,13 @@ void test_module_attach(void)ASSERT_ERR (delete_module ("bpf_testmod" ,0 ),"delete_module" );bpf_link__destroy (link); + link =bpf_program__attach (skel->progs.kprobe_multi); +if (!ASSERT_OK_PTR (link,"attach_kprobe_multi" )) + goto cleanup; + +ASSERT_ERR (delete_module ("bpf_testmod" ,0 ),"delete_module" ); +bpf_link__destroy (link); + cleanup:test_module_attach__destroy (skel); }
tools/testing/selftests/bpf/progs/test_module_attach.c +6 -0
@@ -110,4 +110,10 @@ int BPF_PROG(handle_fmod_ret,return 0 ;/* don't override the exit code */ } +SEC("kprobe.multi/bpf_testmod_test_read") +int BPF_PROG (kprobe_multi ) +{ +return 0 ; +} + char _license[] SEC("license") = "GPL";
Greg Kroah-Hartman
maintainerPATCH 9/28 selftests/bpf: Add kprobe_multi kmod attach api tests
In reply to Greg Kroah-HartmanFrom: Jiri Olsa <[email protected]>
commit be884a22c1c835a146e97c6ab282a2b31b002e1f upstream.
Adding kprobe_multi kmod attach api tests that attach bpf_testmod functions via bpf_program__attach_kprobe_multi_opts.
Running it as serial test, because we don't want other tests to reload bpf_testmod while it's running.
--- tools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c | 89 ++++++++++ tools/testing/selftests/bpf/progs/kprobe_multi.c | 50 +++++ 2 files changed, 139 insertions(+) create mode 100644 tools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c
tools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c new file +89 -0
@@ -0,0 +1,89 @@ +// SPDX-License-Identifier: GPL-2.0 +#include <test_progs.h> +#include "kprobe_multi.skel.h" +#include "trace_helpers.h" +#include "bpf/libbpf_internal.h" + +static void kprobe_multi_testmod_check (struct kprobe_multi *skel) +{ +ASSERT_EQ (skel->bss->kprobe_testmod_test1_result,1 ,"kprobe_test1_result" ); +ASSERT_EQ (skel->bss->kprobe_testmod_test2_result,1 ,"kprobe_test2_result" ); +ASSERT_EQ (skel->bss->kprobe_testmod_test3_result,1 ,"kprobe_test3_result" ); + +ASSERT_EQ (skel->bss->kretprobe_testmod_test1_result,1 ,"kretprobe_test1_result" ); +ASSERT_EQ (skel->bss->kretprobe_testmod_test2_result,1 ,"kretprobe_test2_result" ); +ASSERT_EQ (skel->bss->kretprobe_testmod_test3_result,1 ,"kretprobe_test3_result" ); +} + +static void test_testmod_attach_api (struct bpf_kprobe_multi_opts *opts) +{ +struct kprobe_multi *skel =NULL ; + + skel =kprobe_multi__open_and_load (); +if (!ASSERT_OK_PTR (skel,"fentry_raw_skel_load" )) +return ; + + skel->bss->pid =getpid (); + + skel->links.test_kprobe_testmod =bpf_program__attach_kprobe_multi_opts ( + skel->progs.test_kprobe_testmod, +NULL , opts); +if (!skel->links.test_kprobe_testmod) + goto cleanup; + + opts->retprobe = true; + skel->links.test_kretprobe_testmod =bpf_program__attach_kprobe_multi_opts ( + skel->progs.test_kretprobe_testmod, +NULL , opts); +if (!skel->links.test_kretprobe_testmod) + goto cleanup; + +ASSERT_OK (trigger_module_test_read (1 ),"trigger_read" ); +kprobe_multi_testmod_check (skel); + +cleanup: +kprobe_multi__destroy (skel); +} + +static void test_testmod_attach_api_addrs (void ) +{ +LIBBPF_OPTS (bpf_kprobe_multi_opts, opts); +unsigned long long addrs[3 ]; + + addrs[0 ] =ksym_get_addr ("bpf_testmod_fentry_test1" ); +ASSERT_NEQ (addrs[0 ],0 ,"ksym_get_addr" ); + addrs[1 ] =ksym_get_addr ("bpf_testmod_fentry_test2" ); +ASSERT_NEQ (addrs[1 ],0 ,"ksym_get_addr" ); + addrs[2 ] =ksym_get_addr ("bpf_testmod_fentry_test3" ); +ASSERT_NEQ (addrs[2 ],0 ,"ksym_get_addr" ); + + opts.addrs = (const unsigned long *) addrs; + opts.cnt =ARRAY_SIZE (addrs); + +test_testmod_attach_api (&opts); +} + +static void test_testmod_attach_api_syms (void ) +{ +LIBBPF_OPTS (bpf_kprobe_multi_opts, opts); +const char *syms[3 ] = { +"bpf_testmod_fentry_test1" , +"bpf_testmod_fentry_test2" , +"bpf_testmod_fentry_test3" , + }; + + opts.syms = syms; + opts.cnt =ARRAY_SIZE (syms); +test_testmod_attach_api (&opts); +} + +void serial_test_kprobe_multi_testmod_test (void ) +{ +if (!ASSERT_OK (load_kallsyms_refresh (),"load_kallsyms_refresh" )) +return ; + +if (test__start_subtest ("testmod_attach_api_syms" )) +test_testmod_attach_api_syms (); +if (test__start_subtest ("testmod_attach_api_addrs" )) +test_testmod_attach_api_addrs (); +}
tools/testing/selftests/bpf/progs/kprobe_multi.c +50 -0
53 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 10/28 udf: Discard preallocation before extending file with a hole
In reply to Greg Kroah-HartmanFrom: Jan Kara <[email protected]>
commit 16d0556568148bdcaa45d077cac9f8f7077cf70a upstream.
When extending file with a hole, we tried to preserve existing preallocation for the file. However that is not very useful and complicates code because the previous extent may need to be rounded to block boundary as well (which we forgot to do thus causing data corruption for sequence like:
xfs_io -f -c "pwrite 0x75e63 11008" -c "truncate 0x7b24b" \
-c "truncate 0xabaa3" -c "pwrite 0xac70b 22954" \
-c "pwrite 0x93a43 11358" -c "pwrite 0xb8e65 52211" file
with 512-byte block size. Just discard preallocation before extending file to simplify things and also fix this data corruption.
--- fs/udf/inode.c | 46 ++++++++++++++++++---------------------------- 1 file changed, 18 insertions(+), 28 deletions(-)
fs/udf/inode.c +18 -28
@@ -439,6 +439,12 @@ static int udf_get_block(struct inode *i iinfo->i_next_alloc_goal++; } +/* +* Block beyond EOF and prealloc extents? Just discard preallocation +* as it is not useful and complicates things. +*/ +if (((loff_t )block) << inode->i_blkbits > iinfo->i_lenExtents) +udf_discard_prealloc (inode);udf_clear_extent_cache (inode); phys =inode_getblk (inode, block, &err, &new);if (!phys)
@@ -488,8 +494,6 @@ static int udf_do_extend_file(struct inouint32_t add;int count =0 , fake = !(last_ext->extLength &UDF_EXTENT_LENGTH_MASK );struct super_block *sb = inode->i_sb; -struct kernel_lb_addr prealloc_loc = {}; -uint32_t prealloc_len =0 ;struct udf_inode_info *iinfo;int err;
@@ -510,19 +514,6 @@ static int udf_do_extend_file(struct ino ~(sb->s_blocksize -1 ); } -/* Last extent are just preallocated blocks? */ -if ((last_ext->extLength &UDF_EXTENT_FLAG_MASK ) == -EXT_NOT_RECORDED_ALLOCATED ) { -/* Save the extent so that we can reattach it to the end */ - prealloc_loc = last_ext->extLocation; - prealloc_len = last_ext->extLength; -/* Mark the extent as a hole */ - last_ext->extLength =EXT_NOT_RECORDED_NOT_ALLOCATED | - (last_ext->extLength &UDF_EXTENT_LENGTH_MASK ); - last_ext->extLocation.logicalBlockNum =0 ; - last_ext->extLocation.partitionReferenceNum =0 ; - } -/* Can we merge with the previous extent? */ if ((last_ext->extLength &UDF_EXTENT_FLAG_MASK ) ==EXT_NOT_RECORDED_NOT_ALLOCATED ) {
@@ -550,7 +541,7 @@ static int udf_do_extend_file(struct ino* more extents, we may need to enter possible following * empty indirect extent. */ -if (new_block_bytes || prealloc_len) +if (new_block_bytes)udf_next_aext (inode, last_pos, &tmploc, &tmplen,0 ); }
@@ -584,17 +575,6 @@ static int udf_do_extend_file(struct ino } out: -/* Do we have some preallocated blocks saved? */ -if (prealloc_len) { - err =udf_add_aext (inode, last_pos, &prealloc_loc, - prealloc_len,1 ); -if (err) -return err; - last_ext->extLocation = prealloc_loc; - last_ext->extLength = prealloc_len; - count++; - } -/* last_pos should point to the last written extent... */ if (iinfo->i_alloc_type ==ICBTAG_FLAG_AD_SHORT ) last_pos->offset -=sizeof (struct short_ad );
@@ -647,8 +627,17 @@ static int udf_extend_file(struct inodeelse BUG (); +/* +* When creating hole in file, just don't bother with preserving +* preallocation. It likely won't be very useful anyway. +*/ +udf_discard_prealloc (inode); + etype =inode_bmap (inode, first_block, &epos, &eloc, &elen, &offset); within_final_block = (etype !=-1 ); +/* We don't expect extents past EOF... */ +WARN_ON_ONCE (etype !=-1 && + elen > ((loff_t )offset +1 ) << inode->i_blkbits);if ((!epos.bh && epos.offset ==udf_file_entry_alloc_offset (inode)) || (epos.bh && epos.offset ==sizeof (struct allocExtDesc ))) {
@@ -777,10 +766,11 @@ static sector_t inode_getblk(struct inod goto out_free; } -/* Are we beyond EOF? */ +/* Are we beyond EOF and preallocated extent? */ if (etype ==-1 ) {int ret;loff_t hole_len; + isBeyondEOF = true;if (count) {if (c)
Greg Kroah-Hartman
maintainerPATCH 11/28 udf: Fix preallocation discarding at indirect extent boundary
In reply to Greg Kroah-HartmanFrom: Jan Kara <[email protected]>
commit cfe4c1b25dd6d2f056afc00b7c98bcb3dd0b1fc3 upstream.
When preallocation extent is the first one in the extent block, the code would corrupt extent tree header instead. Fix the problem and use udf_delete_aext() for deleting extent to avoid some code duplication.
--- fs/udf/truncate.c | 45 +++++++++++++-------------------------------- 1 file changed, 13 insertions(+), 32 deletions(-)
fs/udf/truncate.c +13 -32
@@ -120,60 +120,41 @@ void udf_truncate_tail_extent(struct inovoid udf_discard_prealloc (struct inode *inode) { -struct extent_position epos = {NULL ,0 , {0 ,0 } }; +struct extent_position epos = {}; +struct extent_position prev_epos = {};struct kernel_lb_addr eloc;uint32_t elen;uint64_t lbcount =0 ;int8_t etype =-1 , netype; -int adsize;struct udf_inode_info *iinfo =UDF_I (inode);if (iinfo->i_alloc_type ==ICBTAG_FLAG_AD_IN_ICB || inode->i_size == iinfo->i_lenExtents)return ; -if (iinfo->i_alloc_type ==ICBTAG_FLAG_AD_SHORT ) - adsize =sizeof (struct short_ad ); -else if (iinfo->i_alloc_type ==ICBTAG_FLAG_AD_LONG ) - adsize =sizeof (struct long_ad ); -else - adsize =0 ; - epos.block = iinfo->i_location;/* Find the last extent in the file */ -while ((netype =udf_next_aext (inode, &epos, &eloc, &elen,1 )) !=-1 ) { - etype = netype; +while ((netype =udf_next_aext (inode, &epos, &eloc, &elen,0 )) !=-1 ) { +brelse (prev_epos.bh); + prev_epos = epos; +if (prev_epos.bh) +get_bh (prev_epos.bh); + + etype =udf_next_aext (inode, &epos, &eloc, &elen,1 ); lbcount += elen; }if (etype == (EXT_NOT_RECORDED_ALLOCATED >>30 )) { - epos.offset -= adsize; lbcount -= elen; -extent_trunc (inode, &epos, &eloc, etype, elen,0 ); -if (!epos.bh) { - iinfo->i_lenAlloc = - epos.offset - -udf_file_entry_alloc_offset (inode); -mark_inode_dirty (inode); - }else { -struct allocExtDesc *aed = - (struct allocExtDesc *)(epos.bh->b_data); - aed->lengthAllocDescs = -cpu_to_le32 (epos.offset - -sizeof (struct allocExtDesc )); -if (!UDF_QUERY_FLAG (inode->i_sb,UDF_FLAG_STRICT ) || -UDF_SB (inode->i_sb)->s_udfrev >=0x0201 ) -udf_update_tag (epos.bh->b_data, epos.offset); -else -udf_update_tag (epos.bh->b_data, -sizeof (struct allocExtDesc )); -mark_buffer_dirty_inode (epos.bh, inode); - } +udf_delete_aext (inode, prev_epos); +udf_free_blocks (inode->i_sb, inode, &eloc,0 , +DIV_ROUND_UP (elen,1 << inode->i_blkbits)); }/* This inode entry is in-memory only and thus we don't have to mark * the inode dirty */ iinfo->i_lenExtents = lbcount;brelse (epos.bh); +brelse (prev_epos.bh); } static void udf_update_alloc_ext_desc(struct inode *inode,
Greg Kroah-Hartman
maintainerPATCH 12/28 udf: Do not bother looking for prealloc extents if i_lenExtents matches i_size
In reply to Greg Kroah-HartmanFrom: Jan Kara <[email protected]>
commit 6ad53f0f71c52871202a7bf096feb2c59db33fc5 upstream.
If rounded block-rounded i_lenExtents matches block rounded i_size, there are no preallocation extents. Do not bother walking extent linked list.
--- fs/udf/truncate.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/udf/truncate.c +2 -1
@@ -127,9 +127,10 @@ void udf_discard_prealloc(struct inode *uint64_t lbcount =0 ;int8_t etype =-1 , netype;struct udf_inode_info *iinfo =UDF_I (inode); +int bsize =1 << inode->i_blkbits;if (iinfo->i_alloc_type ==ICBTAG_FLAG_AD_IN_ICB || - inode->i_size == iinfo->i_lenExtents) +ALIGN (inode->i_size, bsize) ==ALIGN (iinfo->i_lenExtents, bsize))return ; epos.block = iinfo->i_location;
Greg Kroah-Hartman
maintainerPATCH 13/28 udf: Fix extending file within last block
In reply to Greg Kroah-HartmanFrom: Jan Kara <[email protected]>
commit 1f3868f06855c97a4954c99b36f3fc9eb8f60326 upstream.
When extending file within last block it can happen that the extent is already rounded to the blocksize and thus contains the offset we want to grow up to. In such case we would mistakenly expand the last extent and make it one block longer than it should be, exposing unallocated block in a file and causing data corruption. Fix the problem by properly detecting this case and bailing out.
--- fs/udf/inode.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-)
fs/udf/inode.c +17 -15
@@ -590,13 +590,17 @@ out:static void udf_do_extend_final_block (struct inode *inode,struct extent_position *last_pos,struct kernel_long_ad *last_ext, -uint32_t final_block_len) +uint32_t new_elen) { -struct super_block *sb = inode->i_sb;uint32_t added_bytes; - added_bytes = final_block_len - - (last_ext->extLength & (sb->s_blocksize -1 )); +/* +* Extent already large enough? It may be already rounded up to block +* size... +*/ +if (new_elen <= (last_ext->extLength &UDF_EXTENT_LENGTH_MASK )) +return ; + added_bytes = (last_ext->extLength &UDF_EXTENT_LENGTH_MASK ) - new_elen; last_ext->extLength += added_bytes;UDF_I (inode)->i_lenExtents += added_bytes;
@@ -613,12 +617,12 @@ static int udf_extend_file(struct inodeint8_t etype;struct super_block *sb = inode->i_sb;sector_t first_block = newsize >> sb->s_blocksize_bits, offset; -unsigned long partial_final_block; +loff_t new_elen;int adsize;struct udf_inode_info *iinfo =UDF_I (inode);struct kernel_long_ad extent;int err =0 ; -int within_final_block; +bool within_last_ext;if (iinfo->i_alloc_type ==ICBTAG_FLAG_AD_SHORT ) adsize =sizeof (struct short_ad );
@@ -634,9 +638,9 @@ static int udf_extend_file(struct inodeudf_discard_prealloc (inode); etype =inode_bmap (inode, first_block, &epos, &eloc, &elen, &offset); - within_final_block = (etype !=-1 ); + within_last_ext = (etype !=-1 );/* We don't expect extents past EOF... */ -WARN_ON_ONCE (etype !=-1 && +WARN_ON_ONCE (within_last_ext && elen > ((loff_t )offset +1 ) << inode->i_blkbits); if ((!epos.bh && epos.offset == udf_file_entry_alloc_offset(inode)) ||
@@ -653,19 +657,17 @@ static int udf_extend_file(struct inode extent.extLength |= etype <<30 ; } - partial_final_block = newsize & (sb->s_blocksize -1 ); + new_elen = ((loff_t )offset << inode->i_blkbits) | + (newsize & (sb->s_blocksize -1 ));/* File has extent covering the new size (could happen when extending * inside a block)? */ -if (within_final_block) { +if (within_last_ext) {/* Extending file within the last file block */ -udf_do_extend_final_block (inode, &epos, &extent, - partial_final_block); +udf_do_extend_final_block (inode, &epos, &extent, new_elen); }else { -loff_t add = ((loff_t )offset << sb->s_blocksize_bits) | - partial_final_block; - err =udf_do_extend_file (inode, &epos, &extent, add); + err =udf_do_extend_file (inode, &epos, &extent, new_elen); }if (err <0 )
Greg Kroah-Hartman
maintainerPATCH 14/28 usb: gadget: uvc: Prevent buffer overflow in setup handler
In reply to Greg Kroah-HartmanFrom: Szymon Heidrich <[email protected]>
commit 4c92670b16727365699fe4b19ed32013bab2c107 upstream.
Setup function uvc_function_setup permits control transfer requests with up to 64 bytes of payload (UVC_MAX_REQUEST_SIZE), data stage handler for OUT transfer uses memcpy to copy req->actual bytes to uvc_event->data.data array of size 60. This may result in an overflow of 4 bytes.
--- drivers/usb/gadget/function/f_uvc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/usb/gadget/function/f_uvc.c +3 -2
@@ -216,8 +216,9 @@ uvc_function_ep0_complete(struct usb_epmemset (&v4l2_event,0 ,sizeof (v4l2_event)); v4l2_event.type =UVC_EVENT_DATA ; - uvc_event->data.length = req->actual; -memcpy (&uvc_event->data.data, req->buf, req->actual); + uvc_event->data.length = min_t(unsigned int, req->actual, +sizeof (uvc_event->data.data)); +memcpy (&uvc_event->data.data, req->buf, uvc_event->data.length);v4l2_event_queue (&uvc->vdev, &v4l2_event); } }
Greg Kroah-Hartman
maintainerPATCH 15/28 USB: serial: option: add Quectel EM05-G modem
In reply to Greg Kroah-HartmanFrom: Duke Xin <[email protected]>
commit f0052d7a1edb3d8921b4e154aa8c46c4845b3714 upstream.
The EM05-G modem has 2 USB configurations that are configurable via the AT command AT+QCFG="usbnet",[ 0 | 2 ] which make the modem enumerate with the following interfaces, respectively:
"RMNET" : AT + DIAG + NMEA + Modem + QMI
"MBIM" : MBIM + AT + DIAG + NMEA + Modem
The detailed description of the USB configuration for each mode as follows:
RMNET Mode
--------------
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 21 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=2c7c ProdID=0311 Rev= 3.18 S: Manufacturer=Quectel S: Product=Quectel EM05-G C:* #Ifs= 5 Cfg#= 1 Atr=a0 MxPwr=500mA I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option E: Ad=87(I) Atr=03(Int.) MxPS= 10 Ivl=32ms E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 6 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) E: Ad=89(I) Atr=03(Int.) MxPS= 8 Ivl=32ms E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
MBIM Mode
--------------
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 16 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=2c7c ProdID=0311 Rev= 3.18 S: Manufacturer=Quectel S: Product=Quectel EM05-G C:* #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA A: FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00 I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option E: Ad=83(I) Atr=03(Int.) MxPS= 10 Ivl=32ms E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option E: Ad=85(I) Atr=03(Int.) MxPS= 10 Ivl=32ms E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option E: Ad=87(I) Atr=03(Int.) MxPS= 10 Ivl=32ms E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim E: Ad=89(I) Atr=03(Int.) MxPS= 64 Ivl=32ms I: If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
--- drivers/usb/serial/option.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/usb/serial/option.c +3 -0
@@ -255,6 +255,7 @@ static void option_instat_callback(struc#define QUECTEL_PRODUCT_EP06 0x0306#define QUECTEL_PRODUCT_EM05G 0x030a#define QUECTEL_PRODUCT_EM060K 0x030b +#define QUECTEL_PRODUCT_EM05G_SG 0x0311#define QUECTEL_PRODUCT_EM12 0x0512#define QUECTEL_PRODUCT_RM500Q 0x0800#define QUECTEL_PRODUCT_RM520N 0x0801
@@ -1160,6 +1161,8 @@ static const struct usb_device_id option { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0, 0) }, { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G, 0xff), .driver_info = RSVD(6) | ZLP }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_SG, 0xff), + .driver_info = RSVD(6) | ZLP }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0x00, 0x40) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0xff, 0x30) }, { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM060K, 0xff, 0xff, 0x40) },
Greg Kroah-Hartman
maintainerPATCH 16/28 USB: serial: cp210x: add Kamstrup RF sniffer PIDs
In reply to Greg Kroah-HartmanFrom: Bruno Thomsen <[email protected]>
commit e88906b169ebcb8046e8f0ad76edd09ab41cfdfe upstream.
The RF sniffers are based on cp210x where the RF frontends are based on a different USB stack.
RF sniffers can analyze packets meta data including power level and perform packet injection.
Can be used to perform RF frontend self-test when connected to a concentrator, ex. arch/arm/boot/dts/imx7d-flex-concentrator.dts
--- drivers/usb/serial/cp210x.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/usb/serial/cp210x.c +2 -0
@@ -195,6 +195,8 @@ static const struct usb_device_id id_tab { USB_DEVICE(0x16DC, 0x0015) }, /* W-IE-NE-R Plein & Baus GmbH CML Control, Monitoring and Data Logger */ { USB_DEVICE(0x17A8, 0x0001) }, /* Kamstrup Optical Eye/3-wire */ { USB_DEVICE(0x17A8, 0x0005) }, /* Kamstrup M-Bus Master MultiPort 250D */ + { USB_DEVICE(0x17A8, 0x0011) }, /* Kamstrup 444 MHz RF sniffer */ + { USB_DEVICE(0x17A8, 0x0013) }, /* Kamstrup 870 MHz RF sniffer */ { USB_DEVICE(0x17A8, 0x0101) }, /* Kamstrup 868 MHz wM-Bus C-Mode Meter Reader (Int Ant) */ { USB_DEVICE(0x17A8, 0x0102) }, /* Kamstrup 868 MHz wM-Bus C-Mode Meter Reader (Ext Ant) */ { USB_DEVICE(0x17F4, 0xAAAA) }, /* Wavesense Jazz blood glucose meter */
Greg Kroah-Hartman
maintainerPATCH 17/28 USB: serial: f81232: fix division by zero on line-speed change
In reply to Greg Kroah-HartmanFrom: Johan Hovold <[email protected]>
commit a08ca6ebafe615c9028c53fc4c9e6c9b2b1f2888 upstream.
The driver leaves the line speed unchanged in case a requested speed is not supported. Make sure to handle the case where the current speed is B0 (hangup) without dividing by zero when determining the clock source.
--- drivers/usb/serial/f81232.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
drivers/usb/serial/f81232.c +7 -5
@@ -130,9 +130,6 @@ static u8 const clock_table[] = { F81232static int calc_baud_divisor (speed_t baudrate,speed_t clockrate) { -if (!baudrate) -return 0 ; -return DIV_ROUND_CLOSEST (clockrate, baudrate); }
@@ -498,9 +495,14 @@ static void f81232_set_baudrate(struct tspeed_t baud_list[] = { baudrate, old_baudrate,F81232_DEF_BAUDRATE };for (i =0 ; i <ARRAY_SIZE (baud_list); ++i) { - idx =f81232_find_clk (baud_list[i]); + baudrate = baud_list[i]; +if (baudrate ==0 ) { +tty_encode_baud_rate (tty,0 ,0 ); +return ; + } + + idx =f81232_find_clk (baudrate);if (idx >=0 ) { - baudrate = baud_list[i];tty_encode_baud_rate (tty, baudrate, baudrate);break ; }
Greg Kroah-Hartman
maintainerPATCH 18/28 USB: serial: f81534: fix division by zero on line-speed change
In reply to Greg Kroah-HartmanFrom: Johan Hovold <[email protected]>
commit 188c9c2e0c7f4ae864113f80c40bafb394062271 upstream.
The driver leaves the line speed unchanged in case a requested speed is not supported. Make sure to handle the case where the current speed is B0 (hangup) without dividing by zero when determining the clock source.
--- drivers/usb/serial/f81534.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
drivers/usb/serial/f81534.c +7 -5
@@ -536,9 +536,6 @@ static int f81534_submit_writer(struct ustatic u32 f81534_calc_baud_divisor (u32 baudrate,u32 clockrate) { -if (!baudrate) -return 0 ; -/* Round to nearest divisor */ return DIV_ROUND_CLOSEST (clockrate, baudrate); }
@@ -568,9 +565,14 @@ static int f81534_set_port_config(structu32 baud_list[] = {baudrate, old_baudrate,F81534_DEFAULT_BAUD_RATE };for (i =0 ; i <ARRAY_SIZE (baud_list); ++i) { - idx =f81534_find_clk (baud_list[i]); + baudrate = baud_list[i]; +if (baudrate ==0 ) { +tty_encode_baud_rate (tty,0 ,0 ); +return 0 ; + } + + idx =f81534_find_clk (baudrate);if (idx >=0 ) { - baudrate = baud_list[i];tty_encode_baud_rate (tty, baudrate, baudrate);break ; }
Greg Kroah-Hartman
maintainerPATCH 19/28 ALSA: hda/realtek: fix mute/micmute LEDs for a HP ProBook
In reply to Greg Kroah-HartmanFrom: Andy Chi <[email protected]>
commit 1d8025ec722d5e011f9299c46274eb21fb54a428 upstream.
There is a HP ProBook which using ALC236 codec and need the ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF quirk to make mute LED and micmute LED work.
--- sound/pci/hda/patch_realtek.c | 2 ++ 1 file changed, 2 insertions(+)
sound/pci/hda/patch_realtek.c +2 -0
@@ -9376,6 +9376,8 @@ static const struct snd_pci_quirk alc269SND_PCI_QUIRK (0x103c ,0x8abb ,"HP ZBook Firefly 14 G9" ,ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x8ad1 ,"HP EliteBook 840 14 inch G9 Notebook PC" ,ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x8ad2 ,"HP EliteBook 860 16 inch G9 Notebook PC" ,ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED ), +SND_PCI_QUIRK (0x103c ,0x8b5d ,"HP" ,ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF ), +SND_PCI_QUIRK (0x103c ,0x8b5e ,"HP" ,ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF ),SND_PCI_QUIRK (0x1043 ,0x103e ,"ASUS X540SA" ,ALC256_FIXUP_ASUS_MIC ),SND_PCI_QUIRK (0x1043 ,0x103f ,"ASUS TX300" ,ALC282_FIXUP_ASUS_TX300 ), SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
Greg Kroah-Hartman
maintainerPATCH 20/28 xhci: Apply XHCI_RESET_TO_DEFAULT quirk to ADL-N
In reply to Greg Kroah-HartmanFrom: Reka Norman <[email protected]>
commit fed70b61ef2c0aed54456db3d485b215f6cc3209 upstream.
ADL-N systems have the same issue as ADL-P, where a large boot firmware delay is seen if USB ports are left in U3 at shutdown. So apply the XHCI_RESET_TO_DEFAULT quirk to ADL-N as well.
This patch depends on commit 34cd2db408d5 ("xhci: Add quirk to reset host back to default state at shutdown").
The issue it fixes is a ~20s boot time delay when booting from S5. It affects ADL-N devices, and ADL-N support was added starting from v5.16.
--- drivers/usb/host/xhci-pci.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/usb/host/xhci-pci.c +3 -1
@@ -59,6 +59,7 @@#define PCI_DEVICE_ID_INTEL_TIGER_LAKE_XHCI 0x9a13#define PCI_DEVICE_ID_INTEL_MAPLE_RIDGE_XHCI 0x1138#define PCI_DEVICE_ID_INTEL_ALDER_LAKE_PCH_XHCI 0x51ed +#define PCI_DEVICE_ID_INTEL_ALDER_LAKE_N_PCH_XHCI 0x54ed#define PCI_DEVICE_ID_AMD_RENOIR_XHCI 0x1639#define PCI_DEVICE_ID_AMD_PROMONTORYA_4 0x43b9
@@ -246,7 +247,8 @@ static void xhci_pci_quirks(struct devic xhci->quirks |=XHCI_MISSING_CAS ;if (pdev->vendor ==PCI_VENDOR_ID_INTEL && - pdev->device ==PCI_DEVICE_ID_INTEL_ALDER_LAKE_PCH_XHCI ) + (pdev->device ==PCI_DEVICE_ID_INTEL_ALDER_LAKE_PCH_XHCI || + pdev->device ==PCI_DEVICE_ID_INTEL_ALDER_LAKE_N_PCH_XHCI )) xhci->quirks |=XHCI_RESET_TO_DEFAULT ; if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
Greg Kroah-Hartman
maintainerPATCH 21/28 igb: Initialize mailbox message for VF reset
In reply to Greg Kroah-HartmanFrom: Tony Nguyen <[email protected]>
commit de5dc44370fbd6b46bd7f1a1e00369be54a041c8 upstream.
When a MAC address is not assigned to the VF, that portion of the message sent to the VF is not set. The memory, however, is allocated from the stack meaning that information may be leaked to the VM. Initialize the message buffer to 0 so that no information is passed to the VM in this case.
--- drivers/net/ethernet/intel/igb/igb_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/intel/igb/igb_main.c +1 -1
@@ -7522,7 +7522,7 @@ static void igb_vf_reset_msg(struct igb_ {struct e1000_hw *hw = &adapter->hw;unsigned char *vf_mac = adapter->vf_data[vf].vf_mac_addresses; -u32 reg, msgbuf[3 ]; +u32 reg, msgbuf[3 ] = {};u8 *addr = (u8 *)(&msgbuf[1 ]);/* process all the same items cleared in a function level reset */
Greg Kroah-Hartman
maintainerPATCH 22/28 usb: typec: ucsi: Resume in separate work
In reply to Greg Kroah-HartmanFrom: Heikki Krogerus <[email protected]>
commit e0dced9c7d4763fd97c86a13902d135f03cc42eb upstream.
It can take more than one second to check each connector when the system is resumed. So if you have, say, eight connectors, it may take eight seconds for ucsi_resume() to finish. That's a bit too much.
This will modify ucsi_resume() so that it schedules a work where the interface is actually resumed instead of checking the connectors directly. The connections will also be checked in separate tasks which are queued for each connector separately.
--- drivers/usb/typec/ucsi/ucsi.c | 17 +++++++++++++---- drivers/usb/typec/ucsi/ucsi.h | 1 + 2 files changed, 14 insertions(+), 4 deletions(-)
drivers/usb/typec/ucsi/ucsi.c +13 -4
@@ -1270,8 +1270,9 @@ err:return ret; } -int ucsi_resume (struct ucsi *ucsi) +static void ucsi_resume_work (struct work_struct *work) { + struct ucsi *ucsi = container_of(work, struct ucsi, resume_work);struct ucsi_connector *con;u64 command;int ret;
@@ -1279,15 +1280,21 @@ int ucsi_resume(struct ucsi *ucsi)/* Restore UCSI notification enable mask after system resume */ command =UCSI_SET_NOTIFICATION_ENABLE | ucsi->ntfy; ret =ucsi_send_command (ucsi, command,NULL ,0 ); -if (ret <0 ) -return ret; +if (ret <0 ) { +dev_err (ucsi->dev,"failed to re-enable notifications (%d)\n" , ret); +return ; + }for (con = ucsi->connector; con->port; con++) {mutex_lock (&con->lock); -ucsi_check_connection (con); +ucsi_partner_task (con, ucsi_check_connection,1 ,0 );mutex_unlock (&con->lock); } +} +int ucsi_resume (struct ucsi *ucsi) +{ +queue_work (system_long_wq, &ucsi->resume_work);return 0 ; }EXPORT_SYMBOL_GPL (ucsi_resume);
@@ -1347,6 +1354,7 @@ struct ucsi *ucsi_create(struct device *if (!ucsi)return ERR_PTR (-ENOMEM ); +INIT_WORK (&ucsi->resume_work, ucsi_resume_work);INIT_DELAYED_WORK (&ucsi->work, ucsi_init_work);mutex_init (&ucsi->ppm_lock); ucsi->dev = dev;
@@ -1401,6 +1409,7 @@ void ucsi_unregister(struct ucsi *ucsi)/* Make sure that we are not in the middle of driver initialization */ cancel_delayed_work_sync (&ucsi->work); +cancel_work_sync (&ucsi->resume_work);/* Disable notifications */ ucsi->ops->async_write (ucsi,UCSI_CONTROL , &cmd,sizeof (cmd));
drivers/usb/typec/ucsi/ucsi.h +1 -0
@@ -287,6 +287,7 @@ struct ucsi {struct ucsi_capability cap;struct ucsi_connector *connector; +struct work_struct resume_work;struct delayed_work work;int work_count;#define UCSI_ROLE_SWITCH_RETRY_PER_HZ 10
Greg Kroah-Hartman
maintainerPATCH 23/28 usb: dwc3: pci: Update PCIe device ID for USB3 controller on CPU sub-system for Raptor Lake
In reply to Greg Kroah-HartmanFrom: Shruthi Sanil <[email protected]>
commit f05f80f217bf52443a2582bca19fd78188333f25 upstream.
The device ID 0xa70e is defined for the USB3 device controller in the CPU sub-system of Raptor Lake platform. Hence updating the ID accordingly.
--- drivers/usb/dwc3/dwc3-pci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/dwc3/dwc3-pci.c +1 -1
@@ -44,7 +44,7 @@#define PCI_DEVICE_ID_INTEL_ADLP 0x51ee#define PCI_DEVICE_ID_INTEL_ADLM 0x54ee#define PCI_DEVICE_ID_INTEL_ADLS 0x7ae1 -#define PCI_DEVICE_ID_INTEL_RPL 0x460e +#define PCI_DEVICE_ID_INTEL_RPL 0xa70e#define PCI_DEVICE_ID_INTEL_RPLS 0x7a61#define PCI_DEVICE_ID_INTEL_MTLP 0x7ec1#define PCI_DEVICE_ID_INTEL_MTL 0x7e7e
Greg Kroah-Hartman
maintainerPATCH 24/28 KEYS: encrypted: fix key instantiation with user-provided data
In reply to Greg Kroah-HartmanFrom: Nikolaus Voss <[email protected]>
commit 5adedd42245af0860ebda8fe0949f24f5204c1b1 upstream.
Commit cd3bc044af48 ("KEYS: encrypted: Instantiate key with user-provided decrypted data") added key instantiation with user provided decrypted data. The user data is hex-ascii-encoded but was just memcpy'ed to the binary buffer. Fix this to use hex2bin instead.
Old keys created from user provided decrypted data saved with "keyctl pipe" are still valid, however if the key is recreated from decrypted data the old key must be converted to the correct format. This can be done with a small shell script, e.g.:
BROKENKEY=abcdefABCDEF1234567890aaaaaaaaaa NEWKEY=$(echo -ne $BROKENKEY | xxd -p -c32)
keyctl add user masterkey "$(cat masterkey.bin)" @u keyctl add encrypted testkey "new user:masterkey 32 $NEWKEY" @u
However, NEWKEY is still broken: If for BROKENKEY 32 bytes were specified, a brute force attacker knowing the key properties would only need to try at most 2^(16*8) keys, as if the key was only 16 bytes long.
The security issue is a result of the combination of limiting the input range to hex-ascii and using memcpy() instead of hex2bin(). It could have been fixed either by allowing binary input or using hex2bin() (and doubling the ascii input key length). This patch implements the latter.
The corresponding test for the Linux Test Project ltp has also been fixed (see link below).
--- Documentation/security/keys/trusted-encrypted.rst | 3 ++- security/keys/encrypted-keys/encrypted.c | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-)
Documentation/security/keys/trusted-encrypted.rst +2 -1
@@ -350,7 +350,8 @@ Load an encrypted key "evm" from saved b Instantiate an encrypted key "evm" using user-provided decrypted data:: - $ keyctl add encrypted evm "new default user:kmk 32 `cat evm_decrypted_data.blob`" @u + $ evmkey=$(dd if=/dev/urandom bs=1 count=32 | xxd -c32 -p) + $ keyctl add encrypted evm "new default user:kmk 32 $evmkey" @u 794890253 $ keyctl print 794890253
security/keys/encrypted-keys/encrypted.c +3 -3
@@ -627,7 +627,7 @@ static struct encrypted_key_payload *encpr_err ("encrypted key: instantiation of keys using provided decrypted data is disabled since CONFIG_USER_DECRYPTED_DATA is set to false\n" );return ERR_PTR (-EINVAL ); } -if (strlen (decrypted_data) != decrypted_datalen) { +if (strlen (decrypted_data) != decrypted_datalen *2 ) {pr_err ("encrypted key: decrypted data provided does not match decrypted data length provided\n" );return ERR_PTR (-EINVAL ); }
@@ -791,8 +791,8 @@ static int encrypted_init(struct encrypt ret =encrypted_key_decrypt (epayload, format, hex_encoded_iv); }else if (decrypted_data) {get_random_bytes (epayload->iv, ivsize); -memcpy (epayload->decrypted_data, decrypted_data, - epayload->decrypted_datalen); + ret =hex2bin (epayload->decrypted_data, decrypted_data, + epayload->decrypted_datalen); }else {get_random_bytes (epayload->iv, ivsize);get_random_bytes (epayload->decrypted_data, epayload->decrypted_datalen);
Greg Kroah-Hartman
maintainerPATCH 25/28 usb: ulpi: defer ulpi_register on ulpi_read_id timeout
In reply to Greg Kroah-HartmanFrom: Ferry Toth <[email protected]>
commit 8a7b31d545d3a15f0e6f5984ae16f0ca4fd76aac upstream.
Since commit 0f0101719138 ("usb: dwc3: Don't switch OTG -> peripheral if extcon is present") Dual Role support on Intel Merrifield platform broke due to rearranging the call to dwc3_get_extcon().
It appears to be caused by ulpi_read_id() on the first test write failing with -ETIMEDOUT. Currently ulpi_read_id() expects to discover the phy via DT when the test write fails and returns 0 in that case, even if DT does not provide the phy. As a result usb probe completes without phy.
Make ulpi_read_id() return -ETIMEDOUT to its user if the first test write fails. The user should then handle it appropriately. A follow up patch will make dwc3_core_init() set -EPROBE_DEFER in this case and bail out.
--- drivers/usb/common/ulpi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/common/ulpi.c +1 -1
@@ -207,7 +207,7 @@ static int ulpi_read_id(struct ulpi *ulp/* Test the interface */ ret =ulpi_write (ulpi,ULPI_SCRATCH ,0xaa );if (ret <0 ) - goto err; +return ret; ret =ulpi_read (ulpi,ULPI_SCRATCH );if (ret <0 )
Greg Kroah-Hartman
maintainerPATCH 26/28 Bluetooth: L2CAP: Fix u8 overflow
In reply to Greg Kroah-HartmanFrom: Sungwoo Kim <[email protected]>
[ Upstream commit bcd70260ef56e0aee8a4fc6cd214a419900b0765 ]
By keep sending L2CAP_CONF_REQ packets, chan->num_conf_rsp increases multiple times and eventually it will wrap around the maximum number (i.e., 255).
This patch prevents this by adding a boundary check with L2CAP_MAX_CONF_RSP
Btmon log:
Bluetooth monitor ver 5.64
= Note: Linux version 6.1.0-rc2 (x86_64) 0.264594
= Note: Bluetooth subsystem version 2.22 0.264636
@ MGMT Open: btmon (privileged) version 1.22 {0x0001} 0.272191
= New Index: 00:00:00:00:00:00 (Primary,Virtual,hci0) [hci0] 13.877604
@ RAW Open: 9496 (privileged) version 2.22 {0x0002} 13.890741
= Open Index: 00:00:00:00:00:00 [hci0] 13.900426
(...)
Quoted 1 line
ACL Data RX: Handle 200 flags
0x00dlen 1033 #32 [hci0] 14.273106
invalid packet size (12 != 1033)
08 00 01 00 02 01 04 00 01 10 ff ff ............Quoted 1 line
ACL Data RX: Handle 200 flags
0x00dlen 1547 #33 [hci0] 14.273561
invalid packet size (14 != 1547)
0a 00 01 00 04 01 06 00 40 00 00 00 00 00 ........@.....Quoted 1 line
ACL Data RX: Handle 200 flags
0x00dlen 2061 #34 [hci0] 14.274390
invalid packet size (16 != 2061)
0c 00 01 00 04 01 08 00 40 00 00 00 00 00 00 04 ........@.......Quoted 1 line
ACL Data RX: Handle 200 flags
0x00dlen 2061 #35 [hci0] 14.274932
invalid packet size (16 != 2061)
0c 00 01 00 04 01 08 00 40 00 00 00 07 00 03 00 ........@.......= bluetoothd: Bluetooth daemon 5.43 14.401828
Quoted 1 line
ACL Data RX: Handle 200 flags
0x00dlen 1033 #36 [hci0] 14.275753
invalid packet size (12 != 1033)
08 00 01 00 04 01 04 00 40 00 00 00 ........@...--- net/bluetooth/l2cap_core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/bluetooth/l2cap_core.c +2 -1
@@ -4453,7 +4453,8 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, chan->ident = cmd->ident;l2cap_send_cmd (conn, cmd->ident,L2CAP_CONF_RSP , len, rsp); - chan->num_conf_rsp++; +if (chan->num_conf_rsp <L2CAP_CONF_MAX_CONF_RSP ) + chan->num_conf_rsp++;/* Reset config buffer. */ chan->conf_len =0 ;
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 27/28 selftests: net: Use "grep -E" instead of "egrep"
In reply to Greg Kroah-HartmanFrom: Tiezhu Yang <[email protected]>
[ Upstream commit 6a30d3e3491dc562384e9f15b201a8a25b57439f ]
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 using "grep -E" instead.
sed -i "s/egrep/grep -E/g" grep egrep -rwl tools/testing/selftests/net
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
--- tools/testing/selftests/net/toeplitz.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/testing/selftests/net/toeplitz.sh +1 -1
@@ -32,7 +32,7 @@ DEV="eth0" # This is determined by reading the RSS indirection table using ethtool. get_rss_cfg_num_rxqs() { echo $(ethtool -x "${DEV}" | - egrep [[:space:]]+[0-9]+:[[:space:]]+ | + grep -E [[:space:]]+[0-9]+:[[:space:]]+ | cut -d: -f2- | awk '{$1=$1};1' | tr ' ' '\n' |
Signature · 1 line
2.35.1
Greg Kroah-Hartman
maintainerPATCH 28/28 net: loopback: use NET_NAME_PREDICTABLE for name_assign_type
In reply to Greg Kroah-HartmanFrom: Rasmus Villemoes <[email protected]>
[ Upstream commit 31d929de5a112ee1b977a89c57de74710894bbbf ]
When the name_assign_type attribute was introduced (commit 685343fc3ba6, "net: add name_assign_type netdev attribute"), the loopback device was explicitly mentioned as one which would make use of NET_NAME_PREDICTABLE:
The name_assign_type attribute gives hints where the interface name of a given net-device comes from. These values are currently defined:
...
NET_NAME_PREDICTABLE:
The ifname has been assigned by the kernel in a predictable way that is guaranteed to avoid reuse and always be the same for a given device. Examples include statically created devices like the loopback device [...]
Switch to that so that reading /sys/class/net/lo/name_assign_type produces something sensible instead of returning -EINVAL.
--- drivers/net/loopback.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/loopback.c +1 -1
@@ -211,7 +211,7 @@ static __net_init int loopback_net_init(struct net *net)int err; err = -ENOMEM ; - dev =alloc_netdev (0 ,"lo" ,NET_NAME_UNKNOWN , loopback_setup); + dev =alloc_netdev (0 ,"lo" ,NET_NAME_PREDICTABLE , loopback_setup);if (!dev) goto out;
Signature · 1 line
2.35.1
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.0.15 release. There are 28 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 Wed, 21 Dec 2022 18:29:31 +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.0.15-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.0.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.0.15 release. There are 28 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 Wed, 21 Dec 2022 18:29:31 +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.0.15-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.0.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 4 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.0.15 release. There are 28 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 cross-compiled for arm64 (bcm2711_defconfig, GCC 10.2.0) and powerpc (ps3_defconfig, GCC 12.2.0).
Signature · 1 line
An old man doll... just what I always wanted! - Clara
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.0.15 release. There are 28 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 Wed, 21 Dec 2022 18:29:31 +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.0.15-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.0.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.0.15-rc1
* git: https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable-rc
* git branch: linux-6.0.y
* git commit: 65f3ab07fb2407bb18fa9f3d0526929483aaebfb
* git describe: v6.0.14-29-g65f3ab07fb24
* test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.0.y/build/v6.0.14-29-g65f3ab07fb24
## Test Regressions (compared to v6.0.14)
## Metric Regressions (compared to v6.0.14)
## Test Fixes (compared to v6.0.14)
## Metric Fixes (compared to v6.0.14)
## Test result summary
total: 143871, pass: 125746, fail: 3356, skip: 14329, xfail: 440
## Build Summary
* arc: 5 total, 5 passed, 0 failed
* arm: 151 total, 146 passed, 5 failed
* arm64: 49 total, 48 passed, 1 failed
* i386: 39 total, 36 passed, 3 failed
* mips: 30 total, 28 passed, 2 failed
* parisc: 8 total, 8 passed, 0 failed
* powerpc: 38 total, 32 passed, 6 failed
* riscv: 16 total, 16 passed, 0 failed
* s390: 16 total, 16 passed, 0 failed
* sh: 14 total, 12 passed, 2 failed
* sparc: 8 total, 8 passed, 0 failed
* x86_64: 42 total, 41 passed, 1 failed
## Test suites summary
* boot
* fwts
* igt-gpu-tools
* kselftest-android
* kselftest-arm64
* kselftest-arm64/arm64.btitest.bti_c_func
* kselftest-arm64/arm64.btitest.bti_j_func
* kselftest-arm64/arm64.btitest.bti_jc_func
* kselftest-arm64/arm64.btitest.bti_none_func
* kselftest-arm64/arm64.btitest.nohint_func
* kselftest-arm64/arm64.btitest.paciasp_func
* kselftest-arm64/arm64.nobtitest.bti_c_func
* kselftest-arm64/arm64.nobtitest.bti_j_func
* kselftest-arm64/arm64.nobtitest.bti_jc_func
* kselftest-arm64/arm64.nobtitest.bti_none_func
* kselftest-arm64/arm64.nobtitest.nohint_func
* kselftest-arm64/arm64.nobtitest.paciasp_func
* kselftest-breakpoints
* kselftest-capabilities
* kselftest-cgroup
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-cpufreq
* kselftest-drivers-dma-buf
* kselftest-efivarfs
* kselftest-filesystems
* kselftest-filesystems-binderfs
* kselftest-firmware
* kselftest-fpu
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-ir
* kselftest-kcmp
* kselftest-kexec
* kselftest-kvm
* kselftest-lib
* kselftest-livepatch
* kselftest-membarrier
* kselftest-memfd
* kselftest-memory-hotplug
* kselftest-mincore
* kselftest-mount
* kselftest-mqueue
* kselftest-net-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-timers
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user
* kselftest-vm
* kselftest-x86
* kselftest-zram
* kunit
* kvm-unit-tests
* libgpiod
* libhugetlbfs
* 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-open-posix-tests
* ltp-pty
* ltp-sched
* ltp-securebits
* ltp-smoke
* ltp-syscalls
* ltp-tracing
* network-basic-tests
* packetdrill
* perf
* perf/Zstd-perf.data-compression
* rcutorture
* v4l2-compliance
* vdso
--
Linaro LKFT
https://lkft.linaro.org
Hi Greg,
Quoted 7 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.0.15 release. There are 28 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 Wed, 21 Dec 2022 18:29:31 +0000. Anything received after that time might be too late.
Build test (gcc version 12.2.1 20221127):
mips: 52 configs -> no failure
arm: 100 configs -> no failure
arm64: 3 configs -> no failurex86_64: 4 configs -> no failure
alpha allmodconfig -> no failure
csky allmodconfig -> no failure
powerpc allmodconfig -> no failure
riscv allmodconfig -> no failure
s390 allmodconfig -> no failure
xtensa allmodconfig -> no failure
Boot test:x86_64: Booted on my test laptop. No regression.x86_64: Booted on qemu. No regression. [1]
arm64: Booted on rpi4b (4GB model). No regression. [2]
mips: Booted on ci20 board. No regression. [3]
[1]. https://openqa.qa.codethink.co.uk/tests/2421
[2]. https://openqa.qa.codethink.co.uk/tests/2426
[3]. https://openqa.qa.codethink.co.uk/tests/2429
Signature · 2 lines
Regards Sudip
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.0.15 release. There are 28 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 Wed, 21 Dec 2022 18:29:31 +0000. Anything received after that time might be too late.
Build results:
total: 155 pass: 155 fail: 0 Qemu test results: total: 500 pass: 500 fail: 0
Guenter
Quoted 10 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.0.15 release. There are 28 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 Wed, 21 Dec 2022 18:29:31 +0000. Anything received after that time might be too late.
Quoted 7 lines
Build results:
total: 155 pass: 155 fail: 0 Qemu test results: total: 500 pass: 500 fail: 0Tested-by Guenter Roeck <[email protected]>
Wrong results, sorry. I'll resend once I have real ones.
Guenter
Quoted 16 lines · Guenter Roeck
Quoted 15 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.0.15 release. There are 28 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 Wed, 21 Dec 2022 18:29:31 +0000. Anything received after that time might be too late.
Build results:
total: 155 pass: 155 fail: 0 Qemu test results: total: 500 pass: 500 fail: 0
Quoted 5 lines
Quoted 2 lines
Tested-by Guenter Roeck <[email protected]>Wrong results, sorry. I'll resend once I have real ones.
Here are the real test results:
Build results:
total: 155 pass: 155 fail: 0 Qemu test results: total: 500 pass: 498 fail: 2 Failed tests: arm:xilinx-zynq-a9:multi_v7_defconfig:usb0:mem128:net,default:zynq-zc702:rootfs arm:xilinx-zynq-a9:multi_v7_defconfig:usb0:mem128:zynq-zed:rootfs
The arm:xilinx-zynq-a9 test failures are seen all the way to v4.19.y.
Guenter
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.0.15 release. There are 28 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 Wed, 21 Dec 2022 18:29:31 +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.0.15-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.0.y
and the diffstat can be found below.thanks,
greg k-h
Built and booted successfully on RISC-V RV64 (HiFive Unmatched).
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.0.15 release. There are 28 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 Wed, 21 Dec 2022 18:29:31 +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.0.15-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.0.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v6.0:
11 builds: 11 pass, 0 fail
28 boots: 28 pass, 0 fail
130 tests: 130 pass, 0 failLinux version: 6.0.15-rc1-g65f3ab07fb24
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000,
tegra20-ventana, tegra210-p2371-2180,
tegra210-p3450-0000, tegra30-cardhu-a04Jon
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.0.15 release. There are 28 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 Wed, 21 Dec 2022 18:29:31 +0000. Anything received after that time might be too late.
Hi,
Compiled and tested on my x86_64 test systems, no errors or regressions to report.
-- Slade
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.0.15 release. There are 28 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 Wed, 21 Dec 2022 18:29:31 +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.0.15-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.0.y
and the diffstat can be found below.thanks,
greg k-h
Tested rc1 against the Fedora build system (aarch64, armv7, ppc64le, s390x, x86_64), and boot tested x86_64. No regressions noted.