Linux 6.0.15
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.0.15 kernel.
All users of the 6.0 kernel series must upgrade.
The updated 6.0.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.0.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/security/keys/trusted-encrypted.rst | 3 Makefile | 2 drivers/net/ethernet/intel/igb/igb_main.c | 2 drivers/net/loopback.c | 2 drivers/pci/controller/pcie-mt7621.c | 3 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 tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c | 24 ++ tools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c | 89 +++++++++ tools/testing/selftests/bpf/prog_tests/module_attach.c | 7 tools/testing/selftests/bpf/progs/kprobe_multi.c | 50 +++++ tools/testing/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 31 files changed, 410 insertions(+), 120 deletions(-)
Andy Chi (1):
ALSA: hda/realtek: fix mute/micmute LEDs for a HP ProBook
Bruno Thomsen (1):
USB: serial: cp210x: add Kamstrup RF sniffer PIDs
Duke Xin (1):
USB: serial: option: add Quectel EM05-G modem
Greg Kroah-Hartman (1):
Linux 6.0.15
Heikki Krogerus (1):
usb: typec: ucsi: Resume in separate work
Jan Kara (4):
udf: Discard preallocation before extending file with a hole
udf: Fix preallocation discarding at indirect extent boundary
udf: Do not bother looking for prealloc extents if i_lenExtents matches i_size
udf: Fix extending file within last block
Jiri Olsa (8):
kallsyms: Make module_kallsyms_on_each_symbol generally available
ftrace: Add support to resolve module symbols in ftrace_lookup_symbols
bpf: Rename __bpf_kprobe_multi_cookie_cmp to bpf_kprobe_multi_addrs_cmp
bpf: Take module reference on kprobe_multi link selftests/bpf: Add load_kallsyms_refresh function selftests/bpf: Add bpf_testmod_fentry_* functions selftests/bpf: Add kprobe_multi check to module attach test selftests/bpf: Add kprobe_multi kmod attach api tests
Johan Hovold (2):
USB: serial: f81232: fix division by zero on line-speed change
USB: serial: f81534: fix division by zero on line-speed change
John Thomson (1):
PCI: mt7621: Add sentinel to quirks table
Nikolaus Voss (1):
KEYS: encrypted: fix key instantiation with user-provided data
Rasmus Villemoes (1):
net: loopback: use NET_NAME_PREDICTABLE for name_assign_type
Reka Norman (1):
xhci: Apply XHCI_RESET_TO_DEFAULT quirk to ADL-N
Shruthi Sanil (1):
usb: dwc3: pci: Update PCIe device ID for USB3 controller on CPU sub-system for Raptor Lake
Sungwoo Kim (1):
Bluetooth: L2CAP: Fix u8 overflow
Szymon Heidrich (1):
usb: gadget: uvc: Prevent buffer overflow in setup handler
Tiezhu Yang (1):
selftests: net: Use "grep -E" instead of "egrep"
Tony Nguyen (1):
igb: Initialize mailbox message for VF reset
Greg Kroah-Hartman
maintainerDocumentation/security/keys/trusted-encrypted.rst +2 -1
@@ -350,7 +350,8 @@ Load an encrypted key "evm" from saved blob:: 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
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 0 -SUBLEVEL = 14 +SUBLEVEL = 15 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
drivers/net/ethernet/intel/igb/igb_main.c +1 -1
@@ -7522,7 +7522,7 @@ static void igb_vf_reset_msg(struct igb_adapter *adapter, u32 vf) {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 */
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;
drivers/pci/controller/pcie-mt7621.c +2 -1
@@ -471,7 +471,8 @@ static int mt7621_pcie_register_host(struct pci_host_bridge *host) }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)
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
drivers/usb/gadget/function/f_uvc.c +3 -2
@@ -216,8 +216,9 @@ uvc_function_ep0_complete(struct usb_ep *ep, struct usb_request *req)memset (&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); } }
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 device *dev, struct xhci_hcd *xhci) 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 &&
drivers/usb/serial/cp210x.c +2 -0
@@ -195,6 +195,8 @@ static const struct usb_device_id id_table[] = { { 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 */
drivers/usb/serial/f81232.c +7 -5
@@ -130,9 +130,6 @@ static u8 const clock_table[] = { F81232_CLK_1_846_MHZ, F81232_CLK_14_77_MHZ,static 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 tty_struct *tty,speed_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 ; }
drivers/usb/serial/f81534.c +7 -5
@@ -536,9 +536,6 @@ static int f81534_submit_writer(struct usb_serial_port *port, gfp_t mem_flags)static 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(struct usb_serial_port *port,u32 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 ; }
drivers/usb/serial/option.c +3 -0
@@ -255,6 +255,7 @@ static void option_instat_callback(struct urb *urb);#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_ids[] = { { 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) },
drivers/usb/typec/ucsi/ucsi.c +13 -4
@@ -1270,8 +1270,9 @@ static int ucsi_init(struct ucsi *ucsi)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 *dev, const struct ucsi_operations *ops)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
fs/udf/inode.c +34 -42
153 lines not on this page · raw message
fs/udf/truncate.c +15 -33
75 lines not on this page · raw message
include/linux/module.h +9 -0
@@ -879,8 +879,17 @@ static inline bool module_sig_ok(struct module *module) }#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_name(const char *name)return 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 @@ int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,mutex_unlock (&module_mutex);return ret; } -#endif /* CONFIG_LIVEPATCH */
kernel/trace/bpf_trace.c +95 -3
156 lines not on this page · raw message
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, const char *name,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
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 ;
security/keys/encrypted-keys/encrypted.c +3 -3
@@ -627,7 +627,7 @@ static struct encrypted_key_payload *encrypted_key_alloc(struct key *key,pr_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 encrypted_key_payload *epayload, 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);
sound/pci/hda/patch_realtek.c +2 -0
@@ -9376,6 +9376,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {SND_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),
tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c +24 -0
@@ -88,6 +88,23 @@ __weak noinline struct file *bpf_testmod_return_ptr(int arg) } } +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, struct kobject *kobj,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);
tools/testing/selftests/bpf/prog_tests/kprobe_multi_testmod_test.c new file +89 -0
89 lines not on this page · raw message
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/kprobe_multi.c +50 -0
53 lines not on this page · raw message
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";
tools/testing/selftests/bpf/trace_helpers.c +13 -7
@@ -23,7 +23,7 @@ static int ksym_cmp(const void *p1, const void *p2)return ((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);
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' |