From patchwork Tue Feb 6 11:37:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Biener X-Patchwork-Id: 197325 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp1476717dyb; Tue, 6 Feb 2024 03:38:46 -0800 (PST) X-Google-Smtp-Source: AGHT+IHCUkx+CHkGjYXXKHiEaORBIDGFswDgAC423lRcmGITnjYqmAbDQgDdCzBMep8B5Vt0gdY6 X-Received: by 2002:a05:6214:19ec:b0:681:9ea:b99f with SMTP id q12-20020a05621419ec00b0068109eab99fmr2408092qvc.57.1707219526377; Tue, 06 Feb 2024 03:38:46 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707219526; cv=pass; d=google.com; s=arc-20160816; b=QXQ62Xk8v3vcHvhogl501q4g3icU2cVisMWzOw1zuUYxlYHinDEXvaLev3eHgZ+/DK w6+sMW976F7EGlvAS7IFeyO16gcM3AFHkwGzV9Iya6BTsWCaKZw7gquDeldBQcR6pF1l me9ykj9QRl7yzUnxS9HYQXwfMCmZw0Wb0D1W+Q3YlGTHE/1KgvJ4I0PVxdNNszUCXqNV tAqZk0CjXn3pzARkB+mCTuX5vaQE2DYvp5clvEIIdvMVW4NioG3Wzy+BQAMKsTUCY7oC KqBGvJJW122ZM6sNjPXhGXQUA0SNu5ztyD7lTE12gGwAFk04zjKqGQWrpYG27acAqJiE P/4g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:errors-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:mime-version :subject:cc:to:from:date:dkim-signature:dkim-signature :dkim-signature:dkim-signature:arc-filter:dmarc-filter:delivered-to; bh=Jerg4B1hmSCmdDMJlacDuQO79pYpgpOywOB62bON490=; fh=CRNXUFJtM4LcMLMWLMCyXnO3/iZmLFrQXqVUPMFeTWQ=; b=WIHyDKDN6/SI5w/VEar5oW7yvx7QFRLU/DZp0F2iMHYQCUYGTg3/4BM9BBB+/3UmCJ 2rTzMypohyPANEgaHaiBxP1otePHobvs13D+2ISfYUhr2+MkVnKTb2Ge0ZkgTBq/haCW +0WbX8EZN3iZCaVvqvCJDuQRXY6OWb4g/8QILAmCFvdhbuIn6YwrNn0YC3eAW+nq1U30 keDFej0uUSgPs/zklhzp0lCQLd73md6FtZSYwWq9eQvOPbYQ9XawpwY3dAIBln4x6hx/ ZIRR48zSjTGLY5wj70FZDhbWzVVt/kkmwUh0VGPU0ifJW1vGMacq0bBin+1LRoNUvWDr KwXw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=RcNGQxzV; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=RcNGQxzV; dkim=neutral (no key) header.i=@suse.de; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de X-Forwarded-Encrypted: i=1; AJvYcCVrdIQ6ylRFQodsPvt2PdB7QduaYCCe6QVSoTDHykIU7OHYTpHu/332JaNd/lBhm/Cqg2TX7ydQ+DhzpHnIxnylZ+OXTQ== Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id l4-20020ad44d04000000b0068c55772858si2126787qvl.131.2024.02.06.03.38.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Feb 2024 03:38:46 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=RcNGQxzV; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=RcNGQxzV; dkim=neutral (no key) header.i=@suse.de; arc=pass (i=1); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0DA333858414 for ; Tue, 6 Feb 2024 11:38:46 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by sourceware.org (Postfix) with ESMTPS id 2DFE03858D33 for ; Tue, 6 Feb 2024 11:37:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2DFE03858D33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 2DFE03858D33 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707219476; cv=none; b=QZzAauzXVeMAS0akdE3atvHyXbR27U+zXNnqjZbDm8eoxtVz++nzG6l4R2w2Cm525DYBqwiiFsRzMZbYthvAyCfiAx+kaJtjx/WSRDP67l88zVuwDDxL14oCeIO2GNhv34VVjttpn8SWpymTHU+toXJO/Cb1qSJZ3mVcP1M4zo8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707219476; c=relaxed/simple; bh=NTUqdBmeO3YtPRQc54OLmTYvXAeuX4/66oCbQaViVhE=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:Date: From:To:Subject:MIME-Version; b=ht+yyTUlDVBCLrLr5iJqx0RPIV8pJyzWFfLabwVGVopTE7nhivnXhy9ckVZ1Qt9UypeMsfgSkudSdc3YkFADZcJtNcaWcUJg4zdCOAIO3IbuVykCcUC+S3Ap1yC2g9kWMZYNNc+7YV05jjr5bGuK2j1dvoLwpaApjRTyXJKu8OE= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from [10.168.4.150] (unknown [10.168.4.150]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 13B761FB78; Tue, 6 Feb 2024 11:37:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1707219473; h=from:from:reply-to:date:date:to:to:cc:cc:mime-version:mime-version: content-type:content-type; bh=Jerg4B1hmSCmdDMJlacDuQO79pYpgpOywOB62bON490=; b=RcNGQxzVpELmYiqj3ciDl2mZUIVl6IXhgkv6odNFYT8laXtrNlMeifh0NMIYJcksOQvXXw RjxCtwszU+tWk73EiNs12v25DV6nM5/xpgNkuWGHddLRHeYaHa0ZkfFj2zeIuemwY5kWMp +RBxrz6jD9OlZ7uysBl/i6cAPOfjbKs= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1707219473; h=from:from:reply-to:date:date:to:to:cc:cc:mime-version:mime-version: content-type:content-type; bh=Jerg4B1hmSCmdDMJlacDuQO79pYpgpOywOB62bON490=; b=WKGRrMuF87lDjSFX2dsBTvex0Gg7QlV98zNazSJIo2Jm/dg3yr8J8Otr9S6zOxZadgXdtr 6ZH5ZKEGc3Jm+eCw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1707219473; h=from:from:reply-to:date:date:to:to:cc:cc:mime-version:mime-version: content-type:content-type; bh=Jerg4B1hmSCmdDMJlacDuQO79pYpgpOywOB62bON490=; b=RcNGQxzVpELmYiqj3ciDl2mZUIVl6IXhgkv6odNFYT8laXtrNlMeifh0NMIYJcksOQvXXw RjxCtwszU+tWk73EiNs12v25DV6nM5/xpgNkuWGHddLRHeYaHa0ZkfFj2zeIuemwY5kWMp +RBxrz6jD9OlZ7uysBl/i6cAPOfjbKs= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1707219473; h=from:from:reply-to:date:date:to:to:cc:cc:mime-version:mime-version: content-type:content-type; bh=Jerg4B1hmSCmdDMJlacDuQO79pYpgpOywOB62bON490=; b=WKGRrMuF87lDjSFX2dsBTvex0Gg7QlV98zNazSJIo2Jm/dg3yr8J8Otr9S6zOxZadgXdtr 6ZH5ZKEGc3Jm+eCw== Date: Tue, 6 Feb 2024 12:37:52 +0100 (CET) From: Richard Biener To: gcc-patches@gcc.gnu.org cc: richard.sandiford@arm.com Subject: [PATCH] middle-end/113576 - avoid out-of-bound vector element access MIME-Version: 1.0 Authentication-Results: smtp-out2.suse.de; none X-Spam-Score: 4.31 X-Spamd-Result: default: False [4.31 / 50.00]; ARC_NA(0.00)[]; FROM_HAS_DN(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; NEURAL_HAM_LONG(-1.00)[-0.999]; MIME_GOOD(-0.10)[text/plain]; TO_DN_NONE(0.00)[]; NEURAL_SPAM_SHORT(2.91)[0.971]; MISSING_MID(2.50)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCPT_COUNT_TWO(0.00)[2]; FUZZY_BLOCKED(0.00)[rspamd.com]; RCVD_COUNT_ZERO(0.00)[0]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; BAYES_HAM(-0.00)[10.34%] X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, MISSING_MID, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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+ouuuleilei=gmail.com@gcc.gnu.org Message-Id: <20240206113846.0DA333858414@sourceware.org> X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790149421937292894 X-GMAIL-MSGID: 1790149421937292894 The following avoids accessing out-of-bound vector elements when native encoding a boolean vector with sub-BITS_PER_UNIT precision elements. The error was basing the number of elements to extract on the rounded up total byte size involved and the patch bases everything on the total number of elements to extract instead. As a side-effect this now consistently results in zeros in the padding of the last encoded byte which also avoids the failure mode seen in PR113576. Bootstrapped and tested on x86_64-unknown-linux-gnu. OK? Thanks, Richard. PR middle-end/113576 * fold-const.cc (native_encode_vector_part): Avoid accessing out-of-bound elements. --- gcc/fold-const.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc index 80e211e18c0..8638757312b 100644 --- a/gcc/fold-const.cc +++ b/gcc/fold-const.cc @@ -8057,13 +8057,13 @@ native_encode_vector_part (const_tree expr, unsigned char *ptr, int len, off = 0; /* Zero the buffer and then set bits later where necessary. */ - int extract_bytes = MIN (len, total_bytes - off); + unsigned elts_per_byte = BITS_PER_UNIT / elt_bits; + unsigned first_elt = off * elts_per_byte; + unsigned extract_elts = MIN (len * elts_per_byte, count - first_elt); + unsigned extract_bytes = CEIL (elt_bits * extract_elts, BITS_PER_UNIT); if (ptr) memset (ptr, 0, extract_bytes); - unsigned int elts_per_byte = BITS_PER_UNIT / elt_bits; - unsigned int first_elt = off * elts_per_byte; - unsigned int extract_elts = extract_bytes * elts_per_byte; for (unsigned int i = 0; i < extract_elts; ++i) { tree elt = VECTOR_CST_ELT (expr, first_elt + i);