From patchwork Fri Sep 20 16:40:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siddhesh Poyarekar X-Patchwork-Id: 1987971 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=gotplt.org header.i=@gotplt.org header.a=rsa-sha256 header.s=dreamhost header.b=Evbtqsxi; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (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 4X9J8Q123xz1y1t for ; Sat, 21 Sep 2024 02:42:30 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3C7623858C5F for ; Fri, 20 Sep 2024 16:42:28 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from skyblue.cherry.relay.mailchannels.net (skyblue.cherry.relay.mailchannels.net [23.83.223.167]) by sourceware.org (Postfix) with ESMTPS id 48828385840F; Fri, 20 Sep 2024 16:40:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 48828385840F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gotplt.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gotplt.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 48828385840F Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=23.83.223.167 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1726850450; cv=pass; b=F/b86rYEfdVz5txCRF6RC9fBw6qib5Sjk4ZMYS5J4f/5Z3UtPrzRpHEibQZ9SRQO0ho6UJlDj8/51yO08ckUCbvOOEtHjYODvX/1lWUXknBtoyMpJob7aEDTEP9hrJk+980G9zhCGcahlPOILaE2M64xXSzfutIqPaC5qqMbh9M= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1726850450; c=relaxed/simple; bh=VsG7OtiRL5oMEYsbPJBoy+pXx6O1R3457n4JvsvzFUQ=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=et35zr0DoNYvt3O0h65V8++0lnOmArqsqMYlfrffVud50DyMhRvXoG1KORbdgAGph7a54AIsJOUZKAMeC6UkLDQgLe8SrM/ebbIriLjX6lfFJIVZx4/ggIUog41mW3/2lkNUJEeAoT5NmGvfD3Uwq1b2hNVyXJMcUz7eQTY1gwM= ARC-Authentication-Results: i=2; server2.sourceware.org X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 50CC64E5B82; Fri, 20 Sep 2024 16:40:47 +0000 (UTC) Received: from pdx1-sub0-mail-a312.dreamhost.com (100-99-96-38.trex-nlb.outbound.svc.cluster.local [100.99.96.38]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id 04ECC4E5CC3; Fri, 20 Sep 2024 16:40:47 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1726850447; a=rsa-sha256; cv=none; b=771PCRnD3Ube2xzlKNdVP048f8eJ9yGhulb3axyjruCx5rAZ7h8xSUu8MRWXwiu0j+X3yq KJ7gLrVkb0OL8tLuZvisO5nMeIW0c+AO4FZadNxcL0PjDO83jHOVtGJVOQfjHNUoYevN/O uru3gbAQ+lXytFMRP3/+xNZxP8XZA7PCjt3/9zIKrmOfnFAu190iCIemgCJLqYnau4W655 FdCvoUUbhcTo/tn3YV0HtlCBEWYKzOG7p4/hDeBdGEx5HdRu2IJC7i24xdWq65D+SUsxP5 EeUkxkqOBVTRS2LiilnKg1K24CyHXAr73a3du13xwVo6hD+FNzB5BpB6SpHt9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1726850447; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=4iXUX+fofrqTagFYElDZ27uTIMqz58nNW0JZc4nLKYs=; b=jsugSRiAWucxmOTKhgMyJWUSUElRU1CQrLH6qNRosuC8QB23Ol/s1ji34w0tKjNsli1N2O OtzUt1RUYftvg40ufHanfOhXetX7qY0CV2UorOlEbSWmqAUkRem7xb9P5WZRGRUtXIyDwr 5kMJ2pG2fKolfmOfJDbsEWIm1GX3TKES2W4t9xPO20besONkQwEccCjQLFHlljRYDjDj2u RsfF4nMiDpH3ZKKzvZFACMCptKesi58q/lMyvWMzzQ8AYxoHafpCKS0KC2WNqLGcJoPBc1 ZZv/gbr6p0+p1C0pCXcHt4yK4Vg+HBZ58VSGkErfp1qjRrYLRZ+053af6INR8w== ARC-Authentication-Results: i=1; rspamd-5b46bcd97f-7bkdm; auth=pass smtp.auth=dreamhost smtp.mailfrom=siddhesh@gotplt.org X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|siddhesh@gotplt.org X-MailChannels-Auth-Id: dreamhost X-Suffer-Tasty: 1fb953685ec291b6_1726850447238_2835399218 X-MC-Loop-Signature: 1726850447238:2231977248 X-MC-Ingress-Time: 1726850447238 Received: from pdx1-sub0-mail-a312.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.99.96.38 (trex/7.0.2); Fri, 20 Sep 2024 16:40:47 +0000 Received: from fedora.redhat.com (bras-base-toroon4859w-grc-66-76-71-1-128.dsl.bell.ca [76.71.1.128]) (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) (Authenticated sender: siddhesh@gotplt.org) by pdx1-sub0-mail-a312.dreamhost.com (Postfix) with ESMTPSA id 4X9J6Q4pKBzS4; Fri, 20 Sep 2024 09:40:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gotplt.org; s=dreamhost; t=1726850446; bh=4iXUX+fofrqTagFYElDZ27uTIMqz58nNW0JZc4nLKYs=; h=From:To:Cc:Subject:Date:Content-Transfer-Encoding; b=EvbtqsxiLFnjNYxMWkgJKLDvkeVdxbIMqzsciHGKwB81/p3+VhCostl0xzlmOh2rb KiDbULSw5VJLWDkfSBfvYpypxiPRTfmHAMq3l64vyAc1aKZSXO3QEkdoB9rN6HpAYX 6Y3TRjo7PnSfYcgldmMd4S1X2m5ab4qLt1uTGC99bnoqG3QkTGONdOwEYtdedtDtrL AZ4QCl2pE9DK8Kr+uyeIdyfTY+oeMYRXPQNyV2zY899wJ8chhQU3qZVQii6KrWcoTM hU+F3035AZcvB+NRnigJqKXMjvNuDw40/5skZGPsOABGXWiDAat1L8QM9U7XwLfE/j hOjVV/6ON+Q6g== From: Siddhesh Poyarekar To: gcc-patches@gcc.gnu.org Cc: pinskia@gcc.gnu.org Subject: [PATCH v2 4/4] tree-object-size: Fall back to wholesize for non-const offset Date: Fri, 20 Sep 2024 12:40:29 -0400 Message-ID: <20240920164029.63843-5-siddhesh@gotplt.org> X-Mailer: git-send-email 2.45.1 In-Reply-To: <20240920164029.63843-1-siddhesh@gotplt.org> References: <20240914123049.2746225-1-siddhesh@gotplt.org> <20240920164029.63843-1-siddhesh@gotplt.org> MIME-Version: 1.0 X-Spam-Status: No, score=-3036.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org Don't bail out early if the offset to a pointer in __builtin_object_size is a variable, return the wholesize instead since that is a better fallback for maximum estimate. This should keep checks in place for fortified functions to constrain overflows to at lesat some extent. gcc/ChangeLog: PR middle-end/77608 * tree-object-size.cc (plus_stmt_object_size): Drop check for constant offset. * testsuite/gcc.dg/builtin-object-size-1.c (test14): New test. Signed-off-by: Siddhesh Poyarekar --- gcc/testsuite/gcc.dg/builtin-object-size-1.c | 19 +++++++++++++++++++ gcc/tree-object-size.cc | 7 ++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-1.c b/gcc/testsuite/gcc.dg/builtin-object-size-1.c index 6ffe12be683..5a24087ae1e 100644 --- a/gcc/testsuite/gcc.dg/builtin-object-size-1.c +++ b/gcc/testsuite/gcc.dg/builtin-object-size-1.c @@ -791,6 +791,25 @@ test13 (unsigned cond) #endif } +void +__attribute__ ((noinline)) +test14 (unsigned off) +{ + char *buf2 = malloc (10); + char *p; + size_t t; + + p = &buf2[off]; + +#ifdef __builtin_object_size + if (__builtin_object_size (p, 0) != 10 - off) + FAIL (); +#else + if (__builtin_object_size (p, 0) != 10) + FAIL (); +#endif +} + int main (void) { diff --git a/gcc/tree-object-size.cc b/gcc/tree-object-size.cc index 1b569c3d12b..ebd2a4650aa 100644 --- a/gcc/tree-object-size.cc +++ b/gcc/tree-object-size.cc @@ -1595,8 +1595,7 @@ plus_stmt_object_size (struct object_size_info *osi, tree var, gimple *stmt) op1 = try_collapsing_offset (op1, NULL_TREE, NOP_EXPR, object_size_type); /* Handle PTR + OFFSET here. */ - if (size_valid_p (op1, object_size_type) - && (TREE_CODE (op0) == SSA_NAME || TREE_CODE (op0) == ADDR_EXPR)) + if ((TREE_CODE (op0) == SSA_NAME || TREE_CODE (op0) == ADDR_EXPR)) { if (TREE_CODE (op0) == SSA_NAME) { @@ -1621,7 +1620,9 @@ plus_stmt_object_size (struct object_size_info *osi, tree var, gimple *stmt) if (size_unknown_p (bytes, 0)) ; else if ((object_size_type & OST_DYNAMIC) - || bytes != wholesize || compare_tree_int (op1, offset_limit) <= 0) + || bytes != wholesize + || (size_valid_p (op1, object_size_type) + && compare_tree_int (op1, offset_limit) <= 0)) bytes = size_for_offset (bytes, op1, wholesize); /* In the static case, with a negative offset, the best estimate for minimum size is size_unknown but for maximum size, the wholesize is a