Recently I've enabled NetworkManager on my rawhide installation, but since then, every time I let NetworkManager configure my eth0 interface, nm-applet hangs for about 45 seconds. NetworkManager itself produces the following messages: NetworkManager: <info> starting... NetworkManager: <info> Found radio killswitch /org/freedesktop/Hal/devices/ipw_wlan_switch NetworkManager: <info> eth0: Device is fully-supported using driver 'atl1'. NetworkManager: <info> Now managing wired Ethernet (802.3) device 'eth0'. NetworkManager: <info> Bringing up device eth0 NetworkManager: <info> Deactivating device eth0. NetworkManager: <info> (eth0): exported as /org/freedesktop/Hal/devices/net_00_1b_fc_3d_e0_3b NetworkManager: <info> wlan0: Device is fully-supported using driver 'iwl3945'. NetworkManager: <info> wlan0: driver supports SSID scans (scan_capa 0x01). NetworkManager: <info> Now managing wireless (802.11) device 'wlan0'. NetworkManager: <info> Bringing up device wlan0 NetworkManager: <info> Deactivating device wlan0. NetworkManager: <info> (wlan0): exported as /org/freedesktop/Hal/devices/net_00_1b_77_26_6f_52 NetworkManager: <info> (wlan0) supplicant interface is now in state 2 (from 1). NetworkManager: <info> Activation (eth0) starting connection 'Auto Ethernet' NetworkManager: <info> Activation (eth0) Stage 1 of 5 (Device Prepare) scheduled... NetworkManager: <info> Activation (eth0) Stage 1 of 5 (Device Prepare) started... NetworkManager: <info> Activation (eth0) Stage 2 of 5 (Device Configure) scheduled... NetworkManager: <info> Activation (eth0) Stage 1 of 5 (Device Prepare) complete. NetworkManager: <info> Activation (eth0) Stage 2 of 5 (Device Configure) starting... NetworkManager: <info> Activation (eth0) Stage 2 of 5 (Device Configure) successful. NetworkManager: <info> Activation (eth0) Stage 3 of 5 (IP Configure Start) scheduled. NetworkManager: <info> Activation (eth0) Stage 2 of 5 (Device Configure) complete. NetworkManager: <info> Activation (eth0) Stage 3 of 5 (IP Configure Start) started... NetworkManager: <info> Activation (eth0) Beginning DHCP transaction. NetworkManager: <info> dhclient started with pid 9788 NetworkManager: <info> Activation (eth0) Stage 3 of 5 (IP Configure Start) complete. Internet Systems Consortium DHCP Client 4.0.0 Copyright 2004-2007 Internet Systems Consortium. All rights reserved. For info, please visit http://www.isc.org/sw/dhcp/ NetworkManager: <info> Device 'eth0' DHCP transaction took too long (>45s), stopping it. NetworkManager: <info> eth0: canceled DHCP transaction, dhclient pid 9788 NetworkManager: <info> Activation (eth0) Stage 4 of 5 (IP Configure Timeout) scheduled... NetworkManager: <info> Activation (eth0) Stage 4 of 5 (IP Configure Timeout) started... NetworkManager: <info> Marking connection 'Auto Ethernet' invalid. NetworkManager: <info> Activation (eth0) failed. NetworkManager: <info> Deactivating device eth0. NetworkManager: <info> Activation (eth0) Stage 4 of 5 (IP Configure Timeout) complete. NetworkManager: <info> Deactivating device eth0. If I look in the dmesg I see the following error: dhclient[3812]: segfault at e0 ip 41866b sp 7fff6eb51400 error 4 in dhclient[400000+6e000] To find out what caused this segfault, I've enabled core dumping with ulimit. This produced the following backtrace: (gdb) bt #0 do_peek_token (rval=0x7fff635e93e8, rlen=0x0, cfile=0x0, raw=isc_boolean_false) at conflex.c:386 #1 0x0000000000409327 in read_client_conf_file (name=<value optimized out>, ip=0x0, client=0x67a4c0) at clparse.c:231 #2 0x000000000040a937 in read_client_conf () at clparse.c:160 #3 0x0000000000410f73 in main (argc=11, argv=0x7fff635e9768, envp=<value optimized out>) at dhclient.c:586 The code of the function read_client_config_file() looks like this: cfile = (struct parse *)0; new_parse (&cfile, file, (char *)0, 0, path_dhclient_conf, 0); do { token = peek_token (&val, (unsigned *)0, cfile); if (token == END_OF_FILE) break; parse_client_statement (cfile, ip, client); } while (1); Normally, the function new_parse() should set the cfile to a valid pointer. According to the backtrace, this doesn't happen. As a workaround, I've tried adding an extra if to this function : cfile = (struct parse *)0; new_parse (&cfile, file, (char *)0, 0, path_dhclient_conf, 0); > if (!cfile) > return ISC_R_BADPARSE; do { token = peek_token (&val, (unsigned *)0, cfile); if (token == END_OF_FILE) break; parse_client_statement (cfile, ip, client); } while (1); I've tested with this patch for a couple of days and everything seems to run stable with it.
Created attachment 299724 [details] Proposed workaround
Created attachment 299725 [details] Core dump, from dhclient-4.0.0-13.fc9.x86_64
I can confirm that the patch in comment #1 makes dhclient work with NetworkManager again. Dave, will you build an update or do you want me to do it?
I'll get a build going today with this patch. Thanks.
Fixed in dhcp-4.0.0-14.fc9.