hald segfaults when helpers from DBus fail to run

John (J5) Palmieri johnp at redhat.com
Fri Jan 20 10:03:35 PST 2006


I can confirm this is an issue with HAL 0.5.6.  We had SELinux blocking
scripts from executing which would bring down HAL.

On Fri, 2006-01-20 at 15:07 +1000, Rohan McGovern wrote:
> Hi,
> 
> hald ( 0.5.5.1, but probably 0.5.6 too ) will segmentation fault
> if it fails to run a program invoked as a result of a DBus call.
> 
> Try:
> (as root)
> # chmod a-x /usr/sbin/hal-system-power-hibernate
> (as user with sufficient dbus permissions)
> # dbus-send --system --dest=org.freedesktop.Hal \
>     --type=method_call /org/freedesktop/Hal/devices/computer \
>     org.freedesktop.Hal.Device.SystemPowerManagement.Hibernate
> 
> On my system, HAL segfaults at this point:
> 
> 14:52:44.870 [I] hald_dbus.c:2900: OK for method 'Hibernate' with signature
>   '' on interface 'org.freedesktop.Hal.Device.SystemPowerManagement' for
>   UDI '/org/freedesktop/Hal/devices/computer' and execpath
>   'hal-system-power-hibernate'
> 14:52:44.871 [E] util.c:731: Couldn't spawn 'hal-system-power-hibernate'
>    err=Failed to execute child process
>    "hal-system-power-hibernate" (Permission denied)!
> zsh: segmentation fault  hald --daemon=no --verbose=yes
> 
> Backtrace:
> #0  0x0804deb6 in hal_device_num_properties ()
> #1  0x0804d3ca in hal_util_helper_invoke_with_pipes ()
> #2  0x0804d64b in hal_util_helper_invoke ()
> #3  0x0804d375 in callout_do_next ()
> #4  0x0804d5a1 in hal_util_helper_invoke_with_pipes ()
> #5  0x08055626 in hald_dbus_filter_handle_methods ()
> #6  0x08055800 in hald_dbus_filter_function ()
> #7  0x4a9d5c0c in dbus_connection_dispatch () from /usr/lib/libdbus-1.so.1
> #8  0x4a9fd583 in message_queue_dispatch () 
>      from /usr/lib/libdbus-glib-1.so.1
> #9  0x4bed90d6 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
> #10 0x4beda45e in g_main_context_iterate () from /usr/lib/libglib-2.0.so.0
> #11 0x4beda6b7 in g_main_loop_run () from /usr/lib/libglib-2.0.so.0
> #12 0x08051e40 in main ()
> 
> From looking at the source, the problem seems to originate from util.c line 
> 735: 
> 
>   callout_failed(ed);
> 
> callout_failed assumes that the data1 parameter passed to 
> hal_util_helper_invoke_with_pipes is a pointer to Callout, but when called 
> from hald_dbus_filter_handle_methods it is a pointer to DBusMesage.  This 
> eventually results in hal_util_helper_invoke_with_pipes being called again 
> with a pointer to a bogus HalDevice.
> 
> Since hal_util_helper_invoke_with_pipes isn't documented, I wasn't sure 
> whether callout_failed or hald_dbus_filter_handle_methods is the one using 
> the wrong type, so I didn't attempt a fix.  Also, my apologies if this is 
> no longer an issue in HAL 0.5.6.
> 
> Rohan
> _______________________________________________
> hal mailing list
> hal at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/hal
-- 



More information about the hal mailing list