[CRIU] [PATCH] files: check fd flags after restore

Pavel Emelyanov xemul at parallels.com
Tue Dec 15 03:50:16 PST 2015


On 12/15/2015 02:37 PM, Stanislav Kinsburskiу wrote:
> 
> 15 дек. 2015 г. 12:31 PM пользователь Pavel Emelyanov <xemul at parallels.com> написал:
>>
>> On 12/14/2015 06:19 PM, Stanislav Kinsburskiy wrote: 
>>> System call sys_fcntl() in _some_ kernels can silently drop some flags during 
>>> set and return success code. 
>>
>> What are these flags? 
>>
> 
> O_DIRECT and O_SYNC. Feature of openvz kernel.

OK, don't we break restore on those kernels with this patch then?

>>> This patch adds double check, that all the fd flags were really set. 
>>>
>>> Signed-off-by: Stanislav Kinsburskiy <skinsbursky at virtuozzo.com> 
>>> --- 
>>>   files.c |   11 +++++++++++ 
>>>   1 file changed, 11 insertions(+) 
>>>
>>> diff --git a/files.c b/files.c 
>>> index a27667d..751a9a9 100644 
>>> --- a/files.c 
>>> +++ b/files.c 
>>> @@ -741,6 +741,17 @@ int set_fd_flags(int fd, int flags) 
>>>   ret = fcntl(fd, F_SETFL, flags); 
>>>   if (ret < 0) 
>>>   goto err; 
>>> + 
>>> + /* Let's check, that now actual flags contains those we need */ 
>>> + ret = fcntl(fd, F_GETFL, 0); 
>>> + if (ret < 0) 
>>> + goto err; 
>>> + 
>>> + if (ret != flags) { 
>>> + pr_err("fcntl call on fd %d (flags %#o) succeeded, " 
>>> + "but some flags were dropped: %#o\n", fd, flags, ret); 
>>> + return -1; 
>>> + } 
>>>   return 0; 
>>>   
>>>   err: 
>>>
>>> _______________________________________________ 
>>> CRIU mailing list 
>>> CRIU at openvz.org 
>>> https://lists.openvz.org/mailman/listinfo/criu 
>>> . 
>>>
>>



More information about the CRIU mailing list