[CRIU] [PATCH] restore: Compute auxv size taking into account kernel's mm::saved_auxv type

Pavel Emelyanov xemul at parallels.com
Mon Feb 10 03:55:46 PST 2014


On 02/10/2014 03:53 PM, Cyrill Gorcunov wrote:
> On Mon, Feb 10, 2014 at 03:22:16PM +0400, Pavel Emelyanov wrote:
>> On 02/10/2014 03:15 PM, Cyrill Gorcunov wrote:
>>> On 32-bit ARM machine we've got:
>>>
>>>  | 10:45:28.595:  4927: new environ: GIT_URL=git://git.criu.org/crtools.git
>>>  | 10:45:28.595:  4927: FAIL: cmdlinenv00.c:116: auxv corrupted on restore (errno = 11 (Resource temporarily unavailable))
>>>
>>> that's because in commit 459828b6bec92d664bcce8419436e528be2094f2
>>> we've changed reading procedure of auxv but forgot to update
>>> restore procedure (which were thinking that size of vector
>>> remains in number of "passes".
>>
>> IOW, we broke backward compatibility, right?
> 
> Yes, sort of. 

Than return one back please.

> When I've converted this read in 459828b6 I missed the key point
> 
> -	for (i = 0; i < AT_VECTOR_SIZE; i++) {
> -		ret = read(fd, &mm->mm_saved_auxv[i],
> -			   sizeof(auxv_t));			<--
> -		if (ret == 0)
> -			break;
> -		else if (ret != sizeof(auxv_t)) {
> -			ret = -1;
> -			pr_perror("Error reading %d's auxv[%d]",
> -				  pid, i);
> -			goto err;
> -		}
> -	}
> 
> sizeof(auxv_t) is different between 32bit and 64bit.
> .
> 




More information about the CRIU mailing list