public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Biener <rguenther@suse.de>
To: Qing Zhao <qing.zhao@oracle.com>
Cc: Kees cook <keescook@chromium.org>,
	 richard Sandiford <richard.sandiford@arm.com>,
	 gcc-patches Qing Zhao via <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH][version 3]add -ftrivial-auto-var-init and variable attribute "uninitialized" to gcc
Date: Tue, 22 Jun 2021 08:24:38 +0200 (CEST)	[thread overview]
Message-ID: <nycvar.YFH.7.76.2106220822460.9200@zhemvz.fhfr.qr> (raw)
In-Reply-To: <5947C283-3948-4A36-A923-731529724C42@oracle.com>

On Mon, 21 Jun 2021, Qing Zhao wrote:

> 
> 
> > On Jun 21, 2021, at 10:35 AM, Richard Biener <rguenther@suse.de> wrote:
> >>> I think we can drop -fauto-var-init=pattern and just go with block
> >>> initializing which will cover padding as well which means we can
> >>> stay with the odd -ftrivial-auto-var-init name used by CLANG and
> >>> add no additional options.
> >> 
> >> Yes, this is a good idea. 
> >> 
> >> block initializing will cover all paddings automatically. 
> >> 
> >> Shall we do block initializing for both “zero initialization” and
> >> “pattern initialization”?
> >> 
> >> Currently, for zero initialization, I used the following:
> >> 
> >>>>> +    case AUTO_INIT_ZERO:
> >>>>> +      init = build_zero_cst (TREE_TYPE (var));
> >>>>> +      expand_assignment (var, init, false);
> >>>>> +      break;
> >> 
> >> Looks like that the current “expand_assignment” does not initialize
> >> paddings with zeroes. 
> >> Shall I also use “memset” for “zero initialization”?
> > 
> > I'd say so, yes. 
> 
> Okay.
> 
> One more question for the current “expand_builtin_memset”:
> 
> Is the current implementation of “expand_builtin_memset” automatically handle short length memset optimally? 
> 
> i.e, do I need to specially handle char type, short type, or other types that can fit to a register?

No, short memsets are handled optimally.

> 
> >>> 
> >>> There's no "safe" pattern besides all-zero for all "undefined" uses
> >>> (note that uses do not necessarily use declared types).  Which is why
> >>> recommending pattern init is somewhat misguided.  There's maybe 
> >>> some useful pattern that more readily produces crashes, those that
> >>> produce a FP sNaN for all of the float types.
> >> 
> >> So, pattern value as 0xFF might be better than 0xAA since 0xFFFFFFFF
> >> will be a NaN value for floating type?
> > 
> > I think for debugging NaNs are quite nice, yes. 
> 
> For floating point, 0xFFFFFFFF is good. 
> But for pointer type, is it good? (See my other email to Kees).

Good enough IMHO.  We could make it GCC target specific so targets
can coordinate with their OS vendors to have the picked page
unmapped on low virtual memory machines.

> >> 
> >> Not sure whether it’s necessary to expose this to user.
> >> 
> >> One question that is important to the implementation is:
> >> 
> >> Shall we use “byte-repeated” or “word-repeated” pattern?
> >> Is “word-repeated” pattern better than “byte-repeated” pattern?
> >> 
> >> For implementation, “byte-repeated” pattern will make the whole
> >> implementation much simpler since both “zero initialization” 
> >> and “pattern initialization” can be implemented with “memset” with
> >> different “value”.  
> >> 
> >> So, if “word-repeated” pattern will not have too much more benefit, I
> >> will prefer “byte-repeated” pattern.
> >> 
> >> Let me know your comments here.
> > 
> > I have no strong opinion and prefer byte repetition for simplicity. But I would document this as implementation detail that can change. 
> 
> Okay, if we finally decide to go with byte repetition, I will document this as implementation details that can be changed later.
> 
> Qing
> > 
> > Richard. 
> > 
> >>> 
> >>>> 
> >>>> 
> >>>> As said, for example glibc allocator hardening with MALLOC_PERTURB_
> >>>> uses simple byte-init.
> >>>> 
> >>>> What’s the pattern glibc used?
> >>> 
> >>> The value of the MALLOC_PERTURB_ environment truncated to a byte.
> >> 
> >> Okay.
> >> 
> >> thanks.
> >> 
> >> Qing
> >>> 
> >>> Richard.
> >>> 
> > 

      reply	other threads:[~2021-06-22  6:24 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-12 17:16 Qing Zhao
2021-05-25 19:26 ` Qing Zhao
2021-05-26 11:18 ` Richard Biener
2021-05-27 19:44   ` Qing Zhao
2021-06-07  7:48     ` Richard Biener
2021-06-07 16:13       ` Qing Zhao
2021-06-08  7:37         ` Richard Biener
2021-06-08 16:56           ` Kees Cook
2021-06-08 17:32             ` Qing Zhao
2021-06-08 17:36               ` Kees Cook
2021-06-07 23:45       ` Kees Cook
2021-06-08  8:27         ` Richard Biener
2021-05-27 21:42   ` Qing Zhao
2021-06-03 20:14   ` Qing Zhao
2021-06-07  7:50     ` Richard Biener
2021-06-03 20:18   ` Qing Zhao
2021-06-07  7:53     ` Richard Biener
2021-06-07 16:18       ` Qing Zhao
2021-06-07 23:48         ` Kees Cook
2021-06-08  7:41         ` Richard Biener
2021-06-08 15:27           ` Qing Zhao
2021-06-08 16:59           ` Kees Cook
2021-06-08 18:05             ` Qing Zhao
2021-06-11 11:04             ` Richard Biener
2021-06-11 17:14               ` Kees Cook
2021-06-10 21:11   ` Qing Zhao
2021-06-11 11:12     ` Richard Biener
2021-06-11 15:49       ` Qing Zhao
2021-06-11 16:24         ` Kees Cook
2021-06-11 17:00         ` Qing Zhao
2021-06-14 16:10         ` Qing Zhao
2021-06-15 13:21           ` Richard Biener
2021-06-15 21:49             ` Qing Zhao
2021-06-16  6:19               ` Richard Biener
2021-06-16 15:04                 ` Qing Zhao
2021-06-16 19:39                   ` Qing Zhao
2021-06-18 23:47                     ` Kees Cook
2021-06-21 15:39                       ` Qing Zhao
2021-06-21 16:18                         ` Kees Cook
2021-06-21 17:11                           ` Qing Zhao
2021-06-22  8:25                           ` Richard Sandiford
2021-06-22  8:59                             ` Richard Biener
2021-06-22 13:54                               ` Qing Zhao
2021-06-22 14:00                                 ` Richard Biener
2021-06-22 14:10                                   ` Qing Zhao
2021-06-22 14:15                                     ` Richard Biener
2021-06-22 14:33                                       ` Qing Zhao
2021-06-22 19:04                                         ` Richard Biener
2021-06-22 17:55                             ` Kees Cook
2021-06-22 18:18                               ` Richard Sandiford
2021-06-22 21:31                                 ` Qing Zhao
2021-06-23  6:05                                   ` Richard Biener
2021-06-21  7:53                   ` Richard Biener
2021-06-21 15:11                     ` Qing Zhao
2021-06-21 15:35                       ` Richard Biener
2021-06-21 16:13                         ` Qing Zhao
2021-06-22  6:24                           ` Richard Biener [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=nycvar.YFH.7.76.2106220822460.9200@zhemvz.fhfr.qr \
    --to=rguenther@suse.de \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=keescook@chromium.org \
    --cc=qing.zhao@oracle.com \
    --cc=richard.sandiford@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).