From patchwork Tue Sep 11 12:44:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Jonas Mark (BT-FIR/ENG1-Grb)" X-Patchwork-Id: 968550 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::138; helo=mail-lf1-x138.google.com; envelope-from=swupdate+bncbc6ynavgsakrby7r33oakgqelow4hei@googlegroups.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=de.bosch.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.b="KxyvaQwo"; dkim-atps=neutral Received: from mail-lf1-x138.google.com (mail-lf1-x138.google.com [IPv6:2a00:1450:4864:20::138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 428l4l2Pj4z9s3l for ; Tue, 11 Sep 2018 22:45:27 +1000 (AEST) Received: by mail-lf1-x138.google.com with SMTP id z12-v6sf4802589lfe.2 for ; Tue, 11 Sep 2018 05:45:26 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1536669924; cv=pass; d=google.com; s=arc-20160816; b=c5PChMLVAvlrxB6vo0Sap1LxnzSO5VsA76Y6+OqkN7xjWUN6kN99kkOJYDPBgafcMH KFbBSk6GyAu/2VfbMtSLGvXa30d72HLYFeKqlnH/nJOaVGTW8GHbAD4Fag9lW+5eIe+Y OtXUzdWetQbVdCQJxqKWePAwNsp5D9SC9UE6IaTtjxnToh8GPpWN3lsowp7LzOCHzngL JrURQealf5BSYdhiQwBAP2zaKOKbtGUtiiPzReynzri1JYBLNegUrXuXzR2HJw+TU4R3 0tfynNLo30C0vZl+NhopJ5UbuuFF0rP1wwFcvZ3kzSUgZXgC1/14ag7WhT1VKEjypUVN nxKQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:sender:dkim-signature; bh=g5UHUAkRXtBHSiyitULeela172qyy/elpB0Jxh4Xttc=; b=v/AV9RtjdxKzNuBBaNkZ0v/LiVN/ZyKU1F077rA4Q7IVIwWKE/Ojvh0ClS+kVrEMg7 Cnb94zSlN2X6E+gyA1T489Q8grmJ6i9eJ4m/e6U9vRWW2JR6pEF0N9TzcBrBpLHOERge Gj349PdMwf1HlvhT9wWJvN7y7yrftENJEtMfkGJLtmAF2n+c04RYIgit1RKeVdArIwMt 6M7mNWJpclrTpmf8Iwbz3BiBI21VHTpmkY4D2nT3Pm517Pa92LwwVfaVmfBCdEogocWx us78Hga2j8DoBjjf0GIIfCp9PUTBQQPAUsv/qnx7cOcE5y8DYyxFR7OL28JEng8qLuS5 wFAw== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@de.bosch.com header.s=2015-01-21 header.b="D/SQDyLZ"; spf=pass (google.com: domain of mark.jonas@de.bosch.com designates 139.15.230.186 as permitted sender) smtp.mailfrom=Mark.Jonas@de.bosch.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=de.bosch.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=g5UHUAkRXtBHSiyitULeela172qyy/elpB0Jxh4Xttc=; b=KxyvaQwovhvUXpmBztrdqzGPmFjKo+xilv3Cw53wZuseYUm9SnJioUk8uVY88c59OV QnFtzCh42TSkr2HNj02eSo9M4ZPIWYzZEBoYTM2X2Jf83c3MeuACcBpSKVcwQv9LxJU2 AAdfDIUZT1QgMzz/LO9Ay7ntc6zB6HKNIn5IJGgnhy7Vp6plq/BEjyRpAiG+cgmBml7A tUzxfWNPCSuhzBxaVG0Pu8SBh6sUblRyz1nQQY8+vO9gvj8lxFY8j6CS2E1Ual5xvHtm xYgztgg0JhtEqzm11klDaSNyqbWIdHZ6dFP/jl8af4w3hyuNkIlkO3K/KoTHun+p1km+ A7YQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-spam-checked-in-group:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=g5UHUAkRXtBHSiyitULeela172qyy/elpB0Jxh4Xttc=; b=m6G10zCg9wQCkj21c4vRA4fC2VTi+hzZ0C07oX4iAC/TSlk6C62jXe5urm0LacLy8h UU05APi1dOvujT1V8E5C6HQ0r4+bxNmTBiJyQ3fp1CWSWd3wWTc5ag0qwESSX7kcCDe/ zIAkegJjkLqpwfCclbC0dBhSBDrmPo4xdfAQpsQqpgYyrD0dOUb3H5GFJ5hvcWvLjQBp r19UQO8sgQySNCPKlbxiRuY9R14oixvFApeihGo7e+EKsSCKTJUlQEvboPZZpi0glj13 h8KGLixqHj3wUYxFE0x3/oLbOywNAUO9jV1CGZk5eWVNbBuK0VkHCtVigQrA+VhESXJL FNsw== Sender: swupdate@googlegroups.com X-Gm-Message-State: APzg51B08sZUFdeT8YrmnXT4M0ypkfWJrJ070QaDVLt33GG5C8YTm5rH lBMgHH4oYdQMleDPANI4V2s= X-Google-Smtp-Source: ANB0VdaBtcQ+IYg0nzU0HvFjdclCuVijVgP8pFU4dTAhK6Q0oEOHxHhjcAsRnwWFoBu5vveCHaMs/g== X-Received: by 2002:a19:1f14:: with SMTP id f20-v6mr119844lff.3.1536669924032; Tue, 11 Sep 2018 05:45:24 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com Received: by 2002:a19:cfce:: with SMTP id f197-v6ls1210302lfg.28.gmail; Tue, 11 Sep 2018 05:45:23 -0700 (PDT) X-Received: by 2002:a19:1f83:: with SMTP id f125-v6mr590692lff.16.1536669923039; Tue, 11 Sep 2018 05:45:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536669923; cv=none; d=google.com; s=arc-20160816; b=KKV4PxE2SGJNJwcbBpKdw0dSfnbFmcxIHH3aovpuaV3rVEtA1uQDUnw/pfxZfXeGSD BmPOrMWXFNfbWUmHcZqcys8EETsGDbt4AUBlqBCbX0TuiEc0J7aljUKqfDDrRAYj0uzj BEIMjrJ+qILMqTyQCI5YUcdo46j3enOa5tMJXMqcdOoVpEqrPmYlHcpDKrnMptphUAoI mjcBWgykGTenfHibmQG63hx+bHW6B1z+wDT/MFG66VPV4AQD1sjo7r5X45i+vJb9W0a5 JWrZCo2XDzrvbFTP+VY2BGKE3E/FEtr+Pt8wXaCUoACWuuKR4/wkRRwmj7GXnrgWDvQK Taxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=7DqNBIaKrc/FLbJAOTJTEHuC6YNBHSZ58ck1Q50Nrwk=; b=r2gGSjHzkgRJSSfpi9JjHyNDtDJzEYxKbPZTnbKkWvN7jEgUqMlfLAlnc00kkEfzUb 1FEsvOrZdIklHVSHRmSfSoutLKlwARm0f1u7C9fzjJvUSJLIONDWIQci+z2jhcu7j5Wy Ve8q3SRewFVoyZXV2PIqGKlx6PaEnaWOTf7fTAB3mS6o0l8/VgfuxcxjFPEq5sTPFEqC Ie/dG8EXFliUSceyjnWb4xP4X0TA8LGW4wMfE0+AZ+G1bo5/gl7yk7uVZi8w7sKrCZbh upNGoXqdfJbh31z6v0Em3b9qsOsnmSUWvLdt5Napc5i402aoJeXVcUMFOwbv4eA46Rtk EG4Q== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@de.bosch.com header.s=2015-01-21 header.b="D/SQDyLZ"; spf=pass (google.com: domain of mark.jonas@de.bosch.com designates 139.15.230.186 as permitted sender) smtp.mailfrom=Mark.Jonas@de.bosch.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=de.bosch.com Received: from de-out1.bosch-org.com (de-out1.bosch-org.com. [139.15.230.186]) by gmr-mx.google.com with ESMTPS id n1-v6si571364ljg.0.2018.09.11.05.45.22 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Sep 2018 05:45:22 -0700 (PDT) Received-SPF: pass (google.com: domain of mark.jonas@de.bosch.com designates 139.15.230.186 as permitted sender) client-ip=139.15.230.186; Received: from fe0vm1649.rbesz01.com (unknown [139.15.230.188]) by fe0vms0186.rbdmz01.com (Postfix) with ESMTPS id 428l4d0ZzNz1XLJST; Tue, 11 Sep 2018 14:45:21 +0200 (CEST) Received: from fe0vm1740.rbesz01.com (unknown [10.58.172.176]) by fe0vm1649.rbesz01.com (Postfix) with ESMTPS id 428l4d09FXz1MX; Tue, 11 Sep 2018 14:45:21 +0200 (CEST) X-AuditID: 0a3aad14-9abff7000000690f-81-5b97b8e14ea3 Received: from fe0vm1651.rbesz01.com ( [10.58.173.29]) (using TLS with cipher AES128-SHA (128/128 bits)) (Client did not present a certificate) by fe0vm1740.rbesz01.com (SMG Outbound) with SMTP id 4F.64.26895.1E8B79B5; Tue, 11 Sep 2018 14:45:21 +0200 (CEST) Received: from SI-HUB2000.de.bosch.com (si-hub2000.de.bosch.com [10.4.103.108]) by fe0vm1651.rbesz01.com (Postfix) with ESMTPS id 428l4c5ccGznwQW; Tue, 11 Sep 2018 14:45:20 +0200 (CEST) Received: from luchador.grb-fir.grb.de.bosch.com (10.19.187.97) by SI-HUB2000.de.bosch.com (10.4.103.108) with Microsoft SMTP Server id 15.1.1531.3; Tue, 11 Sep 2018 14:45:20 +0200 From: Mark Jonas To: CC: , , Mark Jonas Subject: [swupdate] [PATCH] cpio_utils: fix infinite read when interrupting an update Date: Tue, 11 Sep 2018 14:44:59 +0200 Message-ID: <1536669899-6708-2-git-send-email-mark.jonas@de.bosch.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1536669899-6708-1-git-send-email-mark.jonas@de.bosch.com> References: <1536669899-6708-1-git-send-email-mark.jonas@de.bosch.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA21Sb0wTZxzm7R3ttXJyHGX8LKDuFjNFxOJY1PmHGchGFj9swWSymulhj7YZ vTa9QkQ/SNRES+J/HFhNQU0YoawJOOdRnLoOAxaERRepEDf/EEUC04gap2i848D2w7497/P8 nt9z97wvgdENGgNh492ci2fLGLUO1332c8aSu2KtyXixfcmKveH1K2rbX8Z/rir0ebvxwguH r6q/Vn2nW23mymwVnGvp2i06a+fAG9x5InFb6+5uVIWezKpGWgKoXLjyKKypRjqCpvaq4M6z t2rl8BuCsRt/q5SDiODa3QFMtqipTLjVLU5hPaWH3ns3NTLGqC2wq612CidTX0HDT424jHFq AfT+cT9exiT1BUwELyMlei7c6vNM7dFSX8LxU3VTPC3P+IcwZT4Jrh4fxpX9AL+PjGCHUKI3 RvLGSA1I1YxSSjljhT1nea4x21XCCduNOdlbHfY2pJSmF9HrUGkIUQRiEkj30VoTHc9WCJX2 EPqUUDEp5Fm7RM0ucZgrraxg3ewqL+MExkCiuLg4Ovk9LZSX2G2CYHPwIQQExujJYNaPJpo0 s5XbOZdDsYVQGoEzqST/jdlEUxbWzf3AcU7ONaOuIggGyFnSJdJJLs7CbSu1lblnZCZDyfwg VomNVRHaEPqESJCyi+QVpOBk7YLNMm2fo9jpGTZqDaN8YvLxsSMYjfMOnjOkkvvOS35KnrSW 8++/wJBOcn/WmOiUGCG6ZRQNIKnDZHJYNidIbzOaDaSYfLKYTpomo6ZlZyQP9VgDHnEOtAeK wCc+RxC5PI5B5EFjPFwPejUgRpo14O3o1ELgwORsmDjXR4HvzmgqtHe3AfQO/QJQN+QzwH/1 B9NguMubBiNt9enQ+/xGOjQF/BlwydM1F1o9/zBwuvnAx9B0+OEi+GvcnwtHzl3LhZdjfavB 01mXBzVefx7s8XvWge96Sz5cah3Mh4l+X8GoVKtKqjXQXyPX6mbd/1PrNBv9N0MVurjG8Hbd uCc7cCp1a/GOwtbBrp64cPHOuoUZmf/mNV5xbhhd+GYQbRJ9/kh1pHLA8jqv46PTC3atrN8Y /LagYPEYP+zE91v4V2c/XNmXEzb3vDjfEvRsoluqAh1LH67XLhqbd3+y53ui2U4Y59/esOrC 7kR9VoI6i3la0x/6dWOSkcEFK5uTibkE9h0arP24MwQAAA== X-Original-Sender: mark.jonas@de.bosch.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@de.bosch.com header.s=2015-01-21 header.b="D/SQDyLZ"; spf=pass (google.com: domain of mark.jonas@de.bosch.com designates 139.15.230.186 as permitted sender) smtp.mailfrom=Mark.Jonas@de.bosch.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=de.bosch.com Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , From: Ben Guan When using the IPC API to do an update from a stream, a new update cannot be started if the previous one is interrupted. The root cause is: when the client closes the socket, the read on the server side will return 0 and it is treated as a successful read. Thus it goes into an infinite read loop. It can be reproduced: 1. Start the server via "swupdate". 2. Trigger an update via "swupdate-client image.swu". 3. Cancel the update via Ctrl + C. 4. Trigger another update via "swupdate-client image.swu". Signed-off-by: Ben Guan Signed-off-by: Mark Jonas --- core/cpio_utils.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/cpio_utils.c b/core/cpio_utils.c index 40ae474..50123eb 100644 --- a/core/cpio_utils.c +++ b/core/cpio_utils.c @@ -135,7 +135,7 @@ static int input_step(void *state, void *buffer, size_t size) size = s->nbytes; } int ret = fill_buffer(s->fdin, buffer, size, s->offs, &s->checksum, s->dgst); - if (ret < 0) { + if (ret <= 0) { return ret; } s->nbytes -= size; @@ -171,7 +171,7 @@ static int decrypt_step(void *state, void *buffer, size_t size) } ret = s->upstream_step(s->upstream_state, s->input, sizeof s->input); - if (ret < 0) { + if (ret <= 0) { return ret; } @@ -232,7 +232,7 @@ static int gunzip_step(void *state, void *buffer, size_t size) while (outlen == 0) { if (s->strm.avail_in == 0) { ret = s->upstream_step(s->upstream_state, s->input, sizeof s->input); - if (ret < 0) { + if (ret <= 0) { return ret; } s->strm.avail_in = ret; @@ -317,7 +317,7 @@ int copyfile(int fdin, void *out, unsigned int nbytes, unsigned long *offs, unsi if (!input_state.dgst) return -EFAULT; } - + if (encrypted) { aes_key = get_aes_key(); ivt = get_aes_ivt();