From nobody Mon May 12 15:00:38 2025 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1695907282; cv=none; d=zohomail.com; s=zohoarc; b=j25oTn4nmNwPiIOeWIseZGT+bsGrcCG3Yh78nVUTO08BGCio28iV2uY3s/xEwMBIVYKFZz5GVGyW9wRWK0hBA13J0iHGx4GDQ7A+0crGw/1a5rIw6i7EdtlSILr/lRiIa5HurenUY4hCYjBQeVB1cfxYx13bgXIvItIO9YQuA9s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1695907282; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=fSeyBBF83WKQT61d7meoz63CWSVi3+abXWDIn7AgGhU=; b=kKkTniEcUZsCQX9tfDi/EGNPl1K05SEc1dA3k7AUxnZYaPktEbN4jjkaMznTjxnQEt27YUUQhUz301a/H5gIuL/d2rFK6y65Gjd0d9tXHR2F25NGgZ7Z4R3C+2KFb7KOouCMNB5E6IVc7bZwANNiUUq613LOAEcV27s01+/UFUQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1695907282942242.67393954483634; Thu, 28 Sep 2023 06:21:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qlqwf-0003du-7o; Thu, 28 Sep 2023 09:20:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qlqwQ-0003Rk-Gn for qemu-devel@nongnu.org; Thu, 28 Sep 2023 09:20:31 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qlqwL-00088n-Kq for qemu-devel@nongnu.org; Thu, 28 Sep 2023 09:20:30 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-528-S0P1pZRrN5eUHxMY2lJWZg-1; Thu, 28 Sep 2023 09:20:23 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1B185858F1B; Thu, 28 Sep 2023 13:20:23 +0000 (UTC) Received: from blackfin.pond.sub.org (unknown [10.39.192.25]) by smtp.corp.redhat.com (Postfix) with ESMTPS id ECBFC2156711; Thu, 28 Sep 2023 13:20:22 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id 0149221E6880; Thu, 28 Sep 2023 15:20:20 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1695907225; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fSeyBBF83WKQT61d7meoz63CWSVi3+abXWDIn7AgGhU=; b=fsSxO5oylVgu8P1UE3OWdAMN7E8mQ08ny0ej36gnM7KUMIbUsron0Cmm2NEgse9uVFcKCh 4lFvgRLrex/tj/uqNzu6vUs2aHo68L6vshg+h0fLTwYUF90OFsGZI4up4tYBPEOWeq38mH haRYxw5+HcDvVR1P1mzACqrnFl0Focc= X-MC-Unique: S0P1pZRrN5eUHxMY2lJWZg-1 From: Markus Armbruster To: qemu-devel@nongnu.org Cc: quintela@redhat.com, peterx@redhat.com, leobras@redhat.com, farosas@suse.de, lizhijian@fujitsu.com, eblake@redhat.com Subject: [PATCH v2 18/53] migration/rdma: Fix io_writev(), io_readv() methods to obey contract Date: Thu, 28 Sep 2023 15:19:44 +0200 Message-ID: <20230928132019.2544702-19-armbru@redhat.com> In-Reply-To: <20230928132019.2544702-1-armbru@redhat.com> References: <20230928132019.2544702-1-armbru@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=armbru@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1695907283655100003 Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: Fabiano Rosas Reviewed-by: Li Zhijian Reviewed-by: Juan Quintela --- migration/rdma.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/migration/rdma.c b/migration/rdma.c index 0d2d119e6a..fb89b89e80 100644 --- a/migration/rdma.c +++ b/migration/rdma.c @@ -2791,7 +2791,11 @@ static ssize_t qio_channel_rdma_writev(QIOChannel *i= oc, return -1; } =20 - CHECK_ERROR_STATE(); + if (rdma->error_state) { + error_setg(errp, + "RDMA is in an error state waiting migration to abort!"= ); + return -1; + } =20 /* * Push out any writes that @@ -2877,7 +2881,11 @@ static ssize_t qio_channel_rdma_readv(QIOChannel *io= c, return -1; } =20 - CHECK_ERROR_STATE(); + if (rdma->error_state) { + error_setg(errp, + "RDMA is in an error state waiting migration to abort!"= ); + return -1; + } =20 for (i =3D 0; i < niov; i++) { size_t want =3D iov[i].iov_len; --=20 2.41.0