[CRIU] [PATCH 1/9] parasite: Make parasite arguments variable size
Pavel Emelyanov
xemul at parallels.com
Fri Mar 1 13:05:19 EST 2013
On 03/01/2013 09:31 PM, Douglas, William wrote:
> On Fri, Mar 1, 2013 at 8:02 AM, Pavel Emelyanov <xemul at parallels.com> wrote:
>> Sometimes we don't know the exact amount of data we would want
>> to send to parasite via args area (e.g. -- while draining fds).
>>
>> Fix this, by moving the args area behind the parasite blob and
>> mmap-ing it with the run-time calculated size.
>>
>> Signed-off-by: Pavel Emelyanov <xemul at parallels.com>
>>
>> ---
>> arch/arm/parasite-head.S | 2 --
>> arch/x86/parasite-head.S | 3 ---
>> include/parasite-syscall.h | 1 +
>> include/parasite.h | 2 +-
>> parasite-syscall.c | 12 +++++++++---
>> pie/gen-offsets.sh | 2 +-
>> pie/pie.lds.S.in | 2 ++
>> 7 files changed, 14 insertions(+), 10 deletions(-)
>>
>> diff --git a/arch/arm/parasite-head.S b/arch/arm/parasite-head.S
>> index b4bffe6..74fd4cb 100644
>> --- a/arch/arm/parasite-head.S
>> +++ b/arch/arm/parasite-head.S
>> @@ -13,8 +13,6 @@ ENTRY(__export_parasite_head_start)
>> __export_parasite_cmd:
>> .long 0
>> __export_parasite_args:
>> - .long 0
>> - .space PARASITE_ARG_SIZE,0
>> .space PARASITE_STACK_SIZE,0
>>
>> .space 228, 0
>> diff --git a/arch/x86/parasite-head.S b/arch/x86/parasite-head.S
>> index 289672c..0b62750 100644
>> --- a/arch/x86/parasite-head.S
>> +++ b/arch/x86/parasite-head.S
>> @@ -15,9 +15,6 @@ ENTRY(__export_parasite_head_start)
>> .align 8
>> __export_parasite_cmd:
>> .long 0
>> -__export_parasite_args:
>> - .long 0
>> - .space PARASITE_ARG_SIZE,0
>> .space PARASITE_STACK_SIZE,0
>> __export_parasite_stack:
>> .long 0
>> diff --git a/include/parasite-syscall.h b/include/parasite-syscall.h
>> index 2f32d03..ee5743e 100644
>> --- a/include/parasite-syscall.h
>> +++ b/include/parasite-syscall.h
>> @@ -19,6 +19,7 @@ struct parasite_ctl {
>>
>> unsigned int *addr_cmd; /* addr for command */
>> void *addr_args; /* address for arguments */
>> + unsigned long args_size;
>> int tsock; /* transport socket for transfering fds */
>> };
>>
>> diff --git a/include/parasite.h b/include/parasite.h
>> index 5d5b8df..66a559e 100644
>> --- a/include/parasite.h
>> +++ b/include/parasite.h
>> @@ -2,7 +2,7 @@
>> #define __CR_PARASITE_H__
>>
>> #define PARASITE_STACK_SIZE (16 << 10)
>> -#define PARASITE_ARG_SIZE 8196
>> +#define PARASITE_ARG_SIZE_MIN ( 1 << 13)
>>
>> #define PARASITE_MAX_SIZE (64 << 10)
>>
>> diff --git a/parasite-syscall.c b/parasite-syscall.c
>> index 6cc6283..03b5546 100644
>> --- a/parasite-syscall.c
>> +++ b/parasite-syscall.c
>> @@ -184,12 +184,12 @@ err:
>>
>> static void *parasite_args_s(struct parasite_ctl *ctl, int args_size)
>> {
>> - BUG_ON(args_size > PARASITE_ARG_SIZE);
>> + BUG_ON(args_size > ctl->args_size);
>> return ctl->addr_args;
>> }
>>
>> #define parasite_args(ctl, type) ({ \
>> - BUILD_BUG_ON(sizeof(type) > PARASITE_ARG_SIZE); \
>> + BUILD_BUG_ON(sizeof(type) > PARASITE_ARG_SIZE_MIN);\
>
> This check makes me wonder if MIN is the correct description here.
> Isn't this a MAX check instead?
What I mean here is -- the size of the args area should be _not_ _less_
than the size of an object we're about to put there. And since the area
is _at_ _least_ ARG_SIZE_MIN butes, presumably this BUG_ON is correct.
> .
>
More information about the CRIU
mailing list