[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 18/53] migration/rdma: Fix io_writev(), io_readv() methods
From: |
Juan Quintela |
Subject: |
Re: [PATCH v2 18/53] migration/rdma: Fix io_writev(), io_readv() methods to obey contract |
Date: |
Wed, 04 Oct 2023 17:09:58 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.3 (gnu/linux) |
Markus Armbruster <armbru@redhat.com> wrote:
> QIOChannelClass methods qio_channel_rdma_readv() and
> qio_channel_rdma_writev() violate their method contract when
> rdma->error_state is non-zero:
>
> 1. They return whatever is in rdma->error_state then. Only -1 will be
> fine. -2 will be misinterpreted as "would block". Anything less
> than -2 isn't defined in the contract. A positive value would be
> misinterpreted as success, but I believe that's not actually
> possible.
>
> 2. They neglect to set an error then. If something up the call stack
> dereferences the error when failure is returned, it will crash. If
> it ignores the return value and checks the error instead, it will
> miss the error.
>
> Crap like this happens when return statements hide in macros,
> especially when their uses are far away from the definition.
>
> I elected not to investigate how callers are impacted.
>
> Expand the two bad macro uses, so we can set an error and return -1.
> The next commit will then get rid of the macro altogether.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> Reviewed-by: Fabiano Rosas <farosas@suse.de>
> Reviewed-by: Li Zhijian <lizhijian@fujitsu.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH v2 18/53] migration/rdma: Fix io_writev(), io_readv() methods to obey contract,
Juan Quintela <=