1944388 sbus: avoid using invalid stack point in SBUS_INTERFACE

15 files Authored by pbrezina 5 years ago, Committed by jhrozek 5 years ago,
    sbus: avoid using invalid stack point in SBUS_INTERFACE
    
    SBUS_INTERFACE macros expanded as:
    struct sbus_interface bus =
        ({ sbus_interface(
            "org.freedesktop.DBus",
            ((void *)0),
            (((const struct sbus_method[])
            {
                ({
                    /* ... compile time check of function signature omitted */ ;
                    sbus_method_sync(/* ... full list of params omitted */);
                }),
      ...
    
    This however includes an issue that methods/properties/signals are returned
    by value, however stored in sbus_interface as pointers. Once we return out
    of the top-level block and assign resulting sbus_interface into 'bus' variable
    those objects allocated on stack becomes invalid and can be overwritten by other
    allocations on stack.
    
    This patch overcomes this issue by changing declaration of SBUS_INTERFACE and
    avoiding using this top-level block. This still keeps the declarative structure
    and simplifies the code as it does not require any memory handling and
    tests for successful allocations.
    
        const struct sbus_method __ ## varname ## _m[] = methods;                 \
        const struct sbus_signal __ ## varname ## _s[] = signals;                 \
        const struct sbus_property __ ## varname ## _p[] = properties;            \
        struct sbus_interface varname = SBUS_IFACE_ ## iface(                     \
            (__ ## varname ## _m),                                                \
            (__ ## varname ## _s),                                                \
            (__ ## varname ## _p)                                                 \
        )
    
    Resolves:
    https://pagure.io/SSSD/sssd/issue/3924
    
    Reviewed-by: Alexey Tikhonov <atikhono@redhat.com>
    
        
file modified
+1 -1
file modified
+1 -1
file modified
+1 -1
file modified
+17 -5