niedziela, października 30, 2011

Fighting with Solaris Cluster on OpenIndiana







Also replace every 'typeset -r' with 'typeset'.



Serial console ttya can be useful. There are just 2 variables inside cl_bootstrap module. Integer clconf_initialized can be set to 1 via /etc/system (set cl_bootstrap:clconf_initialized). The more important for us mynodeid is short and we cannot touch it. So we are stuck. This kernel panic is triggered by a compatibility bug between OpenIndiana and Solaris Cluster. Ugly solution: binary patch cl_bootstrap module: replace PUSH and JMP with NOOP+NOOP and leak file handle for /etc/cluster/nodeid.

On Solaris 10 kobj_open_file() is defined with return type int (32-bit), on newer OpenSolaris/OpenIndiana with struct *_buf (64-bit address), so casting from 64-bit pointer truncates its correct value and then release with kobj_close_file() operates on wrong value and we see bad free.

0 komentarze: