1. 28 Feb, 2023 1 commit
  2. 12 Dec, 2022 2 commits
    • Meir Shpilraien (Spielrein)'s avatar
      Avoid crash on crash report when a bad function pointer was called (#11298) · d8102f5f
      Meir Shpilraien (Spielrein) authored
      If Redis crashes due to calling an invalid function pointer,
      the `backtrace` function will try to dereference this invalid pointer
      which will cause a crash inside the crash report and will kill
      the processes without having all the crash report information.
      
      Example:
      
      ```
      === REDIS BUG REPORT START: Cut & paste starting from here ===
      198672:M 19 Sep 2022 18:06:12.936 # Redis 255.255.255 crashed by signal: 11, si_code: 1
      198672:M 19 Sep 2022 18:06:12.936 # Accessing address: 0x1
      198672:M 19 Sep 2022 18:06:12.936 # Crashed running the instruction at: 0x1
      // here the processes is crashing
      ```
      
      This PR tries to fix this crash be:
      1. Identify the issue when it happened.
      2. Replace the invalid pointer with a pointer to some dummy function
         so that `backtrace` will not crash.
      
      I identification is done by comparing `eip` to `info->si_addr`, if they
      are the same we know that the crash happened on the same address it tries to
      accesses and we can conclude that it tries to call and invalid function pointer.
      
      To replace the invalid pointer we introduce a new function, `setMcontextEip`,
      which is very similar to `getMcontextEip` and it knows to set the Eip for the
      different supported OS's. After printing the trace we retrieve the old `Eip` value.
      
      (cherry picked from commit 0bf90d94)
      d8102f5f
    • Oran Agra's avatar
      crash report instructions (#10816) · 66472a5e
      Oran Agra authored
      Trying to avoid people opening crash report issues about module crashes and ARM QEMU bugs.
      
      (cherry picked from commit 475563e2)
      66472a5e
  3. 27 Apr, 2022 1 commit
  4. 21 Jul, 2021 1 commit
    • Oran Agra's avatar
      Test infra, handle RESP3 attributes and big-numbers and bools (#9235) · 6cd84b64
      Oran Agra authored
      - promote the code in DEBUG PROTOCOL to addReplyBigNum
      - DEBUG PROTOCOL ATTRIB skips the attribute when client is RESP2
      - networking.c addReply for push and attributes generate assertion when
        called on a RESP2 client, anything else would produce a broken
        protocol that clients can't handle.
      
      (cherry picked from commit 6a5bac30)
      6cd84b64
  5. 31 Mar, 2021 1 commit
  6. 24 Mar, 2021 2 commits
    • Itamar Haber's avatar
      Fixes a typo in DEBUG HELP (#8638) · dc39b0c1
      Itamar Haber authored
      dc39b0c1
    • Oran Agra's avatar
      Fix crash report killed by message (#8683) · b45b0d81
      Oran Agra authored
      We sometimes see the crash report saying we were killed by a random
      process even in cases where the crash was spontanius in redis.
      for instance, crashes found by the corrupt-dump test.
      
      It looks like this si_pid is sometimes left uninitialized, and a good
      way to tell if the crash originated in redis or trigged by outside is to
      look at si_code, real signal codes are always > 0, and ones generated by
      kill are have si_code of 0 or below.
      b45b0d81
  7. 17 Mar, 2021 1 commit
    • Theo Buehler's avatar
      Fixes for systems with 64-bit time (#8662) · 169be042
      Theo Buehler authored
      Some operating systems (e.g., NetBSD and OpenBSD) have switched to
      using a 64-bit integer for time_t on all platforms. This results in currently
      harmless compiler warnings due to potential truncation.
      These changes fix these minor portability concerns.
      
      * Fix format string for systems with 64 bit time
      * use llabs to avoid truncation with 64 bit time
      169be042
  8. 01 Mar, 2021 1 commit
  9. 04 Jan, 2021 1 commit
    • Itamar Haber's avatar
      HELP subcommand, continued (#5531) · 9dcdc7e7
      Itamar Haber authored
      
      
      * man-like consistent long formatting
      * Uppercases commands, subcommands and options
      * Adds 'HELP' to HELP for all
      * Lexicographical order
      * Uses value notation and other .md likeness
      * Moves const char *help to top
      * Keeps it under 80 chars
      * Misc help typos, consistent conjuctioning (i.e return and not returns)
      * Uses addReplySubcommandSyntaxError(c) all over
      Signed-off-by: default avatarItamar Haber <itamar@redislabs.com>
      9dcdc7e7
  10. 01 Jan, 2021 1 commit
  11. 24 Dec, 2020 1 commit
  12. 22 Dec, 2020 1 commit
  13. 13 Dec, 2020 1 commit
    • Yossi Gottlieb's avatar
      Several (mostly Solaris-related) cleanups (#8171) · 86e3395c
      Yossi Gottlieb authored
      * Allow runtest-moduleapi use a different 'make', for systems where GNU Make is 'gmake'.
      * Fix issue with builds on Solaris re-building everything from scratch due to CFLAGS/LDFLAGS not stored.
      * Fix compile failure on Solaris due to atomicvar and a bunch of warnings.
      * Fix garbled log timestamps on Solaris.
      86e3395c
  14. 06 Dec, 2020 1 commit
    • Oran Agra's avatar
      Sanitize dump payload: fuzz tester and fixes for segfaults and leaks it exposed · c31055db
      Oran Agra authored
      The test creates keys with various encodings, DUMP them, corrupt the payload
      and RESTORES it.
      It utilizes the recently added use-exit-on-panic config to distinguish between
       asserts and segfaults.
      If the restore succeeds, it runs random commands on the key to attempt to
      trigger a crash.
      
      It runs in two modes, one with deep sanitation enabled and one without.
      In the first one we don't expect any assertions or segfaults, in the second one
      we expect assertions, but no segfaults.
      We also check for leaks and invalid reads using valgrind, and if we find them
      we print the commands that lead to that issue.
      
      Changes in the code (other than the test):
      - Replace a few NPD (null pointer deference) flows and division by zero with an
        assertion, so that it doesn't fail the test. (since we set the server to use
        `exit` rather than `abort` on assertion).
      - Fix quite a lot of flows in rdb.c that could have lead to memory leaks in
        RESTORE command (since it now responds with an error rather than panic)
      - Add a DEBUG flag for SET-SKIP-CHECKSUM-VALIDATION so that the test don't need
        to bother with faking a valid checksum
      - Remove a pile of code in serverLogObjectDebugInfo which is actually unsafe to
        run in the crash report (see comments in the code)
      - fix a missing boundary check in lzf_decompress
      
      test suite infra improvements:
      - be able to run valgrind checks before the process terminates
      - rotate log files when restarting servers
      c31055db
  15. 25 Nov, 2020 1 commit
  16. 18 Nov, 2020 1 commit
    • guybe7's avatar
      EXISTS should not alter LRU, OBJECT should not reveal expired keys on replica (#8016) · f8ae9917
      guybe7 authored
      The bug was introduced by #5021 which only attempted avoid EXIST on an
      already expired key from returning 1 on a replica.
      
      Before that commit, dbExists was used instead of
      lookupKeyRead (which had an undesired effect to "touch" the LRU/LFU)
      
      Other than that, this commit fixes OBJECT to also come empty handed on
      expired keys in replica.
      
      And DEBUG DIGEST-VALUE to behave like DEBUG OBJECT (get the data from
      the key regardless of it's expired state)
      f8ae9917
  17. 05 Nov, 2020 2 commits
  18. 03 Nov, 2020 1 commit
    • Meir Shpilraien (Spielrein)'s avatar
      Added crash report on SIGABRT (#8004) · f210e197
      Meir Shpilraien (Spielrein) authored
      The reason that we want to get a full crash report on SIGABRT
      is that the jmalloc, when detecting a corruption, calls abort().
      This will cause the Redis to exist silently without any report
      and without any way to analyze what happened.
      f210e197
  19. 07 Oct, 2020 1 commit
  20. 23 Sep, 2020 1 commit
  21. 20 Sep, 2020 1 commit
  22. 19 Sep, 2020 1 commit
  23. 16 Sep, 2020 2 commits
  24. 10 Sep, 2020 1 commit
    • Oran Agra's avatar
      Squash merging 125 typo/grammar/comment/doc PRs (#7773) · 1c710385
      Oran Agra authored
      List of squashed commits or PRs
      ===============================
      
      commit 66801ea
      Author: hwware <wen.hui.ware@gmail.com>
      Date:   Mon Jan 13 00:54:31 2020 -0500
      
          typo fix in acl.c
      
      commit 46f55db
      Author: Itamar Haber <itamar@redislabs.com>
      Date:   Sun Sep 6 18:24:11 2020 +0300
      
          Updates a couple of comments
      
          Specifically:
      
          * RM_AutoMemory completed instead of pointing to docs
          * Updated link to custom type doc
      
      commit 61a2aa0
      Author: xindoo <xindoo@qq.com>
      Date:   Tue Sep 1 19:24:59 2020 +0800
      
          Correct errors in code comments
      
      commit a5871d1
      Author: yz1509 <pro-756@qq.com>
      Date:   Tue Sep 1 18:36:06 2020 +0800
      
          fix typos in module.c
      
      commit 41eede7
      Author: bookug <bookug@qq.com>
      Date:   Sat Aug 15 01:11:33 2020 +0800
      
          docs: fix typos in comments
      
      commit c303c84
      Author: lazy-snail <ws.niu@outlook.com>
      Date:   Fri Aug 7 11:15:44 2020 +0800
      
          fix spelling in redis.conf
      
      commit 1e...
      1c710385
  25. 09 Sep, 2020 1 commit
  26. 03 Sep, 2020 1 commit
    • Oran Agra's avatar
      Run active defrag while blocked / loading (#7726) · 9ef8d2f6
      Oran Agra authored
      During long running scripts or loading RDB/AOF, we may need to do some
      defragging. Since processEventsWhileBlocked is called periodically at
      unknown intervals, and many cron jobs either depend on run_with_period
      (including active defrag), or rely on being called at server.hz rate
      (i.e. active defrag knows ho much time to run by looking at server.hz),
      the whileBlockedCron may have to run a loop triggering the cron jobs in it
      (currently only active defrag) several times.
      
      Other changes:
      - Adding a test for defrag during aof loading.
      - Changing key-load-delay config to take negative values for fractions
        of a microsecond sleep
      9ef8d2f6
  27. 02 Sep, 2020 1 commit
    • Pierre Jambet's avatar
      Fix error message for the DEBUG ZIPLIST command (#7745) · d52ce4ea
      Pierre Jambet authored
      DEBUG ZIPLIST <key> currently returns the following error string if the
      key is not a ziplist: "ERR Not an sds encoded string.". This looks like
      an accidental copy/paste error from the error returned in the else if
      branch above where this string is returned if the key is not an sds
      string. The command was added in
      ac61f906 and looking at the commit,
      nothing indicates that it is not an accidental typo.
      
      The error string now returns a correct error: "Not a ziplist encoded
      object", which accurately describes the error.
      d52ce4ea
  28. 24 Aug, 2020 1 commit
    • Wang Yuan's avatar
      Fix data race in bugReportStart (#7700) · 6b4ae919
      Wang Yuan authored
      The previous fix using _Atomic was insufficient, since we check and set it in
      different places.
      
      The implications of this bug are just that a portion of the bug report will be shown
      twice, in the race case of two concurrent crashes.
      6b4ae919
  29. 06 Aug, 2020 2 commits
    • Oran Agra's avatar
      Fix potential race in bugReportStart · 81f8524a
      Oran Agra authored
      this race would only happen when two threads paniced at the same time,
      and even then the only consequence is some extra log lines.
      
      race reported in #7391
      81f8524a
    • Oran Agra's avatar
      Assertion and panic, print crash log without generating SIGSEGV · 90b717e7
      Oran Agra authored
      This makes it possible to add tests that generate assertions, and run
      them with valgrind, making sure that there are no memory violations
      prior to the assertion.
      
      New config options:
      - crash-log-enabled - can be disabled for cleaner core dumps
      - crash-memcheck-enabled - useful for faster termination after a crash
      - use-exit-on-panic - to be used by the test suite so that valgrind can
        detect leaks and memory corruptions
      
      Other changes:
      - Crash log is printed even on system that dont HAVE_BACKTRACE, i.e. in
        both SIGSEGV and assert / panic
      - Assertion and panic won't print registers and code around EIP (which
        was useless), but will do fast memory test (which may still indicate
        that the assertion was due to memory corrpution)
      
      I had to reshuffle code in order to re-use it, so i extracted come code
      into function without actually doing any changes to the code:
      - logServerInfo
      - logModulesInfo
      - doFastMemoryTest (with the exception of it being conditional)
      - dumpCodeAroundEIP
      
      changes to the crash report on segfault:
      - logRegisters is called right after the stack trace (before info) done
        just in order to have more re-usable code
      - stack trace skips the first two items on the stack (the crash log and
        signal handler functions)
      90b717e7
  30. 28 Jul, 2020 1 commit
    • Wen Hui's avatar
      fix leak in error handling of debug populate command (#7062) · c69a9b2f
      Wen Hui authored
      valsize was not modified during the for loop below instead of getting from c->argv[4], therefore there is no need to put inside the for loop.. Moreover, putting the check outside loop will also avoid memory leaking, decrRefCount(key) should be called in the original code if we put the check in for loop
      c69a9b2f
  31. 15 Jul, 2020 1 commit
    • Developer-Ecosystem-Engineering's avatar
      Add registers dump support for Apple silicon (#7453) · c2b5f1c1
      Developer-Ecosystem-Engineering authored
      Export following environment variables before building on macOS on Apple silicon
      
      export ARCH_FLAGS="-arch arm64"
      export SDK_NAME=macosx
      export SDK_PATH=$(xcrun --show-sdk-path --sdk $SDK_NAME)
      export CFLAGS="$ARCH_FLAGS -isysroot $SDK_PATH -I$SDK_PATH/usr/include"
      export CXXFLAGS=$CFLAGS
      export LDFLAGS="$ARCH_FLAGS"
      export CC="$(xcrun -sdk $SDK_PATH --find clang) $CFLAGS"
      export CXX="$(xcrun -sdk $SDK_PATH --find clang++) $CXXFLAGS"
      export LD="$(xcrun -sdk $SDK_PATH --find ld) $LDFLAGS"
      
      make
      make test
      ..
      All tests passed without errors!
      
      Backtrack logging assumes x86 and required updating
      c2b5f1c1
  32. 10 Jul, 2020 2 commits
    • Oran Agra's avatar
      tests/valgrind: don't use debug restart (#7404) · 69ade873
      Oran Agra authored
      * tests/valgrind: don't use debug restart
      
      DEBUG REATART causes two issues:
      1. it uses execve which replaces the original process and valgrind doesn't
         have a chance to check for errors, so leaks go unreported.
      2. valgrind report invalid calls to close() which we're unable to resolve.
      
      So now the tests use restart_server mechanism in the tests, that terminates
      the old server and starts a new one, new PID, but same stdout, stderr.
      
      since the stderr can contain two or more valgrind report, it is not enough
      to just check for the absence of leaks, we also need to check for some known
      errors, we do both, and fail if we either find an error, or can't find a
      report saying there are no leaks.
      
      other changes:
      - when killing a server that was already terminated we check for leaks too.
      - adding DEBUG LEAK which was used to test it.
      - adding --trace-children to valgrind, although no longer needed.
      - since the stdout contains two or more runs, we need slightly different way
        of checking if the new process is up (explicitly looking for the new PID)
      - move the code that handles --wait-server to happen earlier (before
        watching the startup message in the log), and serve the restarted server too.
      
      * squashme - CR fixes
      69ade873
    • Oran Agra's avatar
      9bbf768d
  33. 20 May, 2020 1 commit
  34. 04 May, 2020 1 commit
    • Oran Agra's avatar
      add daily github actions with libc malloc and valgrind · deee2c1e
      Oran Agra authored
      * fix memlry leaks with diskless replica short read.
      * fix a few timing issues with valgrind runs
      * fix issue with valgrind and watchdog schedule signal
      
      about the valgrind WD issue:
      the stack trace test in logging.tcl, has issues with valgrind:
      ==28808== Can't extend stack to 0x1ffeffdb38 during signal delivery for thread 1:
      ==28808==   too small or bad protection modes
      
      it seems to be some valgrind bug with SA_ONSTACK.
      SA_ONSTACK seems unneeded since WD is not recursive (SA_NODEFER was removed),
      also, not sure if it's even valid without a call to sigaltstack()
      deee2c1e