[crac] RFR: Fix crash after shm_open failure

Dan Heidinga heidinga at openjdk.java.net
Wed Jun 8 13:30:00 UTC 2022


On Tue, 7 Jun 2022 18:30:12 GMT, Anton Kozlov <akozlov at openjdk.org> wrote:

> When `_restore_parameters` is not set (e.g. after shm_open failure[0]), VM may crash on NULL dereference [1]. The change makes _restore_parameter always valid.
> 
> [0] https://github.com/openjdk/crac/blob/b2783c90a8ad81f6a8564e6cacf97a1ea0190ccd/src/hotspot/os/linux/os_linux.cpp#L6142
> [1] https://github.com/openjdk/crac/blob/b2783c90a8ad81f6a8564e6cacf97a1ea0190ccd/src/hotspot/os/linux/os_linux.cpp#L415
> 
> 
> shm_open: Function not implemented
> shm_open (ignoring new args): Function not implemented
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> #  SIGSEGV (0xb) at pc=0x00007f85bce8ad37, pid=131, tid=146
> #
> # JRE version: OpenJDK Runtime Environment (17.0) (build 17-internal+0-adhoc..crac)
> # Java VM: OpenJDK 64-Bit Server VM (17-internal+0-adhoc..crac, mixed mode, tiered, compressed oops, compressed class ptrs, serial gc, linux-amd64)
> # Problematic frame:
> # V  [libjvm.so+0xc47d37]  os::Linux::checkpoint(bool, JavaThread*)+0x107
> #
> # Core dump will be written. Default location: /tmp/core.%e.131
> #
> # An error report file with more information is saved as:
> # /tmp/hs_err_pid131.log
> #
> # If you would like to submit a bug report, please visit:
> #   https://bugreport.java.com/bugreport/crash.jsp
> #

src/hotspot/os/linux/os_linux.cpp line 6146:

> 6144: 
> 6145:     delete _restore_parameters;
> 6146:     _restore_parameters = CracRestoreParameters::read_from(shmfd);

`CracRestoreParameters::read_from` can return NULL.  If we need to ensure `_restore_parameters` is not null, then we need to do something like this instead:

Suggestion:

    CracRestoreParameters *original_parameters = _restore_parameters;
    _restore_parameters = CracRestoreParameters::read_from(shmfd);
    if (_restore_parameters == NULL) {
      _restore_parameters = original_parameters;
    } else {
      delete original_parameters;
   }

-------------

PR: https://git.openjdk.java.net/crac/pull/23


More information about the crac-dev mailing list