From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Po Lu Newsgroups: gmane.emacs.devel Subject: Re: feature/asan-gc-poisoning 5c653d3ec9: Add support for additional memory checks using AddressSanitizer. Date: Wed, 30 Nov 2022 12:58:09 +0800 Message-ID: <87h6yhujha.fsf@yahoo.com> References: <166975768364.28465.5012752085318372072@vcs2.savannah.gnu.org> <20221129213444.5CC36C009EC@vcs2.savannah.gnu.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="3834"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: Vibhav Pant To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Wed Nov 30 05:59:16 2022 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p0FBk-0000oR-94 for ged-emacs-devel@m.gmane-mx.org; Wed, 30 Nov 2022 05:59:16 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1p0FB1-0003yR-CC; Tue, 29 Nov 2022 23:58:31 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p0FAz-0003yI-DX for emacs-devel@gnu.org; Tue, 29 Nov 2022 23:58:29 -0500 Original-Received: from sonic312-25.consmr.mail.ne1.yahoo.com ([66.163.191.206]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1p0FAx-00009M-3T for emacs-devel@gnu.org; Tue, 29 Nov 2022 23:58:29 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669784302; bh=BAWUO2lsnqWOgalAJFZ16XLBcYiXKd3xgx+yDoWxz3Y=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To; b=Af4MbzVKMflU+84Ck+s7KgUi9irkAqMhKr2nebZ8k2Fu/RQGBHWFdnSdWZ6VRvV5qiCelCV4aBOMjGHqhR4HKi8btSYNBKQBM8RthXzh/2FXi0U8AmIGtAvU2Opz4Yv4j/WjjcN4ThPJdRYfjolFSSoK+6Y/EowfqCfkAmtp17YwWk8aBAVfCvw6GfHp08J3y/LMH2RgGfLPgIPamyIvAx3TQhA82++tQtMAPNaHJqvlMfXy/xo2WRqovV6Gv84WnwZI5TfFQNcv4eGVF6jnWRT0m7fJexhG6418eapszPaaEm5X2Ped2btIq0Ymxn4+yqohX3C8ixp3ZClEY64Geg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1669784302; bh=dYoOVTrSfdgyf+f1oQzMfpjHEeBxW3p7zaw7hlCscT7=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=r2k+8ya0kjofGedA3jVDl+5N2tQlWyOslJDuw+PuO6R6ObDi4s9cHkk5Vfgd07ik4jO1l/cj+TU0ai8nK4LFIszmk40AiwX1hfUY4jqjsIahMvnVCvoD1ysitI+Q2ldQ2FRXuWi9sErSroz0B6hDHVmvQmKbIn/3SGkSOrVU8RuHhWdXs6HELUzydqVvRw6k/X5tmupnuHgJT6ke/I6QdVNzrbGYKzsGqDqh3cqa1ytVoWzGd6K/Qg7mMT24RWPkR5KiC+1FL+t+wyr+ketHo7jfE5ib1WByiXzhwm2PSMUkUixtdWW/SGF12Isob0q902ZwrL4EdudRfdFc5rGv/g== X-YMail-OSG: mf7fYnUVM1kV1V.lrUZnS85eVYBqopzeJKpadfFTLLoKZuYKVJDHY41gFUDEtN. gnVQH5r_wz51Qv8oUgu8Gn1gymZmOTqJMX4wxSCO1cuL1UgO6rRiSlJs8tycbllTKX1mvaE08qTs nJpCTRpBnCDdrOanC_eBJesM4OUmoSywBbEBTAthxN0_zcpHJ9JH5WF0lDT0c_RFq1rOqg2cMIDw IYHuoWFeO2om9XanknZqIsfxp8mI9a2nHuL77_8MWxiOr6SM9z5Y_LoKxUkQ8KUvfig1dconSBYC cqqEqXNThgoiJqQUwhEEnC02_DSZE0..pJ7BrPTsQKlk8zk5OmlRlwYvl98hd0V1_nktzchkKNU8 owOG6xnOA3nzL7hZTjkTN_qKVAsU_DV2t8Yt.2WepStynfzdsn08Hg5kc66WSh4wcsD.EjxRhYYg .b_Di5M_TS9e9T0xwU4dP2ajGROp1u81C5zhYnqjPRriQ2JXvMxQaBuTGjWi8ShCqBmLIG6C0ScA IIqRCHb48dm8gHElORWyoe3drDIzxxl5cE_lq8t70C9T.vq_iQTxtuQ23BEnNjJDNd2muYsZXb_l t2o9xQ5TdaT_meAsxCLfG1SdCZDJ3P3nnERn.cwPKEotMdWsnHQUK0UkgIxgmfUuhNBqqr.7Ha5a TsjakqdLeBuNJ2cgFC1IIpZOOwcvOy8JpPmO2Rn0ml3b4x9CqPqHBGewc2dm_vL6OBdl4YnWlmyo XXr8YVGAzTOhxMpGZJnadJn7WcwkTYIXH.l0tgSqc4VnAMrHnLvjuGg_5MQr3gXw.5es9iyT5DzB h3kiFTcJnkU1mL9xEu0ud66S7drpvw2K9._Hd4hnhX X-Sonic-MF: Original-Received: from sonic.gate.mail.ne1.yahoo.com by sonic312.consmr.mail.ne1.yahoo.com with HTTP; Wed, 30 Nov 2022 04:58:22 +0000 Original-Received: by hermes--production-sg3-6c8895b545-xbfp8 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID e8a43793aa700b97438857cf1e090e79; Wed, 30 Nov 2022 04:58:15 +0000 (UTC) In-Reply-To: <20221129213444.5CC36C009EC@vcs2.savannah.gnu.org> (Vibhav Pant's message of "Tue, 29 Nov 2022 16:34:44 -0500 (EST)") X-Mailer: WebService/1.1.20863 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo Received-SPF: pass client-ip=66.163.191.206; envelope-from=luangruo@yahoo.com; helo=sonic312-25.consmr.mail.ne1.yahoo.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:300751 Archived-At: Vibhav Pant writes: > Add support for additional memory checks using AddressSanitizer. > > When Emacs is compiled with AddressSanitizer support, enable > poisoning/unpoisoning freed/unused Lisp objects and other internal > memory management structures. If enabled, this will mark freed bytes > that have been put on free lists for future use, and initially > allocated memory blocks/chunks as "poisoned", triggering an ASan error > if they are accessed improperly. Structures are unpoisoned when they > have been taken off their respective free lists. > > * configure.ac: Check for the existence of the ASan API header. > > * src/alloc.c (ASAN_POISON_ABLOCK, ASAN_UNPOISON_ABLOCK) > (ASAN_POISON_INTERVAL_BLOCK, ASAN_UNPOISON_INTERVAL_BLOCK) > (ASAN_POISON_INTERVAL, ASAN_UNPOISON_INTERVAL) > (ASAN_PREPARE_DEAD_SDATA, ASAN_PREPARE_LIVE_SDATA) > (ASAN_POISON_SBLOCK_DATA, ASAN_POISON_STRING_BLOCK) > (ASAN_UNPOISON_STRING_BLOCK, ASAN_POISON_STRING) > (ASAN_UNPOISON_STRING, ASAN_POISON_FLOAT_BLOCK) > (ASAN_UNPOISON_FLOAT_BLOCK, ASAN_POISON_FLOAT) > (ASAN_UNPOISON_FLOAT, ASAN_POISON_CONS_BLOCK) > (ASAN_POISON_CONS, ASAN_UNPOISON_CONS) > (ASAN_POISON_VECTOR_CONTENTS, ASAN_UNPOISON_VECTOR_CONTENTS) > (ASAN_UNPOISON_VECTOR_BLOCK, ASAN_POISON_SYMBOL_BLOCK) > (ASAN_UNPOISON_SYMBOL_BLOCK, ASAN_POISON_SYMBOL) > (ASAN_UNPOISON_SYMBOL) [ADDRESS_SANITIZER]: New functions. When > address sanitization is enabled, define them to poison/unpoison > objects. > > (lisp_align_malloc): Poison newly allocated blocks on `free_ablock', > unpoison ablocks taken from it respectively. > (lisp_align_free): Poison individual ablocks when they are put on the > free list, unpoison them when an entire `ablocks' chunk is being > freed. > > (make_interval): Poison interval blocks on initial allocation, > unpoison individual intervals on allocation and removal from > `interval_free_list'. > (sweep_intervals): Unpoison interval blocks before sweeping, poison > dead/unmarked intervals. > > (allocate_string): Poison string blocks on initial allocation, > unpoison Lisp_Strings on removal from the free list. > (allocate_string_data): Poison `sblock' data on initial allocation, > unpoison individual `sdata' contents on allocation or removal from the > free list. Call `ASAN_PREPARE_LIVE_SDATA' on the new `sdata' struct. > (sweep_strings): Unpoison string blocks before sweeping them, > poisoning dead strings and their sdata afterwards. > (compact_small_strings): Call `ASAN_PREPARE_LIVE_DATA' on the `sdata' > to where compacted strings to moved to. > (pin_string): Call `ASAN_PREPARE_DEAD_SDATA' on `old_sdata'. > > (make_float): Poison float blocks on allocation, unpoisoning > individual Lisp_Floats on allocation or removal from > `float_free_list'. > (sweep_floats): Unpoison float blocks before sweeping, poison > dead/unmarked floats. > > (free_cons): Poison `ptr'. > (Fcons): Poison cons blocks on allocation, unpoisoning individual > Lisp_Cons on allocation or removal from `cons_free_list'. > (sweep_conses): Poison dead/unmarked conses. > > (setup_free_list): Poison vectors put on `vector_free_lists'. > (allocate_vector_from_block): Unpoison vectors taken from the free > list, poison excess vector bytes when vectors allocated from the free > list are larger than requested. > (sweep_vectors): Unpoison vector blocks before sweeping them. > > (Fmake_symbol): Poison symbol blocks on initial allocation, > unpoisoning individual Lisp_Symbols on allocation or removal from > `symbol_free_list'. > (sweep_symbols): Unpoison symbol blocks before sweeping, poisoning > dead/unmarked symbols. Thank you for writing the change log entry correctly this time! > + This feature can be disabled wtih the run-time flag > + `allow_user_poisoning' set to zero. > +*/ Please put "*/" at the end of "zero.". > + (void) (b); > + (void) (b); I thought Emacs doesn't make the compiler warn about unused arguments. > +#if GC_ASAN_POISON_OBJECTS > + /* Ensure that accessing excess bytes does not trigger ASan. > + */ > + __asan_unpoison_memory_region (ADVANCE (vector, nbytes), > + restbytes); > +#endif Please fix the comment here as well. The rest LGTM. Thanks for paying attention to our coding style this time.