From patchwork Thu Oct 17 15:04:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siddhesh Poyarekar X-Patchwork-Id: 1998653 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=DC6ViQyg; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; 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 [IPv6:2620:52:3:1:0:246e:9693:128c]) (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 4XTrkQ4JSxz1xw2 for ; Fri, 18 Oct 2024 02:05:46 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8EE7E385843F for ; Thu, 17 Oct 2024 15:05:44 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from seagreen.cherry.relay.mailchannels.net (seagreen.cherry.relay.mailchannels.net [23.83.223.160]) by sourceware.org (Postfix) with ESMTPS id 354093858C2B for ; Thu, 17 Oct 2024 15:05:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 354093858C2B 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 354093858C2B Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=23.83.223.160 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1729177518; cv=pass; b=nNCxh78xWa2rx4jPKdnbRAb7g8SvmJFR40K4kfaHoQiahgNwmmh+KKBbYBnoplgtooSrJJWxZAnK/FpgkR2Rq1niX+ZAJUktbCRzu0lWs5QEyhOGOc92XYXZQqjGR2VRTnT5Fw13bP3epvs4eWgS0J+PlcZ+9Yhi/KWV+f1bcTw= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1729177518; c=relaxed/simple; bh=/747VrVYAjDSV0VaaT+HMeYLx7oZzuJADPuvHHJCMpQ=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=dd2rawC4xKDyH8dxze9A4GPMXkDwY/bssutMj0xkbMqGYW0wZRA/xU/OxgprbHf0VJ16ZoezCwMNwZ3g6Kt64wXxew+eKut5sx9wqh6DU4XepqSsbV2W5mmB3p/GVVQDLA9ki2GH/30kSfLOxuLihRS2fuW5F62tmSFFm2NeYkA= 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 2FE1F1A340D; Thu, 17 Oct 2024 15:05:07 +0000 (UTC) Received: from pdx1-sub0-mail-a296.dreamhost.com (100-101-175-207.trex-nlb.outbound.svc.cluster.local [100.101.175.207]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id B79901A6D54; Thu, 17 Oct 2024 15:05:06 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1729177506; a=rsa-sha256; cv=none; b=OMPP6YjEzmvWrD+M720v8G7+JizLoXy/hm23wP6iLk06Tq1H1byQlFmufeKZnQZim9Dcek TS9YWK8QQi0494Pbn+B+jp09LWNwmEkjSeVkEH6QsGJqnw5Vo4D4lm67/CfOJgTM5hGTad 2o5h7LuY/VlaHdBp/6qm7XCjRFklP4dYlKsuWRAlXm5J5NB19KJTa0H0WhO1jCR2utVkNB 0zm/0Rz9DvERUnDJaUlWnk0l2TtmU5zV/gDPrrxlL7GheKKUSUJ/IKLB8rjup4sbj0MXTg EACZdKlswHbBg1INfJ2sRciP8cM9xhQbHe0UW7ZZBF1k3bMMXiCwcHVwyX+1bw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1729177506; 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=3/IvqsFCTEtU8o/inpQ0BjwZgC83AOW82/Vb1ceUvJU=; b=yENslHpjaIu/6pPh6sbxI64YC/JgWoUDJjmhw7mzgNv6RdPVSYB7DCrRz5olmAyYkf5A6C WSGekx+AWEJMVXgtlkERQ3VwfW4EXkDzN2uo9Fgg4g5icUa9bw19fjU4bDFz9VpKT4tAZ/ oZCKVrPSKP+31KBpvdObehpZ74w9gnNTGHbLUrfwecl2DHkl1jwZ2ojBxcSdYL+zkGL1Eb lIzhRM3BMeY2ISDzRGxlfa/wWy79/23Z5JRcKOTJpZka3pAr3aYcCjN0zbIaWJm8jfCgO5 ES6fTPUHHND8M7szCAGvUhs/4YJY3fkcPsp1HDbIoCLHdJSRcd+8N5EXRqZFrA== ARC-Authentication-Results: i=1; rspamd-6bcbdd57f8-4pzwk; 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-Exultant-Reaction: 5afc65e660a8cea9_1729177506976_901929203 X-MC-Loop-Signature: 1729177506976:392976251 X-MC-Ingress-Time: 1729177506976 Received: from pdx1-sub0-mail-a296.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.101.175.207 (trex/7.0.2); Thu, 17 Oct 2024 15:05:06 +0000 Received: from localhost.localdomain (unknown [184.146.156.41]) (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-a296.dreamhost.com (Postfix) with ESMTPSA id 4XTrjZ2dGDz4x; Thu, 17 Oct 2024 08:05:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gotplt.org; s=dreamhost; t=1729177506; bh=3/IvqsFCTEtU8o/inpQ0BjwZgC83AOW82/Vb1ceUvJU=; h=From:To:Cc:Subject:Date:Content-Transfer-Encoding; b=DC6ViQygWog6BDykq7SxdQO8Lp9/Orssrr4sdgNwF/t6rahUk3NZ1zmoahAEvqBmC I5l1tHfCUJpocuHSngLEfd153cLRZw/5WyeNRbOp6TxIGCN8U0RvI/+PpocjKczFwO SkN/8KhiP9MaK5Q69Fwk0bc0X/XQfM2fj4VQNP+6AFSsBDNLcysuuzZ/EPg7yPdPnw GKyoa70Pnjw56IwS0IIabHgdYPaCVi6nuuZ1UM0H2x9xu6diH6D4obAmBTksWxmPLw tgY0WBK29whgC09VOJg51R5oUsxBpfncoWCLZNfC46wXiP2xf/kV+WNGeTL7OmeHQ6 oLeqG/vHkhOow== From: Siddhesh Poyarekar To: gcc-patches@gcc.gnu.org Cc: jakub@redhat.com Subject: [committed] tree-object-size: Fall back to wholesize for non-const offset Date: Thu, 17 Oct 2024 11:04:47 -0400 Message-ID: <20241017150447.2081484-1-siddhesh@gotplt.org> X-Mailer: git-send-email 2.46.0 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-3036.2 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_H3, RCVD_IN_MSPIKE_WL, 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 Sorry I had missed calling the test case itself, so fixed that up, rebased on master and committed. ----->8------ 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. gcc/testsuite/ChangeLog: * gcc.dg/builtin-object-size-1.c (test12): New test. (main): Call it. Signed-off-by: Siddhesh Poyarekar --- gcc/testsuite/gcc.dg/builtin-object-size-1.c | 21 ++++++++++++++++++++ gcc/tree-object-size.cc | 6 +++--- 2 files changed, 24 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 d6d13c5ef7a..6161adbd128 100644 --- a/gcc/testsuite/gcc.dg/builtin-object-size-1.c +++ b/gcc/testsuite/gcc.dg/builtin-object-size-1.c @@ -712,6 +712,25 @@ test11 (void) } #endif +void +__attribute__ ((noinline)) +test12 (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) { @@ -730,5 +749,7 @@ main (void) #ifndef SKIP_STRNDUP test11 (); #endif + test12 (0); + test12 (2); DONE (); } diff --git a/gcc/tree-object-size.cc b/gcc/tree-object-size.cc index 78faae7ad0d..0e4bf84fd11 100644 --- a/gcc/tree-object-size.cc +++ b/gcc/tree-object-size.cc @@ -1501,8 +1501,7 @@ plus_stmt_object_size (struct object_size_info *osi, tree var, gimple *stmt) return false; /* 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) { @@ -1528,7 +1527,8 @@ plus_stmt_object_size (struct object_size_info *osi, tree var, gimple *stmt) ; else if ((object_size_type & OST_DYNAMIC) || bytes != wholesize - || compare_tree_int (op1, offset_limit) <= 0) + || (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