Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Cyborg)
  • No Skin
Collapse
Brand Logo

CIRCLE WITH A DOT

  1. Home
  2. Uncategorized
  3. bug of the day: a memcmp that only compares every fourth byte

bug of the day: a memcmp that only compares every fourth byte

Scheduled Pinned Locked Moved Uncategorized
25 Posts 10 Posters 0 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • gsuberland@chaos.socialG gsuberland@chaos.social

    bug of the day: a memcmp that only compares every fourth byte

    petrillic@hachyderm.ioP This user is from outside of this forum
    petrillic@hachyderm.ioP This user is from outside of this forum
    petrillic@hachyderm.io
    wrote last edited by
    #4

    @gsuberland

    1 Reply Last reply
    0
    • gsuberland@chaos.socialG gsuberland@chaos.social

      @dysfun it's a constant time implementation if that helps

      gsuberland@chaos.socialG This user is from outside of this forum
      gsuberland@chaos.socialG This user is from outside of this forum
      gsuberland@chaos.social
      wrote last edited by
      #5

      @dysfun essentially this:

      int memcmp32(uint32_t* a, uint32_t* b, int words)
      {
      uint8_t sum = 0; // whoops
      while(words--) {
      sum |= *a++ ^ *b++;
      }
      return sum;
      }

      dysfun@social.treehouse.systemsD astraleureka@social.treehouse.systemsA 2 Replies Last reply
      0
      • gsuberland@chaos.socialG gsuberland@chaos.social

        bug of the day: a memcmp that only compares every fourth byte

        leo@60228.devL This user is from outside of this forum
        leo@60228.devL This user is from outside of this forum
        leo@60228.dev
        wrote last edited by
        #6

        @gsuberland@chaos.social what about an strncmp that doesn't stop at a null terminator

        leo@60228.devL 1 Reply Last reply
        0
        • gsuberland@chaos.socialG gsuberland@chaos.social

          @dysfun essentially this:

          int memcmp32(uint32_t* a, uint32_t* b, int words)
          {
          uint8_t sum = 0; // whoops
          while(words--) {
          sum |= *a++ ^ *b++;
          }
          return sum;
          }

          dysfun@social.treehouse.systemsD This user is from outside of this forum
          dysfun@social.treehouse.systemsD This user is from outside of this forum
          dysfun@social.treehouse.systems
          wrote last edited by
          #7

          @gsuberland yes, that's exactly what i thought

          gsuberland@chaos.socialG 1 Reply Last reply
          0
          • gsuberland@chaos.socialG gsuberland@chaos.social

            bug of the day: a memcmp that only compares every fourth byte

            rotopenguin@mastodon.socialR This user is from outside of this forum
            rotopenguin@mastodon.socialR This user is from outside of this forum
            rotopenguin@mastodon.social
            wrote last edited by
            #8

            @gsuberland my bad. I misheard directions, and used AL when what the boss really wanted was AI.

            1 Reply Last reply
            0
            • gsuberland@chaos.socialG gsuberland@chaos.social

              @dysfun it's a constant time implementation if that helps

              marzhall@app.wafrn.netM This user is from outside of this forum
              marzhall@app.wafrn.netM This user is from outside of this forum
              marzhall@app.wafrn.net
              wrote last edited by
              #9

              @dysfun@social.treehouse.systems @gsuberland@chaos.social

              Hmm… is the issue casting 64-bit memory to an 8-bit char?

              gsuberland@chaos.socialG 1 Reply Last reply
              0
              • leo@60228.devL leo@60228.dev

                @gsuberland@chaos.social what about an strncmp that doesn't stop at a null terminator

                leo@60228.devL This user is from outside of this forum
                leo@60228.devL This user is from outside of this forum
                leo@60228.dev
                wrote last edited by
                #10

                @gsuberland@chaos.social ....the famous wii trucha bug is probably because broadon didn't understand the difference between strncmp and memcmp, in their own libc they do the same thing

                1 Reply Last reply
                0
                • gsuberland@chaos.socialG gsuberland@chaos.social

                  @dysfun essentially this:

                  int memcmp32(uint32_t* a, uint32_t* b, int words)
                  {
                  uint8_t sum = 0; // whoops
                  while(words--) {
                  sum |= *a++ ^ *b++;
                  }
                  return sum;
                  }

                  astraleureka@social.treehouse.systemsA This user is from outside of this forum
                  astraleureka@social.treehouse.systemsA This user is from outside of this forum
                  astraleureka@social.treehouse.systems
                  wrote last edited by
                  #11

                  @gsuberland @dysfun lmao

                  1 Reply Last reply
                  0
                  • gsuberland@chaos.socialG gsuberland@chaos.social

                    bug of the day: a memcmp that only compares every fourth byte

                    jannem@fosstodon.orgJ This user is from outside of this forum
                    jannem@fosstodon.orgJ This user is from outside of this forum
                    jannem@fosstodon.org
                    wrote last edited by
                    #12

                    @gsuberland
                    It's not named allmemcmp for a reason.

                    1 Reply Last reply
                    0
                    • dysfun@social.treehouse.systemsD dysfun@social.treehouse.systems

                      @gsuberland yes, that's exactly what i thought

                      gsuberland@chaos.socialG This user is from outside of this forum
                      gsuberland@chaos.socialG This user is from outside of this forum
                      gsuberland@chaos.social
                      wrote last edited by
                      #13

                      @dysfun ehehehe

                      the code in question lucked out by never actually using it in a path that matters, but it's in a core lib for something security sensitive so easily could've ended up being bad

                      dysfun@social.treehouse.systemsD 1 Reply Last reply
                      0
                      • gsuberland@chaos.socialG gsuberland@chaos.social

                        @dysfun ehehehe

                        the code in question lucked out by never actually using it in a path that matters, but it's in a core lib for something security sensitive so easily could've ended up being bad

                        dysfun@social.treehouse.systemsD This user is from outside of this forum
                        dysfun@social.treehouse.systemsD This user is from outside of this forum
                        dysfun@social.treehouse.systems
                        wrote last edited by
                        #14

                        @gsuberland yeah it lucked out by not having bit rotted yet

                        1 Reply Last reply
                        0
                        • marzhall@app.wafrn.netM marzhall@app.wafrn.net

                          @dysfun@social.treehouse.systems @gsuberland@chaos.social

                          Hmm… is the issue casting 64-bit memory to an 8-bit char?

                          gsuberland@chaos.socialG This user is from outside of this forum
                          gsuberland@chaos.socialG This user is from outside of this forum
                          gsuberland@chaos.social
                          wrote last edited by
                          #15

                          @marzhall @dysfun 32-bit, but yes

                          1 Reply Last reply
                          0
                          • gsuberland@chaos.socialG gsuberland@chaos.social

                            bug of the day: a memcmp that only compares every fourth byte

                            gsuberland@chaos.socialG This user is from outside of this forum
                            gsuberland@chaos.socialG This user is from outside of this forum
                            gsuberland@chaos.social
                            wrote last edited by
                            #16

                            i blogged about the memcmp thing

                            Watch out for missed warnings on vendor C++ toolchains - Graham Sutherland's Blog

                            favicon

                            (blog.poly.nomial.co.uk)

                            mildsunrise@tech.lgbtM reverseics@infosec.exchangeR 2 Replies Last reply
                            1
                            0
                            • gsuberland@chaos.socialG gsuberland@chaos.social

                              i blogged about the memcmp thing

                              Watch out for missed warnings on vendor C++ toolchains - Graham Sutherland's Blog

                              favicon

                              (blog.poly.nomial.co.uk)

                              mildsunrise@tech.lgbtM This user is from outside of this forum
                              mildsunrise@tech.lgbtM This user is from outside of this forum
                              mildsunrise@tech.lgbt
                              wrote last edited by
                              #17

                              @gsuberland unrelated but shouldn't it be something like *(a++) ^ *(b++)?

                              gsuberland@chaos.socialG 1 Reply Last reply
                              0
                              • mildsunrise@tech.lgbtM mildsunrise@tech.lgbt

                                @gsuberland unrelated but shouldn't it be something like *(a++) ^ *(b++)?

                                gsuberland@chaos.socialG This user is from outside of this forum
                                gsuberland@chaos.socialG This user is from outside of this forum
                                gsuberland@chaos.social
                                wrote last edited by
                                #18

                                @mildsunrise probably yeah I'm tired lol

                                gsuberland@chaos.socialG 1 Reply Last reply
                                0
                                • gsuberland@chaos.socialG gsuberland@chaos.social

                                  @mildsunrise probably yeah I'm tired lol

                                  gsuberland@chaos.socialG This user is from outside of this forum
                                  gsuberland@chaos.socialG This user is from outside of this forum
                                  gsuberland@chaos.social
                                  wrote last edited by
                                  #19

                                  @mildsunrise wait no, cos (a++) would be equivalent to pre-increment

                                  gsuberland@chaos.socialG mildsunrise@tech.lgbtM 2 Replies Last reply
                                  0
                                  • gsuberland@chaos.socialG gsuberland@chaos.social

                                    @mildsunrise wait no, cos (a++) would be equivalent to pre-increment

                                    gsuberland@chaos.socialG This user is from outside of this forum
                                    gsuberland@chaos.socialG This user is from outside of this forum
                                    gsuberland@chaos.social
                                    wrote last edited by
                                    #20

                                    @mildsunrise but yeah it should be *a ^ *b and then separately incrementing

                                    1 Reply Last reply
                                    0
                                    • R relay@relay.infosec.exchange shared this topic
                                    • gsuberland@chaos.socialG gsuberland@chaos.social

                                      @mildsunrise wait no, cos (a++) would be equivalent to pre-increment

                                      mildsunrise@tech.lgbtM This user is from outside of this forum
                                      mildsunrise@tech.lgbtM This user is from outside of this forum
                                      mildsunrise@tech.lgbt
                                      wrote last edited by
                                      #21

                                      @gsuberland (a++) is post increment, pre increment would be (++a)

                                      gsuberland@chaos.socialG 1 Reply Last reply
                                      0
                                      • mildsunrise@tech.lgbtM mildsunrise@tech.lgbt

                                        @gsuberland (a++) is post increment, pre increment would be (++a)

                                        gsuberland@chaos.socialG This user is from outside of this forum
                                        gsuberland@chaos.socialG This user is from outside of this forum
                                        gsuberland@chaos.social
                                        wrote last edited by
                                        #22

                                        @mildsunrise if you wrap it in brackets and deref outside doesn't it turn into pre behaviour regardless? (now I'm writing this I'm realising it probably doesn't, but this is c++ so principle of most surprise applies lol)

                                        gsuberland@chaos.socialG 1 Reply Last reply
                                        0
                                        • gsuberland@chaos.socialG gsuberland@chaos.social

                                          @mildsunrise if you wrap it in brackets and deref outside doesn't it turn into pre behaviour regardless? (now I'm writing this I'm realising it probably doesn't, but this is c++ so principle of most surprise applies lol)

                                          gsuberland@chaos.socialG This user is from outside of this forum
                                          gsuberland@chaos.socialG This user is from outside of this forum
                                          gsuberland@chaos.social
                                          wrote last edited by
                                          #23

                                          @mildsunrise yeah nah I'm just tiiired

                                          mildsunrise@tech.lgbtM 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups