• pryre@lemmy.world
      link
      fedilink
      English
      arrow-up
      52
      ·
      1 month ago

      I think the other takeaway here is that it was found in a section marked “unsafe”. At the very least, that’s a useful tool for the Devs to isolate potential problem areas. Comparing that to a pure C codebase where the problem could be anywhere.

      • hummingbird@lemmy.world
        link
        fedilink
        English
        arrow-up
        1
        ·
        1 month ago

        The funny part is: the fix does not change the unsafe block at all. The issue is elsewhere in safe rust code.

        • pryre@lemmy.world
          link
          fedilink
          English
          arrow-up
          1
          ·
          1 month ago

          I’ll admit, I haven’t looked at the code. I would stand by my comment of the unsafe block being a start point.

          Countering that however, what is the difference to just debugging effectively? Not sure. I suppose it’s down to the people that identified it and fixed it at the end of the day to say if there was any benefit.

        • nsfw936421@lemmynsfw.com
          link
          fedilink
          English
          arrow-up
          5
          ·
          1 month ago

          It certainly does. It’s way simpler to keep up all invariants and to review the few percent lines of code in unsafe blocks than making sure that the 30 million lines of code are free of undefined behavior.

          Is some part of the code it battle tested of course it’s complete unreasonable to rewrite it in any language, but if you have to do a major rewrite anyway or write a new component you should definitely use a memory safe language. And no it doesn’t matter that there is an unsafe escape hatch because it’s literally impossible to write low level kernel stuff or FFI to other languages without unsafe because Rust can’t uphold/guarantee the invariants of the hardware itself or the behavior of other languages.

    • Technus@lemmy.zip
      link
      fedilink
      English
      arrow-up
      52
      ·
      1 month ago

      Because Rust lets you choose when something is unsafe vs writing all unsafe in code all the time:

      Note the other 159 kernel CVEs issued today for fixes in the C portion of the codebase

              • ryannathans@aussie.zone
                link
                fedilink
                English
                arrow-up
                2
                ·
                1 month ago

                Talking about how unsafe is not some new fancy rust feature and exists in other languages. Your comment makes it sound like the choice is some new wild computing concept.

                • Hawk@lemmynsfw.com
                  link
                  fedilink
                  English
                  arrow-up
                  2
                  ·
                  1 month ago

                  Memory safe languages that are not garbage collected are not all that common. Ada and Rust are two examples.

                  With great care C++ and zig can be.

                  I’m sure there’s a good reason a lot of the big players and the community at large have picked up rust though. Docs, error messages, cargo community etc.

                  I would argue that Rust does bring a lot to the table. I certainly would never code in C for work but I’ll happily reach for Rust.

      • pinball_wizard@lemmy.zip
        link
        fedilink
        English
        arrow-up
        12
        ·
        1 month ago

        That’s legitimately a good reason. They can pry my C from my cold dead hands…but someday someone will have to. May as well think about what that should look like.

          • Dave.@aussie.zone
            link
            fedilink
            English
            arrow-up
            33
            arrow-down
            1
            ·
            1 month ago

            Which is worse?

            • Entire driver written in a non memory safe language?
            • The interface to the rest of the kernel is marked as unsafe and then the other X percent is safe from memory corruption?

            Surely if X > 0 then this is still a net improvement?

            • sem@piefed.blahaj.zone
              link
              fedilink
              English
              arrow-up
              5
              ·
              edit-2
              1 month ago

              Rust by default will not allow you to make certain kinds of errora, which is great. But if you are doing something advanced, down at the hardware level [see below], you might need to disable those defaults in order to write the code you need. This is what people mean by “unsafe” – lacking the normal memory safeguards.

              With careful coding, “unsafe rust” or normal C, for that matter, can be free of bugs and safe. But if programmers make a mistake, vulnerabilities can creep in more easily in the unsafe sections.

              Is that basically it?

              • CandleTiger@programming.dev
                link
                fedilink
                English
                arrow-up
                4
                ·
                1 month ago

                But if you are doing something advanced, down at the hardware level

                This part is wrong. Otherwise yes correct.

                The “unsafe” code in rust is allowed to access memory locations in ways that skip the compiler’s check and guarantee that that memory location has valid data. They programmer is on their own to ensure that.

                Which as you say is just the normal state of affairs for all C code.

                This is needed not because of hardware access but just because sometimes the proof that the access is safe is beyond what the compiler is able to represent.

                • sem@piefed.blahaj.zone
                  link
                  fedilink
                  English
                  arrow-up
                  1
                  ·
                  1 month ago

                  Thank you for the correction, I’ll edit my comment.

                  sometimes the proof that the access is

                  safe is bevond what the compiler is able to represent

                  Could you say a few more words about this? In what situations do you have to write ‘unsafe-tagged’ code blocks? Could this be changed by improvements to the compiler? Or is it necessitated by the type of task being done by the code?