Possibly. cc'ing yasuoka who helped me with this method of disk probing.
But anyways, beyond a code review we need someone to SHOW THEIR BOOT LOADER OUTPUT, so that we can see the hibernate marker letter is missing. > (First sorry for the thread break, I have some problems in receiving > mails actually.) > > I dig a bit inside the code of bootloader, and I think it is possible > that the bootloader is unable to see hibernate signature when FDE is in > use. > > Taking boot(bootdev) as entrypoint (stand/boot/boot.c +60): > > it calls machdep() (arch/amd64/stand/libsa/machdep.c +48) > and call each probe routines. > > In the list of probe routines, there is diskprobe() > (arch/amd64/stand/libsa/diskprobe.c +246), which call: > > - hardprobe() (line 122), > - and only after sr_probe() (line 270) > > It is hardprobe() that will call check_hibernate(): > > - allocating dip struct > - running check_hibernate() to set BDI_HIBVALID if HIBERNATE_MAGIC is > found. > > To read the value, it uses dip->strategy() function. > > arch/amd64/stand/libsa/diskprobe.c > 491 error = dip->strategy(dip, F_READ, (daddr32_t)sec, sizeof > hib, &hib, NULL); > 492 if (error == 0 && hib.magic == HIBERNATE_MAGIC) { > 493 /* Hibernate present */ > 494 dip->bios_info.flags |= BDI_HIBVALID; > 495 printf("&"); > 496 } > > the actual code is biosstrategy() (arch/amd64/stand/libsa/biosdev.c +722) > which will call sr_strategy() if dip->sr_vol is not NULL. > > arch/amd64/stand/libsa/biosdev.c > 721 /* Intercept strategy for softraid volumes. */ > 722 if (dip->sr_vol) > 723 return sr_strategy(dip->sr_vol, rw, blk, size, buf, > rsize); > > > If I correctly understood the code, dip->sr_vol is initialized on first > biosopen() call. But at this point, we didn't call it. Additionally, > sr_probe() isn't called either. > > So dip->strategy() will read the encrypted data and not decrypted one, > so it is unable to found HIBERNATE_MAGIC (as it is encrypted). > > Thanks. > -- > Sebastien Marie