Deutsch English Français Italiano |
<vsel2f$l4ih$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: Stephen Fuld <sfuld@alumni.cmu.edu.invalid> Newsgroups: comp.arch Subject: Re: Constant Stack Canaries Date: Mon, 31 Mar 2025 10:57:35 -0700 Organization: A noiseless patient Spider Lines: 67 Message-ID: <vsel2f$l4ih$1@dont-email.me> References: <vsbcnl$1d4m5$1@dont-email.me> <vsc058$20pih$1@dont-email.me> <4cf60b5fd8b785feb07a67a823cc349d@www.novabbs.org> <vseeen$l4ig$1@dont-email.me> <vseiq9$qndj$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Mon, 31 Mar 2025 19:57:36 +0200 (CEST) Injection-Info: dont-email.me; posting-host="c8648c9284880e9de4e5dd63c8ff0216"; logging-data="692817"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/Yx5N1ZOV92sIyxNEHV9BXshRKuKeAz5U=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:bw8aEpoL3Fdhg9Bf1HCwXb8vgsU= Content-Language: en-US In-Reply-To: <vseiq9$qndj$1@dont-email.me> Bytes: 3924 On 3/31/2025 10:17 AM, BGB wrote: > On 3/31/2025 11:04 AM, Stephen Fuld wrote: >> On 3/30/2025 1:14 PM, MitchAlsup1 wrote: >>> On Sun, 30 Mar 2025 17:47:59 +0000, BGB wrote: >>> >>>> On 3/30/2025 7:16 AM, Robert Finch wrote: >>>>> Just got to thinking about stack canaries. I was going to have a >>>>> special >>>>> purpose register holding the canary value for testing while the >>>>> program >>>>> was running. But I just realized today that it may not be needed. >>>>> Canary >>>>> values could be handled by the program loader as constants, >>>>> eliminating >>>>> the need for a register. Since the value is not changing while the >>>>> program is running, it could easily be a constant. This may require a >>>>> fixup record handled by the assembler / linker to indicate to the >>>>> loader >>>>> to place a canary value. >>>>> >>>>> Prolog code would just store an immediate to the stack. On return a >>>>> TRAP >>>>> instruction could check for the immediate value and trap if not >>>>> present. >>>>> But the process seems to require assembler / linker support. >>>>> >>>> >>>> They are mostly just a normal compiler feature IME: >>>> Prolog stores the value; >>>> Epilog loads it and verifies that the value is intact. >>> >>> Agreed. >> >> I'm glad you, Mitch, chimed in here. When I saw this, it occurred to >> me that this could be done automatically by the hardware (optionally, >> based on a bit in a control register). The CALL instruction would >> store magic value, and the RET instruction would test it. If there >> was not a match, an exception would be generated. The value itself >> could be something like the clock value when the program was >> initiated, thus guaranteeing uniqueness. >> >> The advantage over the software approach, of course, is the >> elimination of several instructions in each prolog/epilog, reducing >> footprint, and perhaps even time as it might be possible to overlap >> some of the processing with the other things these instructions do. >> The downside is more hardware and perhaps extra overhead. >> >> Does this make sense? What have I missed. >> > > This would seem to imply an ISA where CALL/RET push onto the stack or > similar, rather than the (more common for RISC's) strategy of copying PC > into a link register... Sorry, you're right. I should have said, in the context of Mitch's My 66000, the ENTER and EXIT instructions. > Another option being if it could be a feature of a Load/Store Multiple. The nice thing about the ENTER/EXIT is that they combine the store multiple (ENTER) and the load multiple and return control (EXIT). -- - Stephen Fuld (e-mail address disguised to prevent spam)