From patchwork Tue Mar 19 22:03:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Henrique Barboza X-Patchwork-Id: 10860531 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E070F922 for ; Tue, 19 Mar 2019 22:13:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C44B728E84 for ; Tue, 19 Mar 2019 22:13:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B8B11290A0; Tue, 19 Mar 2019 22:13:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5385D28E84 for ; Tue, 19 Mar 2019 22:13:06 +0000 (UTC) Received: from localhost ([127.0.0.1]:38254 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h6Myn-0005AU-2g for patchwork-qemu-devel@patchwork.kernel.org; Tue, 19 Mar 2019 18:13:05 -0400 Received: from eggs.gnu.org ([209.51.188.92]:38587) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h6Mx3-00048l-HF for qemu-devel@nongnu.org; Tue, 19 Mar 2019 18:11:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h6Mx1-00068x-Az for qemu-devel@nongnu.org; Tue, 19 Mar 2019 18:11:17 -0400 Received: from mail-qk1-x743.google.com ([2607:f8b0:4864:20::743]:41507) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h6Mva-0004oL-51; Tue, 19 Mar 2019 18:11:13 -0400 Received: by mail-qk1-x743.google.com with SMTP id o129so12910134qke.8; Tue, 19 Mar 2019 15:09:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=Ru4/aLTYuuIeLUbmQOFovUtuBlKLwGKeJVYy7hdG1is=; b=VjXrxRhuFdtEkXzoDlIrF4TsBE6fwR10Cz0qPQmpVnhQCHxW0Ofe3wXmYw1a01WNCl uHxCKOqrpu+zVTDKXm9AO1sRsjpDHlgl5bE+6Ne5lPYgkl3sUMPwKMSro+WfZjmCOnB8 bCwUziYHp8HWlYwopFGOH8YaLrsPoxt3+D8D+oICnxkWkr9yS8z+08NRPZhMRSGtYlen uX+E1YYfvsOOr0ZqJK9FR4yXnzLaZTeEl+tVbfpgyI7SXLYzGDAR3sbI2y+Q5GYS7sEB qwYbBG9RWjlezjIbGoU4MrzJGUApmiJg6mXByholebpjy9F71/CUX958RAvJSf84O/IH gnqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=Ru4/aLTYuuIeLUbmQOFovUtuBlKLwGKeJVYy7hdG1is=; b=deGXvQFUm4zg/jKtFqgrVpX+nYRgCdHe/gygO4m33AT+VfbMobgl8pCVeIj524u3/J Ajldvkdixpb389qjoRSRPphH7Ioc58bZwQfBGmrZqdsGsQl7FOHdNxy/il7MKB8+grrk hwHjqRd79BFaUToA0nBVkhetkQIu/vMx13Mrri1lG738S07p9rp9yb67J5LZeX7DLOYH yAW4/FsQod9oCnjwfd8ACmcWrWkzvHm9BhMdZ0CNs2kdOY1vYlVfPMgDMDQ4sPmhzdnq cn2M0zz9QWHP3YD54QKCeGDUL2ghagdwIfWsDtPcjnnSQY6tv1cnsurwuAvlQ9Nz5C+U +poQ== X-Gm-Message-State: APjAAAUcvboxaE/jZIY3LzYlloE6FLBnjeydOhN0aDxzl5IHUYtNkhV4 fSjPgzmSEWt3Q2uYC6e+l47WwcvjNRk= X-Google-Smtp-Source: APXvYqxmrXNGnJ3QRyYNZGhIMLEMbAqeekWUzfQMadEQJ+ZYNXG9cC/6d76grfqT9sSevR5qM49Hlg== X-Received: by 2002:a37:c99c:: with SMTP id m28mr4030127qkl.3.1553033023411; Tue, 19 Mar 2019 15:03:43 -0700 (PDT) Received: from rekt.ibmmodules.com ([2804:431:f700:2d8:6f86:51db:ba10:5f2f]) by smtp.gmail.com with ESMTPSA id p74sm182805qkl.4.2019.03.19.15.03.40 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 19 Mar 2019 15:03:42 -0700 (PDT) From: Daniel Henrique Barboza To: qemu-devel@nongnu.org Date: Tue, 19 Mar 2019 19:03:30 -0300 Message-Id: <20190319220330.3380-1-danielhb413@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::743 Subject: [Qemu-devel] [PATCH 1/1] block_crypto_co_create_generic: clean up created file on failure X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, Daniel Henrique Barboza , Srikanth Aithal , qemu-block@nongnu.org, mreitz@redhat.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP When using a non-UTF8 secret to create a volume using qemu-img, the following error happens: $ qemu-img create -f luks --object secret,id=vol_1_encrypt0,file=vol_resize_pool.vol_1.secret.qzVQrI -o key-secret=vol_1_encrypt0 /var/tmp/pool_target/vol_1 10240K Formatting '/var/tmp/pool_target/vol_1', fmt=luks size=10485760 key-secret=vol_1_encrypt0 qemu-img: /var/tmp/pool_target/vol_1: Data from secret vol_1_encrypt0 is not valid UTF-8 However, the created file /var/tmp/pool_target/vol_1 is left behind in the file system after the failure. This behavior can be observed when creating the volume using Libvirt, via 'virsh vol-create', and then getting "volume target path already exist" errors when trying to re-create the volume. The volume file is created inside block_crypto_co_create_opts_luks, in block/crypto.c. If the bdrv_create_file() call is successful but any succeeding step fails*, the existing 'fail' label does not take into account the created file, leaving it behind. This patch fixes it by adding a flag to indicate whether bdrv_create_file() created the file, and then unlinking it in the 'fail' label if necessary. * in our case, block_crypto_co_create_generic calls qcrypto_block_create, which calls qcrypto_block_luks_create, and this function fails when calling qcrypto_secret_lookup_as_utf8. Reported-by: Srikanth Aithal Signed-off-by: Daniel Henrique Barboza --- block/crypto.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/block/crypto.c b/block/crypto.c index fd8c7cfac6..5b43424845 100644 --- a/block/crypto.c +++ b/block/crypto.c @@ -533,6 +533,7 @@ static int coroutine_fn block_crypto_co_create_opts_luks(const char *filename, BlockDriverState *bs = NULL; QDict *cryptoopts; int64_t size; + bool filecreated = false; int ret; /* Parse options */ @@ -554,6 +555,7 @@ static int coroutine_fn block_crypto_co_create_opts_luks(const char *filename, if (ret < 0) { goto fail; } + filecreated = true; bs = bdrv_open(filename, NULL, NULL, BDRV_O_RDWR | BDRV_O_RESIZE | BDRV_O_PROTOCOL, errp); @@ -569,7 +571,14 @@ static int coroutine_fn block_crypto_co_create_opts_luks(const char *filename, } ret = 0; + goto cleanup; + fail: + if (filecreated) { + unlink(filename); + } + +cleanup: bdrv_unref(bs); qapi_free_QCryptoBlockCreateOptions(create_opts); qobject_unref(cryptoopts);