On 08/19/2014 03:43 AM, Djalal Harouni wrote:
> Move the install creds into the receiver's slice to its own function
> kdbus_conn_creds_install().
> 
> Use from_kuid_munged(), so the uid mapping never fails.

Applied, thanks!

> Signed-off-by: Djalal Harouni <tix...@opendz.org>
> ---
>  connection.c | 32 ++++++++++++++++++++------------
>  1 file changed, 20 insertions(+), 12 deletions(-)
> 
> diff --git a/connection.c b/connection.c
> index 99ac2a1..9250dab 100644
> --- a/connection.c
> +++ b/connection.c
> @@ -964,6 +964,25 @@ remove_unused:
>       return ret;
>  }
>  
> +static int kdbus_conn_creds_install(struct kdbus_conn_queue *queue)
> +{
> +     int ret;
> +     struct kdbus_creds creds = {};
> +     struct user_namespace *current_ns = current_user_ns();
> +     off_t off = queue->creds_item_offset +
> +                 offsetof(struct kdbus_item, creds);
> +
> +     creds.uid = from_kuid_munged(current_ns, queue->uid);
> +     creds.gid = from_kgid_munged(current_ns, queue->gid);
> +     creds.pid = pid_nr_ns(queue->pid, task_active_pid_ns(current));
> +     creds.tid = pid_nr_ns(queue->tid, task_active_pid_ns(current));
> +
> +     ret = kdbus_pool_slice_copy_user(queue->slice, off,
> +                                      &creds, sizeof(creds));
> +
> +     return ret;
> +}
> +
>  static int kdbus_conn_msg_install(struct kdbus_conn_queue *queue)
>  {
>       int *memfds = NULL;
> @@ -989,18 +1008,7 @@ static int kdbus_conn_msg_install(struct 
> kdbus_conn_queue *queue)
>       }
>  
>       if (queue->creds_item_offset) {
> -             struct kdbus_creds creds;
> -             size_t size = sizeof(__u64) * 4;
> -             off_t off = queue->creds_item_offset +
> -                         offsetof(struct kdbus_item, creds);
> -
> -             creds.uid = from_kuid(current_user_ns(), queue->uid);
> -             creds.gid = from_kgid(current_user_ns(), queue->gid);
> -             creds.pid = pid_nr_ns(queue->pid, task_active_pid_ns(current));
> -             creds.tid = pid_nr_ns(queue->tid, task_active_pid_ns(current));
> -
> -             ret = kdbus_pool_slice_copy_user(queue->slice, off,
> -                                              &creds, size);
> +             ret = kdbus_conn_creds_install(queue);
>               if (ret < 0)
>                       goto exit_rewind_fds;
>       }
> 

_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to