Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp2405162pxb; Thu, 4 Nov 2021 20:25:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw3B6s47fB8icFt4N7PcGln9/BW8zgvevy+A+fXCvayqbgUMupI8ezJtsba1j0ZEWSXShim X-Received: by 2002:a17:906:57c2:: with SMTP id u2mr16541439ejr.8.1636082712882; Thu, 04 Nov 2021 20:25:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1636082712; cv=none; d=google.com; s=arc-20160816; b=JAxwu5zO0qD4aiEgGpNziPEpn29nh6UFewLYpMGQxRXXzoEIkGy28Nu6hHq38y4oUF WL/5caGHMZ1t0qhLBfTZV7ftEBsjIWei5NWL+V2QGr/5YhA5MjjUeNUvxOHEnW3O+isZ /93HmRDWg59vCFAu2xdsM2SO0j6dJY9yzXfYqnHCFYeOVL5SsgEQGXu48XG/D/E6blEj IZZx4T1wv6L5RqUb4NLM8S4HJ9r+bBi3HEt0s9kbRSfBsIrhDl7OriemlcunhQRpFDVY bmmSkAe+GSpNAUt45GJgWYYb2WxEZxZuM4tx4/jDK+OhReNMhUfnPjciCwN/3sC06JS9 +lUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=qhQ00mQkgKps/BbiSdbnroOgBqYJ/1hR8QXi9VVQFSw=; b=bPMNtcLrmDf7UljV8YC65lJoZJDyVTMNMfuriU8V+Q+8DA5lbk3tos6XjtKf0fWoZU 9pXFLapQ5Ygn6sr2v/OWjhdXSpiZ7pKUJVnbCTe5sp5eK2Mv9zK9CGGUxgJVr5wm2pna MGIBgyfW9LB1/jnw3uTEOgDNafrAtHZnCCxbp7/Tl46jccDbORMTUD+Pwlp/OF+KBt6k UW//V4qfIlbwkUBkUaMrR0FH53uKeBCMq5p6UaFThVbinbgy7Mdc5zj5upx2/F9B4MiT Qo/PLM49YlwENQ+Ed1ecVplzYviKIAIrwhv2kn2MmSV4hfdkpBQn1CuR2rdk0eblz5vR PKuQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=NFA2QJ6a; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id nd7si14483600ejc.595.2021.11.04.20.24.29; Thu, 04 Nov 2021 20:25:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=NFA2QJ6a; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231856AbhKEC11 (ORCPT + 99 others); Thu, 4 Nov 2021 22:27:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35406 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231833AbhKEC11 (ORCPT ); Thu, 4 Nov 2021 22:27:27 -0400 Received: from mail-yb1-xb29.google.com (mail-yb1-xb29.google.com [IPv6:2607:f8b0:4864:20::b29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B3683C061205 for ; Thu, 4 Nov 2021 19:24:48 -0700 (PDT) Received: by mail-yb1-xb29.google.com with SMTP id d10so19227002ybe.3 for ; Thu, 04 Nov 2021 19:24:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=qhQ00mQkgKps/BbiSdbnroOgBqYJ/1hR8QXi9VVQFSw=; b=NFA2QJ6aZI8sYbtJecTC0hkvKzoBbuFW94j+Xg/jUMf5Hd4wXm6DojN+SdCwW6E1Cx yZ1Nf6msME+LnM4zNtKMw8BtMa0QITYIuPxk6k6qGpqVFjuPCZ4SleYY3ujEqxIs9FFr /+lwXnmTVr72sSc2il0M53Phc0ide/ZzftuiYkBDHPRd/OKUpQZjbD6ezOeDci3vOJjA UzNL7+E5iAfUwYk6HYyh4T5h9b6KImHXVk2ize18YOAkmF3+sFkVSbe0OLo1TFB299nj nAIm2azHfRhukh+/vB2bfgHgeny+LnCBLW7dT5m2SBLjlqrQhZP8lubKusamwFCX5N/R Akqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=qhQ00mQkgKps/BbiSdbnroOgBqYJ/1hR8QXi9VVQFSw=; b=heVjI1qP8zjeCtrb5lJljGg2Y6BC64G7gUsWMpt64eAsjx6lPO7ZlxeHRDON2N/QBt dMgdN9ZDT+LWUJmCzmVjyZC6X7AutcGbswszLJHfZCgYfP7/bDHNeh+GDxMFQqNFwpbZ noNjr1rhcXgU6yrpcKK9vQKaM6W4Tb3aP8rvMPDbvyehaiKFsemqixykI6nHN4eXNndt k4FQBVZSgMxZ0kFmlg6rGTHUO/JD8wM1A7au9qHFLpVAftB7aAEbgLCj3j23i7hNxM1Q KYsbEtZW8X1twi6hfuCoUHqZpFwGzxIqZ/3cBx086HZgtOu2BpU6k3GTGpTdmJ2MVhe0 Rt/w== X-Gm-Message-State: AOAM530qXMumSRqJCMzDFRwouHMS+Forz5DdEUQyNGnx1OGF4XDFCFeg k+1zdpm+UxwgWad5mwpfio+ZhuUpI139CnLRBRs/Hw== X-Received: by 2002:a25:50d2:: with SMTP id e201mr56274417ybb.296.1636079087456; Thu, 04 Nov 2021 19:24:47 -0700 (PDT) MIME-Version: 1.0 References: <20211105014953.972946-1-dima@arista.com> <20211105014953.972946-3-dima@arista.com> In-Reply-To: <20211105014953.972946-3-dima@arista.com> From: Eric Dumazet Date: Thu, 4 Nov 2021 19:24:34 -0700 Message-ID: Subject: Re: [PATCH 2/5] tcp/md5: Don't leak ahash in OOM To: Dmitry Safonov Cc: linux-kernel@vger.kernel.org, Dmitry Safonov <0x7f454c46@gmail.com>, Andy Lutomirski , David Ahern , "David S. Miller" , Francesco Ruggeri , Jakub Kicinski , Herbert Xu , Hideaki YOSHIFUJI , Leonard Crestez , linux-crypto@vger.kernel.org, netdev@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org On Thu, Nov 4, 2021 at 6:50 PM Dmitry Safonov wrote: > > In quite unlikely scenario when __tcp_alloc_md5sig_pool() succeeded in > crypto_alloc_ahash(), but later failed to allocate per-cpu request or > scratch area ahash will be leaked. > In theory it can happen multiple times in OOM condition for every > setsockopt(TCP_MD5SIG{,_EXT}). Then store it in a global, like the other parts ? This makes the patch smaller, and hopefully the allocations will eventually succeed, one at a time. Bug fixes should target net tree, with a Fixes: tag, not buried in apatch series targeting net-next (which is closed btw) Thanks. diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index b461ae573afc82a2c37321b13c2d76f61cd13b53..e2353e35693935fb5abd7da4531c98b86fd35e1c 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -4260,13 +4260,14 @@ static bool tcp_md5sig_pool_populated = false; static void __tcp_alloc_md5sig_pool(void) { - struct crypto_ahash *hash; + static struct crypto_ahash *hash; int cpu; - hash = crypto_alloc_ahash("md5", 0, CRYPTO_ALG_ASYNC); - if (IS_ERR(hash)) - return; - + if (IS_ERR_OR_NULL(hash)) { + hash = crypto_alloc_ahash("md5", 0, CRYPTO_ALG_ASYNC); + if (IS_ERR(hash)) + return; + } for_each_possible_cpu(cpu) { void *scratch = per_cpu(tcp_md5sig_pool, cpu).scratch; struct ahash_request *req;