[CRIU] Re: [PATCH cr] parasite: fix size of cmd
Pavel Emelyanov
xemul at parallels.com
Tue Oct 2 16:09:48 EDT 2012
On 10/02/2012 11:32 PM, Andrey Vagin wrote:
> cmd is declarated in parasite-head-x86-64.S
> __export_parasite_cmd:
> .long 0
>
> Its size is 8 bytes, so it should be int instead of long.
sizeof(int) == 4, sizeof(long) == 8 on x86_64
> This patch fixes a bug in parasite execute,
> where a part of args are overwritten by cmd.
>
> memcpy(ctl->addr_cmd, &cmd, sizeof(cmd));
>
> Reported-by: Stanislav Kinsbursky <skinsbursky at parallels.com>
> Signed-off-by: Andrey Vagin <avagin at openvz.org>
> ---
> parasite-syscall.c | 4 ++--
> parasite.c | 2 +-
> 2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/parasite-syscall.c b/parasite-syscall.c
> index a912d30..788d238 100644
> --- a/parasite-syscall.c
> +++ b/parasite-syscall.c
> @@ -221,7 +221,7 @@ err:
> return ret;
> }
>
> -static int parasite_execute_by_pid(unsigned long cmd, struct parasite_ctl *ctl,
> +static int parasite_execute_by_pid(unsigned int cmd, struct parasite_ctl *ctl,
> pid_t pid,
> void *args, int args_size)
> {
> @@ -265,7 +265,7 @@ static int parasite_execute_by_pid(unsigned long cmd, struct parasite_ctl *ctl,
> return ret;
> }
>
> -static int parasite_execute(unsigned long cmd, struct parasite_ctl *ctl,
> +static int parasite_execute(unsigned int cmd, struct parasite_ctl *ctl,
> void *args, int args_size)
> {
> return parasite_execute_by_pid(cmd, ctl, ctl->pid, args, args_size);
> diff --git a/parasite.c b/parasite.c
> index 8c5a4d5..b9ae330 100644
> --- a/parasite.c
> +++ b/parasite.c
> @@ -453,7 +453,7 @@ static int fini(void)
> return 0;
> }
>
> -int __used parasite_service(unsigned long cmd, void *args)
> +int __used parasite_service(unsigned int cmd, void *args)
> {
> BUILD_BUG_ON(sizeof(struct parasite_dump_pages_args) > PARASITE_ARG_SIZE);
> BUILD_BUG_ON(sizeof(struct parasite_init_args) > PARASITE_ARG_SIZE);
>
More information about the CRIU
mailing list