tinycc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Tinycc-devel] fix: code in non-executable sections


From: Jonathan M. Wilbur
Subject: Re: [Tinycc-devel] fix: code in non-executable sections
Date: Thu, 01 Aug 2024 11:22:51 +0000

I am terribly sorry on both counts. I actually had no idea there even was a test suite. I thought the test folder was just an assortment of files to manually test against as needed. I will fix this immediately. If it means anything, I built a few executables already just fine with my changes: I think most people that have downloaded and used TinyCC in the past few hours should not have had any problems, unless they ran the tests.

I actually already found out that the relocation was broken only because of my change that made sections defined in assembly executable. (The change made in gen_function seems to be fine.) As it turns out, it is because I unknowingly also changed the behavior of the TOK_ASMDIR_pushsection case, and .pushsection is used in the tests.

To get to my point: should I fix the problem or fix the test?

I did this in the first place because (I think) most use cases for hand-crafted assembly are for defining code, not data, but it looks like tcctest.c uses .pushsection to define data-only sections. In my opinion, I still think the behavior of my change is generally correct, but it is not clear to me what the tests using pushsection are doing.

While I await feedback, I will submit a change that fixes both issues.

On Wed, Jul 31, 2024 at 06:52, Herman ten Brugge via Tinycc-devel <tinycc-devel@nongnu.org> wrote:
On 7/30/24 16:46, Jonathan M. Wilbur wrote:
Hello,

I recently pushed a commit (e4d874d88a2ef874a9c2fd7c47d3d3a35ae986e2) that fixes code being placed in ELF sections that do not have the executable bit set. This happens when a function is annotated with __attribute__((section(".some_section"))), or when a section is defined via inline assembly. In the latter case, it is assumed that the inline assembly actually contains code, which will not always be the case, but should be the case the vast majority of the time. When the instruction pointer points to code in a non-executable section, a segmentation fault occurs.

I have included two files that recreate both of these bugs in tests/exec_section_in_c.c and tests/exec_section_in_asm.c. The patch is included on this email.

If anybody has any feedback, I would be curious to know if the blind addition of the executable flag to sections defined in assembly will be a problem: particularly if there is widespread usage of the writeable flag for these, which might elicit segmentation faults from the combined use of the writeable and executable flags for the same page.

Same as previous mail:

You probably did not run 'make test'.

Tests should go into 'tests/tests2' directory.

Some tests do not run.

Looks like you have to revert the patch.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]