[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
signature.asc
Description: OpenPGP digital signature
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH 3/8] guest agent: guest-file-open: refactoring,
Eric Blake <=