Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp780275rdb; Tue, 5 Dec 2023 22:35:10 -0800 (PST) X-Google-Smtp-Source: AGHT+IECa/wqzSRG1+dBTKeZhk13qFtvjBT6aCcifmIepNUV05SNIAZ0xHR+5o12Jpj0dnlYp/WF X-Received: by 2002:a05:620a:8f03:b0:77b:d90e:dd91 with SMTP id rh3-20020a05620a8f0300b0077bd90edd91mr374445qkn.46.1701844510346; Tue, 05 Dec 2023 22:35:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701844510; cv=none; d=google.com; s=arc-20160816; b=WgIzyt8ba2ilpvRx9pT69i4J5RD/3Eoh6wW52yBVtmK69470LIKG2tX6or1eEyhxBf zhP7X0AALA1+NdRV4ruNvaw7bWvx1moqrbN3+w3jb7vWViGbcNyFE7bQeCNcFkmHf/sa WAV2Hg1l4f+dGOH4U6hZBwdNh+z9rOqYlFIVm3paoWWSNB2zjYCT6dTBzDn3+jWyZfKr LR2ZHKstH6suPnVtUGPiK1fOZeo0otAaQm28fvZvTKFYj4PfFR1LBRxDyGCArokyp4fF CJ5rHTdT6oXQHd1otBTUCkefltR0FPCRMxl0eDqL1TlrNILbLU/0xWKAX1jvlY17+y1m rAVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:content-disposition:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:subject:cc:to:from :date:dkim-signature; bh=YX4MAqN/nDup4qMOCc0EzTmKzTOsFfxIwVqJEAFEG5A=; fh=lQB5JjitIuhrJ4LKKJG8i7MOUBwxD/YDzfTKuQkSc+g=; b=vfAQ8gJcnwQfv8tVN3ZEVExO25hY/gdE2c9WjCfPHVJWQGtSA8T2j22nkPwG+2iBPA QBnz5vt9FirZ/C2yxwA6UZhOS9dMtRRDrZM7HepD1cizbNhyoDL37zhibdkPRnSKzZg3 Lty8viNS9sVgyzNTCkedzVr0Mcj960sODEKqPTRi3W1s+6c6EgNQFcN8lW9VwelIBHOX ZDlg1+vYPcce2UPC/P7XODBqNiDCFEJT0LQRXX7+yV1DnptN7RWYucyLnuu98BnLXd3F xq2YwxNZPWKONNq6/LaHrdq4JfZDFHjBYHjmmeymF4Lj0i53wpktuED2t2+S+LvozqM7 e4rQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=eYZn90gG; spf=pass (google.com: domain of linux-crypto+bounces-609-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-crypto+bounces-609-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id d28-20020a05620a167c00b0077be8e6b007si12793807qko.554.2023.12.05.22.35.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Dec 2023 22:35:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-crypto+bounces-609-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=eYZn90gG; spf=pass (google.com: domain of linux-crypto+bounces-609-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-crypto+bounces-609-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 03FFB1C20AB4 for ; Wed, 6 Dec 2023 06:35:10 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 655EE1118D for ; Wed, 6 Dec 2023 06:35:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="eYZn90gG" X-Original-To: linux-crypto@vger.kernel.org Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 06BA71BD for ; Tue, 5 Dec 2023 21:56:12 -0800 (PST) Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-332c0c32d19so452944f8f.3 for ; Tue, 05 Dec 2023 21:56:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1701842170; x=1702446970; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:message-id:subject:cc :to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=YX4MAqN/nDup4qMOCc0EzTmKzTOsFfxIwVqJEAFEG5A=; b=eYZn90gGb5jE3i8EoAGo8TxzxZD18cZ2Cjp7tpqEy89liY2VdXEw6AnDuUw9NNoUyH KU2nnNwP+hOFAIMDsTNyksxZLevmMhf7WRB50WZX8rl/MEZoRSVnZoAMl2u9WtbOMxKM r+jO/t6v89WmLKmAt1a+GNpauXFYOtIk3Vqd2ndto0QAbCd+eycPN95TyI6sx2zSwKW4 YYbZrCCsh1OF5cZ4FkI2XuIAkmjKYrdSre67XuSUtkHKuhHNzWjR7YQIQF6/rHXIXLtm fRlP6FJ4tNwcFRRrZ4U9kDh27/mXjkZu4meviuRkhWxq+gT6BQJWO5OXez9uJzAXs9H8 7GsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701842170; x=1702446970; h=in-reply-to:content-disposition:mime-version:message-id:subject:cc :to:from:date:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=YX4MAqN/nDup4qMOCc0EzTmKzTOsFfxIwVqJEAFEG5A=; b=uPwFXs/rdAhTv8tyg+gte0ARzhln66jf7KvTH7E49lvdeQm5CDTs8N8/JHCEc7A7ix M7n94cuLBpxOWUPUFLCDMqtFCuTC9CZo929/sgeY5BXPLqB/fZo3BUiATDEcXYGCxbuT hJjpkK2/RRZ+kP2L4aRuxSSeG29kUl8GRYDS3A+w91/ojJYViyXmmZ3yXo/KUs64RxSM DLczwwOaXr/0X28o2K9hXH2wzlUa1RpshBGnHdY1pRoGxSFZgG9Ed3UfogkbB8fXsBd/ mUsjbVyTRoQbjTh+tQ9ttGDw+ZBopQK+9VGLj2JEryuXFGdh7qAUI654jGvDyMs1PWkT Cb8A== X-Gm-Message-State: AOJu0YzRyln6oyc9sD7IjXRsMpNpjz2Madut3azc3QKGWl5YJOYs+csl mQYZUUDT4QMhq+Nb9KR/uFPxPA== X-Received: by 2002:a05:6000:c4:b0:333:3ead:54c3 with SMTP id q4-20020a05600000c400b003333ead54c3mr147557wrx.97.1701842170341; Tue, 05 Dec 2023 21:56:10 -0800 (PST) Received: from localhost ([102.36.222.112]) by smtp.gmail.com with ESMTPSA id e2-20020adf9bc2000000b003332fa77a0fsm13990491wrc.21.2023.12.05.21.56.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Dec 2023 21:56:10 -0800 (PST) Date: Wed, 6 Dec 2023 08:56:06 +0300 From: Dan Carpenter To: oe-kbuild@lists.linux.dev, Vadim Fedorenko , Vadim Fedorenko , Jakub Kicinski , Martin KaFai Lau , Andrii Nakryiko , Alexei Starovoitov , Mykola Lysenko , Herbert Xu Cc: lkp@intel.com, oe-kbuild-all@lists.linux.dev, netdev@vger.kernel.org, linux-crypto@vger.kernel.org, bpf@vger.kernel.org Subject: Re: [PATCH bpf-next v7 1/3] bpf: make common crypto API for TC/XDP programs Message-ID: Precedence: bulk X-Mailing-List: linux-crypto@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20231202010604.1877561-1-vadfed@meta.com> Hi Vadim, kernel test robot noticed the following build warnings: url: https://github.com/intel-lab-lkp/linux/commits/Vadim-Fedorenko/bpf-crypto-add-skcipher-to-bpf-crypto/20231202-091254 base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master patch link: https://lore.kernel.org/r/20231202010604.1877561-1-vadfed%40meta.com patch subject: [PATCH bpf-next v7 1/3] bpf: make common crypto API for TC/XDP programs config: x86_64-randconfig-161-20231202 (https://download.01.org/0day-ci/archive/20231206/202312060647.2JfAE3rk-lkp@intel.com/config) compiler: clang version 16.0.4 (https://github.com/llvm/llvm-project.git ae42196bc493ffe877a7e3dff8be32035dea4d07) reproduce: (https://download.01.org/0day-ci/archive/20231206/202312060647.2JfAE3rk-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot | Reported-by: Dan Carpenter | Closes: https://lore.kernel.org/r/202312060647.2JfAE3rk-lkp@intel.com/ smatch warnings: kernel/bpf/crypto.c:192 bpf_crypto_ctx_create() error: we previously assumed 'ctx' could be null (see line 165) kernel/bpf/crypto.c:192 bpf_crypto_ctx_create() error: potentially dereferencing uninitialized 'ctx'. vim +/ctx +192 kernel/bpf/crypto.c 0c47cb96ac404e Vadim Fedorenko 2023-12-01 122 __bpf_kfunc struct bpf_crypto_ctx * 0c47cb96ac404e Vadim Fedorenko 2023-12-01 123 bpf_crypto_ctx_create(const char *type__str, const char *algo__str, 0c47cb96ac404e Vadim Fedorenko 2023-12-01 124 const struct bpf_dynptr_kern *pkey, 0c47cb96ac404e Vadim Fedorenko 2023-12-01 125 unsigned int authsize, int *err) 0c47cb96ac404e Vadim Fedorenko 2023-12-01 126 { 0c47cb96ac404e Vadim Fedorenko 2023-12-01 127 const struct bpf_crypto_type *type = bpf_crypto_get_type(type__str); Delete this assignment. (Duplicated). 0c47cb96ac404e Vadim Fedorenko 2023-12-01 128 struct bpf_crypto_ctx *ctx; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 129 const u8 *key; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 130 u32 key_len; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 131 0c47cb96ac404e Vadim Fedorenko 2023-12-01 132 type = bpf_crypto_get_type(type__str); 0c47cb96ac404e Vadim Fedorenko 2023-12-01 133 if (IS_ERR(type)) { 0c47cb96ac404e Vadim Fedorenko 2023-12-01 134 *err = PTR_ERR(type); 0c47cb96ac404e Vadim Fedorenko 2023-12-01 135 return NULL; Why doesn't this function just return error pointers? 0c47cb96ac404e Vadim Fedorenko 2023-12-01 136 } 0c47cb96ac404e Vadim Fedorenko 2023-12-01 137 0c47cb96ac404e Vadim Fedorenko 2023-12-01 138 if (!type->has_algo(algo__str)) { 0c47cb96ac404e Vadim Fedorenko 2023-12-01 139 *err = -EOPNOTSUPP; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 140 goto err; ctx is uninitialized on this path. 0c47cb96ac404e Vadim Fedorenko 2023-12-01 141 } 0c47cb96ac404e Vadim Fedorenko 2023-12-01 142 0c47cb96ac404e Vadim Fedorenko 2023-12-01 143 if (!authsize && type->setauthsize) { 0c47cb96ac404e Vadim Fedorenko 2023-12-01 144 *err = -EOPNOTSUPP; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 145 goto err; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 146 } 0c47cb96ac404e Vadim Fedorenko 2023-12-01 147 0c47cb96ac404e Vadim Fedorenko 2023-12-01 148 if (authsize && !type->setauthsize) { 0c47cb96ac404e Vadim Fedorenko 2023-12-01 149 *err = -EOPNOTSUPP; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 150 goto err; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 151 } 0c47cb96ac404e Vadim Fedorenko 2023-12-01 152 0c47cb96ac404e Vadim Fedorenko 2023-12-01 153 key_len = __bpf_dynptr_size(pkey); 0c47cb96ac404e Vadim Fedorenko 2023-12-01 154 if (!key_len) { 0c47cb96ac404e Vadim Fedorenko 2023-12-01 155 *err = -EINVAL; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 156 goto err; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 157 } 0c47cb96ac404e Vadim Fedorenko 2023-12-01 158 key = __bpf_dynptr_data(pkey, key_len); 0c47cb96ac404e Vadim Fedorenko 2023-12-01 159 if (!key) { 0c47cb96ac404e Vadim Fedorenko 2023-12-01 160 *err = -EINVAL; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 161 goto err; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 162 } 0c47cb96ac404e Vadim Fedorenko 2023-12-01 163 0c47cb96ac404e Vadim Fedorenko 2023-12-01 164 ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); 0c47cb96ac404e Vadim Fedorenko 2023-12-01 @165 if (!ctx) { 0c47cb96ac404e Vadim Fedorenko 2023-12-01 166 *err = -ENOMEM; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 167 goto err; ctx is NULL here. 0c47cb96ac404e Vadim Fedorenko 2023-12-01 168 } 0c47cb96ac404e Vadim Fedorenko 2023-12-01 169 0c47cb96ac404e Vadim Fedorenko 2023-12-01 170 ctx->type = type; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 171 ctx->tfm = type->alloc_tfm(algo__str); 0c47cb96ac404e Vadim Fedorenko 2023-12-01 172 if (IS_ERR(ctx->tfm)) { 0c47cb96ac404e Vadim Fedorenko 2023-12-01 173 *err = PTR_ERR(ctx->tfm); 0c47cb96ac404e Vadim Fedorenko 2023-12-01 174 ctx->tfm = NULL; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 175 goto err; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 176 } 0c47cb96ac404e Vadim Fedorenko 2023-12-01 177 0c47cb96ac404e Vadim Fedorenko 2023-12-01 178 if (authsize) { 0c47cb96ac404e Vadim Fedorenko 2023-12-01 179 *err = type->setauthsize(ctx->tfm, authsize); 0c47cb96ac404e Vadim Fedorenko 2023-12-01 180 if (*err) 0c47cb96ac404e Vadim Fedorenko 2023-12-01 181 goto err; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 182 } 0c47cb96ac404e Vadim Fedorenko 2023-12-01 183 0c47cb96ac404e Vadim Fedorenko 2023-12-01 184 *err = type->setkey(ctx->tfm, key, key_len); 0c47cb96ac404e Vadim Fedorenko 2023-12-01 185 if (*err) 0c47cb96ac404e Vadim Fedorenko 2023-12-01 186 goto err; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 187 0c47cb96ac404e Vadim Fedorenko 2023-12-01 188 refcount_set(&ctx->usage, 1); 0c47cb96ac404e Vadim Fedorenko 2023-12-01 189 0c47cb96ac404e Vadim Fedorenko 2023-12-01 190 return ctx; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 191 err: 0c47cb96ac404e Vadim Fedorenko 2023-12-01 @192 if (ctx->tfm) ^^^^^^^^ NULL dereference. These two error handling bugs in three lines of code are canonical One Err Label type bugs. Better to do a ladder where each error label frees the last thing that was allocated. Easier to review. Then you could delete the "ctx->tfm = NULL;" assignment on line 174. return ctx; err_free_tfm: type->free_tfm(ctx->tfm); err_free_ctx: kfree(ctx); err_module_put: module_put(type->owner); return NULL; I have written about this at length on my blog: https://staticthinking.wordpress.com/2022/04/28/free-the-last-thing-style/ 0c47cb96ac404e Vadim Fedorenko 2023-12-01 193 type->free_tfm(ctx->tfm); 0c47cb96ac404e Vadim Fedorenko 2023-12-01 194 kfree(ctx); 0c47cb96ac404e Vadim Fedorenko 2023-12-01 195 module_put(type->owner); 0c47cb96ac404e Vadim Fedorenko 2023-12-01 196 0c47cb96ac404e Vadim Fedorenko 2023-12-01 197 return NULL; 0c47cb96ac404e Vadim Fedorenko 2023-12-01 198 } -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki