[systemd-devel] [PATCH] libsystemd-bus: make sure buf transfered into kenrel is 8 aligned

Lennart Poettering lennart at poettering.net
Mon Dec 16 06:50:37 PST 2013


On Mon, 16.12.13 16:21, Yin Kangkai (kangkai.yin at linux.intel.com) wrote:

> From: Yin Kangkai <kangkai.yin at intel.com>
> 
> Otherwise, for example hello arg passed to KDBUS_CMD_HELLO might not be 8 bytes
> aligned and kernel returns -EFAULT.
> 
> 319     int bus_kernel_take_fd(sd_bus *b) {
> 320             struct kdbus_cmd_hello hello;
> 
> (gdb) p &hello
> $8 = (struct kdbus_cmd_hello *) 0xbffff354
> ---
>  src/libsystemd-bus/bus-control.c | 4 ++--
>  src/libsystemd-bus/bus-kernel.c  | 2 +-
>  2 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/src/libsystemd-bus/bus-control.c b/src/libsystemd-bus/bus-control.c
> index 0072c37..6b2790d 100644
> --- a/src/libsystemd-bus/bus-control.c
> +++ b/src/libsystemd-bus/bus-control.c
> @@ -207,7 +207,7 @@ _public_ int sd_bus_release_name(sd_bus *bus, const char *name) {
>  }
>  
>  static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) {
> -        struct kdbus_cmd_name_list cmd = {};
> +        struct kdbus_cmd_name_list __attribute__ ((__aligned__(8)))
> cmd = {};

Hmm, this feels a bit like this would be better part of the type rather
than the variable. THus, kdbus.h should add this to all is structs,
rather then we decorate the variables...

Kay, would this make sense to you to add to kdbus.h?

Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list