From patchwork Sat May 13 11:31:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1780938 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=F84aJC3P; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QJNlC0pG7z20dC for ; Sat, 13 May 2023 21:32:06 +1000 (AEST) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4QJNl86gtxz3cNN for ; Sat, 13 May 2023 21:32:04 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=F84aJC3P; dkim-atps=neutral X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::636; helo=mail-pl1-x636.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=F84aJC3P; dkim-atps=neutral Received: from mail-pl1-x636.google.com (mail-pl1-x636.google.com [IPv6:2607:f8b0:4864:20::636]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4QJNl12zFbz3c71 for ; Sat, 13 May 2023 21:31:56 +1000 (AEST) Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-1aad5245571so75481855ad.1 for ; Sat, 13 May 2023 04:31:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1683977512; x=1686569512; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=IYa5mOxoMuxKeHJAuwObt8Pf1h91bi0AtdSb1btgg+0=; b=F84aJC3PGdvFX+LadjbjZ6B8zdbcxIYfH+80rge1R2sTZvvvU8Sl8wEVl5+kO385H9 rj1hJoZQXqr//NfFuA4fKHD/2WIYEEN+hOrPwzab78km8OgM7S7AWXCaYo3mRVI9YEQ9 mJ4YcFqJJ7QV9+Kkx4N9stfk/ddFL4TbpvvWwqmIYUzbJi3URk7friVVj3trgiibTIIN iO5hymtejk07R6hv07kAeaDEsvpSyGZEs91PFnt1GJsS958qTQduZKS6mbNz32EvRExi 01MjsTg+AAJ8/GErbejZpuVaGQjqfCxOTUcVdHM3IC6j7wzdCRS45jCii04/Iz2vYOcS smXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683977512; x=1686569512; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=IYa5mOxoMuxKeHJAuwObt8Pf1h91bi0AtdSb1btgg+0=; b=R36Mu+Kdnh+kC4S0DhbdSV/5kXJwKtYCaVxsKQy78DjbiISEjnBAl0cZNVhiMflDwU TiztySW3sDDUdBClhRVdHY5dYw8k73AKrCev+tlGEgNCjUhR3RGXYDuYc0PLK0hKKrsx GLdU38Uzqy/Cgjd+Nsdt7hkNjowOuhddb4lx9jRPxEN2F6Jk3yUs/iCKuK5o3dbLiDBu zpWCvv/3CbxZTGnvGZwny/1VCMfjMTGRdE5TDtGol9HZeyFur2be8ZXWBwRJx39qmV+E 1yTmeJzWPmWDkYm9+bf395/FF9EeBtoT/EK8SAmH7yCQEXTSzGHkrpcIkEsRK2iYor4y ExvQ== X-Gm-Message-State: AC+VfDw1D/J0Vt6Ju5EOx2tlZhlPxy6nULkS3X3QcJzHf1rSCGyoMUWc wGnXxDoKG5epJPWervqy/uLAb9X+USM= X-Google-Smtp-Source: ACHHUZ7sGixNQtvCShANlad7awInffNRyYg2j3FEsB10vjYGjtFu3WHpmIlMrOv+6CAZynpXJx+cFQ== X-Received: by 2002:a17:903:24e:b0:1a8:431:9e14 with SMTP id j14-20020a170903024e00b001a804319e14mr32733052plh.25.1683977511766; Sat, 13 May 2023 04:31:51 -0700 (PDT) Received: from wheely.local0.net (203-221-165-68.tpgi.com.au. [203.221.165.68]) by smtp.gmail.com with ESMTPSA id l4-20020a170902f68400b001a19f3a661esm9591075plg.138.2023.05.13.04.31.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 May 2023 04:31:50 -0700 (PDT) From: Nicholas Piggin To: skiboot@lists.ozlabs.org Date: Sat, 13 May 2023 21:31:34 +1000 Message-Id: <20230513113137.97093-1-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 Subject: [Skiboot] [PATCH 1/3] mem_region: Add a local_free function X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" This allows memory to be allocated with local_alloc() to be freed. Signed-off-by: Nicholas Piggin --- core/mem_region.c | 34 ++++++++++++++++++++++++++++++++++ include/mem_region-malloc.h | 4 ++++ 2 files changed, 38 insertions(+) diff --git a/core/mem_region.c b/core/mem_region.c index e78d0a94..0ed00f36 100644 --- a/core/mem_region.c +++ b/core/mem_region.c @@ -920,6 +920,40 @@ restart: return p; } +static struct mem_region *mem_to_region(void *mem) +{ + struct mem_region *region; + + list_for_each(®ions, region, list) { + if (mem < region_start(region)) + continue; + if (mem >= region_start(region) + region->len) + continue; + return region; + } + return NULL; +} + +void __local_free(void *mem, const char *location) +{ + struct mem_region *region; + + lock(&mem_region_lock); + + region = mem_to_region(mem); + if (!region) { + prerror("MEM: local_free mem=%p no matching region.\n", mem); + unlock(&mem_region_lock); + return; + } + + lock(®ion->free_list_lock); + mem_free(region, mem, location); + unlock(®ion->free_list_lock); + + unlock(&mem_region_lock); +} + struct mem_region *find_mem_region(const char *name) { struct mem_region *region; diff --git a/include/mem_region-malloc.h b/include/mem_region-malloc.h index 271311b2..b2e4337d 100644 --- a/include/mem_region-malloc.h +++ b/include/mem_region-malloc.h @@ -28,4 +28,8 @@ void *__local_alloc(unsigned int chip, size_t size, size_t align, #define local_alloc(chip_id, size, align) \ __local_alloc((chip_id), (size), (align), __location__) +void __local_free(void *mem, const char *location); +#define local_free(mem) \ + __local_free((mem), __location__) + #endif /* __MEM_REGION_MALLOC_H */ From patchwork Sat May 13 11:31:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1780939 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=TtLd8ov4; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QJNlK4tGNz20dC for ; Sat, 13 May 2023 21:32:13 +1000 (AEST) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4QJNlK3qFTz3fWW for ; Sat, 13 May 2023 21:32:13 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=TtLd8ov4; dkim-atps=neutral X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::62a; helo=mail-pl1-x62a.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=TtLd8ov4; dkim-atps=neutral Received: from mail-pl1-x62a.google.com (mail-pl1-x62a.google.com [IPv6:2607:f8b0:4864:20::62a]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4QJNl1313yz3c96 for ; Sat, 13 May 2023 21:31:56 +1000 (AEST) Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-1aad5245571so75481985ad.1 for ; Sat, 13 May 2023 04:31:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1683977514; x=1686569514; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=GqpccNqubVO1Omm5xuT8YdSKRrR93oUR6u12jTxaTXA=; b=TtLd8ov4DWdKGuWoyBZU6dfYmjcAxGizhCdehnLo+eXJeA5IfwkWR/gJ8ixiPrNXw5 Fmn6I3L/UpubTtc0bSflfnDHmM3OjA8qVbL6ejN7Z5u8/yl3z49wvvoQbcB/mNHhAY1I Hwn0wuFCNXj+Cp17Ae1W+DlIVlv7tzjZbh3b6+xl9jmPh6RuyYR5GdVjFHVPe/n18ZtB Iox6NisQn/ZUgxgAvq1YXkHFZoKwicKGLpNAoBDZt8bj7RuRgpp9vlRPvh7ONn4ckyQL 1zBo27QqxAwGUy8GRvvFxGNiBajblKmu7/RSgorYYO7uSPsMtXhrBZLJFTBr7qoiisCP Y0Ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683977514; x=1686569514; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GqpccNqubVO1Omm5xuT8YdSKRrR93oUR6u12jTxaTXA=; b=PB4Gw9sLFCTU8Ve3mzevHvmzuR0D+w4gDG+VuamquxS9KnAGO6CoKc9uJPo5lO36Vh 0RlT79r3NQ5bechzFzc8nbPBucPYn2GE/10BntWYwWp662UxkC0MEQWsTOwguDvrzCfn sktvAjU2D2rj67yVCL1UGUqGwQNsUapju5iqMT2ttwL5VSP3yRLbjBOGA2FtHfn3CDLy G5oOoKoF+x0BiQ15NfCyYMCnXfFitoDq7driOXIswJQDs5A9TA7fggvp7dx+OpuI8vGW ftl2pLa4suzdc+YTBt3kiTbxslmgy00w4urNmzvS1Ww0yzQtdKqNgpZPjrNp/25+s1Cx mzdw== X-Gm-Message-State: AC+VfDzbLxxGoyrciCjKSuXmqm7NRny3mYAc7QyJXRnq6sV0czirNvuE zLDkINj4KiEyQCc4zrWGWCqkYVm3zVw= X-Google-Smtp-Source: ACHHUZ6OmL5PtqTAGK2ZfBkO2MWxvriRru+hdW+ZnXhgJNpyk3cBGoL4fbN2M16gKAPJMQKG6zulqw== X-Received: by 2002:a17:902:e888:b0:1ad:d500:19d3 with SMTP id w8-20020a170902e88800b001add50019d3mr9669717plg.23.1683977514278; Sat, 13 May 2023 04:31:54 -0700 (PDT) Received: from wheely.local0.net (203-221-165-68.tpgi.com.au. [203.221.165.68]) by smtp.gmail.com with ESMTPSA id l4-20020a170902f68400b001a19f3a661esm9591075plg.138.2023.05.13.04.31.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 May 2023 04:31:53 -0700 (PDT) From: Nicholas Piggin To: skiboot@lists.ozlabs.org Date: Sat, 13 May 2023 21:31:35 +1000 Message-Id: <20230513113137.97093-2-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230513113137.97093-1-npiggin@gmail.com> References: <20230513113137.97093-1-npiggin@gmail.com> MIME-Version: 1.0 Subject: [Skiboot] [PATCH 2/3] VAS: use local_free to free local_alloc memory X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" free() asserts because local_alloc() doesn't allocate from the skiboot heap region. Fix this by using local_free(). Signed-off-by: Nicholas Piggin --- hw/vas.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/vas.c b/hw/vas.c index 96ca055c..aa3ae334 100644 --- a/hw/vas.c +++ b/hw/vas.c @@ -428,7 +428,7 @@ static int init_uwcm(struct proc_chip *chip) static inline void free_wcbs(struct proc_chip *chip) { if (chip->vas->wcbs) { - free((void *)chip->vas->wcbs); + local_free((void *)chip->vas->wcbs); chip->vas->wcbs = 0ULL; } } @@ -466,7 +466,7 @@ static int alloc_init_wcbs(struct proc_chip *chip) return OPAL_SUCCESS; out: - free((void *)wcbs); + local_free((void *)wcbs); return rc; } From patchwork Sat May 13 11:31:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1780940 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=FboiUydd; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QJNlV1bX0z20dC for ; Sat, 13 May 2023 21:32:22 +1000 (AEST) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4QJNlV0Xwtz3fXX for ; Sat, 13 May 2023 21:32:22 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=FboiUydd; dkim-atps=neutral X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::634; helo=mail-pl1-x634.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20221208 header.b=FboiUydd; dkim-atps=neutral Received: from mail-pl1-x634.google.com (mail-pl1-x634.google.com [IPv6:2607:f8b0:4864:20::634]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4QJNl33Lylz3c71 for ; Sat, 13 May 2023 21:31:59 +1000 (AEST) Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-1ab05018381so100880785ad.2 for ; Sat, 13 May 2023 04:31:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1683977516; x=1686569516; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Cmm2X5ItYq91yEWNLk8E9YzJnMxjSsSrwgeyTmMNtGc=; b=FboiUyddo26opbt/xDyGRxZ0FU2HFl8dZE9jthaxHeZkx2ppuW1kSH4BKIIVgG/qiR hZk/pf9BRX1LNHa8FJ26u0VuYel9HR/NWJcXuDVKxqMFZKsygSDpir7l7kkNQLInaeze 9ad2gfuZ0qPc8Hj4KZR/0S9hQHH1xwVnjcJ349K+L2O3OYX9c2Hk2nC4M9BsQdK5fis7 VZTzymWaDmBJsgRoDAPbO18V1iIR9KNzRNWsJo2f745OT9I06D1d5Z0SemhsbWaUpnvd 26HldKKlwqpXTJGJLfnwUWL/oZyZqpX5SBVQ/h6u6++zbRiVN1KniCH14cHmhqQQrf6e JWEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683977516; x=1686569516; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Cmm2X5ItYq91yEWNLk8E9YzJnMxjSsSrwgeyTmMNtGc=; b=FhBlBHHhsuwYqk1jcwg7/QtpmDg99BBxy8obiMT+M/yJ3OVEjks6SRxHjd8kvaVrpk P4QkR6SjfpvrziUqxHj1gHFkFXamkJiSufhlcj4bw9+IMfkXo99jghArQKzIWv8ZPt6z 3VYGk0V9cjyZFWWxyY0YSQvBBU6lnqzL92Wlagb1MOP1Aio0xAX51MCwZ2i8Mob/XvDv afgk9LSzyhMK9QqHC8hMxaEJX6qpY6D1DWmmHxhlsqJr1nAN4hLSKcsdu29DnEU1YVW/ E54xHA0MvcrP3VUjXSj2r7Mi6JZJWPkARL60l2DjOHBGXHHKrYj9DrPSMFhIhiFHwJgQ U11Q== X-Gm-Message-State: AC+VfDwsubYNBAYgs/gCCF6A+ySgRYNOaAc7/GKPJgcPJgxSSSDTR/R9 53aafw9bOIaM/5rV+sqpBtLHR9XARDU= X-Google-Smtp-Source: ACHHUZ4na7gRTLG+kHSqznfsay3xq7XzIcpqpyUThZrr9qTUHmiuTSum6R8I0UUmKo4dbkNo0Nb3dw== X-Received: by 2002:a17:902:cec8:b0:1ad:c736:2090 with SMTP id d8-20020a170902cec800b001adc7362090mr11164463plg.3.1683977516673; Sat, 13 May 2023 04:31:56 -0700 (PDT) Received: from wheely.local0.net (203-221-165-68.tpgi.com.au. [203.221.165.68]) by smtp.gmail.com with ESMTPSA id l4-20020a170902f68400b001a19f3a661esm9591075plg.138.2023.05.13.04.31.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 May 2023 04:31:56 -0700 (PDT) From: Nicholas Piggin To: skiboot@lists.ozlabs.org Date: Sat, 13 May 2023 21:31:36 +1000 Message-Id: <20230513113137.97093-3-npiggin@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230513113137.97093-1-npiggin@gmail.com> References: <20230513113137.97093-1-npiggin@gmail.com> MIME-Version: 1.0 Subject: [Skiboot] [PATCH 3/3] core/malloc: Make free and realloc tolerant of invalid usage X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" Print a message if free or realloc are called on memory outside the skiboot heap. Freeing is skipped to give the best chance of avoiding a crash. Signed-off-by: Nicholas Piggin --- core/malloc.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/core/malloc.c b/core/malloc.c index 76996fff..e20eafed 100644 --- a/core/malloc.c +++ b/core/malloc.c @@ -8,6 +8,8 @@ #include #include +#include +#include #include #include @@ -29,8 +31,27 @@ void *__malloc(size_t bytes, const char *location) return __memalign(DEFAULT_ALIGN, bytes, location); } +static bool check_heap_ptr(const void *p) +{ + struct mem_region *region = &skiboot_heap; + unsigned long ptr = (unsigned long)p; + + if (!ptr) + return true; + + if (ptr < region->start || ptr > region->start + region->len) { + prerror("Trying to free() a pointer outside heap. Possibly local_alloc().\n"); + backtrace(); + return false; + } + return true; +} + void __free(void *p, const char *location) { + if (!check_heap_ptr(p)) + return; + lock(&skiboot_heap.free_list_lock); mem_free(&skiboot_heap, p, location); unlock(&skiboot_heap.free_list_lock); @@ -40,6 +61,9 @@ void *__realloc(void *ptr, size_t size, const char *location) { void *newptr; + if (!check_heap_ptr(ptr)) + return NULL; + /* Two classic malloc corner cases. */ if (!size) { __free(ptr, location);