qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 3/8] guest agent: guest-file-open: refactoring


From: Eric Blake
Subject: Re: [Qemu-devel] [PATCH 3/8] guest agent: guest-file-open: refactoring
Date: Tue, 03 Feb 2015 15:04:39 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0

On 12/31/2014 06:06 AM, Denis V. Lunev wrote:
> From: Simon Zolin <address@hidden>
> 
> Moved the code that sets non-blocking flag on fd into a separate function.
> 
> Signed-off-by: Simon Zolin <address@hidden>
> Acked-by: Roman Kagan <address@hidden>
> Signed-off-by: Denis V. Lunev <address@hidden>
> CC: Michael Roth <address@hidden>
> ---
>  qga/commands-posix.c | 31 +++++++++++++++++++++++--------
>  1 file changed, 23 insertions(+), 8 deletions(-)
> 
> diff --git a/qga/commands-posix.c b/qga/commands-posix.c
> index f6f3e3c..fd746db 100644
> --- a/qga/commands-posix.c
> +++ b/qga/commands-posix.c
> @@ -376,13 +376,33 @@ safe_open_or_create(const char *path, const char *mode, 
> Error **errp)
>      return NULL;
>  }
>  
> +static int guest_file_toggle_flags(int fd, long flags, bool set, Error **err)
> +{

Why is 'flags' a long?

> +    int ret, old_flags;
> +
> +    old_flags = fcntl(fd, F_GETFL);
> +    if (old_flags == -1) {
> +        error_set_errno(err, errno, QERR_QGA_COMMAND_FAILED,
> +                        "failed to fetch filehandle flags");
> +        return -1;
> +    }
> +
> +    ret = fcntl(fd, F_SETFL, set ? (old_flags | flags) : (old_flags & 
> ~flags));

Bug. 'int | long' is a long, but on 64-bit platforms, passing a 'long'
as the var-arg third argument of fcntl where the interface expects 'int'
is liable to corrupt things depending on endianness.  You MUST pass an
'int' for F_SETFL.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]