Memory Safe Inline Assembly

(fil-c.org)

81 points | by pizlonator 2 days ago

5 comments

  • anitil 2 hours ago
    I find it charming that to distinguish Fil-C from the K&R language they use the term 'Yolo-C'. I have never used inline asm before, I actually didn't realise how much behaviour it's specifying! (When I've needed asm it was on non-gcc compilers)

    Edit to add: If I'm understanding this correctly we should be able to run this against projects and detect asm violations, I feel like this would be very valuable to be able to feed these back to maintainers

  • jdw64 3 hours ago
    What is more frightening about this than safe C assembly is that this level of implementation is achievable not with a SOTA model, but with a cost effective model like KIMI. There was human judgment involved in the middle, but reading the article, My reading of the process is as follows:

    1.A developer identified the necessity of inline assembly.

    2.Defined the safety boundaries for 'memory-safe' inline assembly.

    3.Established strict policies for memory access.

    4.Curated an allowlist of permissible instructions.

    5.Set rigorous test criteria and 'done' conditions.

    In short, with the overall guardrails in place, a sub agent loop was run, and this level of code was produced. This raises a number of interesting points about how we should use AI. I haven't looked at all the code, but the idea of passing assembly through safe zones without memory access, and using that as a foundation to achieve this level of implementation through AI, is quite impressive

  • IAmLiterallyAB 3 hours ago
    I wonder if an adversarial user could bypass the checks and achieve memory corruption / code execution. Maybe not a practical attack in most situations but a fun exercise.

    > This includes things like asm volatile("" : : : "memory"), which is an old-school way of saying atomic_signal_fence(memory_order_seq_cst).

    Not quite. AIUI, the first is just a barrier for the compiler, while the second is also a CPU memory barrier. Godbolt seems to confirm that.

    https://godbolt.org/z/a844zKej8

    • pizlonator 3 hours ago
      Your godbolt code used atomic_thread_fence

      The quote uses atomic_signal_fence.

      If you find a way to bypass my checks, file a bug. I tried very hard to break it. My agent loops tried even harder

      • jancsika 2 hours ago
        > My agent loops tried even harder

        What happens if you ask to find the strings that will erroneously return True from validateSafeInlineAsm for disallowed asm? :)

        • pizlonator 2 hours ago
          It’s surprisingly hard to define „erroneously”, but that’s not far off from what I did

          Example of a bug found most recently was that sahf was allowed without a cc constraint.

          Anyway, if you find bugs, file them. Would be fun to see if there’s a case me and my agents missed

      • IAmLiterallyAB 3 hours ago
        Oops, you're right. I was thinking of those as nearly interchangeable but they're actually pretty different.

        I might give it a try when I have a chance, I'll let you know if anything comes of it.

  • dataflow 2 hours ago
    Unrelated question but since you're here: what's the state of support for Boost?
    • pizlonator 2 hours ago
      I was able to build it and a lot of it seemed to work

      There was some debugging thing where it embeds debug info using module level assembly that you have to disable.

      • dataflow 1 hour ago
        Thanks! If you don't mind a suggestion: I would probably list it in [1], given how many programs depend on it.

        [1] https://fil-c.org/programs_that_work

        • pizlonator 1 hour ago
          It’s not inline assembly

          It’s module assembly

          They’re different

          • dataflow 40 minutes ago
            I'm confused; did you reply on the wrong thread, or am I misunderstanding something? I was merely suggesting it'd be good to mention Boost on your website and how well it works with Fil-C. This suggestion was not specifically regarding anything called assembly; it was just a general comment. I merely mentioned it because you were here.
  • anitil 2 hours ago
    Do we have a sense for how many of the programs that work [0] are now detected as having asm violations?

    [0] https://fil-c.org/programs_that_work

    • pizlonator 2 hours ago
      Zero, since I made those programs work back when all inline asm was an error.

      So currently most of those still have the hacks to go down the no-inlineasm path when building with Fil-C

      For the few where I reinstated the inline assembly, there were no bugs found.

      It would be a good experiment to try to reinstate the inlineasm paths in all of the programs that had them. I suspect there’s a low chance of finding a bug if it’s in inline assembly that’s on the critical path.

      • anitil 39 minutes ago
        Interesting, I was wondering where catching these errors would fall between 'silently wrong on certain inputs' to 'how did this ever work!?'