From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 470FFC4829E for ; Thu, 15 Feb 2024 23:37:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B9CAE6B008A; Thu, 15 Feb 2024 18:37:12 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B4D5A6B008C; Thu, 15 Feb 2024 18:37:12 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A14B28D0007; Thu, 15 Feb 2024 18:37:12 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 8D2C86B008A for ; Thu, 15 Feb 2024 18:37:12 -0500 (EST) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 58216C0941 for ; Thu, 15 Feb 2024 23:37:12 +0000 (UTC) X-FDA: 81795651504.12.E2C9E8F Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) by imf22.hostedemail.com (Postfix) with ESMTP id 75940C000A for ; Thu, 15 Feb 2024 23:37:10 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=m3ry24DN; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf22.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.221.49 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1708040230; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=yQDAVrbJendrD0pWB1pwZByBGrwgR3/pZmA1p43+9/M=; b=sX0fNFZu2vNFE1RZdirU7vW0orqPdFJj7DqLfpYzWVJPWxYQ6l3Z2R8Her4xUawYMcazpL 6nfL25p6Nc1htbq6cublLd4h4FRp/sjz6PlxKWigy6MkDqrrXYOzqrA0eVzz0cR/q62Iks W3Hsue4MpiySFh17jkL98QTifvOvHSs= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=m3ry24DN; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf22.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.221.49 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1708040230; a=rsa-sha256; cv=none; b=Ryi8iqJzT7V25Hn9dPzXtmHg8CDfAtvgbfA1Xboe4BBNOa4h6a07KMzBBUB4mPZ5UBLyDn oPiwjNCJGzGWAcholAv/fHJ3eE0otCfRKOpCDUGlTbl4D62CLfIlLRaggOvNdWxE/zFMXj tLjMZdrCRvyuyhljP8N+dWpsCzor1oA= Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-33d152a34c7so269987f8f.3 for ; Thu, 15 Feb 2024 15:37:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708040229; x=1708645029; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=yQDAVrbJendrD0pWB1pwZByBGrwgR3/pZmA1p43+9/M=; b=m3ry24DN37M7uspJRkT7HKHBnqNHGtRcqzOnkbjF9wApJhZzXlTzVsNk9I6vhtu5jh umHaE/rQS0xUG/MYX4csCYkbyJga5p3T6fqRxQRQQYGWjstHyixIZyGmPwuHsVs+cO3c cnMU3EjYojpDq5dNQelxG/N3/HCzbesbHvISROduG8beTpnUrZBdfpp+1+XI/37MMjlK vovZQcJ3ZVHdOejSZpLXb/GupXB7Wq9gmRHt2OkcQHpa1kBfiIbwOZfXwL7ZtT6lNjRh 5zBHUtpHqwbCZIDD309Y2FuO40jNZb9kwEvuaG78vwoWtGxZ91AXZP7DKahgVsQIj0E4 RP/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708040229; x=1708645029; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yQDAVrbJendrD0pWB1pwZByBGrwgR3/pZmA1p43+9/M=; b=tKQzDiSgX15KTwF9+BH0HGM49JXJ4acsjWRG99VG+e6iPP2/+1YyrxQ4j4asIClVcN vh9GSRxx4Qm8u7f9wAoQal8rbJ1am7KC88xyuihueoNVDgmMqq5J6v5HarIzFbbzM5Og opDrFmsKZP7EHv2w/74i/QFdcPPu5o4uszIpUZy50obBhtrV2YB+X2Or1pJI7hDFX6p/ JlnU8fAc39bWPj5fjcdqtINHBBNYvfJYmSR6+cR/m4mH6DXjdQTQZfSi74Q0/IF+IY3j rY6nmxlivRBg/YxVtHqyzT500KTeTCSNx1jWc0zYsdgqrD3mVC0po+ykyvKXTB7zXhSI Vr4g== X-Forwarded-Encrypted: i=1; AJvYcCVRoMbcvTJ3ev/0t1HEDg83kBuHWYhtCw9aT3hSDmu36/oky4Il3rF5bDqhIvNx6BecM6yiUZe0/FT/14ixTawCap0= X-Gm-Message-State: AOJu0YydtG399pHUJ78069vA6yEhwKWapHxnvP9oRpr+Oc+edhbTa09h 3JhYBTll9XGyuT07DVSyEcaBnCs9NBcVND0DeFjwE0kv3M1aut+N1biBZ5UNvQghklPAolU10bS Q3ZBczW+PJBjPQLfsUokYkCB7fZ4= X-Google-Smtp-Source: AGHT+IHf8GMDQ7UAbBO4ysbI6i1lbchyJh1F0anpFDrS+ak/u5pMUOJa7DlDhlGz8k11/64RluqhyoCH+rBWmmJbzLU= X-Received: by 2002:a5d:464e:0:b0:33b:4ebd:144f with SMTP id j14-20020a5d464e000000b0033b4ebd144fmr2597271wrs.36.1708040228722; Thu, 15 Feb 2024 15:37:08 -0800 (PST) MIME-Version: 1.0 References: <20240215215907.20121-1-osalvador@suse.de> <20240215215907.20121-2-osalvador@suse.de> In-Reply-To: <20240215215907.20121-2-osalvador@suse.de> From: Andrey Konovalov Date: Fri, 16 Feb 2024 00:36:57 +0100 Message-ID: Subject: Re: [PATCH v10 1/7] lib/stackdepot: Fix first entry having a 0-handle To: Oscar Salvador Cc: Andrew Morton , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Michal Hocko , Vlastimil Babka , Marco Elver , Alexander Potapenko Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 75940C000A X-Stat-Signature: w57p6mezbmhhmrsjuwnc4e8c1zohhweq X-HE-Tag: 1708040230-605786 X-HE-Meta: U2FsdGVkX1+rvMgJA2zjMUFcjBzBRwifk5oi4XnCP4zLPrOUQ9dM0le7nCgjNTpzcr/PXb1QWkryEUK4c36O4hz3I4j0KWUoGeg4N66x8v0jvfnX4465cVhqfXfTnSq9xPD6Vw9am/sfXIpzp56MiFvLodPyMh8necE84YApngUxbIh1TwwgBl/rDj2UsQczorK/D00vvt1uWZ/uwpuUikIaCpVTcBmYvdIhhpRo3pv63YZwRAahsnTPFwYc15og2w1CUEnPyxzxjC95cWmW0GTTFtqcQh+p1V255HjF73RNJY4csn67Q6kCQxrxTUmNNWFCucYxwVyQs8AsvA4aT7qkzp6Y14W1+mbqwxLBZ0HjljgQ0J0VpjroIgEXnqmAZQu7fHu2mwF1jM9OQascRo+jxdvdz3mFzi3ezTrppL7Z2m+OxguvORcbj///kfAm+8uRxXrk/TVNS8TOQfO0rum1oYXfRClCaN1LHyPSdV5jyUon53EynXceY6aQo0JbG7iv31rfTdbUyDrVRfj21MLZ7Q7M7iGaLXp2Z2mWYAcIZGGZNPQ10yESrp+ttAg9AgCTFlRZZW/Q7gtt+ZHlQy7IgaKgvQDkG5FY+9xMVnoOLjK9sbyGklD/Vle4C40NfB0EsKF4N9N/yQTGjNMa0xx4hOT3685btPMmzCXF2Ie2W9otPvQTmB/ovfOhbcFWI7jgHKdG77IfU8YBnPfKIo7A4LtzXVCh1evRF4C+/6an6wkLQ2zcIT+X+TZfn4wrS4fvdpEgK7RTjiQ43bz/C/l2ruZBsPJPQaMJapbpNKcg5mKIgM64fcPzoHgSOB+94Zo6whqvy7usy3waxCoCwtWyow8c8nK82QSZRd3H+R12+h1jsI6nMuR3aq0RWLnY+Ja3ouTp6GRJaymUh8XVOjbH1ENqzhqANytTgsIvfR0ffjUEkETrnH8goZH3kBtOR5AvCBWXYq32s60CGmb zOGIfwZ7 KrgPPqslvcELbzr5AnM/A1fAqGjWRrPc6MKV5rnkOHkZ/maPFNv2wV18oWaxuOx92UHjMNb/TefURvdYVPOXgi05vSUT/9SaNYQaoKpTXuj7X1q/UVFXR/OODTBsqYOrbhE3ZMKFS8SAgDdBp7em8MDTVjeQr8KrKJXIUHUnCn3nmRvq5tSfIMl1T1ewI4cC6BixsR85Ke5sFha7L+/h4nF7bk875GJBeISfFaUW7nIcETA9sWPx+uPfBZpYbPkXaOH1nUbDhT2yFFRrUiT16xpdEr9wW6vWPGYAl+1AuEDeESb48E4iw2AZ6txolE8kTE38H5lt+MMgv0HxOPpNrMxDvpXtrAWzS4iUhdBemmO9ZPvbOfFVgcdOkkwb6JO9wNiqmi6eRlI5g4Uc= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Thu, Feb 15, 2024 at 10:58=E2=80=AFPM Oscar Salvador = wrote: > > The very first entry of stack_record gets a handle of 0, but this is wron= g > because stackdepot treats a 0-handle as a non-valid one. > E.g: See the check in stack_depot_fetch() > > Fix this by adding and offset of 1. > > This bug has been lurking since the very beginning of stackdepot, > but no one really cared as it seems. > Because of that I am not adding a Fixes tag. > > Co-developed-by: Marco Elver > Signed-off-by: Marco Elver > Signed-off-by: Oscar Salvador > Acked-by: Vlastimil Babka > --- > lib/stackdepot.c | 16 +++++++++------- > 1 file changed, 9 insertions(+), 7 deletions(-) > > diff --git a/lib/stackdepot.c b/lib/stackdepot.c > index 4a7055a63d9f..c043a4186bc5 100644 > --- a/lib/stackdepot.c > +++ b/lib/stackdepot.c > @@ -45,15 +45,16 @@ > #define DEPOT_POOL_INDEX_BITS (DEPOT_HANDLE_BITS - DEPOT_OFFSET_BITS - \ > STACK_DEPOT_EXTRA_BITS) > #define DEPOT_POOLS_CAP 8192 > +/* The pool_index is offset by 1 so the first record does not have a 0 h= andle. */ > #define DEPOT_MAX_POOLS \ > - (((1LL << (DEPOT_POOL_INDEX_BITS)) < DEPOT_POOLS_CAP) ? \ > - (1LL << (DEPOT_POOL_INDEX_BITS)) : DEPOT_POOLS_CAP) > + (((1LL << (DEPOT_POOL_INDEX_BITS)) - 1 < DEPOT_POOLS_CAP) ? \ > + (1LL << (DEPOT_POOL_INDEX_BITS)) - 1 : DEPOT_POOLS_CAP) > > /* Compact structure that stores a reference to a stack. */ > union handle_parts { > depot_stack_handle_t handle; > struct { > - u32 pool_index : DEPOT_POOL_INDEX_BITS; > + u32 pool_index : DEPOT_POOL_INDEX_BITS; /* pool_index is= offset by 1 */ > u32 offset : DEPOT_OFFSET_BITS; > u32 extra : STACK_DEPOT_EXTRA_BITS; > }; > @@ -372,7 +373,7 @@ static struct stack_record *depot_pop_free_pool(void = **prealloc, size_t size) > stack =3D current_pool + pool_offset; > > /* Pre-initialize handle once. */ > - stack->handle.pool_index =3D pool_index; > + stack->handle.pool_index =3D pool_index + 1; > stack->handle.offset =3D pool_offset >> DEPOT_STACK_ALIGN; > stack->handle.extra =3D 0; > INIT_LIST_HEAD(&stack->hash_list); > @@ -483,18 +484,19 @@ static struct stack_record *depot_fetch_stack(depot= _stack_handle_t handle) > const int pools_num_cached =3D READ_ONCE(pools_num); > union handle_parts parts =3D { .handle =3D handle }; > void *pool; > + u32 pool_index =3D parts.pool_index - 1; > size_t offset =3D parts.offset << DEPOT_STACK_ALIGN; > struct stack_record *stack; > > lockdep_assert_not_held(&pool_lock); > > - if (parts.pool_index > pools_num_cached) { > + if (pool_index > pools_num_cached) { > WARN(1, "pool index %d out of bounds (%d) for stack id %0= 8x\n", > - parts.pool_index, pools_num_cached, handle); > + pool_index, pools_num_cached, handle); > return NULL; > } > > - pool =3D stack_pools[parts.pool_index]; > + pool =3D stack_pools[pool_index]; > if (WARN_ON(!pool)) > return NULL; > > -- > 2.43.0 > Reviewed-by: Andrey Konovalov