From patchwork Mon Jun 3 08:55:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dominique Martinet X-Patchwork-Id: 1942758 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20230601 header.b=qao7qCdH; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2607:f8b0:4864:20::738; helo=mail-qk1-x738.google.com; envelope-from=swupdate+bncbcwivbv7sugrbluk62zamgqet3sevui@googlegroups.com; receiver=patchwork.ozlabs.org) Received: from mail-qk1-x738.google.com (mail-qk1-x738.google.com [IPv6:2607:f8b0:4864:20::738]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Vt6yp3YtHz20Pb for ; Mon, 3 Jun 2024 18:56:18 +1000 (AEST) Received: by mail-qk1-x738.google.com with SMTP id af79cd13be357-792ff352462sf595869485a.1 for ; Mon, 03 Jun 2024 01:56:18 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717404975; cv=pass; d=google.com; s=arc-20160816; b=k57IhJr2A6ttWIbzVhy+g68MqrfC+tPRv1nU3MsebzmR++bNvgrfnqcgxuuG63v8ys T78nUs6uTo31EVH1MrXn3+3DwVktAFAXb4JM4P6TFzxdfkHq4GLwN8ddIOtPCWVB4om1 tKT8bqIAt99hpQrC4xpNlFjLkuyc9WaGmhkNuoDotHgv4UkXmIQx7yKdAxtKx9+b0zdc 0LXHrlLmUfo20Dfjgj0EvUURFvSeRVy/BabRmpTGJj3DMaoeYnPHmzzlFd/FtnyOGoLL 3EMC6+NqJsGjbe/galj5ZfcBPL8abdOKb3ktCULBptD9wNQSMuMqsdD6VNnk9x7HDtPG Bcfw== 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=JuseOxxHRFjPb9zh1fWzIb2iAU3KgcZc//YvP67EXMQ=; fh=+HOhZVcH38yXfp1jho6rEMtVed0J8BeDvWIx/QQx6jg=; b=irHsS8XLTiu/GqrzLKaAH/rJ6B0Pmd53iypzNiJKPbXmMxIzjjGR5bmRPcjdNVXOo/ lZdSUOo9pEla6DjQNcjRtQ7QPxmiN3n/+qdRVHHPtps5TZ/TzosIKDXDfhaTGoBrCad1 mtQv6aDt4TdqoY8qLzVI2f+Qf/9UqOXHopoPrKFTJ6Av+0w4zKFt9Nlp01WZqRj9fcFs v33KwUQZZPxqHHYQ1cOzqCBFSREJOJOBepG7kfHKcegztsIS3u/0nAz7HRtY23SUugLe TSK612NGQ/+hQYdrnhsEE9/k4bnGvU4k/qWg6NH/+yj6NhSasyTpdCkzTez8S60GkEsj aBzQ==; darn=patchwork.ozlabs.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=x2beX1Gu; dkim=pass header.i=@atmark-techno.com header.s=google header.b=In1PilU7; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1717404975; x=1718009775; darn=patchwork.ozlabs.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:sender:from:to:cc:subject:date:message-id :reply-to; bh=JuseOxxHRFjPb9zh1fWzIb2iAU3KgcZc//YvP67EXMQ=; b=qao7qCdHgVPz0iljj56ufjB+7C2HfWsVLmGfqojhmjTQnf2u+uUBR+cGruw9puXnQx Vij4I6yHNea4XoNUH7Lt4ntlCl9WgfE8EwfDRS0kOfTM+7FRigeDg0ZXGDwAzn0VqQzv TrpBQYp5Z8zHn6jBrwB6l3WR5S23xo0UqF55/4ZS0k0/8yJIjbOms+yo0dMNsPttZskk OxDS2RUXdo27gwGRrnxm3Y0Jy5yFUbuNfUsB2tf9c4BmzzGkBe7bCX9oxZVZjXuvKqAs oG5kbkDUPue66umTEgDhOQXfUi1MtXS21r4/kRFobJ+M+WYdi+vb3+VCzLxS09S2gVC/ YeWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717404975; x=1718009775; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:sender:from:to:cc:subject:date :message-id:reply-to; bh=JuseOxxHRFjPb9zh1fWzIb2iAU3KgcZc//YvP67EXMQ=; b=YBT8CZ+ji3y7TQjIJwExoS29cveb317S+ZyPflSkTkF26x8lBS8x/ozYJmQJy1Lyw/ ZgLO3U/513Fw/PckyJHORGjcTBU3Yw3FQWgk1jPSvQDfxCjtY3MfGjuNhphufNb3pkSn G8atPpKyU0qUzYUK70cMcDhtXd9cOINlj6nzmVwYcYpVgNNkx/t62p8nkLwwvxkaJzTF TwqFysUJmIwmPdmVf5b4mjrK46vnd6hWGWXZU9x2XhzD67V9/ahCEK+41LkDDUBC0G74 hW14EN813MnjbQqU0/V+r8EBrPO1k8223QAWlDxyk8RpnohmwYZbHRmIPG3FF4PtP5f+ dX4g== Sender: swupdate@googlegroups.com X-Forwarded-Encrypted: i=2; AJvYcCXiCPJDvaI3NhLe1RrzFAq9UuFSCyzKOdGSUKhlTtanHYhlxSAoQmXxBwpI9O98/nbDX4Q7dZuNaRqCpd0sjxgltNPV6GtrvyzFuCAP6A== X-Gm-Message-State: AOJu0YzzilZsKJ4K9QPdZKVf7k27y1RFFqCrIVSHC95vNS2yR7vPBEI/ AaogK6bsZj0qXiLKH7/EKsdcj9j7vk6XgjeYcPrvKQmvlSYu1SnK X-Google-Smtp-Source: AGHT+IFYSDXfJHS9HlpCthFNKPOHgDOq1o6GOQ8eiq2huviydTzXOoKJhiXWRcoR9v6ICAcUfTK++Q== X-Received: by 2002:a05:620a:564f:b0:78e:db73:913b with SMTP id af79cd13be357-794f5c6e0fdmr945528785a.28.1717404975240; Mon, 03 Jun 2024 01:56:15 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com Received: by 2002:ac8:5d15:0:b0:437:8eae:5bbe with SMTP id d75a77b69052e-4400188cfc1ls24565811cf.0.-pod-prod-05-us; Mon, 03 Jun 2024 01:56:14 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWzw/DI0YDVrZ6z3Hl4OjtH2JW2HBDDOkFfovrz9zSiY/4FH/WaA93CLWEGEOBPi87jyC8QhS1Je5y+hBuK4H18TfyLaz0SpftG X-Received: by 2002:a05:620a:190f:b0:792:bc0b:e269 with SMTP id af79cd13be357-794f5cc688bmr1022753785a.52.1717404973909; Mon, 03 Jun 2024 01:56:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1717404973; cv=none; d=google.com; s=arc-20160816; b=jEawEUjYbqV8VQnjkTj5IRPBKpatSYjy3PqttD3hF1QD6FkYwNAKVIiweWKPCajwe+ DojxCEY64WoFs19yK+BtSmABsAH0H6IoAXAXX0eZKFj5AWEB/aeYe+aSOGr0L5y5VMYo Q3tKCuA/cMbDTskCdmPoHO69ztE9amxFGC8Qa6zschVc5kJl8NsG6dntQCfJ1CN4LgW7 XWlMK0exUjtRZa8beLLVDUpr8p5ErqH2Au6GFiSVoL91xLlTDR1RZ3j1SGvg5EVUDiMT /HYNJlnfZxp7hgs18T0tEKdAaqclBNHNDCEqgT30hnsfhyRBehL1YnvnptjCnBy+pXOP 9klQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature; bh=W359nTpbI1Fk9qW+AIt/2jgo7M+eI255ymHh3tAJmZs=; fh=e6ThJdgbDrjaxNT9UZhiDip0vc8vcYglFRKaU5kdzM0=; b=ucCGNyoLv5EIknVN2HhJu+jIK/WzX5cfFYErZsP+n8utK9FST3c25nBefmSxyYYDLS e+MfptjJU5bdfU00L804g5eieetScoe5DqPXncOAODYCo94vNVHF3G5G3Oc/opfFrjDt X/bWJvxh8q36bcWWPTFnXG1+i2VHI0xL/IQSzUgspIy0kES/C8NDYnNXFwCK8MEtv/hw U/kd6fBv6aTLAk/dvQhPX6Lp7Hw06c+r0wO4/mb0LqUdAgzviloISQ8r9lz+hpfqp9zg jONlLTDnHENbxgPStwdjRfBlf3FZoMDTUOUj8myBmhrgKAI8qtasMCefS47JUQH6Mjz6 stlg==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=x2beX1Gu; dkim=pass header.i=@atmark-techno.com header.s=google header.b=In1PilU7; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com Received: from gw2.atmark-techno.com (gw2.atmark-techno.com. [35.74.137.57]) by gmr-mx.google.com with ESMTPS id af79cd13be357-794f305ae8fsi35871185a.4.2024.06.03.01.56.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Jun 2024 01:56:13 -0700 (PDT) Received-SPF: pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) client-ip=35.74.137.57; Received: from gw2.atmark-techno.com (localhost [127.0.0.1]) by gw2.atmark-techno.com (Postfix) with ESMTP id 75955A7C for ; Mon, 3 Jun 2024 17:56:11 +0900 (JST) Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by gw2.atmark-techno.com (Postfix) with ESMTPS id E89ED932 for ; Mon, 3 Jun 2024 17:56:09 +0900 (JST) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-1f6768af0b3so8042925ad.0 for ; Mon, 03 Jun 2024 01:56:09 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCWhlNm9vyEsdozCtNe4QuCEc5l+47K3Aj3F8S39iXCFYKUMG2K23/wwfJWUOHavXdFlQyg5zwTR6f5u4Bd4z/B7g8L1FBnnncfB X-Received: by 2002:a17:902:f90f:b0:1f6:1dd3:a4cb with SMTP id d9443c01a7336-1f636ffe0f8mr79602565ad.17.1717404968992; Mon, 03 Jun 2024 01:56:08 -0700 (PDT) X-Received: by 2002:a17:902:f90f:b0:1f6:1dd3:a4cb with SMTP id d9443c01a7336-1f636ffe0f8mr79602465ad.17.1717404968609; Mon, 03 Jun 2024 01:56:08 -0700 (PDT) Received: from pc-0182.atmarktech (117.209.187.35.bc.googleusercontent.com. [35.187.209.117]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1f632338c14sm60327255ad.36.2024.06.03.01.56.07 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 03 Jun 2024 01:56:08 -0700 (PDT) Received: from [::1] (helo=pc-0182.atmark.tech) by pc-0182.atmarktech with esmtp (Exim 4.96) (envelope-from ) id 1sE3U6-009riT-0G; Mon, 03 Jun 2024 17:56:06 +0900 From: Dominique Martinet To: stefano.babic@swupdate.org, swupdate@googlegroups.com Cc: Dominique Martinet Subject: [swupdate] [PATCH RFC 1/9] parser: set_find_path: properly return to-free string array Date: Mon, 3 Jun 2024 17:55:54 +0900 Message-Id: <20240603085602.2351411-2-dominique.martinet@atmark-techno.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> References: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> MIME-Version: 1.0 X-Original-Sender: dominique.martinet@atmark-techno.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=x2beX1Gu; dkim=pass header.i=@atmark-techno.com header.s=google header.b=In1PilU7; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.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: , properly set 'tmp' through an extra indirection instead of leaking the string array Reported-by: gcc -fanalyzer Signed-off-by: Dominique Martinet --- core/parsing_library.c | 5 ++--- corelib/parsing_library_libconfig.c | 2 +- corelib/parsing_library_libjson.c | 2 +- include/parselib.h | 2 +- parser/parser.c | 2 +- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/core/parsing_library.c b/core/parsing_library.c index a97f8114becc..038c6851adf9 100644 --- a/core/parsing_library.c +++ b/core/parsing_library.c @@ -210,7 +210,7 @@ void get_hash_value(parsertype p, void *elem, unsigned char *hash) ascii_to_hash(hash, hash_ascii); } -bool set_find_path(const char **nodes, const char *newpath, char **tmp) +bool set_find_path(const char **nodes, const char *newpath, char ***tmp) { char **paths; unsigned int count; @@ -218,7 +218,6 @@ bool set_find_path(const char **nodes, const char *newpath, char **tmp) char *token, *ref; bool first = true; int allocstr = 0; - (void)tmp; /* * Include of files is not supported, @@ -301,7 +300,7 @@ bool set_find_path(const char **nodes, const char *newpath, char **tmp) } free(ref); - tmp = paths; + *tmp = paths; return true; } diff --git a/corelib/parsing_library_libconfig.c b/corelib/parsing_library_libconfig.c index ddb79f6fb152..4ddc338031a0 100644 --- a/corelib/parsing_library_libconfig.c +++ b/corelib/parsing_library_libconfig.c @@ -196,7 +196,7 @@ void *find_root_libconfig(config_t *cfg, const char **nodes, unsigned int depth) if (elem && config_setting_is_group(elem) == CONFIG_TRUE) { ref = get_field_string_libconfig(elem, "ref"); if (ref) { - if (!set_find_path(nodes, ref, tmp)) { + if (!set_find_path(nodes, ref, &tmp)) { free(root); return NULL; } diff --git a/corelib/parsing_library_libjson.c b/corelib/parsing_library_libjson.c index 4728d200fc8e..9456d51eca9d 100644 --- a/corelib/parsing_library_libjson.c +++ b/corelib/parsing_library_libjson.c @@ -237,7 +237,7 @@ void *find_root_json(json_object *root, const char **nodes, unsigned int depth) if (type == json_type_object || type == json_type_array) { str = get_field_string_json(node, "ref"); if (str) { - if (!set_find_path(nodes, str, tmp)) + if (!set_find_path(nodes, str, &tmp)) return NULL; node = find_root_json(root, nodes, depth); free_string_array(tmp); diff --git a/include/parselib.h b/include/parselib.h index 99b6519fa480..48f38d2a8c92 100644 --- a/include/parselib.h +++ b/include/parselib.h @@ -64,7 +64,7 @@ void get_hash_value(parsertype p, void *elem, unsigned char *hash); void check_field_string(const char *src, char *dst, const size_t max_len); void *find_root(parsertype p, void *root, const char **nodes); void *get_node(parsertype p, void *root, const char **nodes); -bool set_find_path(const char **nodes, const char *newpath, char **tmp); +bool set_find_path(const char **nodes, const char *newpath, char ***tmp); #define GET_FIELD_STRING(p, e, name, d) \ get_field_string_with_size(p, e, name, d, sizeof(d)) diff --git a/parser/parser.c b/parser/parser.c index 04d7b72c9b9a..2273796e0452 100644 --- a/parser/parser.c +++ b/parser/parser.c @@ -144,7 +144,7 @@ static int parser_follow_link(parsertype p, void *cfg, void *elem, for (int j = 0; j < count_string_array(nodes); j++) { linknodes[j] = nodes[j]; } - if (!set_find_path(linknodes, ref, tmp)) { + if (!set_find_path(linknodes, ref, &tmp)) { free(linknodes); return -1; } From patchwork Mon Jun 3 08:55:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dominique Martinet X-Patchwork-Id: 1942759 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20230601 header.b=OSxdoAIa; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2607:f8b0:4864:20::23b; helo=mail-oi1-x23b.google.com; envelope-from=swupdate+bncbcwivbv7sugrbluk62zamgqet3sevui@googlegroups.com; receiver=patchwork.ozlabs.org) Received: from mail-oi1-x23b.google.com (mail-oi1-x23b.google.com [IPv6:2607:f8b0:4864:20::23b]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Vt6yp69cKz20Q1 for ; Mon, 3 Jun 2024 18:56:18 +1000 (AEST) Received: by mail-oi1-x23b.google.com with SMTP id 5614622812f47-3d1e52d78dcsf2688937b6e.0 for ; Mon, 03 Jun 2024 01:56:18 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717404975; cv=pass; d=google.com; s=arc-20160816; b=y64tmcfbtrQRMDXPKdVs6QIQTnfziSJfmozoiRovuOg8V96bxnVyJ2O0mikObb2+PW zQ6CDuUHGf7fecVGIgok0z5S7tfnSRQ8v38//VfyTja4o6EOogOagCGF9OJvL7vQUVIq 6Tkp57Qn/cPnXs/zDDF5jZdMyT1RxCZgSzeq5IUaMXKXMehVZFMgMfVQjhuUMLELvwrO TTWsFdgEYtOzPPDX1+hnhv0d/N/yqSnJCv+Jd+C75P9bsftPS6551tFwCnXE5leg6kJb QvCvFeAtmaq48Ebw8XUivPRO4pjfMU05JPNT2Ls3e213qzZAqzib94hM1UcfEHW5zLhs FYfA== 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=G3AS4Uq7MCOKnTXDrkUmfuTyIHSQvdkFqibsWTHEggw=; fh=4PeZfhJgOZHoP/u6EkhE9cJqeWd08Fwa2pfbFypNw7s=; b=eEP58sL+a1gWaAPO2eKl18oXlirRPSktA1ek8k7gzADiMnWhX55tIea2fmKozFVKmW 138Uts86JH67BzDmrP2zqvgWRNrPbI/AkXoeobuyZOoDKpdAvji9qn9t2bfGFTC0Fq2W AmdjjmYnKqNNlA/XsfXyfNeXGSCPsK5Lwk1Pc9dv4bhYsmB25C0UOb/zUzsyOs8Q9DMe XSJPsUvK3nIO6HVAF12PqMtOPge5efzUyNH2Q7Ti+jDaH3ZKPFLcAqxSP45aQEcwzuBO yxLMoDG0w9oyM5O3P+u1QZWUEEIsilP75AWqei1YXRsKxs9XuublwvgsRKKnCS/pH2kz pZRg==; darn=patchwork.ozlabs.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=azWEhwKq; dkim=pass header.i=@atmark-techno.com header.s=google header.b=KGWogimL; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1717404975; x=1718009775; darn=patchwork.ozlabs.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:sender:from:to:cc:subject:date:message-id :reply-to; bh=G3AS4Uq7MCOKnTXDrkUmfuTyIHSQvdkFqibsWTHEggw=; b=OSxdoAIaSG/4C6us2mgeJ6ibk265dwi8Xyqk/V5yHZcRRPCe1vjtCruXb8wzSPhF3O /z3GiYNlGIZsL+Z3fqWwanqK3e0urI5GotGtsx27ciNgEWqPdDFmHi6WEbHct2POxGt3 IratTcaalP0CTm7jl982H8uNvp1n3PQehoMS96CM1izUw0V3LvBpLIvaqi24y3nGXMiF qZOEsG8OUcDTpRr6kGDdg4ALLdPFHKoSSheLqL9kiyPSYC3HFNKWITc1FJ/u8E9/Gw7A J9rwryXAtumAC1tuARPwgLJxQQ+UjYh7fEwYxygk1YoLwGWyhbt7Ds2IoQjswnCUqZOK jxPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717404975; x=1718009775; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:sender:from:to:cc:subject:date :message-id:reply-to; bh=G3AS4Uq7MCOKnTXDrkUmfuTyIHSQvdkFqibsWTHEggw=; b=VFCEw/vhZ3EgYRzS9hh18aP+qjwZvwWyKAoIvy1WJ3lA2gskB+GkQ7TvLVte4WccxY dC/A8g77Z6q/u4yWNNrVVTXt0cs/7ScelMPqr57mDMii3GGvr4tuBo2H5cV9P+QQLaKC 6LfXg4M5Q50PpTpmr+ZWgU4ciVH6AVnk129hobwBWLtSRctlKPF4PMG9oeDSVH7YfzTU 05s5Ai8JLpZOwTywWZE09AR3wsStfGO/hIPmFnx062ql8chKBURMLZztbW+rG6ZpSztk /2tgHoBH0nNrEWKMMZMCY3DUSkRGOjnZgjm1mVkKNsI1RZmzmb/8oehmi8Vg/9upVXmv 6Ofg== Sender: swupdate@googlegroups.com X-Forwarded-Encrypted: i=2; AJvYcCXeJreHbUWHSYe690ZyYAH69ZDa1ROXCli2r1DnVX4Gh0grpw4qmrvCOjyRBn8svYBDGewf4uQG1C63AF0ThkrK5IjDr5xHr9pmWdEjUQ== X-Gm-Message-State: AOJu0YxcqKfRSZhduArl1aqGUPbu7RbCIqsew1CbdHerCAukxky097N5 XRH3lMMbF5dSot1Ps0FVSHcr69ixpgNwGdqkIMHJr+rsNW+YHOsG X-Google-Smtp-Source: AGHT+IE63O7Kyhp6dKjcqYJqU05IyQ3vr1bZgurWYCPKPdIvXc3Gg65lS13nFb2DfNyfBIGIM/0ecQ== X-Received: by 2002:a05:6808:614b:b0:3c9:c5e8:453d with SMTP id 5614622812f47-3d1e3472d03mr9247334b6e.8.1717404975382; Mon, 03 Jun 2024 01:56:15 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com Received: by 2002:a05:622a:181f:b0:43a:c471:8fbc with SMTP id d75a77b69052e-43fe916566cls11846321cf.2.-pod-prod-08-us; Mon, 03 Jun 2024 01:56:13 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCV4bmGmnKwSME3ObL2aZFnFgthhDPHCPpgxxK7qexcUXDRrFimXhPPMmVLE53jDP5fua6CGTTk685qufEO+WGAxu+Xwe+Kju/qQ X-Received: by 2002:a05:620a:254d:b0:792:9fb4:9961 with SMTP id af79cd13be357-794f5c973cfmr968267385a.45.1717404973287; Mon, 03 Jun 2024 01:56:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1717404973; cv=none; d=google.com; s=arc-20160816; b=gSy0L7cC35qabwPaDRFhFQgW7bOSJ5j61+cp+SKe2EArSUgXu/n35mjUS8SxoVVznC dVK/ywrt/hqmbrWf10fN6Jg2NE4+MRZ1NCOwembIDtUglDPMkkU5GKZqk6z5gwckbZ9I M5P4RtrEfhr22l2ifx2atWulxzT790O2HC1BTNS676obOUeDwuDNnxL7Zyv73V+HsxcM BReeGziUo55YFmTdtIo8ivtM5bRC5+gJh5C3tRsYLjRiWxfwqSo0ycu4qARuhdJJOakb wkRaUTZBdvpL2KPTlSRhzqnZg5ozhLiXAbdg27ZT6zjFI5YKe2o6ckOeU7z12jaoSp2H 2zvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature; bh=U/tlUQ0AUSY/FFXjT+LMBE7j3hV9DkP4Gwjsb0m51IE=; fh=5oScBr/i6uiUvtV1IuyM3BzLlbRa/vnA8SINcwYtluI=; b=zvEPgye8luPNnLuH6D8LX9h7pew7S9trf1bvq0OysXkd2PcTWh//2Hw656cKPsM3Ky ZY9CPmAuQD2UHgt0Zklcp/aTQE/1MEs6NrIVgI4nks9Skn+cpxK2bPjEeWAQYsNDgOGz EB6TbuLW6T8yedZ5hi6DB1G4vRxvKGhEa/63DB4UfibwNoXHh35Y+7UL047IQVRN73p7 f2UJCFxAYqEqBkDy4u0951KIgCteuvoZit/rMqtb4a8iqyGgcd0TKIaclSEL4MA2MWZl pUdmg7hg0Sg3mOy6B2IURcSgJfmbmcbCuGj2kErSHrRPt3L1wVkwtlr5oT6I6takRzk9 uUSg==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=azWEhwKq; dkim=pass header.i=@atmark-techno.com header.s=google header.b=KGWogimL; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com Received: from gw2.atmark-techno.com (gw2.atmark-techno.com. [35.74.137.57]) by gmr-mx.google.com with ESMTPS id af79cd13be357-794f305ae8fsi35871085a.4.2024.06.03.01.56.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Jun 2024 01:56:13 -0700 (PDT) Received-SPF: pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) client-ip=35.74.137.57; Received: from gw2.atmark-techno.com (localhost [127.0.0.1]) by gw2.atmark-techno.com (Postfix) with ESMTP id 4116DA78 for ; Mon, 3 Jun 2024 17:56:10 +0900 (JST) Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by gw2.atmark-techno.com (Postfix) with ESMTPS id 63A2B92B for ; Mon, 3 Jun 2024 17:56:09 +0900 (JST) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-2c2083b00bbso1747478a91.3 for ; Mon, 03 Jun 2024 01:56:09 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCVBDT0kH1j68Iz1w82RzCSWKLS2Hg4il3eIApe6miqsX9ptYk/75Crvqu8FKS7+F5aMDaB1J1Mzphp8jZJcxtf3iuxXSqf1IWxo X-Received: by 2002:a17:90b:1c11:b0:2c2:154c:d02a with SMTP id 98e67ed59e1d1-2c2154cd39dmr3179977a91.45.1717404968438; Mon, 03 Jun 2024 01:56:08 -0700 (PDT) X-Received: by 2002:a17:90b:1c11:b0:2c2:154c:d02a with SMTP id 98e67ed59e1d1-2c2154cd39dmr3179962a91.45.1717404967959; Mon, 03 Jun 2024 01:56:07 -0700 (PDT) Received: from pc-0182.atmarktech (103.131.189.35.bc.googleusercontent.com. [35.189.131.103]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2c1a77afb3fsm7916344a91.37.2024.06.03.01.56.07 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 03 Jun 2024 01:56:07 -0700 (PDT) Received: from [::1] (helo=pc-0182.atmark.tech) by pc-0182.atmarktech with esmtp (Exim 4.96) (envelope-from ) id 1sE3U6-009riT-0S; Mon, 03 Jun 2024 17:56:06 +0900 From: Dominique Martinet To: stefano.babic@swupdate.org, swupdate@googlegroups.com Cc: Dominique Martinet Subject: [swupdate] [PATCH RFC 2/9] cpio_utils: move out hash comparison Date: Mon, 3 Jun 2024 17:55:55 +0900 Message-Id: <20240603085602.2351411-3-dominique.martinet@atmark-techno.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> References: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> MIME-Version: 1.0 X-Original-Sender: dominique.martinet@atmark-techno.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=azWEhwKq; dkim=pass header.i=@atmark-techno.com header.s=google header.b=KGWogimL; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.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: , - reword comment about 64 bytes for md_value - only convert to ascii if we're going to use it for logging Signed-off-by: Dominique Martinet --- core/cpio_utils.c | 65 +++++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/core/cpio_utils.c b/core/cpio_utils.c index 00b15f030c74..a05a32cd59b5 100644 --- a/core/cpio_utils.c +++ b/core/cpio_utils.c @@ -434,6 +434,38 @@ static int zstd_step(void* state, void* buffer, size_t size) #endif +static int hash_compare(struct swupdate_digest *dgst, unsigned char *hash) +{ + /* + * SHA256_HASH_LENGTH should be enough but openssl might write + * up to EVP_MAX_MD_SIZE = 64 bytes (sha512 size) + */ + unsigned char md_value[64]; + unsigned int md_len = 0; + + if (swupdate_HASH_final(dgst, md_value, &md_len) < 0) { + return -EFAULT; + } + /* + * Now check if the computed hash is equal + * to the value retrieved from sw-descritpion + */ + if (md_len != SHA256_HASH_LENGTH || swupdate_HASH_compare(hash, md_value)) { +#ifndef CONFIG_ENCRYPTED_IMAGES_HARDEN_LOGGING + char hashstring[2 * SHA256_HASH_LENGTH + 1]; + char newhashstring[2 * SHA256_HASH_LENGTH + 1]; + + hash_to_ascii(hash, hashstring); + hash_to_ascii(md_value, newhashstring); + + ERROR("HASH mismatch : %s <--> %s", + hashstring, newhashstring); +#endif + return -EFAULT; + } + return 0; +} + static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nbytes, unsigned long *offs, unsigned long long seek, int skip_file, int __attribute__ ((__unused__)) compressed, uint32_t *checksum, unsigned char *hash, bool encrypted, const char *imgivt, writeimage callback) @@ -441,11 +473,6 @@ static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nby unsigned int percent, prevpercent = 0; int ret = 0; int len; - unsigned char md_value[64]; /* - * Maximum hash is 64 bytes for SHA512 - * and we use sha256 in swupdate - */ - unsigned int md_len = 0; unsigned char *aes_key = NULL; unsigned char *ivt = NULL; unsigned char ivtbuf[AES_BLK_SIZE]; @@ -648,31 +675,9 @@ static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nby } } - if (IsValidHash(hash)) { - if (swupdate_HASH_final(input_state.dgst, md_value, &md_len) < 0) { - ret = -EFAULT; - goto copyfile_exit; - } - - - /* - * Now check if the computed hash is equal - * to the value retrieved from sw-descritpion - */ - if (md_len != SHA256_HASH_LENGTH || swupdate_HASH_compare(hash, md_value)) { - char hashstring[2 * SHA256_HASH_LENGTH + 1]; - char newhashstring[2 * SHA256_HASH_LENGTH + 1]; - - hash_to_ascii(hash, hashstring); - hash_to_ascii(md_value, newhashstring); - -#ifndef CONFIG_ENCRYPTED_IMAGES_HARDEN_LOGGING - ERROR("HASH mismatch : %s <--> %s", - hashstring, newhashstring); -#endif - ret = -EFAULT; - goto copyfile_exit; - } + if (IsValidHash(hash) && hash_compare(input_state.dgst, hash) < 0) { + ret = -EFAULT; + goto copyfile_exit; } if (!inbuf) { From patchwork Mon Jun 3 08:55:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dominique Martinet X-Patchwork-Id: 1942760 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20230601 header.b=kZ2cWTM7; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2607:f8b0:4864:20::b3f; helo=mail-yb1-xb3f.google.com; envelope-from=swupdate+bncbcwivbv7sugrbluk62zamgqet3sevui@googlegroups.com; receiver=patchwork.ozlabs.org) Received: from mail-yb1-xb3f.google.com (mail-yb1-xb3f.google.com [IPv6:2607:f8b0:4864:20::b3f]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Vt6yq23yZz20W0 for ; Mon, 3 Jun 2024 18:56:19 +1000 (AEST) Received: by mail-yb1-xb3f.google.com with SMTP id 3f1490d57ef6-dfa74682897sf4211023276.2 for ; Mon, 03 Jun 2024 01:56:18 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717404975; cv=pass; d=google.com; s=arc-20160816; b=HHm3jaWNDmXaNuf+AURUP7ho+/70xl6n0hPNiPJagEZ7PXqwthw1NgJlTj9M161NKo eY0m4z4J0Xdq+TkzSgjcCcfGMmxs7lJGI7DsEh2SgjSVvxxoLKzA1Fxle1frhvTN7r/U zCEDq6FddG/e8frVMRzEhewmqlp8Oi3UOY9CaePSEMnPmJkob9Xe+wFZpI13kETNRHlQ I0TYeSSflf8lnWYCSW4v6+VdNCaBqPhhsbVLEQlSYezIfTbUgAFrDrFm5zY7dOrKUTof m7hCAdBz4JpWxe8s2LHN/QjFDAxliSaJj0eWfqVZOKMCmGa5sm95HXPAszpkNu1cRn5U 8tjg== 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=3pSLv/W//xwcKHSU/WF5evngccQ2ynXxwi6xGfb2lAw=; fh=RLEZtH0WctQlWUtXQHxadeo29nX3DgNAr2BnbPGuJws=; b=m7ePoRVZVi3ZpnmcSEQTBnXDPvD8Kv4BR3XD7jNAICISDcovKZZYbDGZ6743QM5ohL hhnJfZ7lkh//QmbvWlTXo7DHeC+i5P6dZg0JsyYdv7mefXS5YdxqscGS0NpOATH+DUot wbbSWX8Sabe1txqF92deWW2YrqjaPJPN5uJoiAbKMpz4fltIi7vdGYwUSYXpqQodGBdO mo45rAX2pqW/P3vF5/aKKB9lukQTFsfYZGPPqI/+RYLlVHQXhAYOGtoBkw/1CCaBjNXm EIZNBU/GNRpzCRipp3gGcfzAqH1oSLlpzvVOqHxpZ8DliukSZoLZC5y2DcS9b5DOzHw9 +qxA==; darn=patchwork.ozlabs.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=LGhNQNvG; dkim=pass header.i=@atmark-techno.com header.s=google header.b=Y7tcFr1Y; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1717404975; x=1718009775; darn=patchwork.ozlabs.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:sender:from:to:cc:subject:date:message-id :reply-to; bh=3pSLv/W//xwcKHSU/WF5evngccQ2ynXxwi6xGfb2lAw=; b=kZ2cWTM74GkWODLVvFR27u+jXEwoKEMar6FxaWT1lueeBBRiA42461dbTPvHcF3FGP dmsnjynus4k5WhPRXYmdQUBfYhQo+gYbN6tiEj3QNIqzA9w2LYKkSy4MwkTxvnD9H8j7 Sda6EpHY7Tie20FAmrDLkI7naFTd/OR2nmq1bEdixZPI+8+AVkAnuzMa9SS1888tV7Il H6I/0P86beFXxs0pqM4WcV1nevH4GBRVUjpn+ZX9Uk8PTFe6ZQmp+vZX9labpZKhF+74 41WJtJOKS+WdMFp9eKS9VQT0dLIW/NCF3vzDu7jO6y3ehvi/y3nQvhTPVffKpo1dTSHB 1acQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717404975; x=1718009775; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:sender:from:to:cc:subject:date :message-id:reply-to; bh=3pSLv/W//xwcKHSU/WF5evngccQ2ynXxwi6xGfb2lAw=; b=mZKekSDL3Oi9wc6wYAerSuGrLm9jDi8mYsslJgK1rdpZcRsexO679ov4zRowhm2IVM kbXGH1mA1skZhWt9MjqSj936zrrj6fagkXJ5k+sabvknT7kWpnD10T1uFLkK5QzzuTdR 8O/aU7K2dDTjz+J9MuFYESl1Cg9Y/i1wSe4aolD1UCTRx/64aXjPjwG5//4/pfuVR+kr e1A0NGwBQuWQAJ+9QkoXI468Cewk794yQY9tJ6TddEpJSdycLuaW4kCx0J3yszh2sxLz gjP7P5wH62riKI5b1uO64VkhaacvB9R8LrW568tppNpnNrmQfuxlLpkMf3OeZvCZ22Ke vmWw== Sender: swupdate@googlegroups.com X-Forwarded-Encrypted: i=2; AJvYcCW6uHQY0U2iwf74tThFj5mNJaGZq0/oIi5RJ0FdxuPtiaoKALUvPYp1mKjYPngQhuZNVNihqy7ZvXHZ1y9fQGI4gFZsiPoNtbrJtnq/PA== X-Gm-Message-State: AOJu0YyX+Ft4D326lcLoJM0DXy1KuXCVH2IdtNZ8oPIsQiW4MCUqyndq Ue7SWAUAz2ESzs8L1HlHBbX6RuAkWXijX4zyeG51NGL6npAS+T2d X-Google-Smtp-Source: AGHT+IF3wIIGvqLUysvRwd0aIPa4JlfjX5DMD6Szq/MJOn0XK4alfmAn0uu90P1i6rV3Ca2bB7Klyw== X-Received: by 2002:a25:ea54:0:b0:dfa:56e1:9eb5 with SMTP id 3f1490d57ef6-dfa73d91471mr7994453276.48.1717404975069; Mon, 03 Jun 2024 01:56:15 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com Received: by 2002:a25:df04:0:b0:dfa:7878:d377 with SMTP id 3f1490d57ef6-dfa7878d671ls608213276.1.-pod-prod-01-us; Mon, 03 Jun 2024 01:56:13 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUX7aTInPST6yZSsJRu/UdRF5uRBrBbEx/xZjZYAVxENBpEHLurAuEnVlOcSqsuzf8Cs0garFK8vsxqNt2s9UKkukdKYvocbfqc X-Received: by 2002:a81:6c4d:0:b0:622:cf30:8204 with SMTP id 00721157ae682-62c7948d85emr80210687b3.0.1717404973413; Mon, 03 Jun 2024 01:56:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1717404973; cv=none; d=google.com; s=arc-20160816; b=ErEVYSgynBcWOMuXN/LZgIjR2IE2iaAKmuSeUaGEsdCGFAK4qhJKyXNZgvrmocdxII pOGU4/incvcgYgbO1XrwEtTPZntmOHDMu8BosZ8jZwU5tMKPglZ1pKXoJSKxHiHBlNZp jpB/4a/i0bCDZagzB3fCdCDPWMKcPqQiiZumCUXzehdO9Z0TedSL0H4/mOH311Lxk9oh vrWhx2DPDZJ1JHH4ndcKHnoRXRzIcdkgfoUNuqnK0df+nwxSx98XIfbafgcrVt5c1EKp Cx7z3ouvq5zUn1sOUB466HTNyMgJFVrvauLtlOhgGnjY5zEGYiKXsrx0MvD8JMt3etQB 78yw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature; bh=6cAglcd5Fda5QMHtnwgL/R6GMQPZXqiZScKCrA3wqks=; fh=wWX5PNiJ8hKjZAdKkTegS4/cCEbJRqqvNLCrrMByleg=; b=pHSfZCKdelijxaulJzCgeM8VoHzZaypUuRwT1pSxwLRpx7xIthQA5XNgkmv36QJYyZ LjxwteMY1/AP2CtXAX+N8i5qZVfOvfIim44DfhjKBFBAU7ERx8NZRCLibpTl9kYQ5iOD U933XADv7OW+zy2CqPNMEh/OgMlFVd+zYInyNqgxfJWJSRsJitu4Ul2foqB7p6OtD28z FHc+zDIVMNmA6pvE3yzsGhz2+NFog6xGSaxlqmAWpHVlKZSYfWuDSko2LSTm5ECaBc6o hJL15lr2hoiDG/2O0HcyHknpycxUJImRI+JKIigTxuk/G7ywv815wttM3KFsx1QEjeQq 4O5g==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=LGhNQNvG; dkim=pass header.i=@atmark-techno.com header.s=google header.b=Y7tcFr1Y; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com Received: from gw2.atmark-techno.com (gw2.atmark-techno.com. [35.74.137.57]) by gmr-mx.google.com with ESMTPS id 00721157ae682-62c766dbcfdsi3930887b3.3.2024.06.03.01.56.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Jun 2024 01:56:13 -0700 (PDT) Received-SPF: pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) client-ip=35.74.137.57; Received: from gw2.atmark-techno.com (localhost [127.0.0.1]) by gw2.atmark-techno.com (Postfix) with ESMTP id 0225BA92 for ; Mon, 3 Jun 2024 17:56:11 +0900 (JST) Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by gw2.atmark-techno.com (Postfix) with ESMTPS id B324B933 for ; Mon, 3 Jun 2024 17:56:09 +0900 (JST) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-1f6582eca2bso12785865ad.1 for ; Mon, 03 Jun 2024 01:56:09 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCUEkyfa5LM1hR+vYqq65adZ6vIB8rvyYqinECkIJIrSdVNADCA43rOHMiDykyMPUQ86vJuWQnlOqUW2gYba+Rmta931R6XORUDY X-Received: by 2002:a17:902:d385:b0:1f6:24f3:5a8d with SMTP id d9443c01a7336-1f636ffd610mr77855185ad.26.1717404968659; Mon, 03 Jun 2024 01:56:08 -0700 (PDT) X-Received: by 2002:a17:902:d385:b0:1f6:24f3:5a8d with SMTP id d9443c01a7336-1f636ffd610mr77855085ad.26.1717404968260; Mon, 03 Jun 2024 01:56:08 -0700 (PDT) Received: from pc-0182.atmarktech (178.101.200.35.bc.googleusercontent.com. [35.200.101.178]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1f632367201sm59714805ad.96.2024.06.03.01.56.07 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 03 Jun 2024 01:56:07 -0700 (PDT) Received: from [::1] (helo=pc-0182.atmark.tech) by pc-0182.atmarktech with esmtp (Exim 4.96) (envelope-from ) id 1sE3U6-009riT-0d; Mon, 03 Jun 2024 17:56:06 +0900 From: Dominique Martinet To: stefano.babic@swupdate.org, swupdate@googlegroups.com Cc: Dominique Martinet Subject: [swupdate] [PATCH RFC 3/9] copyfile cleanup: use copyimage when we can Date: Mon, 3 Jun 2024 17:55:56 +0900 Message-Id: <20240603085602.2351411-4-dominique.martinet@atmark-techno.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> References: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> MIME-Version: 1.0 X-Original-Sender: dominique.martinet@atmark-techno.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=LGhNQNvG; dkim=pass header.i=@atmark-techno.com header.s=google header.b=Y7tcFr1Y; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.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: , There were a few handlers manually passing all the fields required for copyimage, use copyimage instead. lua was using img.checksum as a secondary hash, preserve this functionality by remembering the old img.checksum instead of passing a different checksum pointer. There is no intended functional change. Signed-off-by: Dominique Martinet --- corelib/lua_interface.c | 38 ++++++++------------------------------ handlers/delta_handler.c | 13 +------------ handlers/rdiff_handler.c | 13 +------------ 3 files changed, 10 insertions(+), 54 deletions(-) diff --git a/corelib/lua_interface.c b/corelib/lua_interface.c index 03b74aed1cf2..10af0760c5f9 100644 --- a/corelib/lua_interface.c +++ b/corelib/lua_interface.c @@ -388,7 +388,7 @@ static int l_copy2file(lua_State *L) } struct img_type img = {}; - uint32_t checksum = 0; + uint32_t image_checksum = img.checksum; table2image(L, &img); if (check_same_file(img.fdin, fdout)) { @@ -397,18 +397,7 @@ static int l_copy2file(lua_State *L) lua_pushstring(L, "Output file path is same as input file temporary path"); goto copyfile_exit; } - int ret = copyfile(img.fdin, - &fdout, - img.size, - (unsigned long *)&img.offset, - img.seek, - 0, /* no skip */ - img.compressed, - &checksum, - img.sha256, - img.is_encrypted, - img.ivt_ascii, - NULL); + int ret = copyimage(&fdout, &img, NULL /* default write callback */); update_table(L, &img); lua_pop(L, 1); @@ -417,10 +406,10 @@ static int l_copy2file(lua_State *L) lua_pushstring(L, strerror(errno)); goto copyfile_exit; } - if ((img.checksum != 0) && (checksum != img.checksum)) { + if ((image_checksum != 0) && (image_checksum != img.checksum)) { lua_pushinteger(L, -1); lua_pushfstring(L, "Checksums WRONG! Computed 0x%d, should be 0x%d\n", - checksum, img.checksum); + img.checksum, image_checksum); goto copyfile_exit; } @@ -463,24 +452,13 @@ static int l_istream_read(lua_State* L) luaL_checktype(L, 2, LUA_TFUNCTION); struct img_type img = {}; - uint32_t checksum = 0; + uint32_t image_checksum = img.checksum; lua_pushvalue(L, 1); table2image(L, &img); lua_pop(L, 1); - int ret = copyfile(img.fdin, - L, - img.size, - (unsigned long *)&img.offset, - img.seek, - 0, /* no skip */ - img.compressed, - &checksum, - img.sha256, - img.is_encrypted, - img.ivt_ascii, - istream_read_callback); + int ret = copyimage(L, &img, istream_read_callback); lua_pop(L, 1); update_table(L, &img); @@ -491,10 +469,10 @@ static int l_istream_read(lua_State* L) lua_pushstring(L, strerror(errno)); return 2; } - if ((img.checksum != 0) && (checksum != img.checksum)) { + if ((image_checksum != 0) && (image_checksum != img.checksum)) { lua_pushinteger(L, -1); lua_pushfstring(L, "Checksums WRONG! Computed 0x%d, should be 0x%d\n", - checksum, img.checksum); + img.checksum, image_checksum); return 2; } lua_pushinteger(L, 0); diff --git a/handlers/delta_handler.c b/handlers/delta_handler.c index 8e7faa0ead02..5ec243ee01d9 100644 --- a/handlers/delta_handler.c +++ b/handlers/delta_handler.c @@ -999,18 +999,7 @@ static int install_delta(struct img_type *img, goto cleanup; } - ret = copyfile(img->fdin, - &mem_fd, - img->size, - (unsigned long *)&img->offset, - img->seek, - 0, - img->compressed, - &img->checksum, - img->sha256, - img->is_encrypted, - img->ivt_ascii, - NULL); + ret = copyimage(&mem_fd, img, NULL /* default write callback */); if (ret != 0) { ERROR("Error %d copying zchunk header, aborting.", ret); diff --git a/handlers/rdiff_handler.c b/handlers/rdiff_handler.c index e01a127bce50..3b01519ce80a 100644 --- a/handlers/rdiff_handler.c +++ b/handlers/rdiff_handler.c @@ -337,18 +337,7 @@ static int apply_rdiff_patch(struct img_type *img, rs_trace_to(rdiff_log); rdiff_state.job = rs_patch_begin(base_file_read_cb, rdiff_state.base_file); - ret = copyfile(img->fdin, - &rdiff_state, - img->size, - (unsigned long *)&img->offset, - img->seek, - 0, /* no skip */ - img->compressed, - &img->checksum, - img->sha256, - img->is_encrypted, - img->ivt_ascii, - apply_rdiff_chunk_cb); + ret = copyimage(&rdiff_state, img, apply_rdiff_chunk_cb); if (ret != 0) { ERROR("Error %d running rdiff job, aborting.", ret); goto cleanup; From patchwork Mon Jun 3 08:55:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dominique Martinet X-Patchwork-Id: 1942764 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20230601 header.b=MAV39d0f; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2607:f8b0:4864:20::c3e; helo=mail-oo1-xc3e.google.com; envelope-from=swupdate+bncbcwivbv7sugrbmek62zamgqemze4dqy@googlegroups.com; receiver=patchwork.ozlabs.org) Received: from mail-oo1-xc3e.google.com (mail-oo1-xc3e.google.com [IPv6:2607:f8b0:4864:20::c3e]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Vt6yr0zxFz20WQ for ; Mon, 3 Jun 2024 18:56:20 +1000 (AEST) Received: by mail-oo1-xc3e.google.com with SMTP id 006d021491bc7-5b976c32d9dsf3302103eaf.3 for ; Mon, 03 Jun 2024 01:56:19 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717404977; cv=pass; d=google.com; s=arc-20160816; b=UwAfd/WZWQUAovnDr+LwoyfNKY893SME3Pnt3rVp6G8y+H+ML+P86cesWN8XAHNHf0 jRdSTi3k1rXjeIj7EN3Ew+F9u9Kos0EbkqOsbMkxqC+9UjXUxuShcoDXdDn4X6agE7hU ctnTx7ZUXJYHtCUe3A13mpjVZW02plJfnx1wn/3Y6qWWu+P3PLceut8xBK2HrquMJuXn xUvwm5T3MNkfIqCnuvb4C1nflLDuaMR87gQDnN+e14LF9ctRJkLT+BEQDAFKbYaiB5Fb 9NSlxxaOxVgdj9r0210G0Pcb3Lp8V1k614bAVxctrO0Q94wIgu56vHPWXx8CJXmtSkae 052w== 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=g4Z5/vbW27sJgqKy4BXaZBXv1RcxNhe3pkluEX/x7jE=; fh=iwyXRyWYpWONuXhOLrsqVaZTfYqQIMIBY/FtvYl/rGY=; b=IUI0uCKp37yQ2dJzlGxyVM2eT5LCiqO6tqkr9Jkbi9pgmTDky3T+TOe2Xlu7GiCqLr wvjjcupV/tVzYBDPFdCh/8CgkB9f4/FsJuttimXebS1Vl5wDy+6wYWrkT3Fc8tuzTedy ZgU8+/PbjRE0cAZEN5TLe7Eeck+RQ59i/Ec/UTJGfUaB38QTPpHsrdVYyrTibWVqCFLE vsiwIJSBX7D9jckbiO54wYW5JVezPbEHoocYRNha8RQWzzvUVeBBfGS1jLOK+Bf1JsgK U1OCBI4auBDUrPbI7imGDDlOU4Ul0mRIXaDme6l/BO82UPcZNftAowwJhfrDCF1r6jHz kJSA==; darn=patchwork.ozlabs.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=MtQ33SZ1; dkim=pass header.i=@atmark-techno.com header.s=google header.b=UAd4VJmG; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1717404977; x=1718009777; darn=patchwork.ozlabs.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:sender:from:to:cc:subject:date:message-id :reply-to; bh=g4Z5/vbW27sJgqKy4BXaZBXv1RcxNhe3pkluEX/x7jE=; b=MAV39d0fRyoBxrB3vAJ6WDHC6RgCXBjOFV5M/ongZ3ezuQDv9qaAFSwqFoUEFyUaM/ o7TiZYv30f/iMBT326hCjIS0VeP19pzi1oL3rFDfh6n6axefjsmnAAD6q3NRZcHDBqwB 8Cdw19OEE562lJ7ST9yO5U+FzLwLZB+8y380YpRUiJuuemFVWSc3tCIhSEYF217EWfMD xaZIs5/gEfNcoFHiNeBPx4P90fJXBY6pS9uQEKV8pw9Gm7GhWNv0pFBGFiGCYrhsciuG viJUIDVR1wDlD2SosxcuBKPr0MdWTLDATBAldxXV/20fmyaxOVCiT1zL8rt9PGuQ+l7W NGug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717404977; x=1718009777; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:sender:from:to:cc:subject:date :message-id:reply-to; bh=g4Z5/vbW27sJgqKy4BXaZBXv1RcxNhe3pkluEX/x7jE=; b=slTP4+JftHUSOkj7xfxChX8tGfD7xH3PZT0rwaOXbB3E/n8F7dHgBrnlRTdk0+qaUN 24a3TGkcJcECwCKf69uv2kgToCbekamS7iuOE9+ZIInnpaJv52A1E+Zbc96JqaA+2W7M NaYt+3NqE7wY83KzC1tvDHX8qH708VID9K6cFvrssl2qqkXLAZhODMFgXwYsZNmIHwqE jjD79thAOrdOYYr0J9dn3Y/oDoObh7MYHkFOCmwJd6vZ4tYJcf2T6TlzssB0ucKkYOqv UR6AAM6KTGcBcvDNa2Jsn7jEpToNYueJdJhjH7ROYlCX4+DGmbfyJvMJ9LryKyPIpQEd 65Sg== Sender: swupdate@googlegroups.com X-Forwarded-Encrypted: i=2; AJvYcCWWi8hS0s9Tu4t1faxNB17aGCfuuwe/4nYMBjeKwDaEIy+hpKOH2GB5XNWN9KjL14i8yoOIMC4qLjTmJ4JRTsFuQYpnQ1/XOV56mcLrCg== X-Gm-Message-State: AOJu0YyOLs8v2CtcfmdOQMMR/q+k/UQrXXwYNeVVpnMn6kxIxxVunaxd AQL94k/FbcDxkY5zqRIHVhLy3+hP5//yNS3VX1i8NMThvpznJus7 X-Google-Smtp-Source: AGHT+IGuo1PSdIyB2vpfjvx0OE5HmBm/3oceBskZZIoNzaQ4ooJtJf5MLo9GafWoojKrT6Vrcv2MMg== X-Received: by 2002:a05:6820:160c:b0:5b2:1095:a58b with SMTP id 006d021491bc7-5ba05d32b7cmr8466655eaf.8.1717404977274; Mon, 03 Jun 2024 01:56:17 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com Received: by 2002:a4a:aa08:0:b0:5ae:1f6c:8983 with SMTP id 006d021491bc7-5b9feca8e7cls1021911eaf.1.-pod-prod-01-us; Mon, 03 Jun 2024 01:56:16 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVzpFWrAe14mY7rdXfZ25pAak4Ha7mYGFs4V7pPmC89iPPBxSk6Ox7S2ATd0nvO1Krc9jV5gg5OnPzrE/lVst8i+qomPPwpfADj X-Received: by 2002:a05:6830:1510:b0:6f0:7ca9:dd09 with SMTP id 46e09a7af769-6f911f26983mr8824465a34.7.1717404976017; Mon, 03 Jun 2024 01:56:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1717404976; cv=none; d=google.com; s=arc-20160816; b=ScyFnyTWUIFB8vvK5rP1ISeE1GskHl03soyhzk04uwPtPMLs3GhMflkMiDp/e0jn8A mHUkSCefRTuxrqjwdkgzPWP1TdHPvrl3jurDf22VdYE5OPL7yu3PkZqYURJjQwmJvx04 9OXEug0UqKSBpFDYognx22YaD5mb7clQoBkj7aFLHPGG7Y204+OwvrMMGkKeS+8SmxxL K1kfaxnIGS88ld4L13sUiUfy88z4Ht1f84XnRSiN6dZkZQPmCWl6jWRvqso3NoXI+4NQ Edy3SJgzIQpH6Sn20JOnoo4tDz0jbmXdKXol7IzaFBDvbMrwEQPSEnXqH//A3Our3XT5 tITw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature; bh=uUDMe6I2hpMs3Xhcp2x6yMa0I4iDwbfOEx6/NnPGeIw=; fh=2foHRTrtYPPJOLAf/lesImXdXMvdx4snb1yg7YzHah0=; b=R3IsCJ0fHND3EmfPQilWfhm9366cmQKvx/RtPmpz4SCZbuAyuWkFfNBCcLRwwW3mcI oQNpSmOV37gDDlziBvAr0D/pnRnRX2/MfOUj2ccKDNqFCYFLRgtp+L5Cin7SyNCo/wlh 7P6ZJFqZC7Z4HrqwaIzgqYsncNv4xw2h8VynauOmL3muj1GBoKcXniod+mD5bbBgvVap 3gZFDF7hScGFpz5s0Q5dCCtVli24zGI8yR/Mgofjo7viiN1K/lVFl526OAf2YXP6BVog AskJA8RXHmsRko7CouseW4jKWexsz0XQ4eJ1c7FxFslY3VuSYx6/W4IHiJamg1nvCbYV 6USQ==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=MtQ33SZ1; dkim=pass header.i=@atmark-techno.com header.s=google header.b=UAd4VJmG; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com Received: from gw2.atmark-techno.com (gw2.atmark-techno.com. [35.74.137.57]) by gmr-mx.google.com with ESMTPS id 46e09a7af769-6f91049a907si390970a34.0.2024.06.03.01.56.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Jun 2024 01:56:15 -0700 (PDT) Received-SPF: pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) client-ip=35.74.137.57; Received: from gw2.atmark-techno.com (localhost [127.0.0.1]) by gw2.atmark-techno.com (Postfix) with ESMTP id B23F3A92 for ; Mon, 3 Jun 2024 17:56:13 +0900 (JST) Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by gw2.atmark-techno.com (Postfix) with ESMTPS id 33602A4A for ; Mon, 3 Jun 2024 17:56:12 +0900 (JST) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-2c19ebab03eso3042870a91.2 for ; Mon, 03 Jun 2024 01:56:12 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCVx6vd2ukRAKht6DTt4K9tusFtV514deA+TyP8sG4wPiBDkZsGovTVtjI3vFsLNCD0fUn/TxydtSEdSrW1SJoMYWMyMzlguyFM9 X-Received: by 2002:a17:90a:ee8d:b0:2c0:1dd7:4221 with SMTP id 98e67ed59e1d1-2c1dc568f90mr6973068a91.10.1717404971060; Mon, 03 Jun 2024 01:56:11 -0700 (PDT) X-Received: by 2002:a17:90a:ee8d:b0:2c0:1dd7:4221 with SMTP id 98e67ed59e1d1-2c1dc568f90mr6973057a91.10.1717404970514; Mon, 03 Jun 2024 01:56:10 -0700 (PDT) Received: from pc-0182.atmarktech (76.125.194.35.bc.googleusercontent.com. [35.194.125.76]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2c1a776e17esm7420489a91.15.2024.06.03.01.56.08 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 03 Jun 2024 01:56:08 -0700 (PDT) Received: from [::1] (helo=pc-0182.atmark.tech) by pc-0182.atmarktech with esmtp (Exim 4.96) (envelope-from ) id 1sE3U6-009riT-0q; Mon, 03 Jun 2024 17:56:06 +0900 From: Dominique Martinet To: stefano.babic@swupdate.org, swupdate@googlegroups.com Cc: Dominique Martinet Subject: [swupdate] [PATCH RFC 4/9] copyfile refactor: replace the 13 arguments by a struct Date: Mon, 3 Jun 2024 17:55:57 +0900 Message-Id: <20240603085602.2351411-5-dominique.martinet@atmark-techno.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> References: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> MIME-Version: 1.0 X-Original-Sender: dominique.martinet@atmark-techno.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=MtQ33SZ1; dkim=pass header.i=@atmark-techno.com header.s=google header.b=UAd4VJmG; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.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: , Having too many arguments make it difficult to see at a glance what is passed where, and makes it hard to extend further. Make copyfile() take a struct that describes all the current arguments and fix all callers. There is no intended functional change. Signed-off-by: Dominique Martinet --- core/cpio_utils.c | 143 +++++++++++++++--------------------- core/installer.c | 19 +++-- core/stream_interface.c | 24 +++++- handlers/copy_handler.c | 20 ++--- handlers/delta_handler.c | 29 +++++--- handlers/readback_handler.c | 20 ++--- include/util.h | 40 +++++++--- 7 files changed, 155 insertions(+), 140 deletions(-) diff --git a/core/cpio_utils.c b/core/cpio_utils.c index a05a32cd59b5..acb3f3b634f8 100644 --- a/core/cpio_utils.c +++ b/core/cpio_utils.c @@ -466,9 +466,7 @@ static int hash_compare(struct swupdate_digest *dgst, unsigned char *hash) return 0; } -static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nbytes, unsigned long *offs, unsigned long long seek, - int skip_file, int __attribute__ ((__unused__)) compressed, - uint32_t *checksum, unsigned char *hash, bool encrypted, const char *imgivt, writeimage callback) +int copyfile(struct swupdate_copy *args) { unsigned int percent, prevpercent = 0; int ret = 0; @@ -478,12 +476,12 @@ static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nby unsigned char ivtbuf[AES_BLK_SIZE]; struct InputState input_state = { - .fdin = fdin, + .fdin = args->fdin, .source = INPUT_FROM_FD, .inbuf = NULL, .pos = 0, - .nbytes = nbytes, - .offs = offs, + .nbytes = args->nbytes, + .offs = args->offs, .dgst = NULL, .checksum = 0 }; @@ -522,32 +520,33 @@ static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nby /* * If inbuf is set, read from buffer instead of from file */ - if (inbuf) { - input_state.inbuf = inbuf; + if (args->inbuf) { + input_state.inbuf = args->inbuf; input_state.source = INPUT_FROM_MEMORY; } PipelineStep step = NULL; void *state = NULL; uint8_t buffer[BUFF_SIZE]; + writeimage callback = args->callback; if (!callback) { callback = copy_write; } - if (checksum) - *checksum = 0; + if (args->checksum) + *args->checksum = 0; - if (IsValidHash(hash)) { + if (IsValidHash(args->hash)) { input_state.dgst = swupdate_HASH_init(SHA_DEFAULT); if (!input_state.dgst) return -EFAULT; } - if (encrypted) { + if (args->encrypted) { aes_key = get_aes_key(); - if (imgivt && strlen(imgivt)) { - if (!is_hex_str(imgivt) || ascii_to_bin(ivtbuf, sizeof(ivtbuf), imgivt)) { + if (args->imgivt && strlen(args->imgivt)) { + if (!is_hex_str(args->imgivt) || ascii_to_bin(ivtbuf, sizeof(ivtbuf), args->imgivt)) { ERROR("Invalid image ivt"); return -EINVAL; } @@ -562,12 +561,12 @@ static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nby } } - if (compressed) { - if (compressed == COMPRESSED_TRUE) { + if (args->compressed) { + if (args->compressed == COMPRESSED_TRUE) { WARN("compressed argument: boolean form is deprecated, use compressed = \"zlib\";"); } #ifdef CONFIG_GUNZIP - if (compressed == COMPRESSED_ZLIB || compressed == COMPRESSED_TRUE) { + if (args->compressed == COMPRESSED_ZLIB || args->compressed == COMPRESSED_TRUE) { /* * 16 + MAX_WBITS means that Zlib should expect and decode a * gzip header. @@ -583,7 +582,7 @@ static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nby } else #endif #ifdef CONFIG_ZSTD - if (compressed == COMPRESSED_ZSTD) { + if (args->compressed == COMPRESSED_ZSTD) { if ((zstd_state.dctx = ZSTD_createDStream()) == NULL) { ERROR("ZSTD_createDStream failed"); ret = -EFAULT; @@ -595,22 +594,22 @@ static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nby } else #endif { - TRACE("Requested decompression method (%d) is not configured!", compressed); + TRACE("Requested decompression method (%d) is not configured!", args->compressed); ret = -EINVAL; goto copyfile_exit; } } - if (seek) { - int fdout = (out != NULL) ? *(int *)out : -1; + if (args->seek) { + int fdout = (args->out != NULL) ? *(int *)args->out : -1; if (fdout < 0) { ERROR("out argument: invalid fd or pointer"); ret = -EFAULT; goto copyfile_exit; } - TRACE("offset has been defined: %llu bytes", seek); - if (lseek(fdout, seek, SEEK_SET) < 0) { + TRACE("offset has been defined: %llu bytes", args->seek); + if (lseek(fdout, args->seek, SEEK_SET) < 0) { ERROR("offset argument: seek failed"); ret = -EFAULT; goto copyfile_exit; @@ -618,8 +617,8 @@ static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nby } #if defined(CONFIG_GUNZIP) || defined(CONFIG_ZSTD) - if (compressed) { - if (encrypted) { + if (args->compressed) { + if (args->encrypted) { decrypt_state.upstream_step = &input_step; decrypt_state.upstream_state = &input_state; decompress_state.upstream_step = &decrypt_step; @@ -632,7 +631,7 @@ static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nby state = &decompress_state; } else { #endif - if (encrypted) { + if (args->encrypted) { decrypt_state.upstream_step = &input_step; decrypt_state.upstream_state = &input_state; step = &decrypt_step; @@ -653,7 +652,7 @@ static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nby if (ret == 0) { break; } - if (skip_file) { + if (args->skip_file) { continue; } len = ret; @@ -663,31 +662,32 @@ static int __swupdate_copy(int fdin, unsigned char *inbuf, void *out, size_t nby * results corrupted. This lets the cleanup routine * to remove it */ - if (callback(out, buffer, len) < 0) { + if (callback(args->out, buffer, len) < 0) { ret = -ENOSPC; goto copyfile_exit; } - percent = (unsigned)(100ULL * (nbytes - input_state.nbytes) / nbytes); + percent = (unsigned)(100ULL * (args->nbytes - input_state.nbytes) / args->nbytes); if (percent != prevpercent) { prevpercent = percent; swupdate_progress_update(percent); } } - if (IsValidHash(hash) && hash_compare(input_state.dgst, hash) < 0) { + if (IsValidHash(args->hash) && hash_compare(input_state.dgst, args->hash) < 0) { ret = -EFAULT; goto copyfile_exit; } - if (!inbuf) { - ret = _fill_buffer(fdin, buffer, NPAD_BYTES(*offs), offs, checksum, NULL); + if (!args->inbuf) { + ret = _fill_buffer(args->fdin, buffer, NPAD_BYTES(*args->offs), + args->offs, args->checksum, NULL); if (ret < 0) DEBUG("Padding bytes are not read, ignoring"); } - if (checksum != NULL) { - *checksum = input_state.checksum; + if (args->checksum != NULL) { + *args->checksum = input_state.checksum; } ret = 0; @@ -713,57 +713,23 @@ copyfile_exit: return ret; } -int copyfile(int fdin, void *out, size_t nbytes, unsigned long *offs, unsigned long long seek, - int skip_file, int __attribute__ ((__unused__)) compressed, - uint32_t *checksum, unsigned char *hash, bool encrypted, const char *imgivt, writeimage callback) -{ - return __swupdate_copy(fdin, - NULL, - out, - nbytes, - offs, - seek, - skip_file, - compressed, - checksum, - hash, - encrypted, - imgivt, - callback); -} - -int copybuffer(unsigned char *inbuf, void *out, size_t nbytes, int __attribute__ ((__unused__)) compressed, - unsigned char *hash, bool encrypted, const char *imgivt, writeimage callback) -{ - return __swupdate_copy(-1, - inbuf, - out, - nbytes, - NULL, - 0, - 0, - compressed, - NULL, - hash, - encrypted, - imgivt, - callback); -} - int copyimage(void *out, struct img_type *img, writeimage callback) { - return copyfile(img->fdin, - out, - img->size, - (unsigned long *)&img->offset, - img->seek, - 0, /* no skip */ - img->compressed, - &img->checksum, - img->sha256, - img->is_encrypted, - img->ivt_ascii, - callback); + struct swupdate_copy copy = { + .fdin = img->fdin, + .out = out, + .callback = callback, + .nbytes = img->size, + .offs = (unsigned long*)&img->offset, + .seek = img->seek, + .skip_file = 0, + .compressed = img->compressed, + .checksum = &img->checksum, + .hash = img->sha256, + .encrypted = img->is_encrypted, + .imgivt = img->ivt_ascii, + }; + return copyfile(©); } int extract_cpio_header(int fd, struct filehdr *fhdr, unsigned long *offset) @@ -846,8 +812,15 @@ int cpio_scan(int fd, struct swupdate_cfg *cfg, off_t start) * use copyfile for checksum and hash verification, as we skip file * we do not have to provide fdout */ - if (copyfile(fd, NULL, fdh.size, &offset, 0, 1, 0, &checksum, img ? img->sha256 : NULL, - false, NULL, NULL) != 0) { + struct swupdate_copy copy = { + .fdin = fd, + .nbytes = fdh.size, + .offs = &offset, + .skip_file = 1, + .checksum = &checksum, + .hash = img ? img->sha256 : NULL, + }; + if (copyfile(©) != 0) { ERROR("invalid archive"); return -1; } diff --git a/core/installer.c b/core/installer.c index cc5ca34b013d..0cb06b2ca419 100644 --- a/core/installer.c +++ b/core/installer.c @@ -141,13 +141,18 @@ static int extract_scripts(struct imglist *head) return -ENOENT; } - ret = copyfile(fdin, &fdout, script->size, &offset, 0, 0, - script->compressed, - &checksum, - script->sha256, - script->is_encrypted, - script->ivt_ascii, - NULL); + struct swupdate_copy copy = { + .fdin = fdin, + .out = &fdout, + .nbytes = script->size, + .offs = &offset, + .compressed = script->compressed, + .checksum = &checksum, + .hash = script->sha256, + .encrypted = script->is_encrypted, + .imgivt = script->ivt_ascii, + }; + ret = copyfile(©); close(fdin); close(fdout); diff --git a/core/stream_interface.c b/core/stream_interface.c index 5f3ad2e3fd93..14a483b19648 100644 --- a/core/stream_interface.c +++ b/core/stream_interface.c @@ -103,8 +103,15 @@ static int extract_file_to_tmp(int fd, const char *fname, unsigned long *poffs, if (fdout < 0) return -1; - if (copyfile(fd, &fdout, fdh.size, poffs, 0, 0, 0, &checksum, NULL, - encrypted, NULL, NULL) < 0) { + struct swupdate_copy copy = { + .fdin = fd, + .out = &fdout, + .nbytes = fdh.size, + .offs = poffs, + .checksum = &checksum, + .encrypted = encrypted, + }; + if (copyfile(©) < 0) { close(fdout); return -1; } @@ -230,6 +237,13 @@ static int extract_files(int fd, struct swupdate_cfg *software) fdout = -1; offset = 0; + struct swupdate_copy copy = { + .fdin = fd, + .out = &fdout, + .nbytes = fdh.size, + .offs = &offset, + .checksum = &checksum, + }; /* * If images are not streamed directly into the target * copy them into TMPDIR to check if it is all ok @@ -243,7 +257,8 @@ static int extract_files(int fd, struct swupdate_cfg *software) close(fdout); return -1; } - if (copyfile(fd, &fdout, fdh.size, &offset, 0, 0, 0, &checksum, img->sha256, false, NULL, NULL) < 0) { + copy.hash = img->sha256; + if (copyfile(©) < 0) { close(fdout); return -1; } @@ -255,7 +270,8 @@ static int extract_files(int fd, struct swupdate_cfg *software) break; case SKIP_FILE: - if (copyfile(fd, &fdout, fdh.size, &offset, 0, skip, 0, &checksum, NULL, false, NULL, NULL) < 0) { + copy.skip_file = 1; + if (copyfile(©) < 0) { return -1; } if (!swupdate_verify_chksum(checksum, &fdh)) { diff --git a/handlers/copy_handler.c b/handlers/copy_handler.c index 3e2f1f40f9e5..0dcb540a119e 100644 --- a/handlers/copy_handler.c +++ b/handlers/copy_handler.c @@ -121,18 +121,14 @@ static int copy_single_file(const char *path, ssize_t size, struct img_type *img * Copying from device itself, * no encryption or compression */ - ret = copyfile(fdin, - &fdout, - size, - &offset, - 0, - 0, /* no skip */ - 0, /* no compressed */ - &checksum, - 0, /* no sha256 */ - false, /* no encrypted */ - NULL, /* no IVT */ - NULL); + struct swupdate_copy copy = { + .fdin = fdin, + .out = &fdout, + .nbytes = size, + .offs = &offset, + .checksum = &checksum, + }; + ret = copyfile(©); close(fdout); void *status; diff --git a/handlers/delta_handler.c b/handlers/delta_handler.c index 5ec243ee01d9..a14181f11d49 100644 --- a/handlers/delta_handler.c +++ b/handlers/delta_handler.c @@ -161,14 +161,14 @@ static int network_process_data(multipart_parser* p, const char *at, size_t leng zck_get_chunk_number(priv->chunk), priv->current.chunksize); if (priv->current.chunksize != 0) { - ret = copybuffer(priv->current.buf, - &priv->fdout, - priv->current.chunksize, - COMPRESSED_ZSTD, - hash, - 0, - NULL, - NULL); + struct swupdate_copy copy = { + .inbuf = priv->current.buf, + .out = &priv->fdout, + .nbytes = priv->current.chunksize, + .compressed = COMPRESSED_ZSTD, + .hash = hash, + }; + ret = copyfile(©); } else ret = 0; /* skipping, nothing to be copied */ /* Buffer can be discarged */ @@ -178,7 +178,7 @@ static int network_process_data(multipart_parser* p, const char *at, size_t leng * if an error occurred, stops */ if (ret) { - ERROR("copybuffer failed !"); + ERROR("copyfile failed !"); priv->error_in_parser = true; return -EFAULT; } @@ -845,8 +845,15 @@ static bool copy_existing_chunks(zckChunk **dstChunk, struct hnd_priv *priv) zck_get_chunk_number(chunk), start, len); - ret = copyfile(priv->fdsrc, &priv->fdout, len, &offset, 0, 0, COMPRESSED_FALSE, - &checksum, hash, false, NULL, NULL); + struct swupdate_copy copy = { + .fdin = priv->fdsrc, + .out = &priv->fdout, + .nbytes = len, + .offs = &offset, + .checksum = &checksum, + .hash = hash, + }; + ret = copyfile(©); free(sha); if (ret) diff --git a/handlers/readback_handler.c b/handlers/readback_handler.c index 70a82c1a893c..9e462eabe8e5 100644 --- a/handlers/readback_handler.c +++ b/handlers/readback_handler.c @@ -102,18 +102,14 @@ static int readback_postinst(struct img_type *img) * the input device. */ unsigned long offset_out = 0; - int status = copyfile(fdin, - NULL, /* no output */ - size, - &offset_out, - 0, /* no output seek */ - 1, /* skip file, do not write to the output */ - 0, /* no compressed */ - NULL, /* no checksum */ - hash, - false, /* no encrypted */ - NULL, /* no IVT */ - NULL); /* no callback */ + struct swupdate_copy copy = { + .fdin = fdin, + .nbytes = size, + .offs = &offset_out, + .skip_file = 1, + .hash = hash, + }; + int status = copyfile(©); if (status == 0) { INFO("Readback verification success"); } else { diff --git a/include/util.h b/include/util.h index 77da1b17ce15..1703514269f1 100644 --- a/include/util.h +++ b/include/util.h @@ -56,13 +56,42 @@ typedef enum { SERVER_ID_REQUESTED, } server_op_res_t; -enum { +enum compression_type { COMPRESSED_FALSE, COMPRESSED_TRUE, COMPRESSED_ZLIB, COMPRESSED_ZSTD, }; +typedef int (*writeimage) (void *out, const void *buf, size_t len); + +struct swupdate_copy { + /* input: either fdin is set or fdin < 0 and inbuf */ + int fdin; + unsigned char *inbuf; + /* data handler callback and output argument. + * out must point to a fd if seeking */ + writeimage callback; + void *out; + /* amount of data to copy */ + size_t nbytes; + /* pointer to offset within source, must be set for fd */ + unsigned long *offs; + /* absolute offset to seek in output (*out) if non-zero */ + unsigned long long seek; + /* skip callback: only verify input */ + int skip_file; + /* decompression to use */ + enum compression_type compressed; + /* cpio crc checksum */ + uint32_t *checksum; + /* sw-description sha256 checksum */ + unsigned char *hash; + /* encryption */ + bool encrypted; + const char *imgivt; +}; + /* * loglevel is used into TRACE / ERROR * for values > LASTLOGLEVEL, it is an encoded field @@ -188,8 +217,6 @@ bool strtobool(const char *s); /* * Function to extract / copy images */ -typedef int (*writeimage) (void *out, const void *buf, size_t len); - void *saferealloc(void *ptr, size_t size); int copy_write(void *out, const void *buf, size_t len); #if defined(__FreeBSD__) @@ -200,13 +227,8 @@ int copy_write_padded(void *out, const void *buf, size_t len); size_t strlcpy(char *dst, const char * src, size_t size); #endif -int copyfile(int fdin, void *out, size_t nbytes, unsigned long *offs, - unsigned long long seek, - int skip_file, int compressed, uint32_t *checksum, - unsigned char *hash, bool encrypted, const char *imgivt, writeimage callback); +int copyfile(struct swupdate_copy *copy); int copyimage(void *out, struct img_type *img, writeimage callback); -int copybuffer(unsigned char *inbuf, void *out, size_t nbytes, int compressed, - unsigned char *hash, bool encrypted, const char *imgivt, writeimage callback); int openfileoutput(const char *filename); int mkpath(char *dir, mode_t mode); int swupdate_file_setnonblock(int fd, bool block); From patchwork Mon Jun 3 08:55:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dominique Martinet X-Patchwork-Id: 1942766 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20230601 header.b=ftznpVxo; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2607:f8b0:4864:20::b39; helo=mail-yb1-xb39.google.com; envelope-from=swupdate+bncbcwivbv7sugrbmek62zamgqemze4dqy@googlegroups.com; receiver=patchwork.ozlabs.org) Received: from mail-yb1-xb39.google.com (mail-yb1-xb39.google.com [IPv6:2607:f8b0:4864:20::b39]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Vt6yr5bhxz23vC for ; Mon, 3 Jun 2024 18:56:20 +1000 (AEST) Received: by mail-yb1-xb39.google.com with SMTP id 3f1490d57ef6-dfa787a3474sf174284276.1 for ; Mon, 03 Jun 2024 01:56:20 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717404977; cv=pass; d=google.com; s=arc-20160816; b=jl9g1/NV10faA9S3AeM61HWneOHkn3wlM54sQc53UZepX5Ug+2P2xIcFjeBB5T45rf 34KPgrp0bgJrkHjjdPkCJ3IMnpayHKC3zVqXwCeB29Zfdg+djCJ0pzWB2prq46caqTLt arKBB7PcQdg7X6UPd0uoNqSPrP57RtUh32rpf9+PjkDJpT9phmoh0tRtlmAde71BCjrz ghu1ngaqnbelIqeVs3GdnY8JFRhjRD/e+zbONc2AgFw1famxHixh+tuE11nK9zHm4eOa DiVecB4d5m7fdNL/kcmGo/ZGaGkn9T5f61gSmmhMtsgt3WJBzvxLzG1cGywgLLDDbiVb WdLw== 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=bv6X7DVcXinQnts/zmjzsQBe7QW6M+j1IfVFfxGu0aY=; fh=LjOmSWUebNmrK8spun338GztgCTqIsfKWAM5wjl4ZKs=; b=gIDdKxKg9wYz9KJG/W4dZGO16B9CvbUmZDWrKB2iMd154Gc273NQEUBfcIUpJWfm93 hLo0Keq79Z4ssRB6ZpSnigywwX3f35FPj0BQV/JZ9DdVMLr4/2ltsHXAlqLuICcj4gmj CbE0N8KynX4j0Tn05myTcq/jIMoBeE9JgT8mG+rbn6RYKtAPRshD9a/yxm5xge35Zdn6 fX/bagavdIKD96XEifiOtybh0f2ibVEgxeI6Ga2dlmwOmG4NANFWYC8J/EqOYX/w/y6n Oa8LGmp/RMMm+hurbJ+OTg7mGFVib5I7w+8+RQn5L+T5na/OFqbkPAZagZ75MMAADdIh ViWQ==; darn=patchwork.ozlabs.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=phvjzluQ; dkim=pass header.i=@atmark-techno.com header.s=google header.b=Caae2I6w; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1717404977; x=1718009777; darn=patchwork.ozlabs.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:sender:from:to:cc:subject:date:message-id :reply-to; bh=bv6X7DVcXinQnts/zmjzsQBe7QW6M+j1IfVFfxGu0aY=; b=ftznpVxo6X/YCh3eAJuDQHBEMxj6Kp1mzu3LRqS+4WU5goKCkGMRLA1RRgUjsfROJe ruoXZes8gi6UGs/cUyxhQlbYCFEeGo1PxjSi+3V3bLaPoRox1LshUDyl9WJLPwpHbe4g stO6kUGsAnGsAxQ5U4AefEp8DTNqZfWiKLoQvlRDibYQkeK/nhU/2yZcLwg8f9QOuPV/ qoN0yi8e0ptM5vpNbY8MNB/q9272Jb2rnnimp/GJ4UQwTFHYncj+fgHkYNAOoeJ10Eoo JH6DwV77bjgPQkXCjsywgRuK2mFlReosZdoUnir7qsmlAgxsaFCtdeGNiu6gRB13OSIQ L+bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717404977; x=1718009777; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:sender:from:to:cc:subject:date :message-id:reply-to; bh=bv6X7DVcXinQnts/zmjzsQBe7QW6M+j1IfVFfxGu0aY=; b=fxFSk9LL6oAabFflSm/NizTWQmkpAwZAbYciQW0fIswCHDQMM7t3pFDzBZOW/OLaIk 5hyq36Gz1Xw+GVwkP8+6ZOG3bUX2kwimiP3F3BNuVnt2CnnjL4fVIJDdCalStPUlqc4x QH6ucxS49l8c/V1uzwVuMkZWnj695nl9XBpn4y/26gEOclN6QQp4JRMMXDd7uKK0vOSN /RAsdZakKeJHAtgfIk3F0wYI74yACd4K0bxctEQnWRek5hHyWciPtu3gS3wM19JAUs+H eC2nBg3WOZrYdMdtKQQUipDy3b07UOZ/h2/0CZPVrhV3FD3QM5F0XLOWYpqJDGRYP3VA IrEA== Sender: swupdate@googlegroups.com X-Forwarded-Encrypted: i=2; AJvYcCWEn2HnZIX6VW/ZMdH/1X+NiujWI+xgR5kYcWACJ5MyxD66ivgYrpDuIRhlo1gVvKS5WmRFtVU9Ov/mKaNNtUPefCq/OP9oxs9Bro9NTQ== X-Gm-Message-State: AOJu0YzSTI38nlQj5PdlG29BV1K6q0Gv8T0ov3aXq0Bu61rr+SPm33Ij RIaqzyIt5RUu//AnuHMOQyJcu1fj8rIDxFFuHLBdVYpCQ9fk5QXR X-Google-Smtp-Source: AGHT+IGwOAWe1UDbZtYOe5dpfqBXoqD0k3xur85KFp8OFhau1a3xhF9FJZYSozWP5gSPyy+TZ4Bv1w== X-Received: by 2002:a05:6902:2605:b0:dee:883b:749b with SMTP id 3f1490d57ef6-dfa73e638ccmr6023215276.6.1717404977154; Mon, 03 Jun 2024 01:56:17 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com Received: by 2002:a25:df04:0:b0:dfa:7878:d377 with SMTP id 3f1490d57ef6-dfa7878d671ls608326276.1.-pod-prod-01-us; Mon, 03 Jun 2024 01:56:16 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWBSJGRVt8iHXjhff93x2wOXkvgPoGbtG4r91CctzAsxEHuafYdNvTbtYPAdDA7OVppnY4a7hK+4IfvcafOKsf9PzadBoruhewD X-Received: by 2002:a25:ad03:0:b0:df4:a607:2429 with SMTP id 3f1490d57ef6-dfa73d90ac6mr9067389276.45.1717404975996; Mon, 03 Jun 2024 01:56:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1717404975; cv=none; d=google.com; s=arc-20160816; b=UeDzq6mccpsR20GEEsqYuASVe6skpfC0AhaUNyEHsQoCOWAVtWT8PmUWoQY3ZzZeP/ uVvMeMcKDE7uWSJS6Iifkqr5oBXM3lBYQ4Fcs2vQDq3UXfm4WkaJPOPsRBWhc830D3tA uSKBzfoHXAroTIdRNihDmkyZPjlR8O1FrxFXaES+M/0rRBJplDU9F1dWyQXw9LZ8KfB5 GOFhkLO1givZCq6lw+0PC3YQEXbAhVkiCIhnshRFZ748v18VAs2dYZdcjeor1600Kh9w riJ164lEx+jHMi/wWuXSQH29sdF0bmD1WY5rX8N36+YMMoUdo2t3XPgWBbGxedl2Mvos MuQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature; bh=3JdZc8LJZIy0QWyHnPOFr0YCJM9Y4FswQvVMXgMhNdM=; fh=bLfBbaqm8quG3K8jSaX6CveKeaQgKa2+VV7zBcVdRJQ=; b=oLs6eKKpx2ZKLLF+nZLWaPp9+X7jbAU/nXeABigBD9PowSV98J/bqJElgAlwaIRV7D zXMwZclRnbF8fGuyWFsaq6bvpF82dafA57mTsMICYUeNDouoniE+KeYn/h3fvXfyPNR/ 1m4nFA8/UY372O4ELmNDU/Mgbtp73iOcQdw1UeX/+5F2XnhAdmeNwg3AT0jsIZ401Aoi mvwOHrGkHCX0hmCiD6B2h1+I6nyjY6qdxCxE/HwGYsGmjTDO2sliT5iL2mhy7k58meVu Gltt+uZTdXRHUVioNM91BuHPaOsrdsITWCCp4fC5D3qxjfbw9V2xF2fTN/A1m7ssh5GA qnkw==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=phvjzluQ; dkim=pass header.i=@atmark-techno.com header.s=google header.b=Caae2I6w; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com Received: from gw2.atmark-techno.com (gw2.atmark-techno.com. [35.74.137.57]) by gmr-mx.google.com with ESMTPS id 6a1803df08f44-6ae4b405ed9si3830386d6.5.2024.06.03.01.56.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Jun 2024 01:56:15 -0700 (PDT) Received-SPF: pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) client-ip=35.74.137.57; Received: from gw2.atmark-techno.com (localhost [127.0.0.1]) by gw2.atmark-techno.com (Postfix) with ESMTP id 18EFBA95 for ; Mon, 3 Jun 2024 17:56:13 +0900 (JST) Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by gw2.atmark-techno.com (Postfix) with ESMTPS id DE62EA4A for ; Mon, 3 Jun 2024 17:56:10 +0900 (JST) Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-70258f8869cso1748667b3a.1 for ; Mon, 03 Jun 2024 01:56:10 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCU9CtwzB48JeYwgpgPHXTrhlLRaogs1Yb8YYGqmgLnzqS8kB2lXQWooYOpz6M/368db46Xy5f/YY6CPO+OyYhpaDsJFLXt6B3G6 X-Received: by 2002:a05:6a00:21c8:b0:702:3375:85cc with SMTP id d2e1a72fcca58-702477e5c29mr10034905b3a.8.1717404969912; Mon, 03 Jun 2024 01:56:09 -0700 (PDT) X-Received: by 2002:a05:6a00:21c8:b0:702:3375:85cc with SMTP id d2e1a72fcca58-702477e5c29mr10034890b3a.8.1717404969532; Mon, 03 Jun 2024 01:56:09 -0700 (PDT) Received: from pc-0182.atmarktech (117.209.187.35.bc.googleusercontent.com. [35.187.209.117]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-702423cdb8fsm5055031b3a.28.2024.06.03.01.56.07 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 03 Jun 2024 01:56:08 -0700 (PDT) Received: from [::1] (helo=pc-0182.atmark.tech) by pc-0182.atmarktech with esmtp (Exim 4.96) (envelope-from ) id 1sE3U6-009riT-11; Mon, 03 Jun 2024 17:56:06 +0900 From: Dominique Martinet To: stefano.babic@swupdate.org, swupdate@googlegroups.com Cc: Dominique Martinet Subject: [swupdate] [PATCH RFC 5/9] cpio_utils: cleanup state chaining code Date: Mon, 3 Jun 2024 17:55:58 +0900 Message-Id: <20240603085602.2351411-6-dominique.martinet@atmark-techno.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> References: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> MIME-Version: 1.0 X-Original-Sender: dominique.martinet@atmark-techno.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=phvjzluQ; dkim=pass header.i=@atmark-techno.com header.s=google header.b=Caae2I6w; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.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: , We don't need to nest ifs so much, chain steps as they become required. The step order (input step, decryption, decompression) is preserved. There is no intended functional change. Signed-off-by: Dominique Martinet --- core/cpio_utils.c | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/core/cpio_utils.c b/core/cpio_utils.c index acb3f3b634f8..b0a97004baf6 100644 --- a/core/cpio_utils.c +++ b/core/cpio_utils.c @@ -616,31 +616,22 @@ int copyfile(struct swupdate_copy *args) } } + step = &input_step; + state = &input_state; + + if (args->encrypted) { + decrypt_state.upstream_step = step; + decrypt_state.upstream_state = state; + step = &decrypt_step; + state = &decrypt_state; + } + #if defined(CONFIG_GUNZIP) || defined(CONFIG_ZSTD) if (args->compressed) { - if (args->encrypted) { - decrypt_state.upstream_step = &input_step; - decrypt_state.upstream_state = &input_state; - decompress_state.upstream_step = &decrypt_step; - decompress_state.upstream_state = &decrypt_state; - } else { - decompress_state.upstream_step = &input_step; - decompress_state.upstream_state = &input_state; - } + decompress_state.upstream_step = step; + decompress_state.upstream_state = state; step = decompress_step; state = &decompress_state; - } else { -#endif - if (args->encrypted) { - decrypt_state.upstream_step = &input_step; - decrypt_state.upstream_state = &input_state; - step = &decrypt_step; - state = &decrypt_state; - } else { - step = &input_step; - state = &input_state; - } -#if defined(CONFIG_GUNZIP) || defined(CONFIG_ZSTD) } #endif From patchwork Mon Jun 3 08:55:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dominique Martinet X-Patchwork-Id: 1942761 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20230601 header.b=XbpEft8W; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2607:f8b0:4864:20::53a; helo=mail-pg1-x53a.google.com; envelope-from=swupdate+bncbcwivbv7sugrbmek62zamgqemze4dqy@googlegroups.com; receiver=patchwork.ozlabs.org) Received: from mail-pg1-x53a.google.com (mail-pg1-x53a.google.com [IPv6:2607:f8b0:4864:20::53a]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Vt6yq350Gz20WM for ; Mon, 3 Jun 2024 18:56:19 +1000 (AEST) Received: by mail-pg1-x53a.google.com with SMTP id 41be03b00d2f7-6c554776d0fsf1586202a12.0 for ; Mon, 03 Jun 2024 01:56:19 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717404977; cv=pass; d=google.com; s=arc-20160816; b=CuaLKyM3lm23qELAH6lpAb1pdLAukEcyDZfSVoYQ/Z+wrQ+fha3R9RbEWKsu/S1hpO vJkgw/Ekuaz21YK6ibfJ9kHBnWzspvtCdXRTsuiIPhR/D5E8nnHSh947Vjka8fVfFFDa ZDwH+xDxbmegg9yNyO0KrspbOwi//gLqihE2jdI5pUzJCyjLw4UX8RQSKHxJK4kIfO/t fcYMhA6dnJK4DWWRZGT1CzAj4LIQwzuasNheFV3I/L8JOTDpl32SfNS6oeZKQvQ/HY4y v8kDI9LI9CRgPDT+xgVqXuFLkmaJlig+exKJ3g9ht1KcVbpGFk9AMDD0uJOH/NjExoZl NvXw== 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=NEFYAVWUvBm4koCsc/mSDj7TENeBAlgbzg/peyj+fsA=; fh=UzZAEQkmuNDrjNlWaOaz1xSw40fwKhWu1WoByqIljjA=; b=DvkUlYPGY6v4GBs0E5whbWTbAmlAk5Q4pvNiEhrVkjevRUQk4ZuJ61yGY79TtLlDWV 1BmG/yAq0//TeMMTJ0d3txDCJbvDVWY830J+S1YiKy6HMCuXCfW0xiTpYSxTe/5MeJJL fdLFzSyJ3DSP/GFAe5+qNvrOpq/QZcnZxNIO4r4kwvBuu9/wLU61MTD311kfm6RVwtZY 61vP9Dll+fC+w0GTca6wmoOrm8HPAjRe1+XOsci/JQSUCUb5WnUR8p6Lz7Y3O6/PZkcx ZDdoHdVpHxKXG/GCwTqsAE5H1J3XrqHHbiu+e/Ot5I9PUdaFX9ZVxu9EGg4ObUitFW9L lIng==; darn=patchwork.ozlabs.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=CVGGpgMm; dkim=pass header.i=@atmark-techno.com header.s=google header.b=T2H13Ngc; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1717404977; x=1718009777; darn=patchwork.ozlabs.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:sender:from:to:cc:subject:date:message-id :reply-to; bh=NEFYAVWUvBm4koCsc/mSDj7TENeBAlgbzg/peyj+fsA=; b=XbpEft8Wuc3URpN4319GbdD7Wzq9QtqfDVTxAUasM6LJN5iI6vQeEJEyDgj8rtqVhP xK61facuCvdjK1mCJsqaPQHjAMV0r13R3SahBSlJAujpJdtW3dn3tIGeC9TWEqTll/cc FZTWQJP4oKk3t0awH1aRP5JVi8AhqbntTGZGGUug9tfiwYLO/SFH2T6vEilvwouGTyGM +bBK/7AZal5GHIkgfkXw5G9M8Ii2WjOeoBqG25DUbZ2URyli12Ud4eobM+QFnxN9pncs lLtK8z2ytiy2PQeK3DU6xjylJFFviBdXatk8eOhg1JSibU1nypqu9hlRbQcWiP6dRww1 DDpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717404977; x=1718009777; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:sender:from:to:cc:subject:date :message-id:reply-to; bh=NEFYAVWUvBm4koCsc/mSDj7TENeBAlgbzg/peyj+fsA=; b=lQExiGZ66w3eNTr9Flcw8CAXs3Ri1Zl6vrypeN5mYyNMDklYkrmzHMO01hn6ArwxZJ uYHPSIFWOFVAKpYB1Z+KFERmWQNKFP1uycYlswGEJV7fsxopX9uM8JBOY2h4Q+DWegA3 yYTvK8hZAvSstifasHTJM3ebrgAS19RatyE+6sv8F0huszx47SoiDVi8nIiPsJvaU+hW 8q71GNhBYqV6fnYq3l0yw5MraCrf0oaTjCC0wLvPLQ42FM3qAsBnVYrqfMgKZJFgy4zB zBe7T9+irnQaIv4xbfl5XUf2bYUYhaY4JyUr6iyD1gU9ApNosyS3LHdZU/RoQga/u3VF moyw== Sender: swupdate@googlegroups.com X-Forwarded-Encrypted: i=2; AJvYcCUQk+7dQHR63VSfPtZQs1YwBjtduyIO1SSYAcYBJP55/AUQdu+htVuc1tBxwe+cdnp2XKGIc/KPsRfIxzppl8cRNaWSlFi4YBfSnLK6vA== X-Gm-Message-State: AOJu0Yxv4v5wMv7me3+Syxj0HhXY5WPo9SveIDjRHYU+EeaWhB1xuxuO SJ21jUWrJMOCYVMW+HZ0U4FVfD0ef2HZsTZpvL+K0BQRxWO1OR3e X-Google-Smtp-Source: AGHT+IF7IfcZzifBKbEpgJGBwgwy/B1UYGh2emXdtT7t7gMDAVdfGWVXCux4ZvRORpxmqgNg0bJ+3g== X-Received: by 2002:a17:90a:bf87:b0:2bd:d67b:6bf3 with SMTP id 98e67ed59e1d1-2c1acd998ffmr15118021a91.20.1717404976710; Mon, 03 Jun 2024 01:56:16 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com Received: by 2002:a17:90b:a18:b0:2bf:cf2d:67ea with SMTP id 98e67ed59e1d1-2c1a964dfd4ls329825a91.0.-pod-prod-00-us; Mon, 03 Jun 2024 01:56:15 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVIi4+vFsI8DkkSHDh7DquQrZYnKqshB2107+7AQnBn6nxVZN3kTLOBc6p6Q/CFV1S2SAhhbspipE7TLGyC7QjkJFJWtfR1b48q X-Received: by 2002:a17:90b:1012:b0:2bf:e473:7045 with SMTP id 98e67ed59e1d1-2c1acd998dcmr15692825a91.21.1717404975234; Mon, 03 Jun 2024 01:56:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1717404975; cv=none; d=google.com; s=arc-20160816; b=CENvWMjjdBIwo2MsusYUxoP2nGbeOsRvDVKMRXa4spDt4mmx5eJCoyZzZ6MGny4s2C pCOnJmHrCg8Qx9c+t7fxnSqkf8iPSIpACQDNF5QasIvdA3VmvqofK3dPhEeEfCwlQEvk JFqTqkQbilStM6tG0BWqiB005xX3mLDcULd1hLjQSqYgyJjfJVubMvdctWvpupxzDG9K NqQak7tIpwEwRsX9c6ZU27wB1VqVHauKZ2bRGsShJoqMqXXcthBIiMR/aA/HXzLjQ3O4 Y7guRarbiXBpmw2FnWNARRYT03LPzKK9srqYH9DTwczJ3sTzrS8zTSGyISmIYSGgnTP3 7PYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature; bh=gegskikDVRK77+/zbXriGChsVAsQhv5LHRSMx6nX0fs=; fh=rbDQRf24e3XQc4FkkwWFPFrQqCfqSrX/atij+XSAC0Q=; b=HUjEVVhbtLBm2DGNYdYD0LlQucHswhnIfOpfwIk6wSNkhHkfHKoAZa03KhTQIPp2GV oW2QfbJ4G9xhY/5dmt/DarFjwpo/+Qd6Ft9r3bAXReGI2iBsgXL0VYZAO+KUPs6EXpGu H6XPi4JyyzYY2J3/OTXdkn35Em+oWFX969UsqYO9VqMHQBAbZYS36vif/XlPQeQPKIph Th9bUs3di7M0WCt5gyLN2QfF1zvINNqAz465cODFQ5IHiHI1kFyrvCP8XrcqSCojOcbx z5eKQhGJajkVvTEoJI69KrZw4Gj4nZdApabLHluhlXNwdPUK6VOeCBMjuS9UlmYFhaYi jiUQ==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=CVGGpgMm; dkim=pass header.i=@atmark-techno.com header.s=google header.b=T2H13Ngc; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com Received: from gw2.atmark-techno.com (gw2.atmark-techno.com. [35.74.137.57]) by gmr-mx.google.com with ESMTPS id 98e67ed59e1d1-2c1b542aee7si1212667a91.0.2024.06.03.01.56.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Jun 2024 01:56:15 -0700 (PDT) Received-SPF: pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) client-ip=35.74.137.57; Received: from gw2.atmark-techno.com (localhost [127.0.0.1]) by gw2.atmark-techno.com (Postfix) with ESMTP id 5C694A2B for ; Mon, 3 Jun 2024 17:56:13 +0900 (JST) Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) by gw2.atmark-techno.com (Postfix) with ESMTPS id 3D4E7A96 for ; Mon, 3 Jun 2024 17:56:11 +0900 (JST) Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-70265fbbb4bso834824b3a.0 for ; Mon, 03 Jun 2024 01:56:11 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCUs2cwG70iineqjsBh2O1bSuvS2SSx/zk102O4FFLmiPyjUwAETwEt6Tgy4jDkNXd44+jJrWUAA+Mo1cA5p+RHmgZXrDH8aYCpH X-Received: by 2002:a05:6a00:3908:b0:6f4:d5d8:e0a3 with SMTP id d2e1a72fcca58-70245709535mr12079884b3a.9.1717404970246; Mon, 03 Jun 2024 01:56:10 -0700 (PDT) X-Received: by 2002:a05:6a00:3908:b0:6f4:d5d8:e0a3 with SMTP id d2e1a72fcca58-70245709535mr12079866b3a.9.1717404969846; Mon, 03 Jun 2024 01:56:09 -0700 (PDT) Received: from pc-0182.atmarktech (35.112.198.104.bc.googleusercontent.com. [104.198.112.35]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-70242aec7d0sm5220172b3a.99.2024.06.03.01.56.08 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 03 Jun 2024 01:56:08 -0700 (PDT) Received: from [::1] (helo=pc-0182.atmark.tech) by pc-0182.atmarktech with esmtp (Exim 4.96) (envelope-from ) id 1sE3U6-009riT-1D; Mon, 03 Jun 2024 17:56:06 +0900 From: Dominique Martinet To: stefano.babic@swupdate.org, swupdate@googlegroups.com Cc: Dominique Martinet Subject: [swupdate] [PATCH RFC 6/9] cpio_utils: fill_buffer: fix return value on EOF after short read Date: Mon, 3 Jun 2024 17:55:59 +0900 Message-Id: <20240603085602.2351411-7-dominique.martinet@atmark-techno.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> References: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> MIME-Version: 1.0 X-Original-Sender: dominique.martinet@atmark-techno.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=CVGGpgMm; dkim=pass header.i=@atmark-techno.com header.s=google header.b=T2H13Ngc; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.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: , fill_buffer would return 0 after having filled buffer/updated checksums if it reaches the end of file (returns 0) after another read. In practice, this never happens because the caller knows how much to read, and chunks are smaller than what had been previously written in the pipe so this is a theorical problem, but because the checksums are correctly updated until the end this would not be detected if it happens in practice (the end of the data would just not be fed to the handler), so this is best fixed. Signed-off-by: Dominique Martinet --- core/cpio_utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/cpio_utils.c b/core/cpio_utils.c index b0a97004baf6..382b22c36434 100644 --- a/core/cpio_utils.c +++ b/core/cpio_utils.c @@ -73,7 +73,7 @@ static int _fill_buffer(int fd, unsigned char *buf, unsigned int nbytes, unsigne return -EFAULT; } if (len == 0) { - return 0; + return count; } if (checksum) for (i = 0; i < len; i++) From patchwork Mon Jun 3 08:56:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dominique Martinet X-Patchwork-Id: 1942765 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20230601 header.b=qSqw8zsg; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2607:f8b0:4864:20::53c; helo=mail-pg1-x53c.google.com; envelope-from=swupdate+bncbcwivbv7sugrbmek62zamgqemze4dqy@googlegroups.com; receiver=patchwork.ozlabs.org) Received: from mail-pg1-x53c.google.com (mail-pg1-x53c.google.com [IPv6:2607:f8b0:4864:20::53c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Vt6yr1ysJz23tB for ; Mon, 3 Jun 2024 18:56:19 +1000 (AEST) Received: by mail-pg1-x53c.google.com with SMTP id 41be03b00d2f7-5e4df21f22dsf3557488a12.0 for ; Mon, 03 Jun 2024 01:56:19 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717404977; cv=pass; d=google.com; s=arc-20160816; b=uZqPN4LbMk2jC6YidqIwphzlbEBuBOGwk42Kvf6p+AH9eK+DzvkwUq+A19rhCgot2Z ibq8hFuT9IO/eC9+Cfy0EE/k6b7YumvS3RfXhNw5oHAM6xe4TdUx9adUxLjdN0cTJivg MKb351WJDqm3c4tW5oEU+Zw1zR1bSlGkWe28lG8GFyTXhREGvwCyt3j2mp0DwQkQisga xKsIYHaFCe/35TFZSCSysqAQOtcKdTsg8iRXuuFU2YyMt9fYsPVwJ5DXp2Z1TMYKwJit +kBq8OfHQca30S/E6RosYLMXHUFHWTRlfR2KWMC5bOGPkCeNPyEwES0/WR2BaeYDwEs6 ofcA== 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=yXNH0j4ORX1ZM7z/sQoq1CRuz21S3snLkNe6Ba9P3Vg=; fh=3syp7VCE447qPFpY9bTYKNlFEUOBVo2koJ8Jj/UQCZE=; b=tK2GeRhWSTp4Q6dK3sQpMaOWwE4nzv7/rzYnEehnNYeQjSAwvPek7HT26ZEjdypdPQ hsson2ZcNL0Q/NLQAAirToNzhWKezjDSdmQQzmQ1gS0xLawNTfISOy/Bk6TRA4WJiZeX X+kXsz3Gq6xUdpT3NszIUW/UlmLi6uVvdbrn6e11D1IBfz2A/jarr4W35ilRRSF7tQMe VgiDEKD62Ze1LDqFvc2zhWo8VyOrlswdKgnAvUVkLroSS0WZfZgqPEKs4DQJU+NQrIxl 62N2Q21lEpGnpp1EIjln7ZWVF1d4UBGHr8Ch8bpu1r2oLbTwUg5pB0FP8awbVKy1OpFJ ugxA==; darn=patchwork.ozlabs.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=HPJaxCLe; dkim=pass header.i=@atmark-techno.com header.s=google header.b=ZzMp+BPl; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1717404977; x=1718009777; darn=patchwork.ozlabs.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:sender:from:to:cc:subject:date:message-id :reply-to; bh=yXNH0j4ORX1ZM7z/sQoq1CRuz21S3snLkNe6Ba9P3Vg=; b=qSqw8zsgVyZ+4wlrSrkFN6aEttfs/55HAg2WpTmytHy+Gz/JQAJrgX8doHPHBLVQpr RY9NhU5AiFCUt554kNE9RUPPKyEKNyLHe6XBfAnvz7ns10ZzixMdrpIsde6yNSsYISMj UidxNYrbQrSt42kokv3gGWledsw7tr4xC6L5n31k72KY90Ot7DA2BLnTW2xATaN7Gdmt seZ8NGgfY5NkkWSmUT2tUD19suztoWkaMebp6JSlK3jOhoFfPVKwvztkysylX1RSXUXr rUea50WCbP4U0N5WtmICG7/pnvNOychJLdbO0zPWeB5iJWO7K38+QpO/5GwjKfJK8zoX xYNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717404977; x=1718009777; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:sender:from:to:cc:subject:date :message-id:reply-to; bh=yXNH0j4ORX1ZM7z/sQoq1CRuz21S3snLkNe6Ba9P3Vg=; b=kjCp2sBuWNoCVv8IEdCgZMwf2dco1QNzVFRtyh8Cx7ZmFo+xiVmSfweHp7855O8gQW ZMkh6dd7dvYA912kJLF47OEOwE/WqVhpbXA42xF0LuEjeiJfGuy4Ttzgkjf6XRKzXUYP j0ELoT2BnWl5CCBHRyozdCVEng0W5kRLcBqSQ5j5O25xwSeZRZheNGzJSBAjN9Tf6N2f ubuU5hUz2sxa2ReCqAZsGWd/6J9Cc0230/+9jM862E4ei18ON+deaBNBBd2e2jw8z6ua PZZX701FCegFSpdx5UOX1vfrYp2erMxp2WIh/xJs4h6yLp1GSbpAg2XA2U8zU9TQjkar Uiqg== Sender: swupdate@googlegroups.com X-Forwarded-Encrypted: i=2; AJvYcCWS4iMOUKgynd6Sgsw6d4QEpHyLts+J2hLmWMDUNYy+A2DT2HRePLPcQxhlLeW8XM5xpaE712nEJE8M73RGbAmkq/ThoGOf/Q4q4GQ7NQ== X-Gm-Message-State: AOJu0YxByKsRAFHK3mMJOgpsDeSHXsgme0CeaWT789BgiaKWp1niZCLv 6r9SYlheCodS0LO4QATVkDbY1WeXeNKoh7HT0vnBrONuRJvgD920 X-Google-Smtp-Source: AGHT+IENtVjLaIlWlQQzuNBJuDP12w/K4sUlvQPBsMMq3dVZiROkZbkUtuaDOk6t++yQ0P2bjXbPOg== X-Received: by 2002:a17:903:32c6:b0:1f6:1a86:37ba with SMTP id d9443c01a7336-1f6359933b6mr109036545ad.2.1717404977062; Mon, 03 Jun 2024 01:56:17 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com Received: by 2002:a17:903:2309:b0:1f6:f27:5506 with SMTP id d9443c01a7336-1f61747e580ls4093315ad.2.-pod-prod-00-us; Mon, 03 Jun 2024 01:56:15 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXFLNS1j3IjodJdEWCLg/G1AHW9QIbVeuiWorXHia6ckt9Ca6oEhtqTlp65CkdirrqNeAVpkzSe5ZbDMVr2jGqnF86+9QV/drFK X-Received: by 2002:a17:902:e846:b0:1f2:fe12:b7be with SMTP id d9443c01a7336-1f61c1b7446mr167605175ad.32.1717404974919; Mon, 03 Jun 2024 01:56:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1717404974; cv=none; d=google.com; s=arc-20160816; b=oDP2bVlXwHHlktVaks+GLkRq/CbgMNZ/L7ZFxNw3vzpwdBh6VmLttO36Qtfy3X7cQn M90KLsm7ZCo0jlMkf+6ZsVMZOIhF33PfJh9PZokNLMCiu3kWAPAvOsKdtB7++YZgy7Bg ErNjXkO2Bwj+J7OQ5Z8hyP4owdtHxl9IpjEffayDzUXo+Afy3RtvUAfhtHJOpaf4BPih zohQOAuNRk04gV8eyxbKut4+58rfb7+uah6VBO/xbVXS2PAZhXZY0Mt3Rv1O4X7XR7Pq G2bpcjOHWn04DMBMm+cEqwvD+ifCFn3pqfYnTi1GjAsOR4/Mie8sDRsAnDq30eXQaT+I hT+A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature; bh=qxzLKZ0mD5OgWM1wDLPIg6xEzDzOc28sI4dcdD4+Z28=; fh=TQEJJmfLa3DlMeSwidtgAUEu34qHDcoVqFsXZ7kK7Hc=; b=QPC0VbdKuUM2jGmOJi5UaBotia0rk6pv/f0nsDJJuj92cidYU2w32PSfbyH/14C0Tv JJLZm/g+BQkRayWZIM4YsiMSjsl8LtmoyHpJxp4vsk7LraUZ10yrTHQOP7EvbNqZSQnw HlcgYSvmeToaUHYogqUCZCN7TH5WsX4R8hpYRi5gTWtUsRKQUjmqLv8mrVPzvhGnEp5A klSc0I7CNQUklNgfljRt3ZS0rALIFNg2YW99JacZhrL5Hva8A8up1ZqsWMnUVUaZJWEF ex1QsDEzCNjIiMxsYHp9fGROQRL7a7hT/09TgUd55l72o9eHBKXhPZRALYH5prP11qqy C2XA==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=HPJaxCLe; dkim=pass header.i=@atmark-techno.com header.s=google header.b=ZzMp+BPl; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com Received: from gw2.atmark-techno.com (gw2.atmark-techno.com. [35.74.137.57]) by gmr-mx.google.com with ESMTPS id d9443c01a7336-1f632361d1fsi2905355ad.5.2024.06.03.01.56.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Jun 2024 01:56:14 -0700 (PDT) Received-SPF: pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) client-ip=35.74.137.57; Received: from gw2.atmark-techno.com (localhost [127.0.0.1]) by gw2.atmark-techno.com (Postfix) with ESMTP id CDAB5283 for ; Mon, 3 Jun 2024 17:56:12 +0900 (JST) Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) by gw2.atmark-techno.com (Postfix) with ESMTPS id 99E9AA80 for ; Mon, 3 Jun 2024 17:56:10 +0900 (JST) Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-7025fafc37eso950781b3a.0 for ; Mon, 03 Jun 2024 01:56:10 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCUj8ah/la5lw8eiwLaGtmPFqx95x5Ycs9wHN+k0wwnB5aKK2oe/Hi8y2BIXtsQF80K5dL3xXF9+nPfnuPagw8cMM3YBYZ1uJIgr X-Received: by 2002:a05:6a21:199:b0:1af:8cc6:abc7 with SMTP id adf61e73a8af0-1b26f17ca5dmr12656841637.15.1717404969633; Mon, 03 Jun 2024 01:56:09 -0700 (PDT) X-Received: by 2002:a05:6a21:199:b0:1af:8cc6:abc7 with SMTP id adf61e73a8af0-1b26f17ca5dmr12656821637.15.1717404969231; Mon, 03 Jun 2024 01:56:09 -0700 (PDT) Received: from pc-0182.atmarktech (117.209.187.35.bc.googleusercontent.com. [35.187.209.117]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-6c35a6a3679sm4917270a12.81.2024.06.03.01.56.08 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 03 Jun 2024 01:56:08 -0700 (PDT) Received: from [::1] (helo=pc-0182.atmark.tech) by pc-0182.atmarktech with esmtp (Exim 4.96) (envelope-from ) id 1sE3U6-009riT-1O; Mon, 03 Jun 2024 17:56:06 +0900 From: Dominique Martinet To: stefano.babic@swupdate.org, swupdate@googlegroups.com Cc: Dominique Martinet Subject: [swupdate] [PATCH RFC 7/9] cpio_utils: implement chunked hash verification Date: Mon, 3 Jun 2024 17:56:00 +0900 Message-Id: <20240603085602.2351411-8-dominique.martinet@atmark-techno.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> References: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> MIME-Version: 1.0 X-Original-Sender: dominique.martinet@atmark-techno.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=HPJaxCLe; dkim=pass header.i=@atmark-techno.com header.s=google header.b=ZzMp+BPl; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.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: , This is not used yet as nothing sets copyfile's chunk_hashes yet. Signed-off-by: Dominique Martinet --- Kconfig | 4 ++ core/cpio_utils.c | 130 ++++++++++++++++++++++++++++++++++++++++++++++ include/util.h | 2 + 3 files changed, 136 insertions(+) diff --git a/Kconfig b/Kconfig index 7139617c4515..f1dbe3049676 100644 --- a/Kconfig +++ b/Kconfig @@ -522,6 +522,10 @@ config PKCS11 key available in a file. This is implemented with wolfSSL independent from the SSL implementation and replaces the plain key method. +config CHUNKED_HASH + bool "support for chuked checksums input" + default y + comment "Compressors (zlib always on)" config GUNZIP diff --git a/core/cpio_utils.c b/core/cpio_utils.c index 382b22c36434..d296fe8d4525 100644 --- a/core/cpio_utils.c +++ b/core/cpio_utils.c @@ -19,6 +19,7 @@ #ifdef CONFIG_ZSTD #include #endif +#include #include "generated/autoconf.h" #include "cpiohdr.h" @@ -466,6 +467,79 @@ static int hash_compare(struct swupdate_digest *dgst, unsigned char *hash) return 0; } +#ifdef CONFIG_CHUNKED_HASH +struct ChunkedHashState { + PipelineStep upstream_step; + void *upstream_state; + + /* null-terminated array of checksums */ + unsigned char *chunked_hashes; + + /* mmaped buffer */ + void *chunk_data; + size_t chunk_size; + size_t valid; + + /* amount written */ + size_t offset; +}; + + +static int chunked_hash_step(void *_state, void *buffer, size_t size) +{ + struct ChunkedHashState *state = (struct ChunkedHashState *)_state; + int count = 0, n; + + while (count < size) { + if (state->offset == state->valid) { + /* input_step does full reads */ + if (state->valid && state->valid < state->chunk_size) + return count; + + if (!IsValidHash(state->chunked_hashes)) { + ERROR("No hash left for chunk -- file too large?"); + return -EFAULT; + } + + n = state->upstream_step(state->upstream_state, state->chunk_data, state->chunk_size); + if (n <= 0) { + return n; + } + + /* + * possible improvement: in theory we can re-init a given buffer after final(), + * but swupdate_HASH_* does not expose this API at this point. + * Realloc every time. + */ + void *dgst = swupdate_HASH_init(SHA_DEFAULT); + if (!dgst) + return -EFAULT; + + if (swupdate_HASH_update(dgst, state->chunk_data, n) < 0 || + hash_compare(dgst, state->chunked_hashes) < 0) { + swupdate_HASH_cleanup(dgst); + return -EFAULT; + } + swupdate_HASH_cleanup(dgst); + + state->chunked_hashes += SHA256_HASH_LENGTH; + state->valid = n; + state->offset = 0; + } + + n = state->valid - state->offset; + if (n > size) + n = size; + memcpy(buffer + count, state->chunk_data + state->offset, n); + count += n; + size -= n; + state->offset += n; + } + + return count; +} +#endif + int copyfile(struct swupdate_copy *args) { unsigned int percent, prevpercent = 0; @@ -492,6 +566,10 @@ int copyfile(struct swupdate_copy *args) .outlen = 0, .eof = false }; +#ifdef CONFIG_CHUNKED_HASH + struct ChunkedHashState chunked_hash_state = { 0 }; +#endif + #if defined(CONFIG_GUNZIP) || defined(CONFIG_ZSTD) struct DecompressState decompress_state = { .upstream_step = NULL, .upstream_state = NULL, @@ -619,6 +697,52 @@ int copyfile(struct swupdate_copy *args) step = &input_step; state = &input_state; +#ifdef CONFIG_CHUNKED_HASH + if (args->chunked_hashes) { + char tmpfilename[MAX_IMAGE_FNAME]; + int tmpfd; + + /* this requires a large-ish buffer for chunk size: use a temporary file mmaped */ + /* XXX make configurable */ + chunked_hash_state.chunk_size = 512*1024; + snprintf(tmpfilename, sizeof(tmpfilename), "%s/swtmp-datachunkXXXXXX", get_tmpdir()); + tmpfd = mkstemp(tmpfilename); + if (tmpfd < 0) { + ERROR("Could not open temporary fd, error %d", errno); + ret = -EFAULT; + goto copyfile_exit; + } + unlink(tmpfilename); + + if (ftruncate(tmpfd, chunked_hash_state.chunk_size) < 0) { + ERROR("Could not open temporary fd, error %d", errno); + ret = -EFAULT; + close(tmpfd); + goto copyfile_exit; + } + + chunked_hash_state.chunk_data = + mmap(NULL, chunked_hash_state.chunk_size, PROT_READ|PROT_WRITE, + MAP_SHARED, tmpfd, 0); + + if (chunked_hash_state.chunk_data == MAP_FAILED) { + ERROR("Could not mmap temporary data, error %d", errno); + ret = -EFAULT; + close(tmpfd); + goto copyfile_exit; + } + + /* close immediately, mmap stays valid until munmap */ + close(tmpfd); + chunked_hash_state.chunked_hashes = args->chunked_hashes; + + chunked_hash_state.upstream_step = step; + chunked_hash_state.upstream_state = state; + step = &chunked_hash_step; + state = &chunked_hash_state; + } +#endif + if (args->encrypted) { decrypt_state.upstream_step = step; decrypt_state.upstream_state = state; @@ -687,6 +811,12 @@ copyfile_exit: if (decrypt_state.dcrypt) { swupdate_DECRYPT_cleanup(decrypt_state.dcrypt); } +#ifdef CONFIG_CHUNKED_HASH + if (args->chunked_hashes) { + if (chunked_hash_state.chunk_data) + munmap(chunked_hash_state.chunk_data, chunked_hash_state.chunk_size); + } +#endif if (input_state.dgst) { swupdate_HASH_cleanup(input_state.dgst); } diff --git a/include/util.h b/include/util.h index 1703514269f1..13b5d0df6414 100644 --- a/include/util.h +++ b/include/util.h @@ -87,6 +87,8 @@ struct swupdate_copy { uint32_t *checksum; /* sw-description sha256 checksum */ unsigned char *hash; + /* juxtaposed sha256 checksums */ + unsigned char *chunked_hashes; /* encryption */ bool encrypted; const char *imgivt; From patchwork Mon Jun 3 08:56:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dominique Martinet X-Patchwork-Id: 1942763 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20230601 header.b=Ir1EHJvA; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2607:f8b0:4864:20::d3a; helo=mail-io1-xd3a.google.com; envelope-from=swupdate+bncbcwivbv7sugrbl4k62zamgqekxfz6ea@googlegroups.com; receiver=patchwork.ozlabs.org) Received: from mail-io1-xd3a.google.com (mail-io1-xd3a.google.com [IPv6:2607:f8b0:4864:20::d3a]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Vt6yr1STBz20Q1 for ; Mon, 3 Jun 2024 18:56:20 +1000 (AEST) Received: by mail-io1-xd3a.google.com with SMTP id ca18e2360f4ac-7e8e2ea7b4bsf562268139f.0 for ; Mon, 03 Jun 2024 01:56:19 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717404976; cv=pass; d=google.com; s=arc-20160816; b=hz7kkdpDShoeq1ULaznPj5IWpO14WnmEIx//Ck217QpPXfn8HJh2pjn4xjy50ZVyxF pDI3IiH7MsxpSLeaFagJ9QZUkS6MaUoiRHLRcB8saIllHh1mYYQj58qp0fO+hVQpHVoJ mpuPfuLcTcagOv5S/sisamo1+N8s/IppijH/hPjfAk8YjQxJbvrMQiNl1yppGSWGeyHd RiF84gCN4UKQDX1drWx48Gy6jJYxtmk2uHqncOLMVJl64eZi7QRT9XYPdtIQE9ViJGae 3r4wP8dISSrmC9ysjUJomv8VnwYM8GNSytqDgg1xoFT4Ts0pwUIhlbIefbuBw4Qrot/O 2xmg== 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=aiC//9xgeuHC1agPZcsNrGsug4Cfhx4BgFzYAOCDjD0=; fh=EbMGLvcbZ1eDbsknTbat7edTyFPzO0OrKcdD8Ai7aS8=; b=AfuvEst10mUCZ7sipKCZsea4C4GVVSuVuyAzt8GmNf5QBlE9pGl4yRaHGmKmF7frTJ XK4aJj8KURuoE31IbFeXC3jjz3NwG2zQ/nV/kXnKvSk0je7cjU9hH+R6+IbqeYESov92 gQzju8b4boSSM+aBBCt2/t/Gurk5hrH9E/JtJFVuT7NRqJGM9EUEzRO1+j0fC8IEcnbG 5ZzLyOx0YZM75eJ2KBhCgJeFeTxZJpuU2p59SezI0IZ1etf+tmIqUM2vJMZpl0Mlg0XI xeVXFd39L1JhZsazLQVAjpCcOBj3Vgvxx533oht7WmUJ6SDZnMP3VCHQlAzw9yLJ4Ak6 qCAQ==; darn=patchwork.ozlabs.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=HAn+WpI0; dkim=pass header.i=@atmark-techno.com header.s=google header.b=MaHrexgV; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1717404976; x=1718009776; darn=patchwork.ozlabs.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:sender:from:to:cc:subject:date:message-id :reply-to; bh=aiC//9xgeuHC1agPZcsNrGsug4Cfhx4BgFzYAOCDjD0=; b=Ir1EHJvAEjsnb9bPGkYSTSKhid1DKjjhyKYyc59g/Qn4hGSG2fZHJ/tUCWvzn5cSQW Vi6QmRvl2AHIm9BahPAmquQpfmqu4rPBqFP2CQRAMqEj/ADvYovJgV89lUp3TVOv+0vS YRyaX7oUY/IXJGNiGuxwRBZrwuE1b3eH5nKGs1IaAHoDbhiSfnUFlcm1FxmKOMn/NI/m /Urb5gx+SqGWU5XaBarEiNWMdsOpD8Ibcju0RDLzAYPi3x/BJUjU95aw6rNIaCnLq11B ALDzcGLtwD2iWxgyE3ACOc5pWoUduGI+lfPsPHVSwnauE8K/lpPk7cSzds43qL8TtxCb FosA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717404976; x=1718009776; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:sender:from:to:cc:subject:date :message-id:reply-to; bh=aiC//9xgeuHC1agPZcsNrGsug4Cfhx4BgFzYAOCDjD0=; b=vmo0N8DAhJvWA1nN85HSUwELQUBadSp5oV/jHkqCaDLQxweAE+7rEbqTDI1pF2qEGD 51U7LgWTVF2h0Zfm78VQlip+hD13S4AMY3I3iT2vPudfDIaDkSoSQwxhVQMisvm+Vq8+ DrmM3hheTa7Cxl8seWffYS+VapOZBfkew9iUrrrKs5/Zt+/iBwDrqwbTXZPvVs8tSEQ+ BgN4PjtwaojbzT0DGm+1sAEidXpOB3Dg36B/sD0BHFDbOng1AvZAGIYVW6F9JO0YFBql CRlPza1w2HFGd++MVPrDSTMSMayRiq7JCNgJVOCwbnfZ26hgrCI3eq5Iblc79Aoel261 9d+A== Sender: swupdate@googlegroups.com X-Forwarded-Encrypted: i=2; AJvYcCUxH/aoYMGXgEcJxN4Mo2YUn9jaX4WkUjLKjVHqpdCivQe51VC552UMB9l8yBQfJB5pm8SeXB68CgXXkbWAkBRVDUy3gdrogjQSj3jhdA== X-Gm-Message-State: AOJu0Yxh80whl2A09pSdYLp3MoumahY2RKWLisTN/CeQsfA4dHo+5VHw 6+8e3SpG7RLD0JTVW4/KIS1KAt+FApkmthR7vxcGqb+TYiR4nk7G X-Google-Smtp-Source: AGHT+IEY14qyO4SmWr9GjYTBBlulwiLSQmOOrMgX2Xx+CV+hqXUUTmE9aJibFQm769sB8VGmFvqw2Q== X-Received: by 2002:a05:6e02:12e8:b0:374:a3b5:7c47 with SMTP id e9e14a558f8ab-374a3b57f06mr7339905ab.16.1717404976381; Mon, 03 Jun 2024 01:56:16 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com Received: by 2002:a92:c24c:0:b0:374:a461:6a03 with SMTP id e9e14a558f8ab-374a4616d9fls1243565ab.0.-pod-prod-07-us; Mon, 03 Jun 2024 01:56:15 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXngDnD4DT2ukwoLEsTjwVtwJPRInxU/mEnexYr05oIVKi7rOJFSLtqI5zYwMrb621bxGQ3ztaVGWdmzZYzUNJUMquXgNIqf1KR X-Received: by 2002:a92:d08f:0:b0:374:9307:51ed with SMTP id e9e14a558f8ab-3749307a948mr53401675ab.5.1717404975227; Mon, 03 Jun 2024 01:56:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1717404975; cv=none; d=google.com; s=arc-20160816; b=LwMYzklHj5j2G9Luv/6M4QXaC5SFp4ixg/ACf6GpPvVnd+VVVAALBTyx+NKqZN2/HP pYI5qZQAmwIKOVLKRvVhk07PFkJHT+wNUxuvuI0iva751jCZ2M3w6VpbQpc6yuhJzJrf AXCuhbBKmBW+mSAvO3etl8NrR9aiCm5dzja8PbULjCKnoDrh8ujO0ilY5GpNbpU8L9bg dXzS9zc9Ma9o6+yS4xHVquscBBdSxb09FfWMAYxZE+1ymw8b0UaR4lhBC7sEw2wIwnEx LemKsmjVne104qv1rqOia8f/Otx0WienCSerW5Kw20z+uQd42IoixahClzRKVYARi9+a GXTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature; bh=UXHJrxCgqokXBZ6IYOYf2srqXfKv3cvr/CxchLPvD+Y=; fh=iYmKn1X/OIDRUxDaaEMqCeLpY2PkI/4ifttWAXiZSXc=; b=SR41Z7ohAB2Ff7utvFTPJ2wsQpJkuwOKk4IicX/U3aL8KzIRkWDF/KoIf5/cj2wo92 TgMaVDLW3MSdJhRW7pz/+N5rfDsdy7Osf0HySDxfKhk8CfKVBYOQsepVVcgagwblHyAj YY/XDWSYYuGqXGd3Ip3RyXULTx58sIylkF1VETzrELDLpgZjVxEAE9A7QUfGe5fif6en 5rCBPIpYYDajxrpo5U521mDmGrYO/KsfzvfM/TiEErRZpp7WKoJXtwsnsUHwafXXjcB4 9BMqPbtTqxts4txypO2y1qRVL+3/+aah12l76jPtDtL8zs21yvbjDZMIATQ7jx59Zhfk kA7A==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=HAn+WpI0; dkim=pass header.i=@atmark-techno.com header.s=google header.b=MaHrexgV; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com Received: from gw2.atmark-techno.com (gw2.atmark-techno.com. [35.74.137.57]) by gmr-mx.google.com with ESMTPS id e9e14a558f8ab-3748a1f54b9si3151865ab.1.2024.06.03.01.56.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Jun 2024 01:56:15 -0700 (PDT) Received-SPF: pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) client-ip=35.74.137.57; Received: from gw2.atmark-techno.com (localhost [127.0.0.1]) by gw2.atmark-techno.com (Postfix) with ESMTP id 65B13A88 for ; Mon, 3 Jun 2024 17:56:12 +0900 (JST) Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by gw2.atmark-techno.com (Postfix) with ESMTPS id 644CBA7C for ; Mon, 3 Jun 2024 17:56:10 +0900 (JST) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-1f67f27bea9so4591195ad.0 for ; Mon, 03 Jun 2024 01:56:10 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCXkCf5LCGOgaH4u0kVKmMb1cDMdv+NSOouEV+u3fIVBxmnH4Nq9EAiBumSeKkOjkFtQ4uIDeYftKFfv8J/foYogZZ2l2vk64XHl X-Received: by 2002:a17:902:ecc9:b0:1f6:8832:7e83 with SMTP id d9443c01a7336-1f688328239mr3946905ad.26.1717404969371; Mon, 03 Jun 2024 01:56:09 -0700 (PDT) X-Received: by 2002:a17:902:ecc9:b0:1f6:8832:7e83 with SMTP id d9443c01a7336-1f688328239mr3946735ad.26.1717404968918; Mon, 03 Jun 2024 01:56:08 -0700 (PDT) Received: from pc-0182.atmarktech (145.82.198.104.bc.googleusercontent.com. [104.198.82.145]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1f63236692bsm59776905ad.92.2024.06.03.01.56.07 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 03 Jun 2024 01:56:08 -0700 (PDT) Received: from [::1] (helo=pc-0182.atmark.tech) by pc-0182.atmarktech with esmtp (Exim 4.96) (envelope-from ) id 1sE3U6-009riT-1a; Mon, 03 Jun 2024 17:56:06 +0900 From: Dominique Martinet To: stefano.babic@swupdate.org, swupdate@googlegroups.com Cc: Dominique Martinet Subject: [swupdate] [PATCH RFC 8/9] config parsing: add handling for chunked_hashes Date: Mon, 3 Jun 2024 17:56:01 +0900 Message-Id: <20240603085602.2351411-9-dominique.martinet@atmark-techno.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> References: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> MIME-Version: 1.0 X-Original-Sender: dominique.martinet@atmark-techno.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=HAn+WpI0; dkim=pass header.i=@atmark-techno.com header.s=google header.b=MaHrexgV; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.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: , This allows something like this to be fed to the new chunked_hashes code (libconfig syntax): ----- images: ( { filename = "somefile.tar.zst"; name = "version"; version = "1"; install-if-higher = true; compressed = "zstd"; encrypted = true; ivt = "3b627a40272e3ba253794680e6f870c9"; installed-directly = true; sha256 = "e437493d207e7dabfba69997072b938bcb93175eea09d4108b96825d1fc2b079"; chunked_hashes = ( "3028e787495f7a97bfb6c10110affed016d398374d8c2c02fd7d02bc84f75e68", "5280083a531be033af6bb31a579737fb296739c0d9fa100457ce328fdfad01d8", ); type = "archive"; path = "/tmp/swupdate"; properties: { create-destination = "true"; }; }, ); ----- Note the sha256 is ignored if chunked_hashes is found in copyfile(), but we've left it so this is installable by older versions of swupdate. Signed-off-by: Dominique Martinet --- core/cpio_utils.c | 1 + core/installer.c | 1 + core/parsing_library.c | 50 ++++++++++++++++++++++++++++++++++++++++ include/parselib.h | 3 +++ include/swupdate_image.h | 1 + parser/parser.c | 5 ++++ 6 files changed, 61 insertions(+) diff --git a/core/cpio_utils.c b/core/cpio_utils.c index d296fe8d4525..fd52c9ef0ba6 100644 --- a/core/cpio_utils.c +++ b/core/cpio_utils.c @@ -847,6 +847,7 @@ int copyimage(void *out, struct img_type *img, writeimage callback) .compressed = img->compressed, .checksum = &img->checksum, .hash = img->sha256, + .chunked_hashes = img->chunked_hashes, .encrypted = img->is_encrypted, .imgivt = img->ivt_ascii, }; diff --git a/core/installer.c b/core/installer.c index 0cb06b2ca419..2a2b0f6cf32b 100644 --- a/core/installer.c +++ b/core/installer.c @@ -512,6 +512,7 @@ static void cleaup_img_entry(struct img_type *img) void free_image(struct img_type *img) { dict_drop_db(&img->properties); + free(img->chunked_hashes); free(img); } diff --git a/core/parsing_library.c b/core/parsing_library.c index 038c6851adf9..b0f0e68df04e 100644 --- a/core/parsing_library.c +++ b/core/parsing_library.c @@ -210,6 +210,56 @@ void get_hash_value(parsertype p, void *elem, unsigned char *hash) ascii_to_hash(hash, hash_ascii); } +#ifdef CONFIG_CHUNKED_HASH +int get_chunked_hashes(parsertype p, void *elem, unsigned char **chunked_hashes) +{ + void *hashes_node = get_child(p, elem, "chunked_hashes"); + + /* does not have chunked hashes */ + if (!hashes_node) + return 0; + + int count = get_array_length(p, hashes_node); + if (!count) { + ERROR("chunked_hashes is not an array"); + return -EINVAL; + } + + unsigned char *hashes = malloc((count+1) * SHA256_HASH_LENGTH); + if (!hashes) { + ERROR("No memory: failed for %d bytes", (count+1) * SHA256_HASH_LENGTH); + return -ENOMEM; + } + + int idx; + for (idx = 0; idx < count; idx++) { + void *hash_node = get_elem_from_idx(p, hashes_node, idx); + if (!hash_node) { + ERROR("Could not get %dth hash in %d long array?", idx, count); + free(hashes); + return -EINVAL; + } + const char *hash_str = get_field_string(p, hash_node, NULL); + if (!hash_str) { + ERROR("%dth hash in chunked hashes array was not a string?", idx); + free(hashes); + return -EINVAL; + } + if (ascii_to_hash(hashes + idx * SHA256_HASH_LENGTH, hash_str) < 0) { + ERROR("Invalid hash %s", hash_str); + free(hashes); + return -EINVAL; + } + } + + /* zero final hash marking end of array */ + memset(hashes + count * SHA256_HASH_LENGTH, 0, SHA256_HASH_LENGTH); + + *chunked_hashes = hashes; + return 0; +} +#endif + bool set_find_path(const char **nodes, const char *newpath, char ***tmp) { char **paths; diff --git a/include/parselib.h b/include/parselib.h index 48f38d2a8c92..0a8c3842e3fb 100644 --- a/include/parselib.h +++ b/include/parselib.h @@ -61,6 +61,9 @@ void iterate_field(parsertype p, void *e, iterate_callback cb, void *data); void get_field(parsertype p, void *e, const char *path, void *dest, field_type_t type); int exist_field_string(parsertype p, void *e, const char *path); void get_hash_value(parsertype p, void *elem, unsigned char *hash); +#ifdef CONFIG_CHUNKED_HASH +int get_chunked_hashes(parsertype p, void *elem, unsigned char **chunked_hashes); +#endif void check_field_string(const char *src, char *dst, const size_t max_len); void *find_root(parsertype p, void *root, const char **nodes); void *get_node(parsertype p, void *root, const char **nodes); diff --git a/include/swupdate_image.h b/include/swupdate_image.h index e214aafc2965..cb51da4325a3 100644 --- a/include/swupdate_image.h +++ b/include/swupdate_image.h @@ -75,6 +75,7 @@ struct img_type { long long size; unsigned int checksum; unsigned char sha256[SHA256_HASH_LENGTH]; /* SHA-256 is 32 byte */ + unsigned char *chunked_hashes; LIST_ENTRY(img_type) next; }; diff --git a/parser/parser.c b/parser/parser.c index 2273796e0452..12420554837c 100644 --- a/parser/parser.c +++ b/parser/parser.c @@ -421,6 +421,11 @@ static int parse_common_attributes(parsertype p, void *elem, struct img_type *im GET_FIELD_STRING(p, elem, "type", image->type); GET_FIELD_STRING(p, elem, "data", image->type_data); get_hash_value(p, elem, image->sha256); +#ifdef CONFIG_CHUNKED_HASH + if (get_chunked_hashes(p, elem, &image->chunked_hashes)) { + return -1; + } +#endif /* * offset can be set as number or string. As string, From patchwork Mon Jun 3 08:56:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dominique Martinet X-Patchwork-Id: 1942762 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20230601 header.b=ZV2kXiO+; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2607:f8b0:4864:20::139; helo=mail-il1-x139.google.com; envelope-from=swupdate+bncbcwivbv7sugrbmek62zamgqemze4dqy@googlegroups.com; receiver=patchwork.ozlabs.org) Received: from mail-il1-x139.google.com (mail-il1-x139.google.com [IPv6:2607:f8b0:4864:20::139]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Vt6yr0fblz20Pb for ; Mon, 3 Jun 2024 18:56:19 +1000 (AEST) Received: by mail-il1-x139.google.com with SMTP id e9e14a558f8ab-374968174f8sf15366495ab.3 for ; Mon, 03 Jun 2024 01:56:19 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1717404977; cv=pass; d=google.com; s=arc-20160816; b=HzPVNgSJpoNppW5QzZHA9aVxnV91+DpkODsVJARd5jAA3969IDSa9h6s1Rb8xb+Alc jwAyXietaM/4DcMlzg/SHAkrgoimc5x2pkVHyVRDj9RqJI2nXVDAXJV6oqQugK5uO0Z0 a0zz07CZw81/0AAQlHvnt7Z3wWYNzOuYKgLZoycB9tp1aZWVm7P1kP234yWaFqkRh/eD JPbePboA60WGvYd67sGJv09ChvSva6T9c/IeANaLzHezjKNOPpFyQz8IKZBEkT9WMF9T 3K9ENkeNnGfLJCBuaERQhiY34MHqAVKZ0cehUjSKIJIOs7NmxICWfUdRcTkCAHCbdum7 +cUg== 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=B2VFEUrIRvFbSfjjMp20CNvAf5VYe7NyFH3cCU1rj9g=; fh=FDGsLqo+YLa+wLDFvLS0zR9U+5sieZOo4LdmhcRfyn4=; b=QXYVtDxOwCTWIsjnQevT7CGem5zdznlwvSMcuEBS9V/dnGROUuPMhmpfC2YRd2BOlj DoeOuE1n+uf6CeuW58jiPSwey+1QYe2jzl4Dn1t94ZQpAt1kZKrX2zL+5JEYTLIk7b3v o3L7ekvmTi8/kruN8PR2xBy+DmD81QboMvyIZzcV/91NnB94s0pimC5cLJXjOT1UuBuU 7e5+JnJNhaGBlkN1F5Arp2ycGIaJIUFCg+GgMZjoKQQ17vHlx82nUgdu2DVxml3qss6s k5Blw5tann/wQqY0gRwECoXqdY+TjbQ5Dx9NvdVP41fyXzFXt9Qxc19OtxfgfP6w399H T8BA==; darn=patchwork.ozlabs.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=BECJCvTD; dkim=pass header.i=@atmark-techno.com header.s=google header.b=DnvfsFZO; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1717404977; x=1718009777; darn=patchwork.ozlabs.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:sender:from:to:cc:subject:date:message-id :reply-to; bh=B2VFEUrIRvFbSfjjMp20CNvAf5VYe7NyFH3cCU1rj9g=; b=ZV2kXiO+Kyp2CC+RY1gD+PRABXabmFn1R4u4VPBtRgloOzyLwhSRYiUE5cSB0JJWg/ hjb0Me7Yu9JvTrAw+KJTgJ+ESjUrjA9LQiYFuuxPE9F5VDgTddOBKtlYNKeXoulNt8we x4Ph5C8PWE5RvsBFvJyGxcf9aARmPHBZtkOm/cQkoHG6G5JdLjFUF4UsFGEFqW/H10e3 TesB861P/v4/D+cD1f5WkWw5liD4a7yI1h7VITLQtX7nvlSfsw6m2UlBeVITD2VXZp0b gQzzHYar20yD3k3J0tNDwxaaQiACKfzqTvoBLoNUrrxqU+fXWcUv49juodLjHq4GhcER ARWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717404977; x=1718009777; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:sender:from:to:cc:subject:date :message-id:reply-to; bh=B2VFEUrIRvFbSfjjMp20CNvAf5VYe7NyFH3cCU1rj9g=; b=CRnkVXkG9+Jb7XZLmTZE7eAJGDLgEFHhbmQHGkGrkdIKiXyqwqDrT/DVdxoPLuvyE1 O4Shtjmn63j1qWFoFMwY9MtU39zIQJFqWlzBl7s2pmmreZduoqo8CNvJ6yKU/3JoGAZk EqcXRBH4sS1xz6zLx8ciqh4z79PEURzwjtgYCga5qa1lCd9or3ZRsXJnQnOpEm67PdgA 7wz4RLdNpyHrgH2GqEXqiwJ8giuNSwNSYBwejvFLd1aso/y/X3pih2y5uMAyn9RQ6JNh oJqHeeF6IbWMJWKf5CjH3E6/2N4N1RelgNVFjucGJuZNDIbChuy9PlmFY0Yfj+ZNSmeO SUYQ== Sender: swupdate@googlegroups.com X-Forwarded-Encrypted: i=2; AJvYcCW1tVGNmHAmynLAa4HJXfZst2j0PArdQIkboZiKMsztBremyTw84UaIiDdctwLthrwAdWoytqPmuuwSiZtFQ5mEPPPsPpq/vq1v5TFXdw== X-Gm-Message-State: AOJu0Yyq27p+sxjQAvlECIyXQyZ6wWOKb3DVKzjIkmOjnMjDncTGQ48y dBfUIriNTjVsTZo1HC6L5x/BUtS+qwfbzn9XUxvvMtjXsqkaaL/+ X-Google-Smtp-Source: AGHT+IFmpht/74cLV7yQVsxVVo8SOJLWlThh6yVJBwkP0zxEyJMf3RMiEO8I1NG0meX9psGXUob5Kw== X-Received: by 2002:a05:6e02:b28:b0:374:8a84:6bf7 with SMTP id e9e14a558f8ab-3748b97cdb5mr97571665ab.8.1717404977527; Mon, 03 Jun 2024 01:56:17 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com Received: by 2002:a92:d2cd:0:b0:374:973b:3cf5 with SMTP id e9e14a558f8ab-374973b3eeels7026275ab.2.-pod-prod-09-us; Mon, 03 Jun 2024 01:56:16 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUEfRR94+ci4FEhy5urjFGCtBT3HlYUNIR6LI0hrO2uRqf8r+GIK7buvR1ObHNdMoP5f0tFI0dpRqgsCuHR8t/cYQB/AtA1RKxF X-Received: by 2002:a05:6602:1541:b0:7e2:1ac2:1ce5 with SMTP id ca18e2360f4ac-7eafff2d0d4mr1004014439f.13.1717404976036; Mon, 03 Jun 2024 01:56:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1717404976; cv=none; d=google.com; s=arc-20160816; b=B0MVKlbiPJLreDuWKcYIFg2J9OI4mUJbRIn7qz3sKv34ad6SwMXS9/s5SmZvCJln3W 3AKHPd6M5CGMNxxu0ygiGTL1eL7/55HxTfr179askr5EaOGE0YlcZkGaJFaUvG1mYlyZ IE3VamzFXFBaJq5sJZCp95cAqaK6WUINnLOOK6n5lmX7MU+nNWWtaarsIpnjWQ/fC0wj 9A61bjYWrC/UcnAaW3LO2RKQizxnQkZFApdNezpv+6DKt9mK/sW/t6zWpwrNiFu/aHne xlhh6okIBDUkgeKADcIs0H/oRWDC5gAKPLWH0KDYuvhBZkhpkB7HYhzIiIaBycW9Qemt 8Lug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-signature; bh=/WHa29V5F5Rdb13+6Xr54UrA36iwqI7731oClvJTO4I=; fh=JsdvNXLL0QGgPzYa0Dp0lJjBxgha56OW76IQKDaW0MA=; b=NHFWEVTudI7uw5CTy9ld8z0yErFPpbn4SmM2htWqWuVrCvN605Mg6pC/gPf177GNkP GVUBnJDx8d5KGcuWd5HLZvZjkms0gNR7VnVqOCCEHhLC4ff79fJiDuZX++71W/vX253C idwg1W6IqOkvwAxyi4RyBltX18Kz1wmr+hB/yjvt133RUO6TSY6Oz9bIn9TYr3Of1B6c 5JiA6wtnfgHbqaiTPO5HVtKOGb9fLGeujEw5tqTHfqrjCnirIvCM4fVS0ISnQ2uMwVu4 gg29wtRkN1Stcecz6F80X0ehPVuinoI0B9oJW1yNXi+YzYxsVTDaXQVTvN+BpdtjpLV7 aVqA==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=BECJCvTD; dkim=pass header.i=@atmark-techno.com header.s=google header.b=DnvfsFZO; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.com Received: from gw2.atmark-techno.com (gw2.atmark-techno.com. [35.74.137.57]) by gmr-mx.google.com with ESMTPS id 8926c6da1cb9f-4b523869a03si202840173.7.2024.06.03.01.56.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Jun 2024 01:56:16 -0700 (PDT) Received-SPF: pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) client-ip=35.74.137.57; Received: from gw2.atmark-techno.com (localhost [127.0.0.1]) by gw2.atmark-techno.com (Postfix) with ESMTP id 911EAA9A for ; Mon, 3 Jun 2024 17:56:13 +0900 (JST) Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by gw2.atmark-techno.com (Postfix) with ESMTPS id 8DBDAA99 for ; Mon, 3 Jun 2024 17:56:11 +0900 (JST) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-6c9001a14ffso1596361a12.2 for ; Mon, 03 Jun 2024 01:56:11 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCV/y478xy9Ar6DGtYZD4odnyvRUXQR9s41ozU36JWv2DeHu00XvPI+3ksjvKUHcR5PLPLG/qx4D7LqJ3ddienM1S6xMbsLYzZ1C X-Received: by 2002:a17:902:f551:b0:1f6:7644:8317 with SMTP id d9443c01a7336-1f67644b2c0mr24698895ad.31.1717404970540; Mon, 03 Jun 2024 01:56:10 -0700 (PDT) X-Received: by 2002:a17:902:f551:b0:1f6:7644:8317 with SMTP id d9443c01a7336-1f67644b2c0mr24698825ad.31.1717404970185; Mon, 03 Jun 2024 01:56:10 -0700 (PDT) Received: from pc-0182.atmarktech (35.112.198.104.bc.googleusercontent.com. [104.198.112.35]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-1f632338adasm60092275ad.16.2024.06.03.01.56.07 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 03 Jun 2024 01:56:08 -0700 (PDT) Received: from [::1] (helo=pc-0182.atmark.tech) by pc-0182.atmarktech with esmtp (Exim 4.96) (envelope-from ) id 1sE3U6-009riT-1n; Mon, 03 Jun 2024 17:56:06 +0900 From: Dominique Martinet To: stefano.babic@swupdate.org, swupdate@googlegroups.com Cc: Dominique Martinet Subject: [swupdate] [PATCH RFC 9/9] cpio_utils: skip full sha256 if chunked hash is set Date: Mon, 3 Jun 2024 17:56:02 +0900 Message-Id: <20240603085602.2351411-10-dominique.martinet@atmark-techno.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> References: <20240603085602.2351411-1-dominique.martinet@atmark-techno.com> MIME-Version: 1.0 X-Original-Sender: dominique.martinet@atmark-techno.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@atmark-techno.com header.s=gw2_bookworm header.b=BECJCvTD; dkim=pass header.i=@atmark-techno.com header.s=google header.b=DnvfsFZO; spf=pass (google.com: domain of dominique.martinet@atmark-techno.com designates 35.74.137.57 as permitted sender) smtp.mailfrom=dominique.martinet@atmark-techno.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=atmark-techno.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: , This avoids double-compuation of the checksum Signed-off-by: Dominique Martinet --- core/cpio_utils.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/core/cpio_utils.c b/core/cpio_utils.c index fd52c9ef0ba6..18cd474eaa8c 100644 --- a/core/cpio_utils.c +++ b/core/cpio_utils.c @@ -615,12 +615,6 @@ int copyfile(struct swupdate_copy *args) if (args->checksum) *args->checksum = 0; - if (IsValidHash(args->hash)) { - input_state.dgst = swupdate_HASH_init(SHA_DEFAULT); - if (!input_state.dgst) - return -EFAULT; - } - if (args->encrypted) { aes_key = get_aes_key(); if (args->imgivt && strlen(args->imgivt)) { @@ -736,6 +730,9 @@ int copyfile(struct swupdate_copy *args) close(tmpfd); chunked_hash_state.chunked_hashes = args->chunked_hashes; + /* avoid computing sha256 twice */ + args->hash = NULL; + chunked_hash_state.upstream_step = step; chunked_hash_state.upstream_state = state; step = &chunked_hash_step; @@ -759,6 +756,12 @@ int copyfile(struct swupdate_copy *args) } #endif + if (IsValidHash(args->hash)) { + input_state.dgst = swupdate_HASH_init(SHA_DEFAULT); + if (!input_state.dgst) + return -EFAULT; + } + for (;;) { ret = step(state, buffer, sizeof buffer); if (ret < 0) {