#943381 /usr/sbin/ModemManager: modemmanager segfaults when plugging an atusb

Package:
modemmanager
Source:
modemmanager
Description:
D-Bus service for managing modems
Submitter:
Uwe Kleine-König
Date:
2019-10-24 06:12:06 UTC
Severity:
normal
#943381#5
Date:
2019-10-24 06:08:34 UTC
From:
To:
Hello,

when plugging in an atusb (http://shop.sysmocom.de/products/atusb) the
following is logged to the kernel log (dmesg):

	[39780.102012] usb 1-1: new full-speed USB device number 18 using xhci_hcd
	[39780.251752] usb 1-1: New USB device found, idVendor=20b7, idProduct=1540, bcdDevice= 0.01
	[39780.251756] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=1
	[39780.251759] usb 1-1: SerialNumber: 47303130343715181c16
	[39783.064299] usb 1-1: USB disconnect, device number 18
	[39783.371350] usb 1-1: new full-speed USB device number 19 using xhci_hcd
	[39783.526537] usb 1-1: New USB device found, idVendor=20b7, idProduct=1540, bcdDevice= 0.01
	[39783.526541] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=1
	[39783.526544] usb 1-1: SerialNumber: 47303130343715181c16
	[39783.530746] usb 1-1: ATUSB: AT86RF231 version 2
	[39783.530967] usb 1-1: Firmware: major: 0, minor: 3, hardware type: ATUSB (2)
	[39783.531506] usb 1-1: Firmware: build #132 Mo 28. Nov 16:20:35 CET 2016
	[39783.531815] usb 1-1: Read permanent extended address 10:e2:d5:ff:ff:00:02:42 from device
	[39783.567346] ModemManager[27151]: segfault at 0 ip 000055e520cbce6a sp 00007ffe15b75660 error 4 in ModemManager[55e520c08000+b7000]
	[39783.567351] Code: 4c 89 e7 e8 60 25 f5 ff 48 8b 45 18 48 8d 1d 0c 87 03 00 48 8b 38 e8 a5 b2 f4 ff b9 06 00 00 00 48 8d 3d ea 86 03 00 48 89 c6 <f3> a6 0f 97 c0 1c 00 84 c0 74 a0 31 db 48 89 d8 5b 5d 41 5c c3 90

The corresponding backtrace of modemmanager's segfault looks as follows:

	#0  0x000055e520cbce6a in kernel_device_get_driver (_self=<optimized out>) at kerneldevice/mm-kernel-device-udev.c:346
		self = 0x7fc194005660
		driver = 0x0
		subsys = <optimized out>
		name = 0x0
		__FUNCTION__ = "kernel_device_get_driver"
	#1  0x000055e520c15531 in add_port_driver (kernel_port=0x7fc194005660, self=0x7fc19c006d80) at mm-device.c:175
		driver = <optimized out>
		n_items = <optimized out>
		i = <optimized out>
		probe = <optimized out>
	#2  0x000055e520c15531 in mm_device_grab_port (self=0x7fc19c006d80, kernel_port=0x7fc194005660) at mm-device.c:175
		probe = <optimized out>
	#3  0x000055e520c13bfe in handle_uevent (client=<optimized out>, action=0x55e521e89c60 "add", device=<optimized out>, user_data=<optimized out>) at mm-base-manager.c:482
		self = 0x55e521e40240
		subsys = 0x55e521e72110 "net"
		name = 0x0
		kernel_device = 0x7fc194005660
		__FUNCTION__ = "handle_uevent"
	#4  0x00007fc1ab9878ee in ffi_call_unix64 () at ../src/x86/unix64.S:76
	#5  0x00007fc1ab9872bf in ffi_call (cif=<optimized out>, fn=<optimized out>, rvalue=<optimized out>, avalue=<optimized out>) at ../src/x86/ffi64.c:525
		classes = {X86_64_INTEGER_CLASS, 32766, 364337344, 32766}
		stack = <optimized out>
		argp = <optimized out>
		arg_types = <optimized out>
		gprcount = <optimized out>
		ssecount = <optimized out>
		ngpr = 1
		nsse = 0
		i = <optimized out>
		avn = <optimized out>
		ret_in_memory = <optimized out>
		reg_args = <optimized out>
	#6  0x00007fc1ac2f8482 in g_cclosure_marshal_generic () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
	#7  0x00007fc1ac2f7c8d in g_closure_invoke () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
	#8  0x00007fc1ac30b365 in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
	#9  0x00007fc1ac3142be in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
	#10 0x00007fc1ac31497f in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
	#11 0x00007fc1ac885c14 in monitor_event (source=<optimized out>, condition=<optimized out>, data=0x55e521e36ca0) at gudev/gudevclient.c:103
	--Type <RET> for more, q to quit, c to continue without paging--
		client = 0x55e521e36ca0
		device = 0x55e521ea7160
		udevice = 0x55e521ea3e00
	#12 0x00007fc1ac215dd8 in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
	#13 0x00007fc1ac2161c8 in  () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
	#14 0x00007fc1ac2164c2 in g_main_loop_run () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
	#15 0x000055e520c0f5af in main (argc=<optimized out>, argv=<optimized out>) at main.c:181
		inner = <optimized out>
		err = 0x0
		name_id = 1
		__FUNCTION__ = "main"

The problematic code looks as follows:

	    name = g_udev_device_get_name (self->priv->device);
	    if (!driver && strncmp (name, "rfcomm", 6) == 0)
		driver = "bluetooth";

. As can be seen from the backtrace above name is NULL. I didn't test with
1.10.4 but that code wasn't touched between 1.10.0 and 1.10.4.

Best regards
Uwe